rbrainz 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. data/CHANGES +31 -0
  2. data/LICENSE +1 -1
  3. data/README +3 -2
  4. data/Rakefile +40 -22
  5. data/TODO +6 -23
  6. data/doc/README.rdoc +50 -21
  7. data/examples/getartist.rb +6 -4
  8. data/examples/getuser.rb +30 -0
  9. data/examples/searchartists.rb +35 -0
  10. data/lib/rbrainz.rb +12 -7
  11. data/lib/rbrainz/core_ext.rb +8 -0
  12. data/lib/rbrainz/core_ext/mbid.rb +30 -0
  13. data/lib/rbrainz/core_ext/net_http_digest.rb +52 -0
  14. data/lib/rbrainz/core_ext/range.rb +28 -0
  15. data/lib/rbrainz/core_ext/range/equality.rb +232 -0
  16. data/lib/rbrainz/data/countrynames.rb +7 -5
  17. data/lib/rbrainz/data/languagenames.rb +8 -5
  18. data/lib/rbrainz/data/releasetypenames.rb +34 -0
  19. data/lib/rbrainz/data/scriptnames.rb +8 -5
  20. data/lib/rbrainz/model.rb +27 -35
  21. data/lib/rbrainz/model/alias.rb +31 -7
  22. data/lib/rbrainz/model/artist.rb +30 -41
  23. data/lib/rbrainz/model/collection.rb +102 -0
  24. data/lib/rbrainz/model/default_factory.rb +78 -0
  25. data/lib/rbrainz/model/disc.rb +45 -8
  26. data/lib/rbrainz/model/entity.rb +122 -53
  27. data/lib/rbrainz/model/incomplete_date.rb +31 -47
  28. data/lib/rbrainz/model/individual.rb +103 -0
  29. data/lib/rbrainz/model/label.rb +42 -33
  30. data/lib/rbrainz/model/mbid.rb +111 -40
  31. data/lib/rbrainz/model/relation.rb +78 -14
  32. data/lib/rbrainz/model/release.rb +119 -31
  33. data/lib/rbrainz/model/release_event.rb +38 -9
  34. data/lib/rbrainz/model/scored_collection.rb +99 -0
  35. data/lib/rbrainz/model/tag.rb +39 -0
  36. data/lib/rbrainz/model/track.rb +37 -13
  37. data/lib/rbrainz/model/user.rb +48 -0
  38. data/lib/rbrainz/utils.rb +9 -0
  39. data/lib/rbrainz/utils/data.rb +78 -0
  40. data/lib/rbrainz/utils/helper.rb +22 -0
  41. data/lib/rbrainz/version.rb +15 -0
  42. data/lib/rbrainz/webservice.rb +32 -6
  43. data/lib/rbrainz/webservice/filter.rb +124 -47
  44. data/lib/rbrainz/webservice/includes.rb +49 -10
  45. data/lib/rbrainz/webservice/mbxml.rb +228 -173
  46. data/lib/rbrainz/webservice/query.rb +312 -25
  47. data/lib/rbrainz/webservice/webservice.rb +164 -27
  48. data/test/lib/mock_webservice.rb +53 -0
  49. data/test/lib/test_entity.rb +27 -8
  50. data/test/lib/test_factory.rb +47 -0
  51. data/test/lib/testing_helper.rb +7 -5
  52. data/test/test-data/invalid/artist/tags_1.xml +6 -0
  53. data/test/test-data/valid/artist/Tchaikovsky-2.xml +12 -0
  54. data/test/test-data/valid/label/Atlantic_Records_2.xml +3 -0
  55. data/test/test-data/valid/label/Atlantic_Records_3.xml +11 -0
  56. data/test/test-data/valid/release/Highway_61_Revisited_2.xml +12 -0
  57. data/test/test-data/valid/track/Silent_All_These_Years_6.xml +8 -0
  58. data/test/test_alias.rb +13 -7
  59. data/test/test_artist.rb +26 -4
  60. data/test/test_artist_filter.rb +11 -6
  61. data/test/test_artist_includes.rb +11 -6
  62. data/test/test_collection.rb +66 -0
  63. data/test/test_default_factory.rb +75 -0
  64. data/test/test_disc.rb +9 -4
  65. data/test/test_incomplete_date.rb +21 -14
  66. data/test/test_label.rb +56 -18
  67. data/test/test_label_filter.rb +10 -5
  68. data/test/test_label_includes.rb +11 -6
  69. data/test/test_mbid.rb +34 -19
  70. data/test/test_mbxml.rb +242 -72
  71. data/test/test_query.rb +92 -7
  72. data/test/test_range_equality.rb +144 -0
  73. data/test/test_relation.rb +18 -7
  74. data/test/test_release.rb +15 -4
  75. data/test/test_release_event.rb +16 -4
  76. data/test/test_release_filter.rb +11 -5
  77. data/test/test_release_includes.rb +11 -6
  78. data/test/test_scored_collection.rb +86 -0
  79. data/test/test_tag.rb +39 -0
  80. data/test/test_track.rb +15 -4
  81. data/test/test_track_filter.rb +11 -5
  82. data/test/test_track_includes.rb +11 -6
  83. data/test/test_utils.rb +41 -0
  84. data/test/test_webservice.rb +16 -17
  85. metadata +93 -57
