#!perl
use Cassandane::Tiny;

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

    my $id = 'ae2640cc-234a-4dd9-95cc-3106258445b9';

    # "middle" is not a valid NameComponent.kind per RFC 9553 section
    # 2.2.1.1; the value was renamed to "given2".  An unknown kind is
    # rejected with invalidProperties rather than silently stored as a
    # JSPROP fallback that no CardDAV client can display.
    my $res = $jmap->CallMethods([
        ['ContactCard/set', {
            create => {
                "1" => {
                    '@type' => 'Card',
                    version => '1.0',
                    uid => $id,
                    name => {
                        isOrdered => JSON::true,
                        components => [
                            {
                                kind => 'given',
                                value => 'Robert'
                            },
                            {
                                kind => 'middle',
                                value => 'Pau'
                            },
                            {
                                kind => 'surname',
                                value => 'Shou'
                            },
                            {
                                '@type' => 'Name',
                                kind => 'surname2',
                                value => 'Chang'
                            }
                        ],
                        sortAs => {
                            surname => 'Pau Shou Chang',
                            given => 'Robert'
                        }
                    }
                }
            }
        }, 'R1']
    ]);

    $self->assert_null($res->[0][1]{created}{1});
    $self->assert_not_null($res->[0][1]{notCreated}{1});
    $self->assert_str_equals("invalidProperties",
                             $res->[0][1]{notCreated}{1}{type});
    $self->assert_deep_equals(
        ["name/components[1]/kind"],
        $res->[0][1]{notCreated}{1}{properties}
    );
}
