Apertur-SDK
view release on metacpan or search on metacpan
t/01_client.t view on Meta::CPAN
# Test throw mechanism
eval { Apertur::SDK::Error::NotFound->throw(message => 'Gone') };
my $caught = $@;
isa_ok($caught, 'Apertur::SDK::Error::NotFound');
is($caught->message, 'Gone', 'thrown error message');
};
# --- Signature verification ---
subtest 'Signature verification' => sub {
plan tests => 6;
use Apertur::SDK::Signature qw(
verify_webhook_signature
verify_event_signature
verify_svix_signature
);
# Webhook signature
my $secret = 'my_secret';
my $body = '{"event":"test"}';
use Digest::SHA qw(hmac_sha256_hex);
my $sig_hex = hmac_sha256_hex($body, $secret);
ok(
verify_webhook_signature($body, "sha256=$sig_hex", $secret),
'valid webhook signature accepted',
);
ok(
!verify_webhook_signature($body, 'sha256=bad', $secret),
'invalid webhook signature rejected',
);
# Event signature
my $timestamp = '1700000000';
my $event_sig = hmac_sha256_hex("${timestamp}.${body}", $secret);
ok(
verify_event_signature($body, $timestamp, "sha256=$event_sig", $secret),
'valid event signature accepted',
);
ok(
!verify_event_signature($body, $timestamp, 'sha256=bad', $secret),
'invalid event signature rejected',
);
# Svix signature
my $svix_id = 'msg_abc123';
my $svix_secret = 'deadbeef';
my $svix_base = "${svix_id}.${timestamp}.${body}";
use MIME::Base64 qw(encode_base64);
my $svix_expected = encode_base64(
Digest::SHA::hmac_sha256($svix_base, pack('H*', $svix_secret)),
'',
);
ok(
verify_svix_signature($body, $svix_id, $timestamp, "v1,$svix_expected", $svix_secret),
'valid svix signature accepted',
);
ok(
!verify_svix_signature($body, $svix_id, $timestamp, 'v1,badsig==', $svix_secret),
'invalid svix signature rejected',
);
};
# --- Error stringification ---
subtest 'Error stringification' => sub {
plan tests => 1;
my $err = Apertur::SDK::Error->new(
status_code => 500,
code => 'INTERNAL',
message => 'boom',
);
like("$err", qr/500.*INTERNAL.*boom/, 'error stringifies correctly');
};
done_testing();
( run in 0.688 second using v1.01-cache-2.11-cpan-71847e10f99 )