#!perl
use Cassandane::Tiny;

sub test_calendarevent_set_move_fast_path
    ($self)
{
    my $jmap = $self->default_user->jmap;
    my $src_cal_id = $self->default_user->calendars->default->id;

    xlog $self, "Create destination calendar";
    my $res = $jmap->CallMethods([
        ['Calendar/set', {
            create => {
                destination => {
                    name => 'bar',
                },
            },
        }, "R1"]
    ]);
    my $dst_cal_id = $res->[0][1]{created}{destination}{id};
    $self->assert_not_null($dst_cal_id);

    xlog $self, "Create event in source calendar";
    $res = $jmap->CallMethods([
        ['CalendarEvent/set', {
            create => {
                event => {
                    calendarIds => {
                        $src_cal_id => JSON::true,
                    },
                    title => 'foo',
                    start => '2026-05-21T09:00:00',
                    timeZone => 'Etc/UTC',
                },
            },
        }, "R1"],
    ]);
    my $event_id = $res->[0][1]{created}{event}{id};
    $self->assert_not_null($event_id);

    xlog $self, "Move event to destination calendar";
    $self->{instance}->getsyslog(); # clear syslog
    $res = $jmap->CallMethods([
        ['CalendarEvent/set', {
            update => {
                $event_id => {
                    calendarIds => {
                        $dst_cal_id => JSON::true,
                    },
                },
            },
        }, "R1"],
        ['CalendarEvent/get', {
            ids => [ $event_id ],
            properties => ['calendarIds'],
        }, "R2"],
    ]);
    $self->assert_deep_equals({
        $dst_cal_id => JSON::true
    }, $res->[1][1]{list}[0]{calendarIds});

    xlog $self, "Assert that the fast path was taken";
    if ($self->{instance}->{have_syslog_replacement}) {
        my @lines = $self->{instance}->getsyslog(
            qr/moved calendar event via fast path/);
        $self->assert_num_equals(1, scalar @lines);
    }
}
