rbrainz 0.1.0

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 (84) hide show
  1. data/LICENSE +25 -0
  2. data/README +11 -0
  3. data/Rakefile +110 -0
  4. data/TODO +24 -0
  5. data/doc/README.rdoc +68 -0
  6. data/examples/getartist.rb +54 -0
  7. data/lib/rbrainz.rb +11 -0
  8. data/lib/rbrainz/data/countrynames.rb +259 -0
  9. data/lib/rbrainz/data/languagenames.rb +404 -0
  10. data/lib/rbrainz/data/scriptnames.rb +64 -0
  11. data/lib/rbrainz/model.rb +48 -0
  12. data/lib/rbrainz/model/alias.rb +23 -0
  13. data/lib/rbrainz/model/artist.rb +54 -0
  14. data/lib/rbrainz/model/disc.rb +30 -0
  15. data/lib/rbrainz/model/entity.rb +72 -0
  16. data/lib/rbrainz/model/incomplete_date.rb +76 -0
  17. data/lib/rbrainz/model/label.rb +55 -0
  18. data/lib/rbrainz/model/mbid.rb +82 -0
  19. data/lib/rbrainz/model/release.rb +50 -0
  20. data/lib/rbrainz/model/release_event.rb +34 -0
  21. data/lib/rbrainz/model/track.rb +27 -0
  22. data/lib/rbrainz/webservice.rb +6 -0
  23. data/lib/rbrainz/webservice/filter.rb +132 -0
  24. data/lib/rbrainz/webservice/includes.rb +150 -0
  25. data/lib/rbrainz/webservice/mbxml.rb +404 -0
  26. data/lib/rbrainz/webservice/query.rb +61 -0
  27. data/lib/rbrainz/webservice/webservice.rb +69 -0
  28. data/test/lib/test_entity.rb +58 -0
  29. data/test/lib/testing_helper.rb +13 -0
  30. data/test/test-data/README +13 -0
  31. data/test/test-data/invalid/artist/basic_1.xml +12 -0
  32. data/test/test-data/invalid/artist/basic_2.xml +12 -0
  33. data/test/test-data/invalid/artist/empty_1.xml +0 -0
  34. data/test/test-data/invalid/artist/empty_2.xml +3 -0
  35. data/test/test-data/invalid/artist/empty_3.xml +7 -0
  36. data/test/test-data/invalid/artist/search_result_1.xml +11 -0
  37. data/test/test-data/valid/artist/Tchaikovsky-1.xml +90 -0
  38. data/test/test-data/valid/artist/Tori_Amos_1.xml +8 -0
  39. data/test/test-data/valid/artist/Tori_Amos_2.xml +53 -0
  40. data/test/test-data/valid/artist/Tori_Amos_3.xml +25 -0
  41. data/test/test-data/valid/artist/Tori_Amos_4.xml +14 -0
  42. data/test/test-data/valid/artist/Tori_Amos_5.xml +13 -0
  43. data/test/test-data/valid/artist/empty_1.xml +7 -0
  44. data/test/test-data/valid/artist/empty_2.xml +11 -0
  45. data/test/test-data/valid/artist/search_result_1.xml +19 -0
  46. data/test/test-data/valid/label/Atlantic_Records_1.xml +9 -0
  47. data/test/test-data/valid/label/Atlantic_Records_2.xml +11 -0
  48. data/test/test-data/valid/label/search_result_1.xml +14 -0
  49. data/test/test-data/valid/release/Highway_61_Revisited_1.xml +68 -0
  50. data/test/test-data/valid/release/Little_Earthquakes_1.xml +24 -0
  51. data/test/test-data/valid/release/Little_Earthquakes_2.xml +73 -0
  52. data/test/test-data/valid/release/Mission_Impossible_2.xml +155 -0
  53. data/test/test-data/valid/release/Under_the_Pink_1.xml +16 -0
  54. data/test/test-data/valid/release/Under_the_Pink_2.xml +14 -0
  55. data/test/test-data/valid/release/Under_the_Pink_3.xml +16 -0
  56. data/test/test-data/valid/release/search_result_1.xml +29 -0
  57. data/test/test-data/valid/track/Silent_All_These_Years_1.xml +7 -0
  58. data/test/test-data/valid/track/Silent_All_These_Years_2.xml +21 -0
  59. data/test/test-data/valid/track/Silent_All_These_Years_3.xml +16 -0
  60. data/test/test-data/valid/track/Silent_All_These_Years_4.xml +30 -0
  61. data/test/test-data/valid/track/Silent_All_These_Years_5.xml +20 -0
  62. data/test/test-data/valid/track/search_result_1.xml +45 -0
  63. data/test/test-data/valid/user/User_1.xml +15 -0
  64. data/test/test_alias.rb +50 -0
  65. data/test/test_artist.rb +132 -0
  66. data/test/test_artist_filter.rb +36 -0
  67. data/test/test_artist_includes.rb +63 -0
  68. data/test/test_disc.rb +38 -0
  69. data/test/test_incomplete_date.rb +60 -0
  70. data/test/test_label.rb +129 -0
  71. data/test/test_label_filter.rb +36 -0
  72. data/test/test_label_includes.rb +55 -0
  73. data/test/test_mbid.rb +99 -0
  74. data/test/test_mbxml.rb +368 -0
  75. data/test/test_query.rb +24 -0
  76. data/test/test_release.rb +161 -0
  77. data/test/test_release_event.rb +67 -0
  78. data/test/test_release_filter.rb +57 -0
  79. data/test/test_release_includes.rb +73 -0
  80. data/test/test_track.rb +102 -0
  81. data/test/test_track_filter.rb +57 -0
  82. data/test/test_track_includes.rb +61 -0
  83. data/test/test_webservice.rb +23 -0
  84. metadata +138 -0
