jubjub 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
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