bigbluebutton-api-ruby 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,86 @@
1
+ require 'spec_helper'
2
+
3
+ describe BigBlueButton::BigBlueButtonConfigLayout do
4
+
5
+ let(:default_xml) { # a simplified layouts.xml file
6
+ "<layouts>
7
+ <layout name=\"Default\" default=\"true\">
8
+ <window name=\"NotesWindow\" hidden=\"true\" width=\"0.7\" height=\"1\" x=\"0\" y=\"0\" draggable=\"false\" resizable=\"false\"/>
9
+ </layout>
10
+ <layout name=\"Video Chat\">
11
+ <window name=\"NotesWindow\" hidden=\"true\" width=\"0.7\" height=\"1\" x=\"0\" y=\"0\" draggable=\"false\" resizable=\"false\"/>
12
+ </layout>
13
+ </layouts>"
14
+ }
15
+
16
+ describe "#initialize" do
17
+ context "with a valid xml" do
18
+ before {
19
+ XmlSimple.should_receive(:xml_in)
20
+ .with(default_xml, { 'ForceArray' => false, 'KeepRoot' => true })
21
+ .and_return("internal_xml")
22
+ }
23
+ subject { BigBlueButton::BigBlueButtonConfigLayout.new(default_xml) }
24
+ it("creates and stores a correct internal xml") { subject.xml.should eql("internal_xml") }
25
+ end
26
+
27
+ context "with an empty string as xml" do
28
+ it "throws an exception" do
29
+ expect {
30
+ BigBlueButton::BigBlueButtonConfigLayout.new("")
31
+ }.to raise_error(BigBlueButton::BigBlueButtonException)
32
+ end
33
+ end
34
+
35
+ context "throws any exception thrown by XmlSimple" do
36
+ before {
37
+ XmlSimple.should_receive(:xml_in) { raise Exception }
38
+ }
39
+ it {
40
+ expect {
41
+ BigBlueButton::BigBlueButtonConfigLayout.new(default_xml)
42
+ }.to raise_error(BigBlueButton::BigBlueButtonException)
43
+ }
44
+ end
45
+ end
46
+
47
+ describe "#get_available_layouts" do
48
+ subject { target.get_available_layouts }
49
+
50
+ context "returns nil if the xml has no <layouts>" do
51
+ let(:target) { BigBlueButton::BigBlueButtonConfigLayout.new("<test></test>") }
52
+ it { should be_nil }
53
+ end
54
+
55
+ context "returns nil if the xml has no <layouts><layout>" do
56
+ let(:target) { BigBlueButton::BigBlueButtonConfigLayout.new("<layouts></layouts>") }
57
+ it { should be_nil }
58
+ end
59
+
60
+ context "returns the correct available layout names" do
61
+ let(:target) { BigBlueButton::BigBlueButtonConfigLayout.new(default_xml) }
62
+ it { should be_instance_of(Array) }
63
+ it { subject.count.should be(2) }
64
+ it { should include("Default") }
65
+ it { should include("Video Chat") }
66
+ end
67
+
68
+ context "doesn't return duplicated layouts" do
69
+ let(:layouts_xml) {
70
+ "<layouts>
71
+ <layout name=\"Default\" default=\"true\">
72
+ <window name=\"NotesWindow\" hidden=\"true\" width=\"0.7\" height=\"1\" x=\"0\" y=\"0\" draggable=\"false\" resizable=\"false\"/>
73
+ </layout>
74
+ <layout name=\"Default\">
75
+ <window name=\"NotesWindow\" hidden=\"true\" width=\"0.7\" height=\"1\" x=\"0\" y=\"0\" draggable=\"false\" resizable=\"false\"/>
76
+ </layout>
77
+ </layouts>"
78
+ }
79
+ let(:target) { BigBlueButton::BigBlueButtonConfigLayout.new(layouts_xml) }
80
+ it { should be_instance_of(Array) }
81
+ it { subject.count.should be(1) }
82
+ it { should include("Default") }
83
+ end
84
+ end
85
+
86
+ end
@@ -0,0 +1,276 @@
1
+ require 'spec_helper'
2
+
3
+ describe BigBlueButton::BigBlueButtonConfigXml do
4
+
5
+ let(:default_xml) { # a simplified config.xml file
6
+ "<config>
7
+ <help url=\"http://test-server.org/help.html\"/>
8
+ <modules>
9
+ <module name=\"LayoutModule\" url=\"http://test-server.org/client/LayoutModule.swf?v=4357\"
10
+ uri=\"rtmp://test-server.org/bigbluebutton\"
11
+ layoutConfig=\"http://test-server.org/client/conf/layout.xml\"
12
+ enableEdit=\"false\"/>
13
+ </modules>
14
+ </config>"
15
+ }
16
+
17
+ let(:complex_xml) {
18
+ "<config>\
19
+ <localeversion suppressWarning=\"false\">0.8</localeversion>\
20
+ <version>4357-2014-02-06</version>\
21
+ <help url=\"http://test-server.org/help.html\"/>\
22
+ <javaTest url=\"http://test-server.org/testjava.html\"/>\
23
+ <modules>
24
+ <module name=\"ChatModule\" url=\"http://test-server.org/client/ChatModule.swf\"
25
+ uri=\"rtmp://test-server.org/bigbluebutton\"
26
+ dependsOn=\"UsersModule\" translationOn=\"false\"
27
+ translationEnabled=\"false\" privateEnabled=\"true\"
28
+ position=\"top-right\" baseTabIndex=\"701\"/>
29
+ <module name=\"UsersModule\" url=\"http://test-server.org/client/UsersModule.swf\"
30
+ uri=\"rtmp://test-server.org/bigbluebutton\"
31
+ allowKickUser=\"true\" enableRaiseHand=\"true\"
32
+ enableSettingsButton=\"true\" baseTabIndex=\"301\"/>
33
+ <module name=\"LayoutModule\" url=\"http://test-server.org/client/LayoutModule.swf?v=4357\"
34
+ uri=\"rtmp://test-server.org/bigbluebutton\"
35
+ layoutConfig=\"http://test-server.org/client/conf/layout.xml\"
36
+ enableEdit=\"false\"/>
37
+ </modules>
38
+ </config>"
39
+ }
40
+
41
+ describe "#initialize" do
42
+ context "with a valid xml" do
43
+ before {
44
+ XmlSimple.should_receive(:xml_in)
45
+ .with(default_xml, { 'ForceArray' => false, 'KeepRoot' => true })
46
+ .and_return("response")
47
+ }
48
+ subject { BigBlueButton::BigBlueButtonConfigXml.new(default_xml) }
49
+ it("creates and stores a correct internal xml") { subject.xml.should eql("response") }
50
+ end
51
+
52
+ context "with an empty string as xml" do
53
+ it "throws an exception" do
54
+ expect {
55
+ BigBlueButton::BigBlueButtonConfigXml.new("")
56
+ }.to raise_error(BigBlueButton::BigBlueButtonException)
57
+ end
58
+ end
59
+
60
+ context "throws any exception thrown by XmlSimple" do
61
+ before {
62
+ XmlSimple.should_receive(:xml_in) { raise Exception }
63
+ }
64
+ it {
65
+ expect {
66
+ BigBlueButton::BigBlueButtonConfigXml.new(default_xml)
67
+ }.to raise_error(BigBlueButton::BigBlueButtonException)
68
+ }
69
+ end
70
+ end
71
+
72
+ describe "#get_attribute" do
73
+ let(:target) { BigBlueButton::BigBlueButtonConfigXml.new(default_xml) }
74
+
75
+ context "searching inside a module" do
76
+ context "if the xml has no <config>" do
77
+ let(:target) { BigBlueButton::BigBlueButtonConfigXml.new("<any></any>") }
78
+ subject { target.get_attribute("LayoutModule", "layoutConfig") }
79
+ it { should be_nil }
80
+ end
81
+
82
+ context "if the xml has no <config><modules>" do
83
+ let(:target) { BigBlueButton::BigBlueButtonConfigXml.new("<config></config>") }
84
+ subject { target.get_attribute("LayoutModule", "layoutConfig") }
85
+ it { should be_nil }
86
+ end
87
+
88
+ context "if the xml has no <config><modules><module>" do
89
+ let(:target) { BigBlueButton::BigBlueButtonConfigXml.new("<config><modules></modules></config>") }
90
+ subject { target.get_attribute("LayoutModule", "layoutConfig") }
91
+ it { should be_nil }
92
+ end
93
+
94
+ context "if the module and attribute are found" do
95
+ subject { target.get_attribute("LayoutModule", "layoutConfig") }
96
+ it { should eql("http://test-server.org/client/conf/layout.xml") }
97
+ end
98
+
99
+ context "if the module is not found" do
100
+ subject { target.get_attribute("InexistentModule", "layoutConfig") }
101
+ it { should be_nil }
102
+ end
103
+
104
+ context "if the attribute is not found" do
105
+ subject { target.get_attribute("LayoutModule", "inexistentAttribute") }
106
+ it { should be_nil }
107
+ end
108
+
109
+ # just to make sure it won't break in a more complete config.xml
110
+ context "works with a complex xml" do
111
+ let(:target) { BigBlueButton::BigBlueButtonConfigXml.new(complex_xml) }
112
+ subject { target.get_attribute("LayoutModule", "layoutConfig") }
113
+ it { should eql("http://test-server.org/client/conf/layout.xml") }
114
+ end
115
+ end
116
+
117
+ context "searching outside a module" do
118
+ context "if the xml has no <config>" do
119
+ let(:target) { BigBlueButton::BigBlueButtonConfigXml.new("<any></any>") }
120
+ subject { target.get_attribute("help", "url", false) }
121
+ it { should be_nil }
122
+ end
123
+
124
+ context "if the tag and attribute are found" do
125
+ subject { target.get_attribute("help", "url", false) }
126
+ it { should eql("http://test-server.org/help.html") }
127
+ end
128
+
129
+ context "if the tag is not found" do
130
+ subject { target.get_attribute("inexistent", "url", false) }
131
+ it { should be_nil }
132
+ end
133
+
134
+ context "if the attribute is not found" do
135
+ subject { target.get_attribute("help", "inexistent", false) }
136
+ it { should be_nil }
137
+ end
138
+
139
+ # just to make sure it won't break in a more complete config.xml
140
+ context "works with a complex xml" do
141
+ let(:target) { BigBlueButton::BigBlueButtonConfigXml.new(complex_xml) }
142
+ subject { target.get_attribute("help", "url", false) }
143
+ it { should eql("http://test-server.org/help.html") }
144
+ end
145
+ end
146
+ end
147
+
148
+ describe "#set_attribute" do
149
+ let(:target) { BigBlueButton::BigBlueButtonConfigXml.new(default_xml) }
150
+
151
+ context "setting an attribute inside a module" do
152
+ context "if the xml has no <config>" do
153
+ let(:target) { BigBlueButton::BigBlueButtonConfigXml.new("<any></any>") }
154
+ subject { target.set_attribute("LayoutModule", "layoutConfig", "value") }
155
+ it { should be_nil }
156
+ end
157
+
158
+ context "if the xml has no <config><modules>" do
159
+ let(:target) { BigBlueButton::BigBlueButtonConfigXml.new("<config></config>") }
160
+ subject { target.set_attribute("LayoutModule", "layoutConfig", "value") }
161
+ it { should be_nil }
162
+ end
163
+
164
+ context "if the xml has no <config><modules><module>" do
165
+ let(:target) { BigBlueButton::BigBlueButtonConfigXml.new("<config><modules></modules></config>") }
166
+ subject { target.set_attribute("LayoutModule", "layoutConfig", "value") }
167
+ it { should be_nil }
168
+ end
169
+
170
+ context "if the module and attribute are found" do
171
+ before(:each) {
172
+ target.set_attribute("LayoutModule", "layoutConfig", "value").should eql("value")
173
+ }
174
+ it { target.get_attribute("LayoutModule", "layoutConfig").should eql("value") }
175
+ end
176
+
177
+ context "if the module is not found" do
178
+ subject { target.set_attribute("InexistentModule", "layoutConfig", "value") }
179
+ it { should be_nil }
180
+ end
181
+
182
+ context "if the attribute is not found" do
183
+ subject { target.set_attribute("LayoutModule", "inexistentAttribute", "value") }
184
+ it { should be_nil }
185
+ end
186
+
187
+ # just to make sure it won't break in a more complete config.xml
188
+ context "works with a complex xml" do
189
+ let(:target) { BigBlueButton::BigBlueButtonConfigXml.new(complex_xml) }
190
+ before(:each) {
191
+ target.set_attribute("LayoutModule", "layoutConfig", "value").should eql("value")
192
+ }
193
+ it { target.get_attribute("LayoutModule", "layoutConfig").should eql("value") }
194
+ end
195
+ end
196
+
197
+ context "setting an attribute outside of a module" do
198
+ context "if the xml has no <config>" do
199
+ let(:target) { BigBlueButton::BigBlueButtonConfigXml.new("<any></any>") }
200
+ subject { target.set_attribute("help", "url", "value", false) }
201
+ it { should be_nil }
202
+ end
203
+
204
+ context "if the module and attribute are found" do
205
+ before(:each) {
206
+ target.set_attribute("help", "url", "value", false).should eql("value")
207
+ }
208
+ it { target.get_attribute("help", "url", false).should eql("value") }
209
+ end
210
+
211
+ context "if the module is not found" do
212
+ subject { target.set_attribute("InexistentModule", "url", "value", false) }
213
+ it { should be_nil }
214
+ end
215
+
216
+ context "if the attribute is not found" do
217
+ subject { target.set_attribute("help", "inexistentAttribute", "value", false) }
218
+ it { should be_nil }
219
+ end
220
+
221
+ # just to make sure it won't break in a more complete config.xml
222
+ context "works with a complex xml" do
223
+ let(:target) { BigBlueButton::BigBlueButtonConfigXml.new(complex_xml) }
224
+ before(:each) {
225
+ target.set_attribute("help", "url", "value", false).should eql("value")
226
+ }
227
+ it { target.get_attribute("help", "url", false).should eql("value") }
228
+ end
229
+ end
230
+
231
+ end
232
+
233
+ describe "#as_string" do
234
+ context "for a simple xml" do
235
+ let(:target) { BigBlueButton::BigBlueButtonConfigXml.new(default_xml) }
236
+ subject { target.as_string }
237
+ it {
238
+ # it is the same XML as `default_xml`, just formatted slightly differently
239
+ expected = "<config><help url=\"http://test-server.org/help.html\" /><modules><module name=\"LayoutModule\" url=\"http://test-server.org/client/LayoutModule.swf?v=4357\" uri=\"rtmp://test-server.org/bigbluebutton\" layoutConfig=\"http://test-server.org/client/conf/layout.xml\" enableEdit=\"false\" /></modules></config>"
240
+ should eql(expected)
241
+ }
242
+ end
243
+
244
+ context "for a complex xml" do
245
+ let(:target) { BigBlueButton::BigBlueButtonConfigXml.new(complex_xml) }
246
+ subject { target.as_string }
247
+ it {
248
+ # it is the same XML as `default_xml`, just formatted slightly differently
249
+ expected = "<config version=\"4357-2014-02-06\"><localeversion suppressWarning=\"false\">0.8</localeversion><help url=\"http://test-server.org/help.html\" /><javaTest url=\"http://test-server.org/testjava.html\" /><modules><module name=\"ChatModule\" url=\"http://test-server.org/client/ChatModule.swf\" uri=\"rtmp://test-server.org/bigbluebutton\" dependsOn=\"UsersModule\" translationOn=\"false\" translationEnabled=\"false\" privateEnabled=\"true\" position=\"top-right\" baseTabIndex=\"701\" /><module name=\"UsersModule\" url=\"http://test-server.org/client/UsersModule.swf\" uri=\"rtmp://test-server.org/bigbluebutton\" allowKickUser=\"true\" enableRaiseHand=\"true\" enableSettingsButton=\"true\" baseTabIndex=\"301\" /><module name=\"LayoutModule\" url=\"http://test-server.org/client/LayoutModule.swf?v=4357\" uri=\"rtmp://test-server.org/bigbluebutton\" layoutConfig=\"http://test-server.org/client/conf/layout.xml\" enableEdit=\"false\" /></modules></config>"
250
+ should eql(expected)
251
+ }
252
+ end
253
+ end
254
+
255
+ describe "#is_modified?" do
256
+ let(:target) { BigBlueButton::BigBlueButtonConfigXml.new(default_xml) }
257
+
258
+ context "before any attribute is set" do
259
+ it { target.is_modified?.should be_false }
260
+ end
261
+
262
+ context "after setting an attribute" do
263
+ before(:each) { target.set_attribute("LayoutModule", "layoutConfig", "value") }
264
+ it { target.is_modified?.should be_true }
265
+ end
266
+
267
+ context "if an attribute is set to the same value it already had" do
268
+ before(:each) {
269
+ value = target.get_attribute("LayoutModule", "layoutConfig")
270
+ target.set_attribute("LayoutModule", "layoutConfig", value)
271
+ }
272
+ it { target.is_modified?.should be_false }
273
+ end
274
+ end
275
+
276
+ end
@@ -70,10 +70,17 @@ describe BigBlueButton::BigBlueButtonFormatter do
70
70
  end