data/test/test_mbxml.rb CHANGED
@@ -1,10 +1,13 @@
1
- # $Id: test_mbxml.rb 33 2007-05-29 14:48:47Z phw $
2
- # Copyright (c) 2007, Philipp Wolfer
3
- # All rights reserved.
4
- # See LICENSE for permissions.
1
+ # $Id: test_mbxml.rb 146 2007-07-19 16:33:38Z phw $
2
+ #
3
+ # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
+ # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
5
+ # License:: RBrainz is free software distributed under a BSD style license.
6
+ # See LICENSE[file:../LICENSE.html] for permissions.
5
7
 
6
8
  require 'test/unit'
7
9
  require 'rbrainz'
10
+ require 'test_factory'
8
11
  include MusicBrainz
9
12
 
10
13
  # Unit test for the MBXML class.
@@ -23,46 +26,52 @@ class TestMBXML < Test::Unit::TestCase
23
26
 
24
27
  def test_empty
25
28
  # The first test result is completely empty
26
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'artist/empty_1.xml')
29
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'artist/empty_1.xml')
27
30
  assert_equal nil, mbxml.get_entity(:artist)
28
31
  assert_equal nil, mbxml.get_entity(:release)
29
32
  assert_equal nil, mbxml.get_entity(:track)
30
33
  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)
34
+ assert_raise(Webservice::MBXML::ParseError) { mbxml.get_entity_list(:artist) }
35
+ assert_raise(Webservice::MBXML::ParseError) { mbxml.get_entity_list(:release) }
36
+ assert_raise(Webservice::MBXML::ParseError) { mbxml.get_entity_list(:track) }
37
+ assert_raise(Webservice::MBXML::ParseError) { mbxml.get_entity_list(:label) }
35
38
 
36
39
  # The second contains an empty artist list
37
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'artist/empty_2.xml')
40
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'artist/empty_2.xml')
38
41
  assert_equal nil, mbxml.get_entity(:artist)
39
42
  assert_equal nil, mbxml.get_entity(:release)
40
43
  assert_equal nil, mbxml.get_entity(:track)
41
44
  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)
45
+ assert mbxml.get_entity_list(:artist).empty?
46
+ assert_raise(Webservice::MBXML::ParseError) { mbxml.get_entity_list(:release) }
47
+ assert_raise(Webservice::MBXML::ParseError) { mbxml.get_entity_list(:track) }
48
+ assert_raise(Webservice::MBXML::ParseError) { mbxml.get_entity_list(:label) }
46
49
  end
47
50
 
48
51
  def test_artist_search
49
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'artist/search_result_1.xml')
52
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'artist/search_result_1.xml')
50
53
  assert_equal nil, mbxml.get_entity(:artist)
51
54
  assert_equal nil, mbxml.get_entity(:release)
52
55
  assert_equal nil, mbxml.get_entity(:track)
53
56
  assert_equal nil, mbxml.get_entity(:label)
54
57
 
55
58
  artist_list = mbxml.get_entity_list(:artist)
59
+ assert_equal 0, artist_list.offset
60
+ assert_equal 47, artist_list.count
61
+
56
62
  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
63
+ assert_equal 'c0b2500e-0cef-4130-869d-732b23ed9df5', artist_list[0].entity.id.uuid
64
+ assert_equal Model::Artist::TYPE_PERSON, artist_list[0].entity.type
65
+ assert_equal 'Tori Amos', artist_list[0].entity.name
66
+ assert_equal 'Amos, Tori', artist_list[0].entity.sort_name
67
+ assert_equal '1963-08-22', artist_list[0].entity.begin_date.to_s
68
+ assert_equal 100, artist_list[0].score
69
+ assert_equal 44, artist_list[1].score
70
+ assert_equal 44, artist_list[2].score
62
71
  end
