The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

use Test::More;
use Test::MockObject;
use Test::Mock::Guard qw/mock_guard/;
use LWP::UserAgent;

use Net::Nakamap;

sub create_nakamap {
    my ($ua) = @_;

    return Net::Nakamap->new(
        client_id     => 'this_is_client_id',
        client_secret => 'this_is_client_secret',
        token         => 'this_is_token',
        ua            => $ua,
    );
}

subtest 'success' => sub {
    my $ua    = LWP::UserAgent->new();
    my $guard = mock_guard $ua => {
        get => sub {
            my $res = Test::MockObject->new();
            $res->mock( 'content',    sub { '[{"title":"my groups"}]' } );
            $res->mock( 'is_success', sub { 1 } );

            return $res;
        },
    };

    my $nakamap = create_nakamap($ua);
    my $groups  = $nakamap->get('/1/groups');

    is $groups->[0]{title}, 'my groups';
    ok ! $nakamap->last_error;
};

subtest 'fail' => sub {
    my $ua    = LWP::UserAgent->new();
    my $guard = mock_guard $ua => {
        get => sub {
            my $res = Test::MockObject->new();
            $res->mock( 'content',    sub { '{"error":["something is wrong"]}' } );
            $res->mock( 'is_success', sub { 0 } );

            return $res;
        },
    };

    my $nakamap = create_nakamap($ua);
    my $groups  = $nakamap->get('/1/groups');

    ok ! $groups;
    is $nakamap->last_error, '{"error":["something is wrong"]}';
};

done_testing;