@@ -0,0 +1,368 @@
1
+ # $Id$
2
+ # Copyright (c) 2007, Philipp Wolfer
3
+ # All rights reserved.
4
+ # See LICENSE for permissions.
5
+
6
+ require 'test/unit'
7
+ require 'rbrainz'
8
+ include MusicBrainz
9
+
10
+ # Unit test for the MBXML class.
11
+ #
12
+ # We test against the official test files supplied by
13
+ # MusicBrainz. See http://bugs.musicbrainz.org/browser/mmd-schema/trunk/test-data
14
+ class TestMBXML < Test::Unit::TestCase
15
+
16
+ DATA_PATH = 'test/test-data/valid/'
17
+
18
+ def setup
19
+ end
20
+
21
+ def teardown
22
+ end
23
+
24
+ def test_empty
25
+ # The first test result is completely empty
26
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'artist/empty_1.xml')
27
+ assert_equal nil, mbxml.get_entity(:artist)
28
+ assert_equal nil, mbxml.get_entity(:release)
29
+ assert_equal nil, mbxml.get_entity(:track)
30
+ assert_equal nil, mbxml.get_entity(:label)
31
+ assert_equal nil, mbxml.get_entity_list(:artist)
32
+ assert_equal nil, mbxml.get_entity_list(:release)
33
+ assert_equal nil, mbxml.get_entity_list(:track)
34
+ assert_equal nil, mbxml.get_entity_list(:label)
35
+
36
+ # The second contains an empty artist list
37
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'artist/empty_2.xml')
38
+ assert_equal nil, mbxml.get_entity(:artist)
39
+ assert_equal nil, mbxml.get_entity(:release)
40
+ assert_equal nil, mbxml.get_entity(:track)
41
+ assert_equal nil, mbxml.get_entity(:label)
42
+ assert_equal Array.new, mbxml.get_entity_list(:artist)
43
+ assert_equal nil, mbxml.get_entity_list(:release)
44
+ assert_equal nil, mbxml.get_entity_list(:track)
45
+ assert_equal nil, mbxml.get_entity_list(:label)
46
+ end
47
+
48
+ def test_artist_search
49
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'artist/search_result_1.xml')
50
+ assert_equal nil, mbxml.get_entity(:artist)
51
+ assert_equal nil, mbxml.get_entity(:release)
52
+ assert_equal nil, mbxml.get_entity(:track)
53
+ assert_equal nil, mbxml.get_entity(:label)
54
+
55
+ artist_list = mbxml.get_entity_list(:artist)
56
+ assert_equal 3, artist_list.size, artist_list.inspect
57
+ assert_equal 'c0b2500e-0cef-4130-869d-732b23ed9df5', artist_list[0].id.uuid
58
+ assert_equal Model::Artist::TYPE_PERSON, artist_list[0].type
59
+ assert_equal 'Tori Amos', artist_list[0].name
60
+ assert_equal 'Amos, Tori', artist_list[0].sort_name
61
+ assert_equal '1963-08-22', artist_list[0].begin_date.to_s
62
+ end
63
+
64
+ def test_artist_tchaikovsky_1
65
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'artist/Tchaikovsky-1.xml')
66
+ artist = mbxml.get_entity(:artist)
67
+
68
+ assert_equal '9ddd7abc-9e1b-471d-8031-583bc6bc8be9', artist.id.uuid
69
+ assert_equal Model::Artist::TYPE_PERSON, artist.type
70
+ assert_equal 'Пётр Ильич Чайковский', artist.name
71
+ assert_equal 'Tchaikovsky, Pyotr Ilyich', artist.sort_name
72
+ assert_equal '1840-05-07', artist.begin_date.to_s
73
+ assert_equal '1893-11-06', artist.end_date.to_s
74
+ assert_equal 80, artist.aliases.size
75
+ end
76
+
77
+ def test_artist_tori_amos_1
78
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'artist/Tori_Amos_1.xml')
79
+ artist = mbxml.get_entity(:artist)
80
+
81
+ assert_equal 'c0b2500e-0cef-4130-869d-732b23ed9df5', artist.id.uuid
82
+ assert_equal Model::Artist::TYPE_PERSON, artist.type
83
+ assert_equal 'Tori Amos', artist.name
84
+ assert_equal 'Amos, Tori', artist.sort_name
85
+ assert_equal '1963-08-22', artist.begin_date.to_s
86
+ end
87
+
88
+ def test_artist_tori_amos_2
89
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'artist/Tori_Amos_2.xml')
90
+ artist = mbxml.get_entity(:artist)
91
+
92
+ assert_equal 'c0b2500e-0cef-4130-869d-732b23ed9df5', artist.id.uuid
93
+ assert_equal Model::Artist::TYPE_PERSON, artist.type
94
+ assert_equal 'Tori Amos', artist.name
95
+ assert_equal 'Amos, Tori', artist.sort_name
96
+ assert_equal '1963-08-22', artist.begin_date.to_s
97
+ assert_equal 3, artist.releases.size
98
+ assert_equal 'a7ccb022-f437-4492-8eee-8f85d85cdb96', artist.releases[0].id.uuid
99
+ assert_equal artist, artist.releases[0].artist
100
+ assert_equal '9cbf7040-dbdc-403c-940f-7562d9712514', artist.releases[1].id.uuid
101
+ assert_equal artist, artist.releases[1].artist
102
+ assert_equal '290e10c5-7efc-4f60-ba2c-0dfc0208fbf5', artist.releases[2].id.uuid
103
+ assert_equal artist, artist.releases[2].artist
104
+ end
105
+
106
+ def test_artist_tori_amos_3
107
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'artist/Tori_Amos_3.xml')
108
+ artist = mbxml.get_entity(:artist)
109
+
110
+ assert false, 'Test not implemented'
111
+ end
112
+
113
+ def test_artist_tori_amos_4
114
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'artist/Tori_Amos_4.xml')
115
+ artist = mbxml.get_entity(:artist)
116
+
117
+ assert_equal 'c0b2500e-0cef-4130-869d-732b23ed9df5', artist.id.uuid
118
+ assert_equal Model::Artist::TYPE_PERSON, artist.type
119
+ assert_equal 'Tori Amos', artist.name
120
+ assert_equal 'Amos, Tori', artist.sort_name
121
+ assert_equal '1963-08-22', artist.begin_date.to_s
122
+ assert_equal 3, artist.aliases.size
123
+ assert_equal 'Myra Ellen Amos', artist.aliases[0].name
124
+ assert_equal 'Latn', artist.aliases[0].script
125
+ assert_equal 'Myra Amos', artist.aliases[1].name
126
+ assert_equal 'Torie Amos', artist.aliases[2].name
127
+ assert_equal 'Latn', artist.aliases[2].script
128
+ assert_equal 'Misspelling', artist.aliases[2].type
129
+ end
130
+
131
+ def test_artist_tori_amos_5
132
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'artist/Tori_Amos_5.xml')
133
+ artist = mbxml.get_entity(:artist)
134
+
135
+ assert_equal 'c0b2500e-0cef-4130-869d-732b23ed9df5', artist.id.uuid
136
+ assert_equal Model::Artist::TYPE_PERSON, artist.type
137
+ assert_equal 'Tori Amos', artist.name
138
+ assert_equal 'Amos, Tori', artist.sort_name
139
+ assert_equal '1963-08-22', artist.begin_date.to_s
140
+ assert_equal 1, artist.releases.size
141
+ assert_equal 'a7ccb022-f437-4492-8eee-8f85d85cdb96', artist.releases[0].id.uuid
142
+ assert_equal 'Strange Little Girls', artist.releases[0].title
143
+ assert artist.releases[0].types.include?(Model::Release::TYPE_ALBUM)
144
+ assert artist.releases[0].types.include?(Model::Release::TYPE_OFFICIAL)
145
+ end
146
+
147
+ def test_release_search
148
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'release/search_result_1.xml')
149
+ assert_equal nil, mbxml.get_entity(:artist)
150
+ assert_equal nil, mbxml.get_entity(:release)
151
+ assert_equal nil, mbxml.get_entity(:track)
152
+ assert_equal nil, mbxml.get_entity(:label)
153
+
154
+ release_list = mbxml.get_entity_list(:release)
155
+ assert_equal 2, release_list.size, release_list.inspect
156
+ assert_equal '290e10c5-7efc-4f60-ba2c-0dfc0208fbf5', release_list[0].id.uuid
157
+ assert release_list[0].types.include?(Model::Release::TYPE_ALBUM)
158
+ assert release_list[0].types.include?(Model::Release::TYPE_OFFICIAL)
159
+ assert_equal 'Under the Pink', release_list[0].title
160
+ assert_equal 'c0b2500e-0cef-4130-869d-732b23ed9df5', release_list[0].artist.id.uuid
161
+ assert_equal 1, release_list[0].release_events.size
162
+ assert_equal Model::IncompleteDate.new('1994-01-28'), release_list[0].release_events[0].date
163
+ end
164
+
165
+ def test_release_highway_61_revisited_1
166
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'release/Highway_61_Revisited_1.xml')
167
+ release = mbxml.get_entity(:release)
168
+
169
+ assert false, 'Test not implemented'
170
+ end
171
+
172
+ def test_release_little_earthquakes_1
173
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'release/Little_Earthquakes_1.xml')
174
+ release = mbxml.get_entity(:release)
175
+
176
+ assert_equal '02232360-337e-4a3f-ad20-6cdd4c34288c', release.id.uuid
177
+ assert release.types.include?(Model::Release::TYPE_ALBUM)
178
+ assert release.types.include?(Model::Release::TYPE_OFFICIAL)
179
+ assert_equal 'Little Earthquakes', release.title
180
+ assert_equal 'ENG', release.text_language
181
+ assert_equal 'Latn', release.text_script
182
+ assert_equal 'B000002IT2', release.asin
183
+ assert_equal 'c0b2500e-0cef-4130-869d-732b23ed9df5', release.artist.id.uuid
184
+ assert_equal 3, release.release_events.size
185
+ assert_equal Model::IncompleteDate.new('1992-01-13'), release.release_events[0].date
186
+ assert_equal 'GB', release.release_events[0].country
187
+ assert_equal 3, release.discs.size
188
+ assert_equal 'ILKp3.bZmvoMO7wSrq1cw7WatfA-', release.discs[0].id
189
+ end
190
+
191
+ def test_release_little_earthquakes_2
192
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'release/Little_Earthquakes_2.xml')
193
+ release = mbxml.get_entity(:release)
194
+
195
+ assert_equal '02232360-337e-4a3f-ad20-6cdd4c34288c', release.id.uuid
196
+ assert release.types.include?(Model::Release::TYPE_ALBUM)
197
+ assert release.types.include?(Model::Release::TYPE_OFFICIAL)
198
+ assert_equal 'Little Earthquakes', release.title
199
+ assert_equal 'ENG', release.text_language
200
+ assert_equal 'Latn', release.text_script
201
+ assert_equal 'B000002IT2', release.asin
202
+ assert_equal 'c0b2500e-0cef-4130-869d-732b23ed9df5', release.artist.id.uuid
203
+ assert_equal 3, release.release_events.size
204
+ assert_equal Model::IncompleteDate.new('1992-01-13'), release.release_events[0].date
205
+ assert_equal 'GB', release.release_events[0].country
206
+ assert_equal 3, release.discs.size
207
+ assert_equal 'ILKp3.bZmvoMO7wSrq1cw7WatfA-', release.discs[0].id
208
+ assert_equal 12, release.tracks.size
209
+ assert_equal '6e71c125-3cb5-4a19-a1f0-66779c9ae9f4', release.tracks[0].id.uuid
210
+ assert_equal 'Crucify', release.tracks[0].title
211
+ assert_equal 301186, release.tracks[0].duration
212
+ end
213
+
214
+ # This is a various artist release.
215
+ def test_release_mission_impossible_2
216
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'release/Mission_Impossible_2.xml')
217
+ release = mbxml.get_entity(:release)
218
+
219
+ assert_equal '81683d13-e014-4d35-9774-6f536f4ef557', release.id.uuid
220
+ assert release.types.include?(Model::Release::TYPE_SOUNDTRACK)
221
+ assert release.types.include?(Model::Release::TYPE_OFFICIAL)
222
+ assert_equal 'Mission: Impossible 2', release.title
223
+ assert_equal 'ENG', release.text_language
224
+ assert_equal 'Latn', release.text_script
225
+ assert_equal '89ad4ac3-39f7-470e-963a-56509c546377', release.artist.id.uuid
226
+ assert_equal 1, release.release_events.size
227
+ assert_equal Model::IncompleteDate.new('2000'), release.release_events[0].date
228
+ assert_equal 'EU', release.release_events[0].country
229
+ assert_equal 16, release.tracks.size
230
+ release.tracks.each {|track|
231
+ assert_not_equal release.artist, track.artist
232
+ }
233
+ end
234
+
235
+ def test_release_under_the_pink_1
236
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'release/Under_the_Pink_1.xml')
237
+ release = mbxml.get_entity(:release)
238
+
239
+ assert false, 'Test not implemented'
240
+ end
241
+
242
+ def test_release_under_the_pink_2
243
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'release/Under_the_Pink_2.xml')
244
+ release = mbxml.get_entity(:release)
245
+
246
+ assert false, 'Test not implemented'
247
+ end
248
+
249
+ def test_release_under_the_pink_3
250
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'release/Under_the_Pink_3.xml')
251
+ release = mbxml.get_entity(:release)
252
+
253
+ assert false, 'Test not implemented'
254
+ end
255
+
256
+ def test_track_search
257
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'track/search_result_1.xml')
258
+ assert_equal nil, mbxml.get_entity(:artist)
259
+ assert_equal nil, mbxml.get_entity(:release)
260
+ assert_equal nil, mbxml.get_entity(:track)
261
+ assert_equal nil, mbxml.get_entity(:label)
262
+
263
+ track_list = mbxml.get_entity_list(:track)
264
+ assert_equal 3, track_list.size, track_list.inspect
265
+ assert_equal '748f2b79-8c50-4581-adb1-7708118a48fc', track_list[0].id.uuid
266
+ assert_equal 'Little Earthquakes', track_list[0].title
267
+ assert_equal 457760, track_list[0].duration
268
+ assert_equal 'c0b2500e-0cef-4130-869d-732b23ed9df5', track_list[0].artist.id.uuid
269
+ assert_equal 1, track_list[0].releases.size
270
+ assert_equal '93264fe5-dff2-47ab-9ca8-1c865733aad9', track_list[0].releases[0].id.uuid
271
+ end
272
+
273
+ def test_track_silent_all_these_years_1
274
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'track/Silent_All_These_Years_1.xml')
275
+ track = mbxml.get_entity(:track)
276
+
277
+ assert_equal 'd6118046-407d-4e06-a1ba-49c399a4c42f', track.id.uuid
278
+ assert_equal 'Silent All These Years', track.title
279
+ assert_equal 253466, track.duration
280
+ end
281
+
282
+ def test_track_silent_all_these_years_2
283
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'track/Silent_All_These_Years_2.xml')
284
+ track = mbxml.get_entity(:track)
285
+
286
+ assert false, 'Test not implemented'
287
+ end
288
+
289
+ def test_track_silent_all_these_years_3
290
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'track/Silent_All_These_Years_3.xml')
291
+ track = mbxml.get_entity(:track)
292
+
293
+ assert_equal 'd6118046-407d-4e06-a1ba-49c399a4c42f', track.id.uuid
294
+ assert_equal 'Silent All These Years', track.title
295
+ assert_equal 253466, track.duration
296
+ assert_equal 7, track.puids.size
297
+ assert_equal 'c2a2cee5-a8ca-4f89-a092-c3e1e65ab7e6', track.puids[0]
298
+ assert_equal '42ab76ea-5d42-4259-85d7-e7f2c69e4485', track.puids[6]
299
+ end
300
+
301
+ def test_track_silent_all_these_years_4
302
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'track/Silent_All_These_Years_4.xml')
303
+ track = mbxml.get_entity(:track)
304
+
305
+ assert_equal 'd6118046-407d-4e06-a1ba-49c399a4c42f', track.id.uuid
306
+ assert_equal 'Silent All These Years', track.title
307
+ assert_equal 253466, track.duration
308
+ assert_equal 'c0b2500e-0cef-4130-869d-732b23ed9df5', track.artist.id.uuid
309
+ assert_equal 1, track.releases.size
310
+ assert_equal '02232360-337e-4a3f-ad20-6cdd4c34288c', track.releases[0].id.uuid
311
+ assert_equal 7, track.puids.size
312
+ assert_equal 'c2a2cee5-a8ca-4f89-a092-c3e1e65ab7e6', track.puids[0]
313
+ assert_equal '42ab76ea-5d42-4259-85d7-e7f2c69e4485', track.puids[6]
314
+ end
315
+
316
+ def test_track_silent_all_these_years_5
317
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'track/Silent_All_These_Years_5.xml')
318
+ track = mbxml.get_entity(:track)
319
+
320
+ assert false, 'Test not implemented'
321
+ end
322
+
323
+ def test_label_search
324
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'label/search_result_1.xml')
325
+ assert_equal nil, mbxml.get_entity(:artist)
326
+ assert_equal nil, mbxml.get_entity(:release)
327
+ assert_equal nil, mbxml.get_entity(:track)
328
+ assert_equal nil, mbxml.get_entity(:label)
329
+
330
+ label_list = mbxml.get_entity_list(:label)
331
+ assert_equal 2, label_list.size, label_list.inspect
332
+ assert_equal '50c384a2-0b44-401b-b893-8181173339c7', label_list[0].id.uuid
333
+ assert_equal Model::Label::TYPE_ORIGINAL_PRODUCTION, label_list[0].type
334
+ assert_equal 'Atlantic Records', label_list[0].name
335
+ assert_equal 'US', label_list[0].country
336
+ assert_equal 'c2ccaec8-0dfe-4dd5-a710-bddf5fd7c1a7', label_list[1].id.uuid
337
+ assert_equal nil, label_list[1].type
338
+ assert_equal 'DRO Atlantic', label_list[1].name
339
+ assert_equal 'SP', label_list[1].country
340
+ end
341
+
342
+ def test_label_atlantic_records_1
343
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'label/Atlantic_Records_1.xml')
344
+ label = mbxml.get_entity(:label)
345
+
346
+ assert_equal '50c384a2-0b44-401b-b893-8181173339c7', label.id.uuid
347
+ assert_equal Model::Label::TYPE_ORIGINAL_PRODUCTION, label.type
348
+ assert_equal 'Atlantic Records', label.name
349
+ assert_equal '121', label.code
350
+ assert_equal 'US', label.country
351
+ assert_equal '1947', label.founding_date.to_s
352
+ end
353
+
354
+ def test_label_atlantic_records_2
355
+ mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'label/Atlantic_Records_2.xml')
356
+ label = mbxml.get_entity(:label)
357
+
358
+ assert_equal Model::Label::TYPE_DISTRIBUTOR, label.type
359
+ assert_equal 'Atlantic Records', label.name
360
+ assert_equal 'AR SortName', label.sort_name
361
+ assert_equal '121', label.code
362
+ assert_equal 'fake', label.disambiguation
363
+ assert_equal 'US', label.country
364
+ assert_equal '1947', label.founding_date.to_s
365
+ assert_equal '2047', label.dissolving_date.to_s
366
+ end
367
+
368
+ end
@@ -0,0 +1,24 @@
1
+ # $Id$
2
+ # Copyright (c) 2007, Philipp Wolfer
3
+ # All rights reserved.
4
+ # See LICENSE for permissions.
5
+
6
+ require 'test/unit'
7
+ require 'rbrainz'
8
+ include MusicBrainz
9
+
10
+ # Unit test for the Query class.
11
+ class TestQuery < Test::Unit::TestCase
12
+
13
+ def setup
14
+ end
15
+
16
+ def teardown
17
+ end
18
+
19
+ # TODO: Implement a mock webservice for testing
20
+ def test_not_implemented
21
+ assert false, 'Unit test for ' + self.class.name + ' not implemented!'
22
+ end
23
+
24
+ end
@@ -0,0 +1,161 @@
1
+ # $Id$
2
+ # Copyright (c) 2007, Philipp Wolfer
3
+ # All rights reserved.
4
+ # See LICENSE for permissions.
5
+
6
+ require 'test_entity'
7
+
8
+ # Unit test for the Release model.
9
+ class TestRelease < Test::Unit::TestCase
10
+
11
+ def setup
12
+ @tested_class = Model::Release
13
+ @invalid_entity_types = [:artist, :track, :label]
14
+ @tracks = [Model::Track.new, Model::Track.new]
15
+ @release_events = [Model::ReleaseEvent.new, Model::ReleaseEvent.new]
16
+ @discs = [Model::Disc.new, Model::Disc.new]
17
+ end
18
+
19
+ def teardown
20
+ end
21
+
22
+ # Include the tests for Entity
23
+ include TestEntity
24
+
25
+ def test_new_release
26
+ release = nil
27
+ assert_nothing_raised {release = Model::Release.new}
28
+ assert release.is_a?(Model::Entity)
29
+ end
30
+
31
+ def test_title
32
+ release = Model::Release.new
33
+ assert release.title.nil?
34
+ assert_nothing_raised {release.title = 'Draconian Times'}
35
+ assert_equal 'Draconian Times', release.title
36
+ end
37
+
38
+ def test_asin
39
+ release = Model::Release.new
40
+ assert release.asin.nil?
41
+ assert_nothing_raised {release.asin = 'B000024IXL'}
42
+ assert_equal 'B000024IXL', release.asin
43
+ end
44
+
45
+ def test_artist
46
+ release = Model::Release.new
47
+ artist = Model::Artist.new
48
+ assert release.artist.nil?
49
+ assert_nothing_raised {release.artist = artist}
50
+ assert_equal artist, release.artist
51
+ end
52
+
53
+ def test_text_language
54
+ release = Model::Release.new
55
+ assert release.text_language.nil?
56
+ assert_nothing_raised {release.text_language = 'ENG'}
57
+ assert_equal 'ENG', release.text_language
58
+ end
59
+
60
+ def test_text_script
61
+ release = Model::Release.new
62
+ assert release.text_script.nil?
63
+ assert_nothing_raised {release.text_script = 'Latn'}
64
+ assert_equal 'Latn', release.text_script
65
+ end
66
+
67
+ def test_types
68
+ release = Model::Release.new
69
+ assert_equal 0, release.types.size
70
+ types = []
71
+ assert_nothing_raised {
72
+ types = [Model::Release::TYPE_ALBUM, Model::Release::TYPE_AUDIOBOOK,
73
+ Model::Release::TYPE_BOOTLEG, Model::Release::TYPE_COMPILATION,
74
+ Model::Release::TYPE_EP, Model::Release::TYPE_INTERVIEW,
75
+ Model::Release::TYPE_LIVE, Model::Release::TYPE_NONE,
76
+ Model::Release::TYPE_OFFICIAL, Model::Release::TYPE_OTHER,
77
+ Model::Release::TYPE_PROMOTION, Model::Release::TYPE_PSEUDO_RELEASE,
78
+ Model::Release::TYPE_REMIX, Model::Release::TYPE_SINGLE,
79
+ Model::Release::TYPE_SOUNDTRACK, Model::Release::TYPE_SPOKENWORD]
80
+ }
81
+
82
+ # Adding all those types should be possible.
83
+ types.each {|type|
84
+ assert_nothing_raised {release.types << type}
85
+ }
86
+ assert_equal 16, release.types.size
87
+
88
+ # Removing the types again
89
+ types.each {|type|
90
+ assert_nothing_raised {release.types.delete type}
91
+ }
92
+ assert_equal 0, release.types.size
93
+ end
94
+
95
+ # Many tracks can be added
96
+ def test_add_and_remove_tracks
97
+ release = Model::Release.new
98
+ assert_equal 0, release.tracks.size
99
+ assert_nothing_raised {release.tracks << @tracks[0]}
100
+ assert_equal 1, release.tracks.size
101
+ assert_nothing_raised {release.tracks << @tracks[1]}
102
+ assert_equal 2, release.tracks.size
103
+
104
+ assert_nothing_raised {release.tracks.delete @tracks[1]}
105
+ assert_equal 1, release.tracks.size
106
+ assert_nothing_raised {release.tracks.delete @tracks[0]}
107
+ assert_equal 0, release.tracks.size
108
+ end
109
+
110
+ # You can pass an array of tracks to add them all.
111
+ def test_add_several_tracks_at_once
112
+ release = Model::Release.new
113
+ assert_nothing_raised {release.tracks = @tracks}
114
+ assert_equal @tracks, release.tracks
115
+ end
116
+
117
+ # Many release events can be added
118
+ def test_add_and_remove_release_events
119
+ release = Model::Release.new
120
+ assert_equal 0, release.release_events.size
121
+ assert_nothing_raised {release.release_events << @release_events[0]}
122
+ assert_equal 1, release.release_events.size
123
+ assert_nothing_raised {release.release_events << @release_events[1]}
124
+ assert_equal 2, release.release_events.size
125
+
126
+ assert_nothing_raised {release.release_events.delete @release_events[1]}
127
+ assert_equal 1, release.release_events.size
128
+ assert_nothing_raised {release.release_events.delete @release_events[0]}
129
+ assert_equal 0, release.release_events.size
130
+ end
131
+
132
+ # You can pass an array of aliases to add them all.
133
+ def test_add_several_release_events_at_once
134
+ release = Model::Release.new
135
+ assert_nothing_raised {release.release_events = @release_events}
136
+ assert_equal @release_events, release.release_events
137
+ end
138
+
139
+ # Many discs can be added
140
+ def test_add_and_remove_disc
141
+ release = Model::Release.new
142
+ assert_equal 0, release.discs.size
143
+ assert_nothing_raised {release.discs << @discs[0]}
144
+ assert_equal 1, release.discs.size
145
+ assert_nothing_raised {release.discs << @discs[1]}
146
+ assert_equal 2, release.discs.size
147
+
148
+ assert_nothing_raised {release.discs.delete @discs[1]}
149
+ assert_equal 1, release.discs.size
150
+ assert_nothing_raised {release.discs.delete @discs[0]}
151
+ assert_equal 0, release.discs.size
152
+ end
153
+
154
+ # You can pass an array of discs to add them all.
155
+ def test_add_several_discs_at_once
156
+ release = Model::Release.new
157
+ assert_nothing_raised {release.discs = @discs}
158
+ assert_equal @discs, release.discs
159
+ end
160
+
161
+ end