jubjub 0.0.7 → 0.0.8

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.
Files changed (62) hide show
  1. data/README.mdown +27 -1
  2. data/lib/jubjub.rb +1 -1
  3. data/lib/jubjub/connection/xmpp_gateway.rb +9 -9
  4. data/lib/jubjub/connection/xmpp_gateway/helper.rb +5 -5
  5. data/lib/jubjub/connection/xmpp_gateway/muc.rb +127 -32
  6. data/lib/jubjub/connection/xmpp_gateway/pubsub.rb +64 -64
  7. data/lib/jubjub/data_form.rb +16 -13
  8. data/lib/jubjub/errors.rb +2 -2
  9. data/lib/jubjub/helpers.rb +32 -0
  10. data/lib/jubjub/jid.rb +8 -8
  11. data/lib/jubjub/muc.rb +3 -1
  12. data/lib/jubjub/muc/affiliation.rb +77 -0
  13. data/lib/jubjub/muc/affiliations_collection.rb +31 -0
  14. data/lib/jubjub/muc/collection.rb +12 -19
  15. data/lib/jubjub/muc/configuration.rb +2 -2
  16. data/lib/jubjub/muc/muc.rb +24 -11
  17. data/lib/jubjub/pubsub.rb +1 -1
  18. data/lib/jubjub/pubsub/affiliation.rb +20 -20
  19. data/lib/jubjub/pubsub/affiliation_collection.rb +11 -18
  20. data/lib/jubjub/pubsub/collection.rb +14 -21
  21. data/lib/jubjub/pubsub/configuration.rb +2 -2
  22. data/lib/jubjub/pubsub/item.rb +8 -8
  23. data/lib/jubjub/pubsub/item_collection.rb +10 -17
  24. data/lib/jubjub/pubsub/pubsub.rb +17 -17
  25. data/lib/jubjub/pubsub/subscription.rb +6 -6
  26. data/lib/jubjub/response.rb +1 -1
  27. data/lib/jubjub/response/error.rb +6 -6
  28. data/lib/jubjub/response/proxy.rb +8 -8
  29. data/lib/jubjub/response/response.rb +10 -10
  30. data/lib/jubjub/user.rb +16 -15
  31. data/spec/connection/xmpp_gateway_muc_spec.rb +174 -40
  32. data/spec/connection/xmpp_gateway_pubsub_spec.rb +100 -104
  33. data/spec/fixtures/vcr_cassettes/muc_configuration.yml +73 -6
  34. data/spec/fixtures/vcr_cassettes/muc_create_with_configuration.yml +8 -8
  35. data/spec/fixtures/vcr_cassettes/muc_message.yml +89 -0
  36. data/spec/fixtures/vcr_cassettes/muc_modify_affiliations.yml +367 -0
  37. data/spec/fixtures/vcr_cassettes/muc_retrieve_affiliations.yml +93 -0
  38. data/spec/fixtures/vcr_cassettes/pubsub_publish_with_dataform_payload.yml +3 -3
  39. data/spec/fixtures/vcr_cassettes/pubsub_retrieve_items.yml +24 -18
  40. data/spec/mixins/user_spec.rb +37 -37
  41. data/spec/models/data_form_spec.rb +3 -3
  42. data/spec/models/jid_spec.rb +41 -41
  43. data/spec/models/muc_affiliation_collection_spec.rb +146 -0
  44. data/spec/models/muc_affiliation_spec.rb +215 -0
  45. data/spec/models/muc_collection_spec.rb +64 -32
  46. data/spec/models/muc_configuration_spec.rb +3 -3
  47. data/spec/models/muc_spec.rb +44 -23
  48. data/spec/models/pubsub_affiliation_collection_spec.rb +65 -30
  49. data/spec/models/pubsub_affiliation_spec.rb +50 -50
  50. data/spec/models/pubsub_collection_spec.rb +65 -49
  51. data/spec/models/pubsub_item_collection_spec.rb +17 -17
  52. data/spec/models/pubsub_item_spec.rb +18 -18
  53. data/spec/models/pubsub_spec.rb +41 -41
  54. data/spec/models/pubsub_subscription_spec.rb +23 -23
  55. data/spec/models/response_error_spec.rb +19 -19
  56. data/spec/models/response_proxy_spec.rb +51 -49
  57. data/spec/models/response_spec.rb +33 -33
  58. data/spec/support/helpers.rb +21 -1
  59. data/spec/support/matchers.rb +4 -4
  60. data/spec/support/shared_examples.rb +132 -94
  61. data/spec/support/webmock_stanza_matching.rb +43 -0
  62. metadata +45 -16
@@ -1,4 +1,5 @@
1
1
  require 'jubjub/errors'
2
+ require 'jubjub/helpers'
2
3
  require 'jubjub/response'
3
4
  require 'jubjub/jid'
4
5
  require 'jubjub/connection/xmpp_gateway'
