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 )