Diff

mod_lib_ldap/dev/t/01-rosters.t @ 809:1d51c5e38faa

Add LDAP plugin suite
author rob@hoelz.ro
date Sun, 02 Sep 2012 15:35:50 +0200
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_lib_ldap/dev/t/01-rosters.t	Sun Sep 02 15:35:50 2012 +0200
@@ -0,0 +1,136 @@
+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'],
+}]);