@@ -7,13 +8,13 @@ require 'jubjub/muc'
7
8
  require 'jubjub/data_form'
8
9
 
9
10
  module Jubjub
10
-
11
+
11
12
  module User
12
-
13
+
13
14
  def self.included base
14
15
  base.extend ClassMethods
15
16
  end
16
-
17
+
17
18
  module ClassMethods
18
19
  def jubjub_client options = {}
19
20
  # Setup defaults
@@ -21,49 +22,49 @@ module Jubjub
21
22
  :host => '127.0.0.1',
22
23
  :port => '8000'
23
24
  }.merge options[:connection_settings] || {}
24
-
25
+
25
26
  [:jid, :password].each do |key|
26
27
  raise Jubjub::ArgumentError.new("missing :#{key} option") unless options.has_key? key
27
28
  end
28
-
29
+
29
30
  define_method "jubjub_jid" do
30
31
  Jubjub::Jid.new(send(options[:jid]))
31
32
  end
32
-
33
+
33
34
  define_method "jubjub_password" do
34
35
  send(options[:password])
35
36
  end
36
-
37
+
37
38
  define_method "jubjub_connection_settings" do
38
39
  default_connection_settings
39
40
  end
40
-
41
+
41
42
  include InstanceMethods
42
43
  end
43
44
  end
44
-
45
+
45
46
  module InstanceMethods
46
47
  def jubjub_connection
47
48
  @jubjub_connection ||= Jubjub::Connection::XmppGateway.new(jubjub_jid, jubjub_password, jubjub_connection_settings)
48
49
  end
49
-
50
+
50
51
  def authenticated?
51
52
  jubjub_connection.authenticated?
52
53
  end
53
-
54
+
54
55
  # List muc rooms
55
56
  # if no jid is specified will default to 'connection.JID_DOMAIN'
56
57
  def mucs(jid = nil)
57
58
  jid ||= "conference.#{jubjub_jid.domain}"
58
59
  Jubjub::Muc::Collection.new jid, jubjub_connection
59
60
  end
60
-
61
+
61
62
  def pubsub(jid = nil)
62
63
  jid ||= "pubsub.#{jubjub_jid.domain}"
63
64
  Jubjub::Pubsub::Collection.new jid, jubjub_connection
64
65
  end
65
66
  end
66
-
67
+
67
68
  end
68
-
69
- end
69
+
70
+ end
@@ -1,54 +1,59 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Jubjub::Connection::XmppGateway do
4
-
4
+
5
5
  before do
6
6
  @connection = Jubjub::Connection::XmppGateway.new('theozaurus@theo-template.local','secret', {:host => '127.0.0.1', :port => '8000'})
7
7
  end
8
-
8
+
9
9
  describe "muc" do
10
-
10
+
11
11
  describe "create" do
12
-
12
+
13
13
  use_vcr_cassette 'muc create', :record => :new_episodes
14
-
14
+
15
15
  it "return a Jubjub::Muc" do
16
16
  @room = @connection.muc.create( Jubjub::Jid.new 'room@conference.theo-template.local/nick' )
17
17
  @room.should be_a_kind_of_response_proxied Jubjub::Muc
18
18
  @room.jid.should == Jubjub::Jid.new( 'room@conference.theo-template.local' )
19
19
  end
20
-
20
+
21
21
  after do
22
22
  @room.destroy
23
23
  end
24
-
24
+
25
25
  end
26
-
26
+
27
27
  describe "create with configuration" do
28
-
28
+
29
29
  use_vcr_cassette 'muc create with configuration', :record => :new_episodes
30
-
30
+
31
31
  it "return a Jubjub::Muc" do
32
32
  @config = Jubjub::Muc::Configuration.new("allow_query_users" => { :type => "boolean", :value => "1", :label => "Allow users to query other users" })
33
-
33
+
34
34
  @room = @connection.muc.create( Jubjub::Jid.new( 'room@conference.theo-template.local/nick' ), @config )
35
35
  @room.should be_a_kind_of_response_proxied Jubjub::Muc
36
36
  @room.jid.should == Jubjub::Jid.new( 'room@conference.theo-template.local' )
37
37
  end
38
-
38
+
39
39
  after do
40
40
  @room.destroy
41
41
  end
42
-
42
+
43
43
  end
44
-
44
+
45
45
  describe "configuration" do
46
-
46
+
47
47
  use_vcr_cassette 'muc configuration', :record => :new_episodes
48
-
48
+
49
+ before do
50
+ @jid = Jubjub::Jid.new 'configuration@conference.theo-template.local/nick'
51
+ @room = @connection.muc.create @jid
52
+ end
53
+
49
54
  it "return a Jubjub::Muc::Configuration" do
