Net-DynDNS-GoDaddy

 view release on metacpan or  search on metacpan

t/05-api_key.t  view on Meta::CPAN

use warnings;
use strict;

use File::Copy;
use JSON;
use Net::DynDNS::GoDaddy qw(api_key_get api_key_set);
use Test::More;

my $file = Net::DynDNS::GoDaddy::_api_key_file();

if (-e $file) {
    move($file, "$file.bak") or die "Can't move $file to $file.bak: $!";
}

# api_key_get() croak
{
    is eval {
        api_key_get();
        1;
    }, undef, "api_key_get() croaks if no key file exists ok";
    like $@, qr/doesn't exist/, "...and error message is sane";
}

# api_key_set() croak if can't write file (only run if not root user)
if ($^O !~ /win/i) {
    if (getpwuid($<) ne 'root') {
        open my $fh, '>', $file or die "Can't open $file for creation: $!";
        chmod(0400, $file) or die "Can't set permissions on $file: $!";
        close $fh;

        is eval {
            api_key_set(2, 3);
            1;
        }, undef, "api_key_set() croaks if can't open file for writing";
        like $@, qr/for writing/, "...and error message is sane";

        chmod(0640, $file) or die "Can't set perms on $file: $!";
    }
}

# api_key_set() croak on bad params
{
    is eval {
        api_key_set();
        1;
    }, undef, "api_key_set() croaks with no params";
    like $@, qr/API key and an API secret/, "...and error message is sane";

    is eval {
        api_key_set(2);
        1;
    }, undef, "api_key_set() croaks with only one param";
    like $@, qr/API key and an API secret/, "...and error message is sane";
}

# api_key_set() success
{
    is api_key_set(2, 3), 1, "api_key_set() returns properly";

    my $data;

    {
        local $/;
        open my $fh, '<', $file or die "Can't open $file: $!";
        $data = decode_json(<$fh>);
        close $fh;
    }
    is $data->{api_key}, 2, "API key in file is ok";
    is $data->{api_secret}, 3, "API secret in file is ok";
}

# api_key_get() success
{
    my ($k, $s) = api_key_get();

    is $k, 2, "API key from file is ok";
    is $s, 3, "API secret from file is ok";
}

if (-e "$file.bak") {
    move("$file.bak", $file) or die "Can't move $file.bak to $file: $!";
}
else {
    unlink $file or die "Can't remove temp config file";
    is -e $file, undef, "Removed temp config file ok";
}



( run in 0.836 second using v1.01-cache-2.11-cpan-995e09ba956 )