Net-Nostr
view release on metacpan or search on metacpan
use strictures 2;
use Test2::V0 -no_srand => 1;
use Net::Nostr::Event;
use Net::Nostr::AppData;
my $PK = 'a' x 64;
###############################################################################
# Kind 30078 addressable event
###############################################################################
subtest 'kind 30078 is addressable' => sub {
my $event = Net::Nostr::AppData->to_event(
pubkey => $PK,
d_tag => 'myapp-settings',
);
is($event->kind, 30078, 'kind is 30078');
ok($event->is_addressable, 'kind 30078 is addressable');
};
###############################################################################
# d tag contains app name / context reference
###############################################################################
subtest 'd tag is app name / context' => sub {
my $event = Net::Nostr::AppData->to_event(
pubkey => $PK,
d_tag => 'myapp-settings',
);
is($event->d_tag, 'myapp-settings', 'd tag is app identifier');
};
subtest 'd tag can be any arbitrary string' => sub {
my $event = Net::Nostr::AppData->to_event(
pubkey => $PK,
d_tag => 'com.example.app/user-prefs/v2',
);
is($event->d_tag, 'com.example.app/user-prefs/v2', 'arbitrary d tag');
};
subtest 'd_tag is required' => sub {
like(
dies { Net::Nostr::AppData->to_event(pubkey => $PK) },
qr/d_tag/i,
'd_tag required'
);
};
###############################################################################
# content can be anything
###############################################################################
subtest 'content can be arbitrary JSON' => sub {
my $json = '{"theme":"dark","fontSize":14}';
my $event = Net::Nostr::AppData->to_event(
pubkey => $PK,
d_tag => 'settings',
content => $json,
);
is($event->content, $json, 'content is arbitrary JSON');
};
subtest 'content can be plain text' => sub {
my $event = Net::Nostr::AppData->to_event(
pubkey => $PK,
d_tag => 'notes',
content => 'just some text',
);
is($event->content, 'just some text', 'content is plain text');
};
subtest 'content defaults to empty string' => sub {
my $event = Net::Nostr::AppData->to_event(
pubkey => $PK,
d_tag => 'empty',
);
is($event->content, '', 'content defaults to empty');
};
###############################################################################
# tags can be anything
###############################################################################
subtest 'extra tags passed through' => sub {
my $event = Net::Nostr::AppData->to_event(
pubkey => $PK,
d_tag => 'myapp',
extra_tags => [['x', 'custom'], ['y', '1', '2']],
);
my @tags = @{$event->tags};
# d tag + 2 extra
is(scalar @tags, 3, '3 tags total');
is($tags[1], ['x', 'custom'], 'first extra tag');
is($tags[2], ['y', '1', '2'], 'second extra tag');
};
###############################################################################
# from_event round-trip
( run in 0.577 second using v1.01-cache-2.11-cpan-5735350b133 )