50
- config = @connection.muc.configuration( Jubjub::Jid.new 'room@conference.theo-template.local/nick' )
51
-
55
+ config = @connection.muc.configuration @jid
56
+
52
57
  expected_config = {
53
58
  "allow_query_users" => { :type => "boolean", :value => "1", :label => "Allow users to query other users" },
54
59
  "allow_private_messages" => { :type => "boolean", :value => "1", :label => "Allow users to send private messages" },
@@ -87,72 +92,201 @@ describe Jubjub::Connection::XmppGateway do
87
92
  { :value => "100", :label => "100" },
88
93
  { :value => "200", :label => "200" }]}
89
94
  }
90
-
95
+
91
96
  config.should == Jubjub::Muc::Configuration.new(expected_config)
92
97
  end
93
-
98
+
99
+ after do
100
+ @room.destroy
101
+ end
102
+
94
103
  end
95
-
104
+
96
105
  describe "list" do
97
-
106
+
98
107
  use_vcr_cassette 'muc list', :record => :new_episodes
99
-
108
+
100
109
  before do
101
110
  @connection.muc.create Jubjub::Jid.new( 'test_1@conference.theo-template.local/nick' )
102
111
  @connection.muc.create Jubjub::Jid.new( 'test_2@conference.theo-template.local/nick' )
103
112
  end
104
-
113
+
105
114
  it "return an array of Jubjub::Muc" do
106
115
  list = @connection.muc.list( Jubjub::Jid.new 'conference.theo-template.local' )
107
116
  list.should be_a_kind_of_response_proxied Array
108
-
117
+
109
118
  list.size.should eql(2)
110
119
  list[0].should be_a_kind_of Jubjub::Muc
111
120
  list[0].jid.should == Jubjub::Jid.new( 'test_1@conference.theo-template.local' )
112
121
  list[1].should be_a_kind_of Jubjub::Muc
113
122
  list[1].jid.should == Jubjub::Jid.new( 'test_2@conference.theo-template.local' )
114
123
  end
115
-
124
+
116
125
  end
117
-
126
+
127
+ describe "retrieve_affiliations" do
128
+
129
+ use_vcr_cassette 'muc retrieve_affiliations', :record => :new_episodes
130
+
131
+ before do
132
+ @room_full = Jubjub::Jid.new( 'retrieve_affiliations@conference.theo-template.local/theozaurus' )
133
+ @room = Jubjub::Jid.new @room_full.node, @room_full.domain
134
+
135
+ @connection.muc.create @room_full
136
+ end
137
+
138
+ it "return an array of Jubjub::Muc::Affiliation" do
139
+ list = @connection.muc.retrieve_affiliations @room, 'owner'
140
+ list.should be_a_kind_of_response_proxied Array
141
+
142
+ list.size.should eql(1)
143
+ list[0].should be_a_kind_of Jubjub::Muc::Affiliation
144
+ list[0].jid.should == Jubjub::Jid.new( 'theozaurus@theo-template.local' )
145
+ list[0].role.should == nil
146
+ list[0].affiliation.should == "owner"
147
+ list[0].nick.should == nil
148
+ end
149
+
150
+ after do
151
+ @connection.muc.destroy @room
152
+ end
153
+
154
+ end
155
+
156
+ describe "modify_affiliations" do
157
+
158
+ use_vcr_cassette 'muc modify_affiliations', :record => :new_episodes
159
+
160
+ it "should return true when successful" do
161
+ room_full = Jubjub::Jid.new 'modify_affiliations_1@conference.theo-template.local/foo'
162
+ room = Jubjub::Jid.new room_full.node, room_full.domain
163
+ @connection.muc.create room_full
164
+
165
+ affiliation = muc_affiliation_factory :muc_jid => room,
166
+ :jid => 'ed@theo-template.local',
167
+ :affiliation => 'owner',
168
+ :connection => @connection
169
+
170
+ @connection.muc.modify_affiliations( room, affiliation).should equal(true)
171
+
172
+ @connection.muc.destroy room
173
+ end
174
+
175
+ it "should allow affiliations to be specified as an array" do
176
+ room_full = Jubjub::Jid.new 'modify_affiliations_2@conference.theo-template.local/foo'
177
+ room = Jubjub::Jid.new room_full.node, room_full.domain
178
+ @connection.muc.create room_full
179
+
180
+ affiliation_1 = muc_affiliation_factory :muc_jid => room,
181
+ :jid => 'ed@theo-template.local',
182
+ :affiliation => 'owner',
183
+ :connection => @connection
184
+ affiliation_2 = muc_affiliation_factory :muc_jid => room,
185
+ :jid => 'bob@theo-template.local',
186
+ :affiliation => 'member',
187
+ :connection => @connection
188
+
189
+ @connection.muc.modify_affiliations room, [affiliation_1, affiliation_2]
190
+
191
+ @connection.muc.destroy room
192
+ end
193
+
194
+ it "should allow affiliations to be specified as arguments" do
195
+ room_full = Jubjub::Jid.new 'modify_affiliations_3@conference.theo-template.local/foo'
196
+ room = Jubjub::Jid.new room_full.node, room_full.domain
197
+ @connection.muc.create room_full
198
+
199
+ affiliation_1 = muc_affiliation_factory :muc_jid => room,
200
+ :jid => 'ed@theo-template.local',
201
+ :affiliation => 'owner',
202
+ :connection => @connection
203
+ affiliation_2 = muc_affiliation_factory :muc_jid => room,
204
+ :jid => 'bob@theo-template.local',
205
+ :affiliation => 'member',
206
+ :connection => @connection
207
+
208
+ @connection.muc.modify_affiliations room, affiliation_1, affiliation_2
209
+
210
+ @connection.muc.destroy room
211
+ end
212
+
213
+ it "should return false if unsuccessful" do
214
+ room_full = Jubjub::Jid.new 'modify_affiliations_4@conference.theo-template.local/foo'
215
+ room = Jubjub::Jid.new room_full.node, room_full.domain
216
+ @connection.muc.create room_full
217
+
218
+ affiliation = muc_affiliation_factory :muc_jid => room,
219
+ :jid => 'ed@theo-template.local',
220
+ :affiliation => 'WIBBLE',
221
+ :connection => @connection
222
+
223
+ @connection.muc.modify_affiliations( room, affiliation ).should equal(false)
224
+
225
+ @connection.muc.destroy room
226
+ end
227
+
228
+ end
229
+
230
+ describe "message" do
231
+ use_vcr_cassette 'muc message', :record => :new_episodes
232
+
233
+ before do
234
+ @full_jid = Jubjub::Jid.new 'message@conference.theo-template.local/nick'
235
+ @jid = Jubjub::Jid.new 'message@conference.theo-template.local'
236
+ @connection.muc.create(@full_jid)
237
+ end
238
+
239
+ it "should send correct stanza" do
240
+ # will attempt to create new vcr cassette if the stanza is wrong
241
+ # relies on cassette being manually checked
242
+ @connection.muc.message(@jid, "Jubjub here!")
243
+ end
244
+
245
+ after do
246
+ # Just incase the room is persistent
247
+ @connection.muc.destroy(@jid)
248
+ end
249
+
250
+ end
251
+
118
252
  describe "exit" do