63
72
 
64
73
  def test_artist_tchaikovsky_1
65
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'artist/Tchaikovsky-1.xml')
74
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'artist/Tchaikovsky-1.xml')
66
75
  artist = mbxml.get_entity(:artist)
67
76
 
68
77
  assert_equal '9ddd7abc-9e1b-471d-8031-583bc6bc8be9', artist.id.uuid
@@ -74,8 +83,26 @@ class TestMBXML < Test::Unit::TestCase
74
83
  assert_equal 80, artist.aliases.size
75
84
  end
76
85
 
86
+ def test_artist_tchaikovsky_2
87
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'artist/Tchaikovsky-2.xml')
88
+ artist = mbxml.get_entity(:artist)
89
+
90
+ assert_equal '9ddd7abc-9e1b-471d-8031-583bc6bc8be9', artist.id.uuid
91
+ assert_equal Model::Artist::TYPE_PERSON, artist.type
92
+ assert_equal 'Пётр Ильич Чайковский', artist.name
93
+ assert_equal 4, artist.tags.size
94
+ assert_equal 'classical', artist.tags[0].text
95
+ assert_equal 100, artist.tags[0].count
96
+ assert_equal 'russian', artist.tags[1].text
97
+ assert_equal 60, artist.tags[1].count
98
+ assert_equal 'romantic era', artist.tags[2].text
99
+ assert_equal 40, artist.tags[2].count
100
+ assert_equal 'composer', artist.tags[3].text
101
+ assert_equal 120, artist.tags[3].count
102
+ end
103
+
77
104
  def test_artist_tori_amos_1
78
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'artist/Tori_Amos_1.xml')
105
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'artist/Tori_Amos_1.xml')
79
106
  artist = mbxml.get_entity(:artist)
80
107
 
81
108
  assert_equal 'c0b2500e-0cef-4130-869d-732b23ed9df5', artist.id.uuid
@@ -86,7 +113,7 @@ class TestMBXML < Test::Unit::TestCase
86
113
  end
87
114
 
88
115
  def test_artist_tori_amos_2
89
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'artist/Tori_Amos_2.xml')
116
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'artist/Tori_Amos_2.xml')
90
117
  artist = mbxml.get_entity(:artist)
91
118
 
92
119
  assert_equal 'c0b2500e-0cef-4130-869d-732b23ed9df5', artist.id.uuid
@@ -97,14 +124,17 @@ class TestMBXML < Test::Unit::TestCase
97
124
  assert_equal 3, artist.releases.size
98
125
  assert_equal 'a7ccb022-f437-4492-8eee-8f85d85cdb96', artist.releases[0].id.uuid
99
126
  assert_equal artist, artist.releases[0].artist
127
+ assert_equal 3, artist.releases[0].discs.count
100
128
  assert_equal '9cbf7040-dbdc-403c-940f-7562d9712514', artist.releases[1].id.uuid
101
129
  assert_equal artist, artist.releases[1].artist
130
+ assert_equal 2, artist.releases[1].discs.count
102
131
  assert_equal '290e10c5-7efc-4f60-ba2c-0dfc0208fbf5', artist.releases[2].id.uuid
103
132
  assert_equal artist, artist.releases[2].artist
133
+ assert_equal 4, artist.releases[2].discs.count
104
134
  end
105
135
 
106
136
  def test_artist_tori_amos_3
107
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'artist/Tori_Amos_3.xml')
137
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'artist/Tori_Amos_3.xml')
108
138
  artist = mbxml.get_entity(:artist)
109
139
 
110
140
  assert_equal 'c0b2500e-0cef-4130-869d-732b23ed9df5', artist.id.uuid
@@ -129,7 +159,7 @@ class TestMBXML < Test::Unit::TestCase
129
159
  end
130
160
 
131
161
  def test_artist_tori_amos_4
132
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'artist/Tori_Amos_4.xml')
162
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'artist/Tori_Amos_4.xml')
133
163
  artist = mbxml.get_entity(:artist)
134
164
 
135
165
  assert_equal 'c0b2500e-0cef-4130-869d-732b23ed9df5', artist.id.uuid
@@ -143,11 +173,11 @@ class TestMBXML < Test::Unit::TestCase
143
173
  assert_equal 'Myra Amos', artist.aliases[1].name
144
174
  assert_equal 'Torie Amos', artist.aliases[2].name
145
175
  assert_equal 'Latn', artist.aliases[2].script
