809
|
1 use strict; |
|
2 use warnings; |
|
3 use lib 't'; |
|
4 |
|
5 use TestConnection; |
|
6 use AnyEvent::XMPP::Ext::VCard; |
|
7 use Test::More; |
|
8 |
|
9 sub test_vcard { |
|
10 my ( $username, $expected_fields ) = @_; |
|
11 |
|
12 $expected_fields->{'JABBERID'} = $username . '@' . $TestConnection::HOST; |
|
13 $expected_fields->{'VERSION'} = '2.0'; |
|
14 |
|
15 my $conn = TestConnection->new($username); |
|
16 my $vcard = AnyEvent::XMPP::Ext::VCard->new; |
|
17 |
|
18 local $Test::Builder::Level = $Test::Builder::Level + 1; |
|
19 |
|
20 $conn->reg_cb(stream_ready => sub { |
|
21 $vcard->hook_on($conn); |
|
22 }); |
|
23 |
|
24 $conn->reg_cb(session_ready => sub { |
|
25 $vcard->retrieve($conn, undef, sub { |
|
26 my ( $jid, $vcard, $error ) = @_; |
|
27 |
|
28 if(eval { $vcard->isa('AnyEvent::XMPP::Error') }) { |
|
29 $error = $vcard; |
|
30 } |
|
31 |
|
32 if($error) { |
|
33 $conn->cond->send($error->string); |
|
34 return; |
|
35 } |
|
36 |
|
37 foreach my $key (keys %$vcard) { |
|
38 my $value = $vcard->{$key}; |
|
39 |
|
40 $value = $value->[0]; |
|
41 |
|
42 if($value eq '') { |
|
43 delete $vcard->{$key}; |
|
44 } else { |
|
45 $vcard->{$key} = $value; |
|
46 } |
|
47 } |
|
48 |
|
49 is_deeply $expected_fields, $vcard or diag(explain($vcard)); |
|
50 $conn->cond->send; |
|
51 }); |
|
52 }); |
|
53 |
|
54 my $error = $conn->cond->recv; |
|
55 |
|
56 if($error) { |
|
57 fail($error); |
|
58 return; |
|
59 } |
|
60 } |
|
61 |
|
62 plan tests => 5; |
|
63 |
|
64 test_vcard(one => { |
|
65 FN => 'John Testerson', |
|
66 NICKNAME => 'one', |
|
67 }); |
|
68 |
|
69 test_vcard(two => { |
|
70 FN => 'Jane Testerson', |
|
71 NICKNAME => 'two', |
|
72 }); |
|
73 |
|
74 test_vcard(three => { |
|
75 FN => 'Jerry Testerson', |
|
76 NICKNAME => 'three', |
|
77 }); |
|
78 |
|
79 test_vcard(four => { |
|
80 FN => 'Jack Testerson', |
|
81 NICKNAME => 'four', |
|
82 }); |
|
83 |
|
84 test_vcard(five => { |
|
85 FN => 'Jimmy Testerson', |
|
86 NICKNAME => 'five', |
|
87 }); |