WWW-FCM-HTTP-V1

 view release on metacpan or  search on metacpan

t/02_send.t  view on Meta::CPAN

use strict;
use warnings;
use Test::More;
use Test::Fake::HTTPD;
use Test::Exception;
use JSON;
use HTTP::Status qw(:constants);

use WWW::FCM::HTTP::V1;

plan skip_all => 'Not supported on MSWin32' if $^O eq 'MSWin32';

my $dummy_api_key_json = '{
"type": "service_account",
"project_id": "test-project",
"private_key_id": "test_key_id",
"private_key": "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQCaE2qyAMVeCLiFdaX5BJeuLZLZUrRE8SMaPmzgI8/t9texQI1o\nQp8mXpY1emcZ8XI9aXliP3wHN5YKRENKtXsgdwevK3El8AjElZae9KSkhfcu34kj\nE3em5JzQVswfaY/tuql897ViaO5V2RLzCv/GEpQX8fd7vlo0AbGciugArwIDAQAB\nAoG...
}';
my $fcm = WWW::FCM::HTTP::V1->new(api_url => 'api_url', api_key_json => $dummy_api_key_json);

sub test_send {
    my %specs = @_;
    my ($input, $expects, $expects_exception, $desc)
        = @specs{qw/input expects expects_exception desc/};

    subtest $desc => sub {
        my $access_token_httpd = run_http_server {
            return create_response(@$expects{qw/token_code token_data token_headers/});
        };

        $fcm->sender->token_url($access_token_httpd->endpoint);

        my $httpd = run_http_server {
            my $req = shift;
            my $params = decode_json +$req->content;
            is_deeply $params, $expects->{send_data};
            return create_response(@$expects{qw/code data headers/});
        };

        $fcm->api_url($httpd->endpoint);

        unless ($expects_exception) {
            lives_ok {
                $fcm->send($input);
            };
        }
        else {
            throws_ok {
                $fcm->send($input);
            } $expects_exception->{message};
        }
    };
}

sub create_response {
    my ($code, $data, $headers) = @_;
    my $content = ref $data ? encode_json($data) : $data;
    return [$code => [
        'Content-Length' => length($content),
        'Content-Type'   => 'application/json; charset=UTF-8',
        @{ $headers || [] },
    ], [$content]];
}

subtest 'required payload' => sub {
    eval { $fcm->send };
    like $@, qr/Usage: \$fcm->send\(\\%content\)/;
};

subtest 'payload must be hashref' => sub {
    for my $payload ('foo', [], undef) {
        eval { $fcm->send($payload) };
        like $@, qr/Usage: \$fcm->send\(\\%content\)/;
    }
};

test_send(



( run in 1.589 second using v1.01-cache-2.11-cpan-39bf76dae61 )