119
253
  use_vcr_cassette 'muc exit', :record => :new_episodes
120
-
254
+
121
255
  before do
122
256
  @full_jid = Jubjub::Jid.new 'extra@conference.theo-template.local/nick'
123
257
  @jid = Jubjub::Jid.new 'extra@conference.theo-template.local'
124
258
  @connection.muc.create(@full_jid)
125
259
  end
126
-
260
+
127
261
  it "should send correct stanza" do
128
262
  # will attempt to create new vcr cassette if the stanza is wrong
129
263
  # relies on cassette being manually checked
130
264
  @connection.muc.exit(@full_jid)
131
265
  end
132
-
266
+
133
267
  after do
134
268
  # Just incase the room is persistent
135
- @connection.muc.destroy(@jid)
269
+ @connection.muc.destroy(@jid)
136
270
  end
137
-
271
+
138
272
  end
139
-
273
+
140
274
  describe "destroy" do
141
-
275
+
142
276
  use_vcr_cassette 'muc destroy', :record => :new_episodes
143
-
277
+
144
278
  before do
145
279
  @jid = Jubjub::Jid.new 'extra@conference.theo-template.local'
146
280
  @full_jid = Jubjub::Jid.new 'extra@conference.theo-template.local/nick'
147
281
  @connection.muc.create @full_jid
148
282
  end
149
-
283
+
150
284
  it "return true" do
151
285
  @connection.muc.destroy( @jid ).should be_true
152
286
  end
153
-
287
+
154
288
  end
155
-
289
+
156
290
  end
157
-
158
- end
291
+
292
+ end
@@ -1,34 +1,34 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Jubjub::Connection::XmppGateway do
4
-
4
+
5
5
  before do
6
6
  @jid = Jubjub::Jid.new('theozaurus@theo-template.local')
7
7
  @connection = Jubjub::Connection::XmppGateway.new(@jid, 'secret', {:host => '127.0.0.1', :port => '8000'})
8
8
  end
9
-
9
+
10
10
  describe "pubsub" do
11
-
11
+
12
12
  describe "create" do
13
13
  use_vcr_cassette 'pubsub create', :record => :new_episodes
14
14
 
15
15
  it "return a Jubjub::Pubsub" do
16
16
  @pubsub = @connection.pubsub.create 'pubsub.theo-template.local', 'node_1'
17
-
17
+
18
18
  @pubsub.should be_a_kind_of_response_proxied Jubjub::Pubsub
19
19
  @pubsub.jid.should == Jubjub::Jid.new('pubsub.theo-template.local')