71
71
 
72
72
  describe "#to_datetime" do
73
- let(:hash) { { :param1 => "Thu Sep 01 17:51:42 UTC 2011", :param2 => "Thu Sep 08",
74
- :param3 => 1315254777880, :param4 => "1315254777880",
75
- :param5 => "0", :param6 => 0,
76
- :param7 => "NULL", :param8 => nil } }
73
+ let(:hash) {
74
+ { :param1 => "Thu Sep 01 17:51:42 UTC 2011",
75
+ :param2 => "Thu Sep 08",
76
+ :param3 => 1315254777880,
77
+ :param4 => "1315254777880",
78
+ :param5 => "0",
79
+ :param6 => 0,
80
+ :param7 => "NULL",
81
+ :param8 => nil
82
+ }
83
+ }
77
84
  let(:formatter) { BigBlueButton::BigBlueButtonFormatter.new(hash) }
78
85
  before {
79
86
  formatter.to_datetime(:param1)
@@ -201,17 +208,25 @@ describe BigBlueButton::BigBlueButtonFormatter do
201
208
 
202
209
  describe ".format_meeting" do
203
210
  let(:hash) {
204
- { :meetingID => 123, :moderatorPW => 111, :attendeePW => 222,
205
- :hasBeenForciblyEnded => "FALSE", :running => "TRUE", :createTime => "123456789" }
211
+ { :meetingID => 123, :meetingName => 123, :moderatorPW => 111, :attendeePW => 222,
212
+ :hasBeenForciblyEnded => "FALSE", :running => "TRUE", :createTime => "123456789",
213
+ :dialNumber => 1234567890, :voiceBridge => "12345",
214
+ :participantCount => "10", :listenerCount => "3", :videoCount => "5" }
206
215
  }
207
216
 
208
217
  subject { BigBlueButton::BigBlueButtonFormatter.format_meeting(hash) }
209
218
  it { subject[:meetingID].should == "123" }
219
+ it { subject[:meetingName].should == "123" }
210
220
  it { subject[:moderatorPW].should == "111" }
211
221
  it { subject[:attendeePW].should == "222" }
212
222
  it { subject[:hasBeenForciblyEnded].should == false }
213
223
  it { subject[:running].should == true }
214
224
  it { subject[:createTime].should == 123456789 }
225
+ it { subject[:voiceBridge].should == 12345 }
226
+ it { subject[:dialNumber].should == "1234567890" }
227
+ it { subject[:participantCount].should == 10 }
228
+ it { subject[:listenerCount].should == 3 }
229
+ it { subject[:videoCount].should == 5 }
215
230
  end
216
231
 
217
232
  describe ".format_attendee" do
@@ -282,6 +297,13 @@ describe BigBlueButton::BigBlueButtonFormatter do
282
297
  it { subject.should == { :objects => [] } }
283
298
  end
284
299
 
300
+ context "when the target key doesn't exist in the hash" do
301
+ let(:hash) { { } }
302
+ before { formatter.hash = hash }
303
+ subject { formatter.flatten_objects(:objects, :object) }
304
+ it { subject.should == { :objects => [] } } # adds the one the doesn't exist
305
+ end
306
+
285
307
  context "when there's only one object in the list" do
286
308
  let(:object_hash) { { :id => 1 } }
287
309
  let(:hash) { { :objects => { :object => object_hash } } }
@@ -1,12 +1,12 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Hash do
3
+ describe BigBlueButton::BigBlueButtonHash do
4
4
 
5
5
  describe ".from_xml" do
6
6
  it "simple example" do
7
7
  xml = "<response><returncode>1</returncode></response>"
8
8
  hash = { :returncode => "1" }
9
- Hash.from_xml(xml).should == hash
9
+ BigBlueButton::BigBlueButtonHash.from_xml(xml).should == hash
10
10
  end
11
11
 
12
12
  it "maintains all values as strings" do
@@ -16,7 +16,7 @@ describe Hash do
16
16
  " <node3>true</node3>" \
17
17
  "</parent>"
18
18
  hash = { :node1 => "1", :node2 => "string", :node3 => "true" }
19
- Hash.from_xml(xml).should == hash
19
+ BigBlueButton::BigBlueButtonHash.from_xml(xml).should == hash
20
20
  end
21
21
 
22
22
  it "works for xmls with multiple levels" do
@@ -28,7 +28,7 @@ describe Hash do
28
28
  " </node1>" \
29
29
  "</parent>"
30
30
  hash = { :node1 => { :node2 => { :node3 => "true" } } }
31
- Hash.from_xml(xml).should == hash
31
+ BigBlueButton::BigBlueButtonHash.from_xml(xml).should == hash
32
32
  end
33
33
 
34
34
  it "transforms CDATA fields to string" do
@@ -37,7 +37,7 @@ describe Hash do
37
37
  " <course><![CDATA[Advanced Ruby]]></course>" \
38
38
  "</parent>"
39
39
  hash = { :name => "Evening Class", :course => "Advanced Ruby" }
40
- Hash.from_xml(xml).should == hash
40
+ BigBlueButton::BigBlueButtonHash.from_xml(xml).should == hash
41
41
  end
42
42
 
43
43
  it "transforms duplicated keys in arrays" do
@@ -51,7 +51,7 @@ describe Hash do
51
51
  "</parent>"
52
52
  hash = { :meetings => { :meeting => [ "1", "2", { :details => "3" } ],
53
53
  :other => "4" } }
54
- Hash.from_xml(xml).should == hash
54
+ BigBlueButton::BigBlueButtonHash.from_xml(xml).should == hash
55
55
  end
56
56
 
57
57
  it "works with attributes" do
@@ -59,7 +59,7 @@ describe Hash do
59
59
  " <meeting attr1=\"v1\">1</meeting>" \
60
60
  "</parent>"
61
61
  hash = { :meeting => { :attr1 => "v1", :content => "1" } }
62
- Hash.from_xml(xml).should == hash
62
+ BigBlueButton::BigBlueButtonHash.from_xml(xml).should == hash
63
63
  end
64
64
 
65
65
  it "complex real example" do
@@ -104,7 +104,7 @@ describe Hash do
104
104
  } ]
