Net-Nostr-Core

 view release on metacpan or  search on metacpan

t/51-Calendar.t  view on Meta::CPAN

    my $friend_pk = 'b' x 64;
    my $event = Net::Nostr::Calendar->date_event(
        pubkey       => $PK,
        identifier   => 'vacation-2024',
        title        => 'Summer Vacation',
        content      => 'Two weeks off',
        start        => '2024-07-01',
        end          => '2024-07-15',
        locations    => ['Beach Resort'],
        participants => [[$friend_pk, 'wss://relay', 'attendee']],
    );
    is($event->kind, 31922, 'kind');
    my ($d) = grep { $_->[0] eq 'd' } @{$event->tags};
    is($d->[1], 'vacation-2024', 'd tag');
};

###############################################################################
# POD example: time_event
###############################################################################

subtest 'POD: time_event' => sub {
    my $event = Net::Nostr::Calendar->time_event(
        pubkey     => $PK,
        identifier => 'standup',
        title      => 'Daily Standup',
        start      => 1700000000,
        end        => 1700003600,
        start_tzid => 'America/New_York',
        days       => [19675],
    );
    is($event->kind, 31923, 'kind');
};

###############################################################################
# POD example: calendar
###############################################################################

subtest 'POD: calendar' => sub {
    my $cal = Net::Nostr::Calendar->calendar(
        pubkey     => $PK,
        identifier => 'personal',
        title      => 'Personal Calendar',
        events     => [
            ["31922:${PK}:vacation-2024", 'wss://relay'],
        ],
    );
    is($cal->kind, 31924, 'kind');
};

###############################################################################
# POD example: rsvp
###############################################################################

subtest 'POD: rsvp' => sub {
    my $organizer_pk = 'c' x 64;
    my $rsvp = Net::Nostr::Calendar->rsvp(
        pubkey       => $PK,
        identifier   => 'rsvp-1',
        event_coord  => "31922:${organizer_pk}:vacation-2024",
        status       => 'accepted',
        fb           => 'busy',
    );
    is($rsvp->kind, 31925, 'kind');
};

###############################################################################
# POD example: from_event
###############################################################################

subtest 'POD: from_event' => sub {
    my $event = Net::Nostr::Calendar->date_event(
        pubkey     => $PK,
        identifier => 'test',
        title      => 'Test Event',
        start      => '2024-01-01',
    );
    my $parsed = Net::Nostr::Calendar->from_event($event);
    is($parsed->title, 'Test Event');
};

###############################################################################
# POD example: validate
###############################################################################

subtest 'POD: validate' => sub {
    my $event = Net::Nostr::Calendar->date_event(
        pubkey     => $PK,
        identifier => 'test',
        title      => 'Test Event',
        start      => '2024-01-01',
    );
    ok(Net::Nostr::Calendar->validate($event), 'validate returns true');
};

###############################################################################
# POD example: new
###############################################################################

subtest 'POD: new' => sub {
    my $cal = Net::Nostr::Calendar->new(
        identifier => 'meeting',
        title      => 'Team Meeting',
    );
    is($cal->identifier, 'meeting');
    is($cal->title, 'Team Meeting');
};

###############################################################################
# Constructor: unknown args rejected
###############################################################################

subtest 'constructor: unknown args rejected' => sub {
    like(
        dies { Net::Nostr::Calendar->new(bogus => 1) },
        qr/unknown/i,
        'unknown arg rejected'
    );
};

###############################################################################
# Public methods available



( run in 1.577 second using v1.01-cache-2.11-cpan-6aa56a78535 )