20
20
  @pubsub.node.should == 'node_1'
21
21
  end
22
-
22
+
23
23
  after do
24
24
  # Clean up the node
25
25
  @connection.pubsub.destroy 'pubsub.theo-template.local', 'node_1'
26
26
  end
27
27
  end
28
-
28
+
29
29
  describe "default_configuration" do
30
30
  use_vcr_cassette 'pubsub default configuration', :record => :new_episodes
31
-
31
+
32
32
  it "should return a Jubjub::Pubsub::Configuration" do
33
33
  expected_config = {
34
34
  "pubsub#deliver_payloads" => { :type => "boolean", :value => "1", :label => "Deliver payloads with event notifications" },
@@ -79,77 +79,73 @@ describe Jubjub::Connection::XmppGateway do
79
79
  { :value => "headline", :label => nil },
80
80
  { :value => "normal", :label => nil }]}
81
81
  }
82
-
82
+
83
83
  config = @connection.pubsub.default_configuration 'pubsub.theo-template.local'
84
-
84
+
85
85
  config.should be_a_kind_of_response_proxied Jubjub::Pubsub::Configuration
86
- config.should == Jubjub::Pubsub::Configuration.new( expected_config )
86
+ config.should == Jubjub::Pubsub::Configuration.new( expected_config )
87
87
  end
88
88
  end
89
-
89
+
90
90
  describe "destroy" do
91
91
  use_vcr_cassette 'pubsub destroy', :record => :new_episodes
92
-
92
+
93
93
  before do
94
94
  @connection.pubsub.create 'pubsub.theo-template.local', 'node_1'
95
95
  end
96
-
96
+
97
97
  it "should send correct stanza" do
98
98
  # will attempt to create new vcr cassette if the stanza is wrong
99
99
  # relies on cassette being manually checked
100
100
  @connection.pubsub.destroy('pubsub.theo-template.local', 'node_1').should be_true
101
101
  end
102
102
  end
103
-
103
+
104
104
  describe "purge" do
105
105
  use_vcr_cassette 'pubsub purge', :record => :new_episodes
106
-
106
+
107
107
  before do
108
108
  @connection.pubsub.create 'pubsub.theo-template.local', 'node_pubsub_purge'
109
109
  end
110
-
110
+
111
111
  it "should send correct stanza" do
112
112
  # will attempt to create new vcr cassette if the stanza is wrong
113
113
  # relies on cassette being manually checked
114
114
  @connection.pubsub.purge('pubsub.theo-template.local', 'node_pubsub_purge').should be_true
115
115
  end
116
-
116
+
117
117
  after do
118
118
  @connection.pubsub.destroy 'pubsub.theo-template.local', 'node_pubsub_purge'
119
119
  end
120
120
  end
121
-
121
+
122
122
  describe "list" do
123
-
123
+
124
124
  use_vcr_cassette 'pubsub list', :record => :new_episodes
125
-
125
+
126
126
  before do
127
127
  @connection.pubsub.create 'pubsub.theo-template.local', 'node_1'
128
128
  @connection.pubsub.create 'pubsub.theo-template.local', 'node_2'
129
129
  end
130
-
130
+
131
131
  it "return an array of Jubjub::Muc" do
132
132
  list = @connection.pubsub.list 'pubsub.theo-template.local'
133
133
  list.should be_a_kind_of_response_proxied Array
134
-
135
- list.size.should eql(2)
136
- list[0].should be_a_kind_of Jubjub::Pubsub
137
- list[0].node.should == 'node_1'
138
- list[1].should be_a_kind_of Jubjub::Pubsub
139
- list[1].node.should == 'node_2'
140
- end
141
-
134
+
135
+ list.map{|item| item.node }.to_set.should == ['node_1', 'node_2'].to_set
136
+ end
137
+
142
138
  after do
143
139
  @connection.pubsub.destroy 'pubsub.theo-template.local', 'node_1'
144
140
  @connection.pubsub.destroy 'pubsub.theo-template.local', 'node_2'
145
141
  end
146
-
142
+
147
143
  end
148
-
144
+
149
145
  describe "destroy with redirect" do
150
146
  use_vcr_cassette 'pubsub destroy with redirect', :record => :new_episodes
151
-
152
- before do
147
+
148
+ before do
153
149
  @connection.pubsub.create 'pubsub.theo-template.local', 'node_1'
154
150
  @connection.pubsub.create 'pubsub.theo-template.local', 'node_2'
155
151
  end
@@ -157,22 +153,22 @@ describe Jubjub::Connection::XmppGateway do
157
153
  it "should support redirects" do
158
154
  @connection.pubsub.destroy('pubsub.theo-template.local', 'node_1', 'pubsub.theo-template.local', 'node_2').should be_true
159
155
  end
160
-
156
+
161
157
  after do
162
158
  @connection.pubsub.destroy 'pubsub.theo-template.local', 'node_2'