146
- assert_equal 'Misspelling', artist.aliases[2].type
176
+ assert_equal Model::NS_MMD_1 + 'Misspelling', artist.aliases[2].type
147
177
  end
148
178
 
149
179
  def test_artist_tori_amos_5
150
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'artist/Tori_Amos_5.xml')
180
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'artist/Tori_Amos_5.xml')
151
181
  artist = mbxml.get_entity(:artist)
152
182
 
153
183
  assert_equal 'c0b2500e-0cef-4130-869d-732b23ed9df5', artist.id.uuid
@@ -158,37 +188,88 @@ class TestMBXML < Test::Unit::TestCase
158
188
  assert_equal 1, artist.releases.size
159
189
  assert_equal 'a7ccb022-f437-4492-8eee-8f85d85cdb96', artist.releases[0].id.uuid
160
190
  assert_equal 'Strange Little Girls', artist.releases[0].title
191
+ assert_equal 6, artist.releases.offset
192
+ assert_equal 9, artist.releases.count
161
193
  assert artist.releases[0].types.include?(Model::Release::TYPE_ALBUM)
162
194
  assert artist.releases[0].types.include?(Model::Release::TYPE_OFFICIAL)
163
195
  end
164
196
 
165
197
  def test_release_search
166
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'release/search_result_1.xml')
198
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'release/search_result_1.xml')
167
199
  assert_equal nil, mbxml.get_entity(:artist)
168
200
  assert_equal nil, mbxml.get_entity(:release)
169
201
  assert_equal nil, mbxml.get_entity(:track)
170
202
  assert_equal nil, mbxml.get_entity(:label)
171
203
 
172
204
  release_list = mbxml.get_entity_list(:release)
205
+ assert_equal 0, release_list.offset
206
+ assert_equal 234, release_list.count
207
+
173
208
  assert_equal 2, release_list.size, release_list.inspect
174
- assert_equal '290e10c5-7efc-4f60-ba2c-0dfc0208fbf5', release_list[0].id.uuid
175
- assert release_list[0].types.include?(Model::Release::TYPE_ALBUM)
176
- assert release_list[0].types.include?(Model::Release::TYPE_OFFICIAL)
177
- assert_equal 'Under the Pink', release_list[0].title
178
- assert_equal 'c0b2500e-0cef-4130-869d-732b23ed9df5', release_list[0].artist.id.uuid
179
- assert_equal 1, release_list[0].release_events.size
180
- assert_equal Model::IncompleteDate.new('1994-01-28'), release_list[0].release_events[0].date
209
+ assert_equal '290e10c5-7efc-4f60-ba2c-0dfc0208fbf5', release_list[0].entity.id.uuid
210
+ assert release_list[0].entity.types.include?(Model::Release::TYPE_ALBUM)
211
+ assert release_list[0].entity.types.include?(Model::Release::TYPE_OFFICIAL)
212
+ assert_equal 'Under the Pink', release_list[0].entity.title
213
+ assert_equal 'c0b2500e-0cef-4130-869d-732b23ed9df5', release_list[0].entity.artist.id.uuid
214
+ assert_equal 1, release_list[0].entity.release_events.size
215
+ assert_equal Model::IncompleteDate.new('1994-01-28'), release_list[0].entity.release_events[0].date
216
+ assert_equal 100, release_list[0].score
217
+ assert_equal 80, release_list[1].score
181
218
  end
182
219
 
183
220
  def test_release_highway_61_revisited_1
184
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'release/Highway_61_Revisited_1.xml')
221
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'release/Highway_61_Revisited_1.xml')
185
222
  release = mbxml.get_entity(:release)
186
223
 
