view mod_lib_ldap/dev/t/01-rosters.t @ 4499:8e644bf36627

mod_rest: Change OOB namespace to the one used in messages Because of it's current popularity as companion to HTTP Upload this is probably more useful than the iq one.
author Kim Alvefur <zash@zash.se>
date Sun, 07 Mar 2021 01:26:20 +0100
parents 1d51c5e38faa
children
line wrap: on
line source

use strict;
use warnings;
use lib 't';

use AnyEvent::XMPP::Util qw(split_jid);
use TestConnection;
use Test::More;

sub test_roster {
    my ( $username, $expected_contacts ) = @_;

    local $Test::Builder::Level = $Test::Builder::Level + 1;
    my @contacts;

    my $conn = TestConnection->new($username);

    $conn->reg_cb(roster_update => sub {
        my ( undef, $roster ) = @_;

        @contacts = sort { $a->{'username'} cmp $b->{'username'} } map {
            +{
                username     => (split_jid($_->jid))[0],
                name         => $_->name,
                groups       => [ sort $_->groups ],
                subscription => $_->subscription,
            }
        } $roster->get_contacts;
        $conn->cond->send;
    });

    my $error = $conn->cond->recv;

    if($error) {
        fail($error);
        return;
    }
    @$expected_contacts = sort { $a->{'username'} cmp $b->{'username'} }
        @$expected_contacts;
    foreach my $contact (@$expected_contacts) {
        $contact->{'subscription'} = 'both';
        @{ $contact->{'groups'} } = sort @{ $contact->{'groups'} };
    }
    is_deeply(\@contacts, $expected_contacts);
}

plan tests => 5;

test_roster(one => [{
    username => 'two',
    name     => 'Jane Testerson',
    groups   => ['everyone', 'admin'],
}, {
    username => 'three',
    name     => 'Jerry Testerson',
    groups   => ['everyone'],
}, {
    username => 'four',
    name     => 'Jack Testerson',
    groups   => ['everyone'],
}, {
    username => 'five',
    name     => 'Jimmy Testerson',
    groups   => ['everyone'],
}]);

test_roster(two => [{
    username => 'one',
    name     => 'John Testerson',
    groups   => ['everyone', 'admin'],
}, {
    username => 'three',
    name     => 'Jerry Testerson',
    groups   => ['everyone'],
}, {
    username => 'four',
    name     => 'Jack Testerson',
    groups   => ['everyone'],
}, {
    username => 'five',
    name     => 'Jimmy Testerson',
    groups   => ['everyone'],
}]);

test_roster(three => [{
    username => 'one',
    name     => 'John Testerson',
    groups   => ['everyone'],
}, {
    username => 'two',
    name     => 'Jane Testerson',
    groups   => ['everyone'],
}, {
    username => 'four',
    name     => 'Jack Testerson',
    groups   => ['everyone'],
}, {
    username => 'five',
    name     => 'Jimmy Testerson',
    groups   => ['everyone'],
}]);

test_roster(four => [{
    username => 'one',
    name     => 'John Testerson',
    groups   => ['everyone'],
}, {
    username => 'two',
    name     => 'Jane Testerson',
    groups   => ['everyone'],
}, {
    username => 'three',
    name     => 'Jerry Testerson',
    groups   => ['everyone'],
}, {
    username => 'five',
    name     => 'Jimmy Testerson',
    groups   => ['everyone'],
}]);

test_roster(five => [{
    username => 'one',
    name     => 'John Testerson',
    groups   => ['everyone'],
}, {
    username => 'two',
    name     => 'Jane Testerson',
    groups   => ['everyone'],
}, {
    username => 'three',
    name     => 'Jerry Testerson',
    groups   => ['everyone'],
}, {
    username => 'four',
    name     => 'Jack Testerson',
    groups   => ['everyone'],
}]);