163
159
  end
164
160
  end
165
-
161
+
166
162
  describe "subscribe" do
167
163
  use_vcr_cassette 'pubsub subscribe', :record => :new_episodes
168
-
164
+
169
165
  before do
170
166
  @connection.pubsub.create 'pubsub.theo-template.local', 'node_1'
171
167
  end
172
-
168
+
173
169
  it "return a Jubjub::Pubsub::Subscription" do
174
170
  @subscription = @connection.pubsub.subscribe( 'pubsub.theo-template.local', 'node_1' )
175
-
171
+
176
172
  @subscription.should be_a_kind_of_response_proxied Jubjub::Pubsub::Subscription
177
173
  @subscription.jid.should == Jubjub::Jid.new('pubsub.theo-template.local')
178
174
  @subscription.node.should == 'node_1'
@@ -180,232 +176,232 @@ describe Jubjub::Connection::XmppGateway do
180
176
  @subscription.subscription.should == "subscribed"
181
177
  @subscription.subid.should be_kind_of(String)
182
178
  end
183
-
179
+
184
180
  after do
185
181
  # Clean up the node
186
182
  @connection.pubsub.destroy 'pubsub.theo-template.local', 'node_1'
187
183
  end
188
-
184
+
189
185
  end
190
-
186
+
191
187
  describe "unsubscribe" do
192
-
188
+
193
189
  use_vcr_cassette 'pubsub unsubscribe', :record => :new_episodes
194
-
190
+
195
191
  before do
196
192
  @connection.pubsub.create 'pubsub.theo-template.local', 'node_1'
197
193
  @connection.pubsub.subscribe 'pubsub.theo-template.local', 'node_1'
198
194
  end
199
-
195
+
200
196
  it "return true" do
201
197
  @connection.pubsub.unsubscribe( 'pubsub.theo-template.local', 'node_1' ).should be_true
202
198
  end
203
-
199
+
204
200
  after do
205
201
  # Clean up the node
206
202
  @connection.pubsub.destroy 'pubsub.theo-template.local', 'node_1'
207
203
  end
208
-
204
+
209
205
  end
210
-
206
+
211
207
  describe "unsubscribe with subid" do
212
208
  use_vcr_cassette 'pubsub unsubscribe with subid', :record => :new_episodes
213
-
209
+
214
210
  before do
215
211
  @connection.pubsub.create 'pubsub.theo-template.local', 'node_1'
216
212
  @subscription = @connection.pubsub.subscribe 'pubsub.theo-template.local', 'node_1'
217
213
  end
218
-
214
+
219
215
  it "return true" do
220
216
  @connection.pubsub.unsubscribe( 'pubsub.theo-template.local', 'node_1', @subscription.subid ).should be_true
221
217
  end
222
-
218
+
223
219
  after do
224
220
  # Clean up the node
225
221
  @connection.pubsub.destroy 'pubsub.theo-template.local', 'node_1'
226
222
  end
227
-
223
+
228
224
  end
229
-
225
+
230
226
  describe "publish" do
231
227
  use_vcr_cassette 'pubsub setup node', :record => :new_episodes
232
-
228
+
233
229
  before do
234
230
  @connection.pubsub.create 'pubsub.theo-template.local', 'node_1'
235
231
  end
236
-
232
+
237
233
  describe "with id" do
238
234
  use_vcr_cassette 'pubsub publish with id', :record => :new_episodes
239
-
235
+
240
236
  it "should return a Jubjub::Pubsub::Item" do
241
237
  i = @connection.pubsub.publish 'pubsub.theo-template.local', 'node_1', Jubjub::DataForm.new, '123'
242
238
  i.should be_a_kind_of_response_proxied Jubjub::Pubsub::Item
243
239
  i.item_id.should == '123'
244
- i.data.should == "<x xmlns=\"jabber:x:data\" type=\"submit\"/>"
240
+ i.data.should be_equivalent_to('<x xmlns="jabber:x:data" type="submit"/>')
245
241
  end
246
-
242
+
247
243
  end
248
-
244
+
249
245
  describe "with string payload" do
250
246
  use_vcr_cassette 'pubsub publish with string payload', :record => :new_episodes
251
-
247
+
252
248
  it "should return a Jubjub::Pubsub::Item" do
253
- item = "<x xmlns=\"jabber:x:data\" type=\"submit\"><field var=\"foo\"><value>true</value></field></x>"
249
+ item = '<x xmlns="jabber:x:data" type="submit"><field var="foo"><value>true</value></field></x>'
254
250
  i = @connection.pubsub.publish 'pubsub.theo-template.local', 'node_1', item
255
251
  i.should be_a_kind_of_response_proxied Jubjub::Pubsub::Item
256
252
  i.item_id.should be_a_kind_of String