187
- assert false, 'Test not implemented'
224
+ assert_equal 'd61a2bd9-81ac-4023-bd22-1c884d4a176c', release.id.uuid
225
+ assert release.types.include?(Model::Release::TYPE_ALBUM)
226
+ assert release.types.include?(Model::Release::TYPE_OFFICIAL)
227
+ assert_equal 'Highway 61 Revisited', release.title
228
+ assert_equal 'ENG', release.text_language
229
+ assert_equal 'Latn', release.text_script
230
+ assert_equal 'B0000C8AVR', release.asin
231
+ assert_equal '72c536dc-7137-4477-a521-567eeb840fa8', release.artist.id.uuid
232
+ assert_equal 2, release.release_events.size
233
+ assert_equal Model::IncompleteDate.new('1965-08-30'), release.release_events[0].date
234
+ assert_equal 'US', release.release_events[0].country
235
+ assert_equal 6, release.discs.size
236
+ assert_equal 'PNd4XY_ixr5GwjOGBwG2ssR94q8-', release.discs[5].id
237
+ #assert_equal 75, release.puids.count
238
+ assert_equal 9, release.tracks.size
239
+ assert_equal '430aa3d3-3dac-4bd5-857d-eb10212ffefb', release.tracks[0].id.uuid
240
+ assert_equal 'd315625a-3976-41b4-b2e0-43336b0f67bc', release.tracks[8].id.uuid
241
+
242
+ url_rels = release.get_relations(:target_type => Model::Relation::TO_URL)
243
+ assert_equal 2, url_rels.size, release.get_relations.inspect
244
+ assert_equal Model::NS_REL_1 + 'Wikipedia', url_rels[0].type
245
+ assert_equal nil, url_rels[0].direction
246
+ assert_equal 'http://en.wikipedia.org/wiki/Highway_61_Revisited', url_rels[0].target
247
+ assert_equal Model::NS_REL_1 + 'AmazonAsin', url_rels[1].type
248
+ assert_equal nil, url_rels[1].direction
249
+ assert_equal 'http://www.amazon.com/gp/product/B0000024SI', url_rels[1].target
250
+ end
251
+
252
+ def test_release_highway_61_revisited_2
253
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'release/Highway_61_Revisited_2.xml')
254
+ release = mbxml.get_entity(:release)
255
+
256
+ assert_equal 'd61a2bd9-81ac-4023-bd22-1c884d4a176c', release.id.uuid
257
+ assert release.types.include?(Model::Release::TYPE_ALBUM)
258
+ assert release.types.include?(Model::Release::TYPE_OFFICIAL)
259
+ assert_equal 'Highway 61 Revisited', release.title
260
+ assert_equal 4, release.tags.size
261
+ assert_equal 'rock', release.tags[0].text
262
+ assert_equal 100, release.tags[0].count
263
+ assert_equal 'blues rock', release.tags[1].text
264
+ assert_equal 40, release.tags[1].count
265
+ assert_equal 'folk rock', release.tags[2].text
266
+ assert_equal 40, release.tags[2].count
267
+ assert_equal 'dylan', release.tags[3].text
268
+ assert_equal 4, release.tags[3].count
188
269
  end
189
270
 
190
271
  def test_release_little_earthquakes_1
191
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'release/Little_Earthquakes_1.xml')
272
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'release/Little_Earthquakes_1.xml')
192
273
  release = mbxml.get_entity(:release)
193
274
 
194
275
  assert_equal '02232360-337e-4a3f-ad20-6cdd4c34288c', release.id.uuid
@@ -207,7 +288,7 @@ class TestMBXML < Test::Unit::TestCase
207
288
  end
208
289
 
209
290
  def test_release_little_earthquakes_2
210
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'release/Little_Earthquakes_2.xml')
291
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'release/Little_Earthquakes_2.xml')
211
292
  release = mbxml.get_entity(:release)
212
293
 
213
294
  assert_equal '02232360-337e-4a3f-ad20-6cdd4c34288c', release.id.uuid
@@ -231,7 +312,7 @@ class TestMBXML < Test::Unit::TestCase
231
312
 
232
313
  # This is a various artist release.
233
314
  def test_release_mission_impossible_2
234
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'release/Mission_Impossible_2.xml')
315
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'release/Mission_Impossible_2.xml')
235
316
  release = mbxml.get_entity(:release)
236
317
 
237
318
  assert_equal '81683d13-e014-4d35-9774-6f536f4ef557', release.id.uuid
@@ -251,45 +332,82 @@ class TestMBXML < Test::Unit::TestCase
251
332
  end
252
333
 
253
334
  def test_release_under_the_pink_1
254
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'release/Under_the_Pink_1.xml')
335
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'release/Under_the_Pink_1.xml')
255
336
  release = mbxml.get_entity(:release)
256
337
 
257
- assert false, 'Test not implemented'
338
+ assert_equal '290e10c5-7efc-4f60-ba2c-0dfc0208fbf5', release.id.uuid
339
+ assert release.types.include?(Model::Release::TYPE_ALBUM)
340
+ assert release.types.include?(Model::Release::TYPE_OFFICIAL)
341
+ assert_equal 'Under the Pink', release.title
342
+ assert_equal 'ENG', release.text_language
343
+ assert_equal 'Latn', release.text_script
344
+ assert_equal 'B000002IXU', release.asin
345
+ assert_equal 'c0b2500e-0cef-4130-869d-732b23ed9df5', release.artist.id.uuid
346
+ assert_equal 'Tori Amos', release.artist.name
347
+ assert_equal 1, release.release_events.size
348
+ assert_equal Model::IncompleteDate.new('1994-01-28'), release.release_events[0].date
349
+ assert_equal 4, release.discs.count
350
+ assert_equal 12, release.tracks.count
258
351
  end
