#!perl
use Cassandane::Tiny;

sub test_card_get_ids
    ($self)
{
    my $jmap = $self->{jmap};

    xlog $self, "create cards";
    my $res = $jmap->CallMethods([['ContactCard/set', {
        create => {
            "1" => {
                '@type' => 'Card',
                version => '1.0',
                name => {
                    isOrdered => JSON::false,
                    components => [
                        {
                            kind => "given",
                            value => "foo"
                        },
                        {
                            kind => "surname",
                            value => "last"
                        },
                    ],
                    sortAs => {
                        surname => 'aaa'
                    }
                },
                nicknames => {
                    'n1' => {
                        name => "foo"
                    }
                },
                emails => {
                    'e1' => {
                        contexts => {
                            private => JSON::true
                        },
                        address => "foo\@example.com"
                    }
                },
                personalInfo => {
                    'p1' => {
                        kind => 'hobby',
                        value => 'reading'
                    }
                }
            },
            "2" => {
                '@type' => 'Card',
                version => '1.0',
                name => {
                    isOrdered => JSON::false,
                    components => [
                        {
                            kind => "given",
                            value => "bar"
                        },
                        {
                            kind => "surname",
                            value => "last"
                        },
                    ]
                },
                emails => {
                    'e1' => {
                        contexts => {
                            work => JSON::true
                        },
                        address => "bar\@bar.org"
                    },
                    'e2' => {
                        contexts => {
                            other => JSON::true
                        },
                        address => "me\@example.com"
                    }
                },
                addresses => {
                    'a1' => {
                        contexts => {
                            private => JSON::true
                        },
                        isOrdered => JSON::false,
                        components => [
                            {
                                kind => "name",
                                value => "Some Lane"
                            },
                            {
                                kind => "number",
                                value => "24"
                            },
                            {
                                kind => "locality",
                                value => "SomeWhere City"
                            },
                            {
                                kind => "region",
                                value => ""
                            },
                            {
                                kind => "postcode",
                                value => "1234"
                            }
                        ]
                    }
                }
            },
            "3" => {
                '@type' => 'Card',
                version => '1.0',
                name => {
                    isOrdered => JSON::false,
                    components => [
                        {
                            kind => "given",
                            value => "baz"
                        },
                        {
                            kind => "surname",
                            value => "last"
                        },
                    ]
                },
                addresses => {
                    'a1' => {
                        contexts => {
                            private => JSON::true
                        },
                        isOrdered => JSON::false,
                        components => [
                            {
                                kind => "name",
                                value => "Some Lane"
                            },
                            {
                                kind => "number",
                                value => "24"
                            },
                            {
                                kind => "locality",
                                value => "SomeWhere City"
                            },
                            {
                                kind => "region",
                                value => ""
                            },
                            {
                                kind => "postcode",
                                value => "1234"
                            },
                            {
                                kind => "country",
                                value => "Someinistan"
                            }
                        ]
                    }
                },
                personalInfo => {
                    'p1' => {
                        kind => 'interest',
                        value => 'r&b music'
                    }
                }
            },
            "4" => {
                '@type' => 'Card',
                version => '1.0',
                name => {
                    isOrdered => JSON::false,
                    components => [
                        {
                            kind => "given",
                            value => "bam"
                        },
                        {
                            kind => "surname",
                            value => "last"
                        },
                    ]
                },
                nicknames => {
                    'n1' => {
                        name => "bam"
                    }
                },
                notes => {
                    'n1' => {
                        note => "hello"
                    }
                }
            },
            "5" => {
                '@type' => 'Card',
                version => '1.0',
                kind => 'org',
                name => {
                    full => 'My Org'
                }
            }
        }
    }, "R1"]]);

    $self->assert_not_null($res);
    $self->assert_str_equals('ContactCard/set', $res->[0][0]);
    $self->assert_str_equals('R1', $res->[0][2]);
    my $id1 = $res->[0][1]{created}{"1"}{id};
    my $id2 = $res->[0][1]{created}{"2"}{id};
    my $id3 = $res->[0][1]{created}{"3"}{id};
    my $id4 = $res->[0][1]{created}{"4"}{id};
    my $id5 = $res->[0][1]{created}{"5"}{id};

    $res = $jmap->CallMethods([
        ['ContactCard/get', {
            ids => [ $id1, $id3, $id5],
        }, 'R1']
    ]);

    $self->assert_str_equals($id1, $res->[0][1]{list}[0]{id});
    $self->assert_str_equals($id3, $res->[0][1]{list}[1]{id});
    $self->assert_str_equals($id5, $res->[0][1]{list}[2]{id});
    $self->assert_not_null($res->[0][1]{list}[0]{'cyrusimap.org:href'});
    $self->assert_not_null($res->[0][1]{list}[1]{'cyrusimap.org:href'});
    $self->assert_not_null($res->[0][1]{list}[2]{'cyrusimap.org:href'});
}
