#!perl
use Cassandane::Tiny;

sub test_calendarevent_organizer_noattendees
    :min_version_3_5
    ($self)
{
    my $jmap = $self->default_user->jmap;
    my $default_cal_id = $self->default_user->calendars->default->id;

    my $caldav = $self->{caldav};

    xlog "Create event via CalDAV";
    my ($event1Id, $ical) = $self->icalfile('organizer_noattendees');
    my $event = $self->putandget_vevent($event1Id, $ical);
    my $wantParticipants = hashbag(
        ignore() => {
            '@type' => 'Participant',
            name => 'Organizer',
            roles => {
                'owner' => JSON::true,
            },
            calendarAddress => 'mailto:organizer@local',
        },
    );
    my $participants = {
        organizer => {
            '@type' => 'Participant',
            name => 'Organizer',
            roles => {
                'owner' => JSON::true,
            },
            calendarAddress => 'mailto:organizer@local',
        },
    };
    my $wantOrganizerCalendarAddress = 'mailto:organizer@local';
    $self->assert_cmp_deeply($wantParticipants, $event->{participants});
    $self->assert_str_equals($wantOrganizerCalendarAddress, $event->{organizerCalendarAddress});

    xlog "Update event via JMAP";
    my $res = $jmap->CallMethods([
        ['CalendarEvent/set', {
            update => {
                $event1Id => {
                    participants => $participants,
                    organizerCalendarAddress => $wantOrganizerCalendarAddress
                },
            },
        }, 'R1'],
        ['CalendarEvent/get', {
            ids => [$event1Id],
            properties => ['participants', 'organizerCalendarAddress', 'x-href'],
        }, 'R2'],
    ]);
    $self->assert(exists $res->[0][1]{updated}{$event1Id});
    $self->assert_cmp_deeply($wantParticipants, $res->[1][1]{list}[0]{participants});
    $self->assert_str_equals($wantOrganizerCalendarAddress, $res->[1][1]{list}[0]{organizerCalendarAddress});

    my $xhref1 = $res->[1][1]{list}[0]{'x-href'};
    $self->assert_not_null($xhref1);

    xlog "Validate no ATTENDEE got added";
    $res = $caldav->Request('GET', $xhref1);
    $self->assert($res->{content} =~ m/ORGANIZER/);
    $self->assert(not($res->{content} =~ m/ATTENDEE/));

    xlog "Create event with owner-only participant via JMAP";
    $res = $jmap->CallMethods([
        ['CalendarEvent/set', {
            create => {
                event2 => {
                    version => '2.0',
                    calendarIds => {
                        $default_cal_id => JSON::true,
                    },
                    title => "title",
                    "start"=> "2015-11-07T09:00:00",
                    "duration"=> "PT2H",
                    "timeZone" => "Europe/London",
                    organizerCalendarAddress => $wantOrganizerCalendarAddress,
                    participants => $participants,
                },
            },
        }, 'R1'],
        ['CalendarEvent/get', {
            ids => ['#event2'],
            properties => ['participants', 'organizerCalendarAddress'],
        }, 'R2'],
    ]);
    $self->assert_cmp_deeply($wantParticipants, $res->[1][1]{list}[0]{participants});
    $self->assert_str_equals($wantOrganizerCalendarAddress, $res->[1][1]{list}[0]{organizerCalendarAddress});

    my $xhref2 = $res->[0][1]{created}{event2}{'x-href'};
    $self->assert_not_null($xhref2);

    xlog "Validate an ATTENDEE got added";
    $res = $caldav->Request('GET', $xhref2);
    $self->assert($res->{content} =~ m/ORGANIZER/);
    $self->assert($res->{content} =~ m/ATTENDEE/);
}