259
352
 
260
353
  def test_release_under_the_pink_2
261
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'release/Under_the_Pink_2.xml')
354
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'release/Under_the_Pink_2.xml')
262
355
  release = mbxml.get_entity(:release)
263
356
 
264
- assert false, 'Test not implemented'
357
+ assert_equal '290e10c5-7efc-4f60-ba2c-0dfc0208fbf5', release.id.uuid
358
+ assert release.types.include?(Model::Release::TYPE_ALBUM)
359
+ assert release.types.include?(Model::Release::TYPE_OFFICIAL)
360
+ assert_equal 'Under the Pink', release.title
361
+ assert_equal 'c0b2500e-0cef-4130-869d-732b23ed9df5', release.artist.id.uuid
362
+ assert_equal 'Tori Amos', release.artist.name
363
+ assert_equal 1, release.tracks.size
364
+ assert_equal '0a984e3b-e38a-4b86-80be-f3a3eb1114ca', release.tracks[0].id.uuid
365
+ assert_equal 'God', release.tracks[0].title
265
366
  end
266
367
 
267
368
  def test_release_under_the_pink_3
268
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'release/Under_the_Pink_3.xml')
369
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'release/Under_the_Pink_3.xml')
269
370
  release = mbxml.get_entity(:release)
270
371
 
271
- assert false, 'Test not implemented'
372
+ assert_equal '290e10c5-7efc-4f60-ba2c-0dfc0208fbf5', release.id.uuid
373
+ assert release.types.include?(Model::Release::TYPE_ALBUM)
374
+ assert release.types.include?(Model::Release::TYPE_OFFICIAL)
375
+ assert_equal 'Under the Pink', release.title
376
+ assert_equal 'c0b2500e-0cef-4130-869d-732b23ed9df5', release.artist.id.uuid
377
+ assert_equal 'Tori Amos', release.artist.name
378
+ assert_equal 1, release.release_events.size
379
+ assert_equal Model::IncompleteDate.new('1994-01-31'), release.release_events[0].date
380
+ assert_equal '82567-2', release.release_events[0].catalog_number
381
+ assert_equal '07567825672', release.release_events[0].barcode
382
+ assert_equal '50c384a2-0b44-401b-b893-8181173339c7', release.release_events[0].label.id.uuid
383
+ assert_equal 'Atlantic Records', release.release_events[0].label.name
272
384
  end
273
385
 
274
386
  def test_track_search
275
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'track/search_result_1.xml')
387
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'track/search_result_1.xml')
276
388
  assert_equal nil, mbxml.get_entity(:artist)
277
389
  assert_equal nil, mbxml.get_entity(:release)
278
390
  assert_equal nil, mbxml.get_entity(:track)
279
391
  assert_equal nil, mbxml.get_entity(:label)
280
392
 
281
393
  track_list = mbxml.get_entity_list(:track)
394
+ assert_equal 7, track_list.offset
395
+ assert_equal 100, track_list.count
396
+
282
397
  assert_equal 3, track_list.size, track_list.inspect
283
- assert_equal '748f2b79-8c50-4581-adb1-7708118a48fc', track_list[0].id.uuid
284
- assert_equal 'Little Earthquakes', track_list[0].title
285
- assert_equal 457760, track_list[0].duration
286
- assert_equal 'c0b2500e-0cef-4130-869d-732b23ed9df5', track_list[0].artist.id.uuid
287
- assert_equal 1, track_list[0].releases.size
288
- assert_equal '93264fe5-dff2-47ab-9ca8-1c865733aad9', track_list[0].releases[0].id.uuid
398
+ assert_equal '748f2b79-8c50-4581-adb1-7708118a48fc', track_list[0].entity.id.uuid
399
+ assert_equal 'Little Earthquakes', track_list[0].entity.title
400
+ assert_equal 457760, track_list[0].entity.duration
401
+ assert_equal 'c0b2500e-0cef-4130-869d-732b23ed9df5', track_list[0].entity.artist.id.uuid
402
+ assert_equal 1, track_list[0].entity.releases.size
403
+ assert_equal '93264fe5-dff2-47ab-9ca8-1c865733aad9', track_list[0].entity.releases[0].id.uuid
404
+ assert_equal 100, track_list[0].score
405
+ assert_equal 99, track_list[1].score
406
+ assert_equal 80, track_list[2].score
289
407
  end