105
105
  }
106
106
  }
107
- Hash.from_xml(xml).should == hash
107
+ BigBlueButton::BigBlueButtonHash.from_xml(xml).should == hash
108
108
  end
109
109
  end
110
110
 
@@ -112,31 +112,31 @@ describe Hash do
112
112
  it "converts string-keys to symbols" do
113
113
  before = { "one" => 1, "two" => 2, "three" => 3 }
114
114
  after = { :one => 1, :two => 2, :three => 3 }
115
- Hash.symbolize_keys(before).should == after
115
+ BigBlueButton::BigBlueButtonHash.symbolize_keys(before).should == after
116
116
  end
117
117
 
118
118
  it "maintains case" do
119
119
  before = { "One" => 1, "tWo" => 2, "thrEE" => 3 }
120
120
  after = { :One => 1, :tWo => 2, :thrEE => 3 }
121
- Hash.symbolize_keys(before).should == after
121
+ BigBlueButton::BigBlueButtonHash.symbolize_keys(before).should == after
122
122
  end
123
123
 
124
124
  it "works with multilevel hashes" do
125
125
  before = { "l1" => { "l2" => { "l3" => 1 } }, "l1b" => 2 }
126
126
  after = { :l1 => { :l2 => { :l3 => 1 } }, :l1b => 2 }
127
- Hash.symbolize_keys(before).should == after
127
+ BigBlueButton::BigBlueButtonHash.symbolize_keys(before).should == after
128
128
  end
129
129
 
130
130
  it "works with arrays" do
131
131
  before = { "a1" => [ "b1" => 1, "b2" => 2 ], "b2" => 2 }
132
132
  after = { :a1 => [ :b1 => 1, :b2 => 2 ], :b2 => 2 }
133
- Hash.symbolize_keys(before).should == after
133
+ BigBlueButton::BigBlueButtonHash.symbolize_keys(before).should == after
134
134
  end
135
135
 
136
136
  it "doesn't convert values" do
137
137
  before = { "a" => "a", "b" => "b" }
138
138
  after = { :a => "a", :b => "b" }
139
- Hash.symbolize_keys(before).should == after
139
+ BigBlueButton::BigBlueButtonHash.symbolize_keys(before).should == after
140
140
  end
141
141
  end
142
142