#!perl
use Cassandane::Tiny;

sub test_addressbook_set_destroy_contents
    :min_version_3_9
    ($self)
{
    my $jmap = $self->{jmap};
    my $carddav = $self->{carddav};

    xlog "Create addressbook and contact";
    my $abookPath = $carddav->NewAddressBook("foo");

    xlog $self, "get addressbook ids";
    my $res = $jmap->CallMethods([['AddressBook/get', {}, "R1"]]);
    my %m = map { $_->{name} => $_ } @{$res->[0][1]{list}};
    my $abookId = $m{"foo"}{id};

    my $card = <<EOF;
BEGIN:VCARD
VERSION:3.0
N:Gump;Forrest;;Mr.
FN:Forrest Gump
ORG:Bubba Gump Shrimp Co.
TITLE:Shrimp Man
EMAIL;TYPE=INTERNET:user\@example.com
REV:2008-04-24T19:52:43Z
END:VCARD
EOF

    my $VCard = vcard_to_jscontact($card);
    $carddav->NewContact($abookPath, $VCard);

    xlog "Destroy addressbook (with and without onDestroyRemoveContents)";
    $res = $jmap->CallMethods([
        ['AddressBook/set', {
            destroy => [$abookId],
        }, 'R1'],
        ['ContactCard/get', {
            properties => ['id'],
        }, 'R2'],
        ['AddressBook/set', {
            destroy => [$abookId],
            onDestroyRemoveContents => JSON::true,
        }, 'R3'],
        ['ContactCard/get', {
            properties => ['id'],
        }, 'R4'],
    ]);
    $self->assert_str_equals('addressBookHasContents',
        $res->[0][1]{notDestroyed}{$abookId}{type});
    $self->assert_num_equals(1, scalar(@{$res->[1][1]{list}}));
    $self->assert_deep_equals([$abookId], $res->[2][1]{destroyed});
    $self->assert_num_equals(0, scalar(@{$res->[3][1]{list}}));
}