290
408
 
291
409
  def test_track_silent_all_these_years_1
292
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'track/Silent_All_These_Years_1.xml')
410
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'track/Silent_All_These_Years_1.xml')
293
411
  track = mbxml.get_entity(:track)
294
412
 
295
413
  assert_equal 'd6118046-407d-4e06-a1ba-49c399a4c42f', track.id.uuid
@@ -298,7 +416,7 @@ class TestMBXML < Test::Unit::TestCase
298
416
  end
299
417
 
300
418
  def test_track_silent_all_these_years_2
301
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'track/Silent_All_These_Years_2.xml')
419
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'track/Silent_All_These_Years_2.xml')
302
420
  track = mbxml.get_entity(:track)
303
421
 
304
422
  assert_equal 'd6118046-407d-4e06-a1ba-49c399a4c42f', track.id.uuid
@@ -315,7 +433,7 @@ class TestMBXML < Test::Unit::TestCase
315
433
  end
316
434
 
317
435
  def test_track_silent_all_these_years_3
318
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'track/Silent_All_These_Years_3.xml')
436
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'track/Silent_All_These_Years_3.xml')
319
437
  track = mbxml.get_entity(:track)
320
438
 
321
439
  assert_equal 'd6118046-407d-4e06-a1ba-49c399a4c42f', track.id.uuid
@@ -327,7 +445,7 @@ class TestMBXML < Test::Unit::TestCase
327
445
  end
328
446
 
329
447
  def test_track_silent_all_these_years_4
330
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'track/Silent_All_These_Years_4.xml')
448
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'track/Silent_All_These_Years_4.xml')
331
449
  track = mbxml.get_entity(:track)
332
450
 
333
451
  assert_equal 'd6118046-407d-4e06-a1ba-49c399a4c42f', track.id.uuid
@@ -344,7 +462,7 @@ class TestMBXML < Test::Unit::TestCase
344
462
  # This test is similiar to silent_all_these_years_3, but it includes an
345
463
  # schema exctension which mustn't disturb the parsing.
346
464
  def test_track_silent_all_these_years_5
347
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'track/Silent_All_These_Years_5.xml')
465
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'track/Silent_All_These_Years_5.xml')
348
466
  track = mbxml.get_entity(:track)
349
467
 
350
468
  assert_equal 'd6118046-407d-4e06-a1ba-49c399a4c42f', track.id.uuid
@@ -354,28 +472,43 @@ class TestMBXML < Test::Unit::TestCase
354
472
  assert_equal 'c2a2cee5-a8ca-4f89-a092-c3e1e65ab7e6', track.puids[0]
355
473
  assert_equal '42ab76ea-5d42-4259-85d7-e7f2c69e4485', track.puids[6]
356
474
  end
475
+
476
+ def test_track_silent_all_these_years_6
477
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'track/Silent_All_These_Years_6.xml')
478
+ track = mbxml.get_entity(:track)
479
+
480
+ assert_equal 'd6118046-407d-4e06-a1ba-49c399a4c42f', track.id.uuid
481
+ assert_equal 'Silent All These Years', track.title
482
+ assert_equal 253466, track.duration
483
+ assert_equal 0, track.tags.size
484
+ end
357
485
 
358
486
  def test_label_search
359
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'label/search_result_1.xml')
487
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'label/search_result_1.xml')
360
488
  assert_equal nil, mbxml.get_entity(:artist)
361
489
  assert_equal nil, mbxml.get_entity(:release)
362
490
  assert_equal nil, mbxml.get_entity(:track)
363
491
  assert_equal nil, mbxml.get_entity(:label)
364
492
 
365
493
  label_list = mbxml.get_entity_list(:label)
494
+ assert_equal 0, label_list.offset
495
+ assert_equal 2, label_list.count
496
+
366
497
  assert_equal 2, label_list.size, label_list.inspect
