rbrainz 0.1.0

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