The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;

use Test::More;
use Test::Exception;

use_ok 'OAuth2::Box';

throws_ok { OAuth2::Box->new }
    qr/Missing .* client_id, client_secret, redirect_uri/,
    'new obect without params dies';

throws_ok { OAuth2::Box->new( client_id => 123 ) }
    qr/Missing .* client_secret, redirect_uri/,
    'new obect with client_id only dies';
throws_ok {
    OAuth2::Box->new(
        client_id => 123,
        client_secret => 'abcdef123',
    );
    }
    qr/Missing .* redirect_uri/,
    'new obect with client_id and client_secret only dies';

my $ob = OAuth2::Box->new(
    client_id     => 123,
    client_secret => 'abcdef123',
    redirect_uri  => 'http://localhost/',
);

isa_ok $ob, 'OAuth2::Box', 'new obect created';

can_ok $ob, qw/authorization_uri authorize refresh_token/;

my ($before,$after) = (""," is a read-only accessor");
if ( $INC{"Class/XSAccessor.pm"} ) {
    $before = "Usage: OAuth2::Box::";
    $after  = '\(self\)';
}

is $ob->url, 'https://www.box.com/api/oauth2/authorize', 'check authorization url';
throws_ok { $ob->url('test' ) }
    qr/${before}url$after/,
    'url is "ro"';

is $ob->token_url, 'https://www.box.com/api/oauth2/token', 'check token url';
throws_ok { $ob->token_url('test' ) }
    qr/${before}token_url$after/,
    'token_url is "ro"';

is $ob->client_id, 123, 'check client_id';
throws_ok { $ob->client_id('test' ) }
    qr/${before}client_id$after/,
    'client_id is "ro"';

is $ob->client_secret, 'abcdef123', 'check client_secret';
throws_ok { $ob->client_secret('test' ) }
    qr/${before}client_secret$after/,
    'client_secret is "ro"';

is $ob->redirect_uri, 'http://localhost/', 'check redirect_uri';
throws_ok { $ob->redirect_uri('test' ) }
    qr/${before}redirect_uri$after/,
    'redirect_uri is "ro"';

done_testing();