#!perl
use Cassandane::Tiny;

sub test_admin_setusergroup ($self)
{
    my $admintalk = $self->{adminstore}->get_client();

    # should have the xusergroups capability
    $self->assert_not_null($admintalk->capability()->{xusergroups});

    # get a user's groups
    my $usergroups = $self->imap_getusergroup($admintalk, 'cassandane');
    $self->assert_not_null($usergroups->{'cassandane'});
    $self->assert_not_null($usergroups->{'cassandane'}->{'group:group c'});
    $self->assert_not_null($usergroups->{'cassandane'}->{'group:group co'});
    $self->assert_null($usergroups->{'cassandane'}->{'group:group o'});
    $self->assert_null($usergroups->{'cassandane'}->{'group:new group'});

    # set membership in a new group
    $admintalk->_imap_cmd('SETUSERGROUP', 0, '',
                          'cassandane', 'group:new group');
    $self->assert_str_equals('ok', $admintalk->get_last_completion_response());

    # get the groups again, should be in new group now
    $usergroups = $self->imap_getusergroup($admintalk, 'cassandane');
    $self->assert_not_null($usergroups->{'cassandane'});
    $self->assert_not_null($usergroups->{'cassandane'}->{'group:group c'});
    $self->assert_not_null($usergroups->{'cassandane'}->{'group:group co'});
    $self->assert_null($usergroups->{'cassandane'}->{'group:group o'});
    $self->assert_not_null($usergroups->{'cassandane'}->{'group:new group'});

    # get the new group's membership, should contain (only) the user
    $usergroups = $self->imap_getusergroup($admintalk, 'group:new group');
    $self->assert_not_null($usergroups->{'group:new group'});
    $self->assert_not_null($usergroups->{'group:new group'}->{'cassandane'});
    $self->assert_equals(1, scalar keys %{$usergroups->{'group:new group'}});
}