367
- assert_equal '50c384a2-0b44-401b-b893-8181173339c7', label_list[0].id.uuid
368
- assert_equal Model::Label::TYPE_ORIGINAL_PRODUCTION, label_list[0].type
369
- assert_equal 'Atlantic Records', label_list[0].name
370
- assert_equal 'US', label_list[0].country
371
- assert_equal 'c2ccaec8-0dfe-4dd5-a710-bddf5fd7c1a7', label_list[1].id.uuid
372
- assert_equal nil, label_list[1].type
373
- assert_equal 'DRO Atlantic', label_list[1].name
374
- assert_equal 'SP', label_list[1].country
498
+ assert_equal '50c384a2-0b44-401b-b893-8181173339c7', label_list[0].entity.id.uuid
499
+ assert_equal Model::Label::TYPE_ORIGINAL_PRODUCTION, label_list[0].entity.type
500
+ assert_equal 'Atlantic Records', label_list[0].entity.name
501
+ assert_equal 'US', label_list[0].entity.country
502
+ assert_equal 100, label_list[0].score
503
+ assert_equal 'c2ccaec8-0dfe-4dd5-a710-bddf5fd7c1a7', label_list[1].entity.id.uuid
504
+ assert_equal nil, label_list[1].entity.type
505
+ assert_equal 'DRO Atlantic', label_list[1].entity.name
506
+ assert_equal 'SP', label_list[1].entity.country
507
+ assert_equal 46, label_list[1].score
375
508
  end
376
509
 
377
510
  def test_label_atlantic_records_1
378
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'label/Atlantic_Records_1.xml')
511
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'label/Atlantic_Records_1.xml')
379
512
  label = mbxml.get_entity(:label)
380
513
 
381
514
  assert_equal '50c384a2-0b44-401b-b893-8181173339c7', label.id.uuid
@@ -383,11 +516,11 @@ class TestMBXML < Test::Unit::TestCase
383
516
  assert_equal 'Atlantic Records', label.name
384
517
  assert_equal '121', label.code
385
518
  assert_equal 'US', label.country
386
- assert_equal '1947', label.founding_date.to_s
519
+ assert_equal '1947', label.begin_date.to_s
387
520
  end
388
521
 
389
522
  def test_label_atlantic_records_2
390
- mbxml = Webservice::MBXML.new IO.read(DATA_PATH + 'label/Atlantic_Records_2.xml')
523
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'label/Atlantic_Records_2.xml')
391
524
  label = mbxml.get_entity(:label)
392
525
 
393
526
  assert_equal Model::Label::TYPE_DISTRIBUTOR, label.type
@@ -396,8 +529,45 @@ class TestMBXML < Test::Unit::TestCase
396
529
  assert_equal '121', label.code
397
530
  assert_equal 'fake', label.disambiguation
398
531
  assert_equal 'US', label.country
399
- assert_equal '1947', label.founding_date.to_s
400
- assert_equal '2047', label.dissolving_date.to_s
532
+ assert_equal '1947', label.begin_date.to_s
533
+ assert_equal '2047', label.end_date.to_s
534
+ assert_equal 1, label.aliases.size
535
+ assert_equal 'Atlantic Rec.', label.aliases[0].name
401
536
  end
402
537
 
538
+ def test_label_atlantic_records_3
539
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'label/Atlantic_Records_3.xml')
540
+ label = mbxml.get_entity(:label)
541
+
542
+ assert_equal '50c384a2-0b44-401b-b893-8181173339c7', label.id.uuid
543
+ assert_equal Model::Label::TYPE_ORIGINAL_PRODUCTION, label.type
544
+ assert_equal 'Atlantic Records', label.name
545
+ assert_equal 3, label.tags.size
546
+ assert_equal 'american', label.tags[0].text
547
+ assert_equal 'jazz', label.tags[1].text
548
+ assert_equal 'blues', label.tags[2].text
549
+ end
550
+
551
+ def test_user_1
552
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'user/User_1.xml')
553
+ users = mbxml.get_entity_list(:user, Model::NS_EXT_1).entities
554
+
555
+ assert_equal 1, users.size
556
+ assert_equal 'matt', users[0].name
557
+ assert_equal false, users[0].show_nag?
558
+ assert_equal 2, users[0].types.size
559
+ assert_equal Model::NS_EXT_1 + 'AutoEditor', users[0].types[0]
560
+ assert_equal Model::NS_EXT_1 + 'RelationshipEditor', users[0].types[1]
561
+ end
562
+
563
+ def test_new_with_factory
564
+ factory = MyFactory.new
565
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'artist/Tori_Amos_2.xml'), factory
566
+ artist = mbxml.get_entity(:artist)
567
+ assert artist.is_a?(MyArtist)
568
+ artist.releases.each do |release|
569
+ assert release.is_a?(MyRelease)
570
+ end
571
+ end
572
+
403
573
  end