#!perl
use Cassandane::Tiny;

# Ensure that ContactGroup/set contactIds/otherAccountContactIds on a V4 card
# doesn't prefix # members with 'urn:uuid:'

sub test_contactgroup_set_update_v4_member_correctness ($self)
{
    my $user = $self->default_user;

    my $group = $user->contacts->create_group;
    my $member1 = $group->create_member;
    my $member2 = $group->create_member;

    # Sanity - these should not be urn:uuid
    $self->assert_does_not_match(qr/^urn:uuid:/, $member1->uid);
    $self->assert_does_not_match(qr/^urn:uuid:/, $member2->uid);

    # Sanity - members should not be urn:uuid
    my $res = $user->jmap->request([[
        "ContactCard/get" => {
            ids => [ $group->id ],
        },
    ]]);

    $self->assert_cmp_deeply(
        [ superhashof({
            members => {
                $member1->uid => jtrue,
                $member2->uid => jtrue,
            },
        }) ],
        $res->sentence_named("ContactCard/get")->arguments->{list},
    );

    my $member3 = $user->contacts->create;
    my $member4 = $user->contacts->create;

    # Sanity - should not be urn:uuid
    $self->assert_does_not_match(qr/^urn:uuid:/, $member3->uid);
    $self->assert_does_not_match(qr/^urn:uuid:/, $member4->uid);

    $res = $user->jmap->request([[
        "ContactGroup/set" => {
            update => {
                $group->uid => {
                    contactIds => [
                        $member1->uid,
                        $member2->uid,
                        $member3->uid,
                    ],
                    otherAccountContactIds => {
                        other => [ $member4->uid ],
                    },
                },
            },
        },
    ]]);

    $res->assert_single_successful_set("ContactGroup/set");

    # Recheck - members should not be urn:uuid
    $res = $user->jmap->request([[
        "ContactCard/get" => {
            ids => [ $group->id ],
        },
    ]]);

    $self->assert_cmp_deeply(
        [ superhashof({
            members => {
                $member1->uid => jtrue,
                $member2->uid => jtrue,
                $member3->uid => jtrue,
                $member4->uid => jtrue,
            },
        }) ],
        $res->sentence_named("ContactCard/get")->arguments->{list},
    );
}
