view mod_lib_ldap/dev/t/01-rosters.t @ 2494:d300ae5dba87

mod_smacks: Fix some bugs with smacks-ack-delayed event triggering. The old code had several flaws which are addressed here. First of all this fixes the if statement guarding the event generation There where some timing glitches addressed by this commit as well.
author tmolitor <thilo@eightysoft.de>
date Sun, 12 Feb 2017 21:23:22 +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'],
}]);