257
- i.data.should == "<x xmlns=\"jabber:x:data\" type=\"submit\">\n <field var=\"foo\">\n <value>true</value>\n </field>\n</x>"
253
+ i.data.should be_equivalent_to( item )
258
254
  end
259
-
255
+
260
256
  end
261
-
257
+
262
258
  describe "with dataform payload" do
263
259
  use_vcr_cassette 'pubsub publish with dataform payload', :record => :new_episodes
264
-
260
+
265
261
  it "should return a Jubjub::Pubsub::Item" do
266
262
  i = @connection.pubsub.publish 'pubsub.theo-template.local', 'node_1', Jubjub::DataForm.new({ :foo => {:type => "boolean", :value => true }})
267
263
  i.should be_a_kind_of_response_proxied Jubjub::Pubsub::Item
268
264
  i.item_id.should be_a_kind_of String
269
- i.data.should == "<x xmlns=\"jabber:x:data\" type=\"submit\">\n <field var=\"foo\">\n <value>true</value>\n </field>\n</x>"
265
+ i.data.should be_equivalent_to('<x xmlns="jabber:x:data" type="submit"><field var="foo" type="boolean"><value>true</value></field></x>')
270
266
  end
271
-
267
+
272
268
  end
273
-
269
+
274
270
  after do
275
271
  # Clean up the node
276
272
  @connection.pubsub.destroy 'pubsub.theo-template.local', 'node_1'
277
273
  end
278
274
 
279
275
  end
280
-
276
+
281
277
  describe "retract" do
282
278
  use_vcr_cassette 'pubsub retract', :record => :new_episodes
283
-
279
+
284
280
  before do
285
281
  @connection.pubsub.create 'pubsub.theo-template.local', 'node_pubsub_retract'
286
282
  end
287
-
283
+
288
284
  it "should return true when successful" do
289
285
  item = @connection.pubsub.publish 'pubsub.theo-template.local', 'node_pubsub_retract', Jubjub::DataForm.new()
290
-
286
+
291
287
  @connection.pubsub.retract( 'pubsub.theo-template.local', 'node_pubsub_retract', item.item_id ).should be_true
292
288
  end
293
-
289
+
294
290
  it "should return false when not successful" do
295
- @connection.pubsub.retract( 'pubsub.theo-template.local', 'node_pubsub_retract', "wibble" ).should equal(false)
291
+ @connection.pubsub.retract( 'pubsub.theo-template.local', 'node_pubsub_retract', "wibble" ).should equal(false)
296
292
  end
297
-
293
+
298
294
  after do
299
295
  # Clean up the node
300
296
  @connection.pubsub.destroy 'pubsub.theo-template.local', 'node_pubsub_retract'
301
297
  end
302
298
  end
303
-
299
+
304
300
  describe "retrieve_items" do
305
301
  use_vcr_cassette 'pubsub retrieve items', :record => :new_episodes
306
-
302
+
307
303
  before do
308
304
  @connection.pubsub.create 'pubsub.theo-template.local', 'node_retrieve_items'
309
305
  @connection.pubsub.publish 'pubsub.theo-template.local', 'node_retrieve_items', Jubjub::DataForm.new(:bar => {:type => :boolean, :value => true}), 'efg'
310
306
  @connection.pubsub.publish 'pubsub.theo-template.local', 'node_retrieve_items', Jubjub::DataForm.new(:foo => {:type => :boolean, :value => false}), 'abc'
311
307
  end
312
-
308
+
313
309
  it "should return array of Pubsub::Item when successful" do
314
310
  expected = [
315
- Jubjub::Pubsub::Item.new( 'pubsub.theo-template.local', 'node_retrieve_items', 'abc', "<x xmlns=\"jabber:x:data\" type=\"submit\">\n <field var=\"foo\">\n <value>false</value>\n </field>\n </x>", @connection ),
316
- Jubjub::Pubsub::Item.new( 'pubsub.theo-template.local', 'node_retrieve_items', 'efg', "<x xmlns=\"jabber:x:data\" type=\"submit\">\n <field var=\"bar\">\n <value>true</value>\n </field>\n </x>", @connection )
311
+ Jubjub::Pubsub::Item.new( 'pubsub.theo-template.local', 'node_retrieve_items', 'abc', "<x xmlns=\"jabber:x:data\" type=\"submit\">\n <field type=\"boolean\" var=\"foo\">\n <value>false</value>\n </field>\n </x>", @connection ),
312
+ Jubjub::Pubsub::Item.new( 'pubsub.theo-template.local', 'node_retrieve_items', 'efg', "<x xmlns=\"jabber:x:data\" type=\"submit\">\n <field type=\"boolean\" var=\"bar\">\n <value>true</value>\n </field>\n </x>", @connection )
317
313
  ]
318
-
314
+
319
315
  @connection.pubsub.retrieve_items( 'pubsub.theo-template.local', 'node_retrieve_items' ).should == expected
320
316
  end
