#!perl
use Cassandane::Tiny;

sub test_contact_query_sort
    :min_version_3_1
{
    my ($self) = @_;

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

    xlog $self, "create contacts";
    my $res = $jmap->CallMethods([
        ['Contact/set', {
            create => {
                contact1 => {
                    uid => 'XXX-UID-1',
                    company => 'companyB',
                    isFlagged => JSON::true,
                },
                contact2 => {
                    uid => 'XXX-UID-2',
                    company => 'companyA',
                    isFlagged => JSON::true,
                },
                contact3 => {
                    uid => 'XXX-UID-3',
                    company => 'companyB',
                    isFlagged => JSON::false,
                },
                contact4 => {
                    uid => 'XXX-UID-4',
                    company => 'companyC',
                    isFlagged => JSON::true,
                },
            },
        }, 'R1'],
    ]);
    my $contactId1 = $res->[0][1]{created}{contact1}{id};
    $self->assert_not_null($contactId1);

    my $contactId2 = $res->[0][1]{created}{contact2}{id};
    $self->assert_not_null($contactId2);

    my $contactId3 = $res->[0][1]{created}{contact3}{id};
    $self->assert_not_null($contactId3);

    my $contactId4 = $res->[0][1]{created}{contact4}{id};
    $self->assert_not_null($contactId4);

    xlog $self, "sort by multi-dimensional comparator";
    $res = $jmap->CallMethods([
        ['Contact/query', {
            sort => [{
                property => 'company',
            }, {
                property => 'uid',
                isAscending => JSON::false,
            }],
        }, 'R2'],
    ]);
    $self->assert_deep_equals([
            $contactId2,
            $contactId3,
            $contactId1,
            $contactId4,
        ], $res->[0][1]{ids}
    );
}
