The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
# Check usage of the ::WebServer
use warnings;
use strict;

use lib 'lib', '../lib';
use Test::More tests => 19;

my $id     = 'my-id';
my $secret = 'my-secret';
my $site   = 'http://my-site';

use_ok('Net::OAuth2::Profile::WebServer');
my $auth = Net::OAuth2::Profile::WebServer->new
  ( client_id     => $id
  , client_secret => $secret

  , site                 => $site
  , access_token_url     => "$site/a/ccess_token"
  , authorize_path       => "au/htorize"

  , refresh_token_method => 'PUT'
  , access_token_params  => [ tic => 'tac', toe => 0 ]
  , authorize_params     => [ more => 'and more' ]
  );

isa_ok($auth, 'Net::OAuth2::Profile::WebServer');
is($auth->id, $id);
is($auth->secret, $secret);

is($auth->site,              $site, 'check site_url()');
is($auth->site_url('/b/xyz', a => 1, b => 2), 'http://my-site/b/xyz?a=1&b=2');
my $uri = $auth->site_url('/b/xyz', {a => 1, b => 2}); # param order random
my %qp = $uri->query_form;
cmp_ok(scalar keys %qp, '==', 2, join(';',%qp));
cmp_ok($qp{a}, '==', 1);
cmp_ok($qp{b}, '==', 2);

is($auth->access_token_url,   "$site/a/ccess_token");

TODO: {
   local $TODO = 'until error for rename of authorize_url is removed';
   is(eval {$auth->authorize_url},      "$site/au/htorize");
}

my $redirect = $auth->authorize(scope => 'read');
ok(defined $redirect, 'authorize');
isa_ok($redirect, 'URI');
my %qf = $redirect->query_form;
is($qf{response_type}, 'code');
is($qf{scope}, 'read');

is($auth->refresh_token_method, 'PUT');
is($auth->refresh_token_url, "$site/oauth/refresh_token");

my $atp = $auth->access_token_params
  ( even   => 'more'
  , params => 'here'
  , type   => 'web_server'  # may still be required for 37signals
  );

is_deeply($atp,
  { params => 'here',
  , even   => 'more',
  , type   => 'web_server',
  , code   => ''
  , grant_type    => 'authorization_code',
  , redirect_uri  => undef,
  , client_secret => 'my-secret',
  , client_id     => 'my-id',
  } );

my $ua = $auth->user_agent;
isa_ok($ua, 'LWP::UserAgent');