jubjub 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.mdown +42 -6
- data/lib/jubjub/connection/xmpp_gateway/muc.rb +4 -20
- data/lib/jubjub/connection/xmpp_gateway/pubsub.rb +194 -13
- data/lib/jubjub/data_form.rb +30 -0
- data/lib/jubjub/muc.rb +4 -93
- data/lib/jubjub/muc/collection.rb +55 -0
- data/lib/jubjub/muc/configuration.rb +5 -0
- data/lib/jubjub/muc/muc.rb +37 -0
- data/lib/jubjub/pubsub.rb +8 -201
- data/lib/jubjub/pubsub/affiliation.rb +83 -0
- data/lib/jubjub/pubsub/affiliation_collection.rb +38 -0
- data/lib/jubjub/pubsub/collection.rb +68 -0
- data/lib/jubjub/pubsub/configuration.rb +5 -0
- data/lib/jubjub/pubsub/item.rb +35 -0
- data/lib/jubjub/pubsub/item_collection.rb +35 -0
- data/lib/jubjub/pubsub/pubsub.rb +66 -0
- data/lib/jubjub/pubsub/subscription.rb +24 -0
- data/lib/jubjub/user.rb +2 -2
- data/spec/connection/xmpp_gateway_muc_spec.rb +3 -3
- data/spec/connection/xmpp_gateway_pubsub_spec.rb +167 -11
- data/spec/fixtures/dataform_1.xml +65 -0
- data/spec/fixtures/vcr_cassettes/pubsub_default_configuration.yml +118 -0
- data/spec/fixtures/vcr_cassettes/pubsub_modify_affiliations.yml +275 -0
- data/spec/fixtures/vcr_cassettes/pubsub_purge.yml +68 -0
- data/spec/fixtures/vcr_cassettes/pubsub_retrieve_affiliations.yml +99 -0
- data/spec/mixins/user_spec.rb +8 -8
- data/spec/models/muc_collection_spec.rb +17 -12
- data/spec/models/muc_configuration_spec.rb +1 -1
- data/spec/models/pubsub_affiliation_collection_spec.rb +86 -0
- data/spec/models/pubsub_affiliation_spec.rb +244 -0
- data/spec/models/pubsub_collection_spec.rb +50 -18
- data/spec/models/pubsub_item_collection_spec.rb +12 -12
- data/spec/models/pubsub_item_spec.rb +9 -2
- data/spec/models/pubsub_spec.rb +27 -2
- data/spec/models/pubsub_subscription_spec.rb +2 -2
- data/spec/spec_helper.rb +1 -1
- data/spec/support/helpers.rb +7 -0
- data/spec/support/shared_examples.rb +30 -0
- metadata +46 -19
@@ -0,0 +1,68 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:VCR::HTTPInteraction
|
3
|
+
request: !ruby/struct:VCR::Request
|
4
|
+
method: :post
|
5
|
+
uri: http://theozaurus%40theo-template.local:secret@127.0.0.1:8000/
|
6
|
+
body: stanza=%3c%3fxml%20version%3d%221.0%22%3f%3e%0a%3ciq%20type%3d%22set%22%20to%3d%22pubsub.theo-template.local%22%3e%0a%20%20%3cpubsub%20xmlns%3d%22http%3a%2f%2fjabber.org%2fprotocol%2fpubsub%22%3e%0a%20%20%20%20%3ccreate%20node%3d%22node_pubsub_purge%22%2f%3e%0a%20%20%3c%2fpubsub%3e%0a%3c%2fiq%3e%0a
|
7
|
+
headers:
|
8
|
+
content-type:
|
9
|
+
- application/x-www-form-urlencoded
|
10
|
+
response: !ruby/struct:VCR::Response
|
11
|
+
status: !ruby/struct:VCR::ResponseStatus
|
12
|
+
code: 200
|
13
|
+
message: ...
|
14
|
+
headers:
|
15
|
+
content-type:
|
16
|
+
- application/xml
|
17
|
+
content-length:
|
18
|
+
- "346"
|
19
|
+
body: |
|
20
|
+
<iq type="error" id="blather000f" from="pubsub.theo-template.local" to="theozaurus@theo-template.local/4894272601308145881366110" lang="en">
|
21
|
+
<pubsub xmlns="http://jabber.org/protocol/pubsub">
|
22
|
+
<create node="node_pubsub_purge"/>
|
23
|
+
</pubsub>
|
24
|
+
<error code="409" type="cancel"><conflict xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq>
|
25
|
+
|
26
|
+
http_version: "1.1"
|
27
|
+
- !ruby/struct:VCR::HTTPInteraction
|
28
|
+
request: !ruby/struct:VCR::Request
|
29
|
+
method: :post
|
30
|
+
uri: http://theozaurus%40theo-template.local:secret@127.0.0.1:8000/
|
31
|
+
body: stanza=%3c%3fxml%20version%3d%221.0%22%3f%3e%0a%3ciq%20type%3d%22set%22%20to%3d%22pubsub.theo-template.local%22%3e%0a%20%20%3cpubsub%20xmlns%3d%22http%3a%2f%2fjabber.org%2fprotocol%2fpubsub%23owner%22%3e%0a%20%20%20%20%3cpurge%20node%3d%22node_pubsub_purge%22%2f%3e%0a%20%20%3c%2fpubsub%3e%0a%3c%2fiq%3e%0a
|
32
|
+
headers:
|
33
|
+
content-type:
|
34
|
+
- application/x-www-form-urlencoded
|
35
|
+
response: !ruby/struct:VCR::Response
|
36
|
+
status: !ruby/struct:VCR::ResponseStatus
|
37
|
+
code: 200
|
38
|
+
message: ...
|
39
|
+
headers:
|
40
|
+
content-type:
|
41
|
+
- application/xml
|
42
|
+
content-length:
|
43
|
+
- "133"
|
44
|
+
body: |
|
45
|
+
<iq type="result" id="blather0011" from="pubsub.theo-template.local" to="theozaurus@theo-template.local/4894272601308145881366110"/>
|
46
|
+
|
47
|
+
http_version: "1.1"
|
48
|
+
- !ruby/struct:VCR::HTTPInteraction
|
49
|
+
request: !ruby/struct:VCR::Request
|
50
|
+
method: :post
|
51
|
+
uri: http://theozaurus%40theo-template.local:secret@127.0.0.1:8000/
|
52
|
+
body: stanza=%3c%3fxml%20version%3d%221.0%22%3f%3e%0a%3ciq%20type%3d%22set%22%20to%3d%22pubsub.theo-template.local%22%3e%0a%20%20%3cpubsub%20xmlns%3d%22http%3a%2f%2fjabber.org%2fprotocol%2fpubsub%23owner%22%3e%0a%20%20%20%20%3cdelete%20node%3d%22node_pubsub_purge%22%2f%3e%0a%20%20%3c%2fpubsub%3e%0a%3c%2fiq%3e%0a
|
53
|
+
headers:
|
54
|
+
content-type:
|
55
|
+
- application/x-www-form-urlencoded
|
56
|
+
response: !ruby/struct:VCR::Response
|
57
|
+
status: !ruby/struct:VCR::ResponseStatus
|
58
|
+
code: 200
|
59
|
+
message: ...
|
60
|
+
headers:
|
61
|
+
content-type:
|
62
|
+
- application/xml
|
63
|
+
content-length:
|
64
|
+
- "133"
|
65
|
+
body: |
|
66
|
+
<iq type="result" id="blather0013" from="pubsub.theo-template.local" to="theozaurus@theo-template.local/4894272601308145881366110"/>
|
67
|
+
|
68
|
+
http_version: "1.1"
|
@@ -0,0 +1,99 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:VCR::HTTPInteraction
|
3
|
+
request: !ruby/struct:VCR::Request
|
4
|
+
method: :post
|
5
|
+
uri: http://theozaurus%40theo-template.local:secret@127.0.0.1:8000/
|
6
|
+
body: stanza=%3c%3fxml%20version%3d%221.0%22%3f%3e%0a%3ciq%20type%3d%22set%22%20to%3d%22pubsub.theo-template.local%22%3e%0a%20%20%3cpubsub%20xmlns%3d%22http%3a%2f%2fjabber.org%2fprotocol%2fpubsub%22%3e%0a%20%20%20%20%3ccreate%20node%3d%22node_retrieve_affiliations%22%2f%3e%0a%20%20%3c%2fpubsub%3e%0a%3c%2fiq%3e%0a
|
7
|
+
headers:
|
8
|
+
content-type:
|
9
|
+
- application/x-www-form-urlencoded
|
10
|
+
response: !ruby/struct:VCR::Response
|
11
|
+
status: !ruby/struct:VCR::ResponseStatus
|
12
|
+
code: 200
|
13
|
+
message: ...
|
14
|
+
headers:
|
15
|
+
content-type:
|
16
|
+
- application/xml
|
17
|
+
content-length:
|
18
|
+
- "252"
|
19
|
+
body: |
|
20
|
+
<iq type="result" id="blather00a3" from="pubsub.theo-template.local" to="theozaurus@theo-template.local/10916135201308219412692940">
|
21
|
+
<pubsub xmlns="http://jabber.org/protocol/pubsub">
|
22
|
+
<create node="node_retrieve_affiliations"/>
|
23
|
+
</pubsub>
|
24
|
+
</iq>
|
25
|
+
|
26
|
+
http_version: "1.1"
|
27
|
+
- !ruby/struct:VCR::HTTPInteraction
|
28
|
+
request: !ruby/struct:VCR::Request
|
29
|
+
method: :post
|
30
|
+
uri: http://theozaurus%40theo-template.local:secret@127.0.0.1:8000/
|
31
|
+
body: stanza=%3c%3fxml%20version%3d%221.0%22%3f%3e%0a%3ciq%20type%3d%22get%22%20to%3d%22pubsub.theo-template.local%22%3e%0a%20%20%3cpubsub%20xmlns%3d%22http%3a%2f%2fjabber.org%2fprotocol%2fpubsub%23owner%22%3e%0a%20%20%20%20%3caffiliations%20node%3d%22node_retrieve_affiliations%22%2f%3e%0a%20%20%3c%2fpubsub%3e%0a%3c%2fiq%3e%0a
|
32
|
+
headers:
|
33
|
+
content-type:
|
34
|
+
- application/x-www-form-urlencoded
|
35
|
+
response: !ruby/struct:VCR::Response
|
36
|
+
status: !ruby/struct:VCR::ResponseStatus
|
37
|
+
code: 200
|
38
|
+
message: ...
|
39
|
+
headers:
|
40
|
+
content-type:
|
41
|
+
- application/xml
|
42
|
+
content-length:
|
43
|
+
- "361"
|
44
|
+
body: |
|
45
|
+
<iq type="result" id="blather00a5" from="pubsub.theo-template.local" to="theozaurus@theo-template.local/10916135201308219412692940">
|
46
|
+
<pubsub xmlns="http://jabber.org/protocol/pubsub#owner">
|
47
|
+
<affiliations node="node_retrieve_affiliations">
|
48
|
+
<affiliation jid="theozaurus@theo-template.local" affiliation="owner"/>
|
49
|
+
</affiliations>
|
50
|
+
</pubsub>
|
51
|
+
</iq>
|
52
|
+
|
53
|
+
http_version: "1.1"
|
54
|
+
- !ruby/struct:VCR::HTTPInteraction
|
55
|
+
request: !ruby/struct:VCR::Request
|
56
|
+
method: :post
|
57
|
+
uri: http://theozaurus%40theo-template.local:secret@127.0.0.1:8000/
|
58
|
+
body: stanza=%3c%3fxml%20version%3d%221.0%22%3f%3e%0a%3ciq%20type%3d%22set%22%20to%3d%22pubsub.theo-template.local%22%3e%0a%20%20%3cpubsub%20xmlns%3d%22http%3a%2f%2fjabber.org%2fprotocol%2fpubsub%23owner%22%3e%0a%20%20%20%20%3cdelete%20node%3d%22node_retrieve_affiliations%22%2f%3e%0a%20%20%3c%2fpubsub%3e%0a%3c%2fiq%3e%0a
|
59
|
+
headers:
|
60
|
+
content-type:
|
61
|
+
- application/x-www-form-urlencoded
|
62
|
+
response: !ruby/struct:VCR::Response
|
63
|
+
status: !ruby/struct:VCR::ResponseStatus
|
64
|
+
code: 200
|
65
|
+
message: ...
|
66
|
+
headers:
|
67
|
+
content-type:
|
68
|
+
- application/xml
|
69
|
+
content-length:
|
70
|
+
- "134"
|
71
|
+
body: |
|
72
|
+
<iq type="result" id="blather00a7" from="pubsub.theo-template.local" to="theozaurus@theo-template.local/10916135201308219412692940"/>
|
73
|
+
|
74
|
+
http_version: "1.1"
|
75
|
+
- !ruby/struct:VCR::HTTPInteraction
|
76
|
+
request: !ruby/struct:VCR::Request
|
77
|
+
method: :post
|
78
|
+
uri: http://theozaurus%40theo-template.local:secret@127.0.0.1:8000/
|
79
|
+
body: stanza=%3c%3fxml%20version%3d%221.0%22%3f%3e%0a%3ciq%20type%3d%22get%22%20to%3d%22pubsub.theo-template.local%22%3e%0a%20%20%3cpubsub%20xmlns%3d%22http%3a%2f%2fjabber.org%2fprotocol%2fpubsub%23owner%22%3e%0a%20%20%20%20%3caffiliations%20node%3d%22made-up%22%2f%3e%0a%20%20%3c%2fpubsub%3e%0a%3c%2fiq%3e%0a
|
80
|
+
headers:
|
81
|
+
content-type:
|
82
|
+
- application/x-www-form-urlencoded
|
83
|
+
response: !ruby/struct:VCR::Response
|
84
|
+
status: !ruby/struct:VCR::ResponseStatus
|
85
|
+
code: 200
|
86
|
+
message: ...
|
87
|
+
headers:
|
88
|
+
content-type:
|
89
|
+
- application/xml
|
90
|
+
content-length:
|
91
|
+
- "355"
|
92
|
+
body: |
|
93
|
+
<iq type="error" id="blather00a9" from="pubsub.theo-template.local" to="theozaurus@theo-template.local/10916135201308219412692940" lang="en">
|
94
|
+
<pubsub xmlns="http://jabber.org/protocol/pubsub#owner">
|
95
|
+
<affiliations node="made-up"/>
|
96
|
+
</pubsub>
|
97
|
+
<error code="404" type="cancel"><item-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq>
|
98
|
+
|
99
|
+
http_version: "1.1"
|
data/spec/mixins/user_spec.rb
CHANGED
@@ -121,13 +121,13 @@ describe Jubjub::User do
|
|
121
121
|
mock_jubjub_connection
|
122
122
|
end
|
123
123
|
|
124
|
-
it 'should return Jubjub::
|
125
|
-
@user.mucs.should be_a Jubjub::
|
124
|
+
it 'should return Jubjub::Muc::Collection for conference.biggles.com when no service specified' do
|
125
|
+
@user.mucs.should be_a Jubjub::Muc::Collection
|
126
126
|
@user.mucs.jid.should == Jubjub::Jid.new('conference.biggles.com')
|
127
127
|
end
|
128
128
|
|
129
|
-
it 'should return Jubjub::
|
130
|
-
@user.mucs('wibble.com').should be_a Jubjub::
|
129
|
+
it 'should return Jubjub::Muc::Collection for service when specified' do
|
130
|
+
@user.mucs('wibble.com').should be_a Jubjub::Muc::Collection
|
131
131
|
@user.mucs('wibble.com').jid.should == Jubjub::Jid.new('wibble.com')
|
132
132
|
end
|
133
133
|
end
|
@@ -137,13 +137,13 @@ describe Jubjub::User do
|
|
137
137
|
mock_jubjub_connection
|
138
138
|
end
|
139
139
|
|
140
|
-
it 'should return Jubjub::
|
141
|
-
@user.pubsub.should be_a Jubjub::
|
140
|
+
it 'should return Jubjub::Pubsub::Collection for conference.biggles.com when no service specified' do
|
141
|
+
@user.pubsub.should be_a Jubjub::Pubsub::Collection
|
142
142
|
@user.pubsub.jid.should == Jubjub::Jid.new('pubsub.biggles.com')
|
143
143
|
end
|
144
144
|
|
145
|
-
it 'should return Jubjub::
|
146
|
-
@user.pubsub('wibble.com').should be_a Jubjub::
|
145
|
+
it 'should return Jubjub::Pubsub::Collection for service when specified' do
|
146
|
+
@user.pubsub('wibble.com').should be_a Jubjub::Pubsub::Collection
|
147
147
|
@user.pubsub('wibble.com').jid.should == Jubjub::Jid.new('wibble.com')
|
148
148
|
end
|
149
149
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Jubjub::
|
3
|
+
describe Jubjub::Muc::Collection do
|
4
4
|
|
5
5
|
describe "instance methods" do
|
6
6
|
|
@@ -15,16 +15,16 @@ describe Jubjub::MucCollection do
|
|
15
15
|
it "should call muc.create on connection" do
|
16
16
|
@mock_connection.muc.should_receive(:create).with( Jubjub::Jid.new 'hello@conference.foo.com/admin' )
|
17
17
|
|
18
|
-
Jubjub::
|
18
|
+
Jubjub::Muc::Collection.new("conference.foo.com", @mock_connection).create("hello")
|
19
19
|
end
|
20
20
|
|
21
|
-
it "should yield a
|
22
|
-
@config = Jubjub::
|
21
|
+
it "should yield a Muc::Configuration if a block is given" do
|
22
|
+
@config = Jubjub::Muc::Configuration.new( "allow_query_users" => { :type => "boolean", :value => "1", :label => "Foo" } )
|
23
23
|
|
24
24
|
@mock_connection.muc.should_receive( :configuration ).with( Jubjub::Jid.new( 'hello@conference.foo.com/admin' )).and_return( @config )
|
25
25
|
@mock_connection.muc.should_receive( :create ).with( Jubjub::Jid.new( 'hello@conference.foo.com/admin' ), @config )
|
26
26
|
|
27
|
-
Jubjub::
|
27
|
+
Jubjub::Muc::Collection.new("conference.foo.com", @mock_connection).create("hello"){|config|
|
28
28
|
config.should == @config
|
29
29
|
}
|
30
30
|
end
|
@@ -33,7 +33,7 @@ describe Jubjub::MucCollection do
|
|
33
33
|
|
34
34
|
describe "jid" do
|
35
35
|
it "should return the jid" do
|
36
|
-
Jubjub::
|
36
|
+
Jubjub::Muc::Collection.new("conference.foo.com", mock).jid.should == Jubjub::Jid.new("conference.foo.com")
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
@@ -47,7 +47,7 @@ describe Jubjub::MucCollection do
|
|
47
47
|
@mock_connection.stub_chain( :muc, :list ).and_return(@rooms)
|
48
48
|
end
|
49
49
|
|
50
|
-
subject { Jubjub::
|
50
|
+
subject { Jubjub::Muc::Collection.new('conference.foo.com', @mock_connection) }
|
51
51
|
|
52
52
|
it "should work like a normal array when passed a Fixnum" do
|
53
53
|
subject[1].should == @rooms[1]
|
@@ -56,14 +56,19 @@ describe Jubjub::MucCollection do
|
|
56
56
|
it "should search by node if a String" do
|
57
57
|
subject["room_1"].should == @rooms[0]
|
58
58
|
end
|
59
|
+
|
60
|
+
it "should return Jubjub::Muc if nothing found for a String as it may still exist" do
|
61
|
+
subject['made-up'].should == Jubjub::Muc.new('made-up@conference.foo.com', nil, @mock_connection)
|
62
|
+
end
|
59
63
|
|
60
64
|
it "should search by jid if a Jubjub::Jid" do
|
61
65
|
subject[Jubjub::Jid.new("room_1@conference.foo.com")].should == @rooms[0]
|
62
66
|
end
|
63
67
|
|
64
|
-
it "should return
|
65
|
-
subject[
|
68
|
+
it "should return Jubjub::Muc if nothing found for a Jubjub::Jid as it may still exist" do
|
69
|
+
subject[Jubjub::Jid.new("made-up@conference.foo.com")].should == Jubjub::Muc.new('made-up@conference.foo.com', nil, @mock_connection)
|
66
70
|
end
|
71
|
+
|
67
72
|
end
|
68
73
|
|
69
74
|
describe "that are proxied like" do
|
@@ -79,8 +84,8 @@ describe Jubjub::MucCollection do
|
|
79
84
|
|
80
85
|
describe "inspect" do
|
81
86
|
|
82
|
-
it "should show the list of rooms, not
|
83
|
-
Jubjub::
|
87
|
+
it "should show the list of rooms, not Muc::Collection" do
|
88
|
+
Jubjub::Muc::Collection.new('conference.foo.com', @mock_connection).inspect.should eql(@rooms.inspect)
|
84
89
|
end
|
85
90
|
|
86
91
|
end
|
@@ -88,7 +93,7 @@ describe Jubjub::MucCollection do
|
|
88
93
|
describe "map" do
|
89
94
|
|
90
95
|
it "should pass the block to the rooms" do
|
91
|
-
c = Jubjub::
|
96
|
+
c = Jubjub::Muc::Collection.new('conference.foo.com', @mock_connection)
|
92
97
|
c.map{|r| r.jid.to_s }.should eql(['room_1@conference.foo.com', 'room_2@conference.foo.com'])
|
93
98
|
end
|
94
99
|
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Jubjub::Pubsub::AffiliationCollection do
|
4
|
+
|
5
|
+
describe "that are proxied like" do
|
6
|
+
|
7
|
+
before do
|
8
|
+
@mock_connection = mock
|
9
|
+
@affiliations = [
|
10
|
+
Jubjub::Pubsub::Affiliation.new('pubsub.foo.com', 'node', 'theozaurus@foo.com', 'owner', @mock_connection),
|
11
|
+
Jubjub::Pubsub::Affiliation.new('pubsub.foo.com', 'node', 'dragonzaurus@foo.com', 'publisher', @mock_connection)
|
12
|
+
]
|
13
|
+
@mock_connection.stub_chain( :pubsub, :retrieve_affiliations ).and_return(@affiliations)
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "inspect" do
|
17
|
+
|
18
|
+
it "should show the list of affiliations, not Pubsub::AffiliationCollection" do
|
19
|
+
Jubjub::Pubsub::AffiliationCollection.new('pubsub.foo.com', 'node_1', @mock_connection).inspect.should eql(@affiliations.inspect)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "map" do
|
25
|
+
|
26
|
+
it "should pass the block to the rooms" do
|
27
|
+
c = Jubjub::Pubsub::AffiliationCollection.new('pubsub.foo.com', 'node_1', @mock_connection)
|
28
|
+
c.map{|r| r.affiliation.to_s }.should eql(['owner', 'publisher'])
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "instance method" do
|
36
|
+
|
37
|
+
describe "jid" do
|
38
|
+
it "should return the jid" do
|
39
|
+
Jubjub::Pubsub::AffiliationCollection.new("pubsub.foo.com", "node", mock).jid.should == Jubjub::Jid.new("pubsub.foo.com")
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "node" do
|
44
|
+
it "should return the node" do
|
45
|
+
Jubjub::Pubsub::AffiliationCollection.new("pubsub.foo.com", "node", mock).node.should == 'node'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "[]" do
|
50
|
+
before do
|
51
|
+
@mock_connection = mock
|
52
|
+
@nodes = [
|
53
|
+
Jubjub::Pubsub::Affiliation.new('pubsub.foo.com', 'node_1', 'theozaurus@foo.com', 'owner', @mock_connection),
|
54
|
+
Jubjub::Pubsub::Affiliation.new('pubsub.foo.com', 'node_1', 'dragonzaurus@foo.com', 'member', @mock_connection)
|
55
|
+
]
|
56
|
+
@mock_connection.stub_chain( :pubsub, :retrieve_affiliations ).and_return(@nodes)
|
57
|
+
end
|
58
|
+
|
59
|
+
subject { Jubjub::Pubsub::AffiliationCollection.new "pubsub.foo.com", "node_1", @mock_connection }
|
60
|
+
|
61
|
+
it "should work like a normal array when passed a Fixnum" do
|
62
|
+
subject[1].should == @nodes[1]
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should search by jid if a String" do
|
66
|
+
subject["theozaurus@foo.com"].should == @nodes[0]
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should return affiliation of 'none' if not found when searching by String" do
|
70
|
+
subject['blogozaurus@foo.com'].should ==
|
71
|
+
Jubjub::Pubsub::Affiliation.new('pubsub.foo.com', 'node_1', 'blogozaurus@foo.com', 'none', @mock_connection)
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should search by Jid if Jubjub::Jid" do
|
75
|
+
subject[Jubjub::Jid.new 'dragonzaurus@foo.com'].should == @nodes[1]
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should return afiliation of 'none' if not found when searching by Jubjub::Jid" do
|
79
|
+
subject[Jubjub::Jid.new 'blogozaurus@foo.com'].should ==
|
80
|
+
Jubjub::Pubsub::Affiliation.new('pubsub.foo.com', 'node_1', 'blogozaurus@foo.com', 'none', @mock_connection)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
@@ -0,0 +1,244 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Jubjub::Pubsub::Affiliation do
|
4
|
+
|
5
|
+
def pubsub_affiliation_factory(override = {})
|
6
|
+
options = {
|
7
|
+
:pubsub_jid => Jubjub::Jid.new("pubsub.foo.com"),
|
8
|
+
:pubsub_node => "node_1",
|
9
|
+
:jid => Jubjub::Jid.new("theozaurus@foo.com"),
|
10
|
+
:affiliation => 'owner',
|
11
|
+
:connection => "SHHHH CONNECTION OBJECT"
|
12
|
+
}.merge( override )
|
13
|
+
|
14
|
+
Jubjub::Pubsub::Affiliation.new(
|
15
|
+
options[:pubsub_jid],
|
16
|
+
options[:pubsub_node],
|
17
|
+
options[:jid],
|
18
|
+
options[:affiliation],
|
19
|
+
options[:connection]
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "instance method" do
|
24
|
+
|
25
|
+
describe "pubsub_jid" do
|
26
|
+
it "should return the pubsub_jid" do
|
27
|
+
p = pubsub_affiliation_factory :pubsub_jid => 'pubsub.foo.com'
|
28
|
+
p.pubsub_jid.should == Jubjub::Jid.new('pubsub.foo.com')
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "pubsub_node" do
|
33
|
+
it "should return the node" do
|
34
|
+
p = pubsub_affiliation_factory :pubsub_node => 'node_1'
|
35
|
+
p.pubsub_node.should == 'node_1'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "jid" do
|
40
|
+
it "should return the jid" do
|
41
|
+
p = pubsub_affiliation_factory :jid => 'bob@foo.com'
|
42
|
+
p.jid.should == Jubjub::Jid.new('bob@foo.com')
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "affiliation" do
|
47
|
+
it "should return the affiliation" do
|
48
|
+
p = pubsub_affiliation_factory :affiliation => 'publisher'
|
49
|
+
p.affiliation.should == 'publisher'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "owner?" do
|
54
|
+
it "should return true when affiliation is 'owner'" do
|
55
|
+
pubsub_affiliation_factory( :affiliation => 'owner' ).owner?.should equal(true)
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should return false when affiliation is not 'owner'" do
|
59
|
+
pubsub_affiliation_factory( :affiliation => 'publisher' ).owner?.should equal(false)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "publisher?" do
|
64
|
+
it "should return true when affiliation is 'publisher'" do
|
65
|
+
pubsub_affiliation_factory( :affiliation => 'publisher' ).publisher?.should equal(true)
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should return false when affiliation is not 'publisher'" do
|
69
|
+
pubsub_affiliation_factory( :affiliation => 'owner' ).publisher?.should equal(false)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "publish_only?" do
|
74
|
+
it "should return true when affiliation is 'publish-only'" do
|
75
|
+
pubsub_affiliation_factory( :affiliation => 'publish-only' ).publish_only?.should equal(true)
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should return false when affiliation is not 'publish-only'" do
|
79
|
+
pubsub_affiliation_factory( :affiliation => 'publisher' ).publish_only?.should equal(false)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
describe "member?" do
|
84
|
+
it "should return true when affiliation is 'member'" do
|
85
|
+
pubsub_affiliation_factory( :affiliation => 'member' ).member?.should equal(true)
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should return false when affiliation is not 'member'" do
|
89
|
+
pubsub_affiliation_factory( :affiliation => 'publisher' ).member?.should equal(false)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
describe "none?" do
|
94
|
+
it "should return true when affiliation is 'none'" do
|
95
|
+
pubsub_affiliation_factory( :affiliation => 'none' ).none?.should equal(true)
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should return false when affiliation is not 'none'" do
|
99
|
+
pubsub_affiliation_factory( :affiliation => 'publisher' ).none?.should equal(false)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe "outcast?" do
|
104
|
+
it "should return true when affiliation is 'outcast'" do
|
105
|
+
pubsub_affiliation_factory( :affiliation => 'outcast' ).outcast?.should equal(true)
|
106
|
+
end
|
107
|
+
|
108
|
+
it "should return false when affiliation is not 'outcast'" do
|
109
|
+
pubsub_affiliation_factory( :affiliation => 'publisher' ).outcast?.should equal(false)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe "set" do
|
114
|
+
it "should redirect call to pubsub.modify_affiliation" do
|
115
|
+
@mock_connection = mock
|
116
|
+
@mock_connection.stub_chain :pubsub, :modify_affiliations
|
117
|
+
|
118
|
+
affiliation = pubsub_affiliation_factory :connection => @mock_connection
|
119
|
+
|
120
|
+
@mock_connection.pubsub.should_receive(:modify_affiliations).with( affiliation.pubsub_jid, affiliation.pubsub_node, affiliation )
|
121
|
+
|
122
|
+
affiliation.set 'publisher'
|
123
|
+
end
|
124
|
+
|
125
|
+
describe "when succesful" do
|
126
|
+
before do
|
127
|
+
@mock_connection = mock
|
128
|
+
@mock_connection.stub_chain( :pubsub, :modify_affiliations ).and_return( true )
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should return true" do
|
132
|
+
@affiliation = pubsub_affiliation_factory :connection => @mock_connection
|
133
|
+
@affiliation.set( 'publisher' ).should equal( true )
|
134
|
+
end
|
135
|
+
|
136
|
+
it "should have affiliaton set to new value" do
|
137
|
+
@affiliation = pubsub_affiliation_factory :connection => @mock_connection, :affiliation => 'owner'
|
138
|
+
@affiliation.set 'publisher'
|
139
|
+
@affiliation.affiliation.should == 'publisher'
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
describe "when unsuccesful" do
|
144
|
+
before do
|
145
|
+
@mock_connection = mock
|
146
|
+
@mock_connection.stub_chain( :pubsub, :modify_affiliations ).and_return( false )
|
147
|
+
end
|
148
|
+
|
149
|
+
it "should return false" do
|
150
|
+
@affiliation = pubsub_affiliation_factory :connection => @mock_connection
|
151
|
+
@affiliation.set( 'publisher' ).should equal( false )
|
152
|
+
end
|
153
|
+
|
154
|
+
it "should have affiliaton set to original value" do
|
155
|
+
@affiliation = pubsub_affiliation_factory :connection => @mock_connection, :affiliation => 'owner'
|
156
|
+
@affiliation.set 'publisher'
|
157
|
+
@affiliation.affiliation.should == 'owner'
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
describe "set_owner" do
|
163
|
+
it "should redirect call to set" do
|
164
|
+
affiliation = pubsub_affiliation_factory
|
165
|
+
affiliation.should_receive(:set).with('owner').and_return( 'from-set' )
|
166
|
+
|
167
|
+
affiliation.set_owner.should == 'from-set'
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
describe "set_publisher" do
|
172
|
+
it "should redirect call to set" do
|
173
|
+
affiliation = pubsub_affiliation_factory
|
174
|
+
affiliation.should_receive(:set).with('publisher').and_return( 'from-set' )
|
175
|
+
|
176
|
+
affiliation.set_publisher.should == 'from-set'
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
describe "set_publish_only" do
|
181
|
+
it "should redirect call to set" do
|
182
|
+
affiliation = pubsub_affiliation_factory
|
183
|
+
affiliation.should_receive(:set).with('publish-only').and_return( 'from-set' )
|
184
|
+
|
185
|
+
affiliation.set_publish_only.should == 'from-set'
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
describe "set_member" do
|
190
|
+
it "should redirect call to set" do
|
191
|
+
affiliation = pubsub_affiliation_factory
|
192
|
+
affiliation.should_receive(:set).with('member').and_return( 'from-set' )
|
193
|
+
|
194
|
+
affiliation.set_member.should == 'from-set'
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
describe "set_none" do
|
199
|
+
it "should redirect call to set" do
|
200
|
+
affiliation = pubsub_affiliation_factory
|
201
|
+
affiliation.should_receive(:set).with('none').and_return( 'from-set' )
|
202
|
+
|
203
|
+
affiliation.set_none.should == 'from-set'
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
describe "set_outcast" do
|
208
|
+
it "should redirect call to set" do
|
209
|
+
affiliation = pubsub_affiliation_factory
|
210
|
+
affiliation.should_receive(:set).with('outcast').and_return( 'from-set' )
|
211
|
+
|
212
|
+
affiliation.set_outcast.should == 'from-set'
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
describe "==" do
|
217
|
+
it "should match equivalent objects" do
|
218
|
+
pubsub_affiliation_factory.should == pubsub_affiliation_factory
|
219
|
+
end
|
220
|
+
|
221
|
+
it "should not distinguish between connections" do
|
222
|
+
pubsub_affiliation_factory(:connection => 'wibble').should == pubsub_affiliation_factory(:connection => 'wobble')
|
223
|
+
end
|
224
|
+
|
225
|
+
it "should still match no matter how jid is initialized" do
|
226
|
+
pubsub_affiliation_factory(:jid => 'foo@bar.com').should == pubsub_affiliation_factory(:jid => Jubjub::Jid.new('foo@bar.com'))
|
227
|
+
end
|
228
|
+
|
229
|
+
it "should still match no matter how pubsub_jid is initialized" do
|
230
|
+
pubsub_affiliation_factory(:pubsub_jid => 'pubsub.bar.com').should ==
|
231
|
+
pubsub_affiliation_factory(:pubsub_jid => Jubjub::Jid.new('pubsub.bar.com'))
|
232
|
+
end
|
233
|
+
|
234
|
+
it "should not match objects with different attributes" do
|
235
|
+
pubsub_affiliation_factory(:pubsub_jid => 'a.b.com').should_not == pubsub_affiliation_factory
|
236
|
+
pubsub_affiliation_factory(:pubsub_node => 'waggle').should_not == pubsub_affiliation_factory
|
237
|
+
pubsub_affiliation_factory(:jid => 'a.b.com').should_not == pubsub_affiliation_factory
|
238
|
+
pubsub_affiliation_factory(:affiliation => 'member').should_not == pubsub_affiliation_factory
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
242
|
+
end
|
243
|
+
|
244
|
+
end
|