#!perl
use Cassandane::Tiny;

sub test_calendarevent_query_expandrecurrences
    :min_version_3_1
    ($self)
{
    my $jmap = $self->default_user->jmap;

    my $caldav = $self->{caldav};
    my $calid = $self->default_user->calendars->default->id;

    xlog $self, "create events";
    my $res = $jmap->CallMethods([
        ['CalendarEvent/set', {
            create => {
                "1" => {
                    version => '2.0',
                    calendarIds => {
                        $calid => JSON::true,
                    },
                    uid => 'event1uid',
                    title => "event1",
                    description => "",
                    freeBusyStatus => "busy",
                    start => "2019-01-01T09:00:00",
                    timeZone => "Europe/Vienna",
                    duration => "PT1H",
                    recurrenceRule => {
                        frequency => 'weekly',
                        count => 3,
                    },
                    recurrenceOverrides => {
                        '2019-01-08T09:00:00' => {
                            start => '2019-01-08T12:00:00',
                        },
                        '2019-01-03T13:00:00' => {
                            title => 'rdate',
                        },
                    },
                },
                "2" => {
                    version => '2.0',
                    calendarIds => {
                        $calid => JSON::true,
                    },
                    uid => 'event2uid',
                    title => "event2",
                    description => "",
                    freeBusyStatus => "busy",
                    start => "2019-01-02T11:00:00",
                    timeZone => "Europe/Vienna",
                    duration => "PT1H",
                },
            }
        }, 'R1']
    ]);
    my $event1Id = $res->[0][1]{created}{1}{id};
    $self->assert_not_null($event1Id);
    my $event2Id = $res->[0][1]{created}{2}{id};
    $self->assert_not_null($event2Id);

    xlog $self, "Run squatter";
    $self->{instance}->run_command({cyrus => 1}, 'squatter');

    $res = $jmap->CallMethods([
        ['CalendarEvent/query', {
            filter => {
                before => '2019-02-01T00:00:00',
            },
            sort => [{
                property => 'start',
                isAscending => JSON::false,
            }],
            expandRecurrences => JSON::true,
        }, 'R1']
    ]);
    $self->assert_num_equals(5, $res->[0][1]{total});
    $self->assert_deep_equals([
           encode_eventid($event1Id,'20190115T090000'),
           encode_eventid($event1Id,'20190108T090000'),
           encode_eventid($event1Id,'20190103T130000'),
           encode_eventid($event2Id),
           encode_eventid($event1Id,'20190101T090000'),
    ], $res->[0][1]{ids});
}
