rbrainz 0.1.1 → 0.2.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 (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