321
-
317
+
322
318
  it "should return empty array when not successful" do
323
319
  @connection.pubsub.retrieve_items( 'pubsub.theo-template.local', 'node_retrieve_items_wibble' ).should == []
324
320
  end
325
-
321
+
326
322
  after do
327
323
  # Clean up the node
328
324
  @connection.pubsub.destroy 'pubsub.theo-template.local', 'node_retrieve_items'
329
325
  end
330
326
  end
331
-
327
+
332
328
  describe "retrieve_affiliations" do
333
329
  use_vcr_cassette 'pubsub retrieve affiliations', :record => :new_episodes
334
-
330
+
335
331
  it "should return array of Pubsub::Affiliation when successful" do
336
332
  @connection.pubsub.create 'pubsub.theo-template.local', 'node_retrieve_affiliations'
337
-
333
+
338
334
  expected = [
339
335
  Jubjub::Pubsub::Affiliation.new(
340
336
  'pubsub.theo-template.local',
341
337
  'node_retrieve_affiliations',
342
338
  Jubjub::Jid.new('theozaurus@theo-template.local'),
343
339
  'owner',
344
- @connection
340
+ @connection
345
341
  )
346
342
  ]
347
-
343
+
348
344
  @connection.pubsub.retrieve_affiliations( 'pubsub.theo-template.local', 'node_retrieve_affiliations' ).should == expected
349
345
 
350
346
  # Clean up the node
351
347
  @connection.pubsub.destroy 'pubsub.theo-template.local', 'node_retrieve_affiliations'
352
348
  end
353
-
349
+
354
350
  it "should return empty array when not successful" do
355
351
  @connection.pubsub.retrieve_affiliations( 'pubsub.theo-template.local', 'made-up' ).should == []
356
352
  end
357
353
  end
358
-
354
+
359
355
  describe "modify_affiliations" do
360
356
  use_vcr_cassette 'pubsub modify affiliations', :record => :new_episodes
361
-
357
+
362
358
  it "should return true when successful" do
363
359
  pubsub = 'pubsub.theo-template.local'
364
360
  node = 'node_modify_affiliations_1'
365
361
  @connection.pubsub.create pubsub, node
366
-
362
+
367
363
  affiliation = Jubjub::Pubsub::Affiliation.new pubsub, node, 'theozaurus@theo-template.local', 'owner', @connection
368
364
  @connection.pubsub.modify_affiliations( pubsub, node, affiliation).should equal(true)
369
-
365
+
370
366
  @connection.pubsub.destroy pubsub, node
371
367
  end
372
-
368
+
373
369
  it "should allow affiliations to be specified as an array" do
374
370
  pubsub = 'pubsub.theo-template.local'
375
371
  node = 'node_modify_affiliations_2'
376
372
  @connection.pubsub.create pubsub, node
377
-
373
+
378
374
  affiliation_1 = Jubjub::Pubsub::Affiliation.new pubsub, node, 'theozaurus@theo-template.local','owner', @connection
379
375
  affiliation_2 = Jubjub::Pubsub::Affiliation.new pubsub, node, 'trex@theo-template.local', 'publisher', @connection
380
376
  @connection.pubsub.modify_affiliations pubsub, node, [affiliation_1, affiliation_2]
381
-
377
+
382
378
  @connection.pubsub.destroy pubsub, node
383
379
  end
384
-
380
+
385
381
  it "should allow affiliations to be specified as arguments" do
386
382
  pubsub = 'pubsub.theo-template.local'
387
383
  node = 'node_modify_affiliations_3'
388
384
  @connection.pubsub.create pubsub, node
389
-
385
+
390
386
  affiliation_1 = Jubjub::Pubsub::Affiliation.new pubsub, node, 'theozaurus@theo-template.local', 'owner', @connection
391
387
  affiliation_2 = Jubjub::Pubsub::Affiliation.new pubsub, node, 'trex@theo-template.local', 'publisher', @connection
392
388
  @connection.pubsub.modify_affiliations pubsub, node, affiliation_1, affiliation_2
393
-
389
+
394
390
  @connection.pubsub.destroy pubsub, node
395
391
  end
396
-
392
+
397
393
  it "should return false if unsuccessful" do
398
394
  pubsub = 'pubsub.theo-template.local'
399
395
  node = 'node_modify_affiliations_4'
400
396
  @connection.pubsub.create pubsub, node
401
-
397
+
402
398
  affiliation = Jubjub::Pubsub::Affiliation.new pubsub, node, 'theozaurus@theo-template.local', 'WIBBLE', @connection
403
399
  @connection.pubsub.modify_affiliations( pubsub, node, affiliation ).should equal(false)
404
-
400
+
405
401
  @connection.pubsub.destroy pubsub, node
406
402
  end
407
403
  end
408
-
404
+
409
405
  end
410
-
411
- end
406
+
407
+ end