rbrainz 0.4.2 → 0.5.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 (118) hide show
  1. data/CHANGES +13 -1
  2. data/LICENSE +1 -1
  3. data/README +2 -2
  4. data/Rakefile +2 -2
  5. data/TODO +9 -2
  6. data/doc/README.rdoc +5 -5
  7. data/examples/getartist.rb +3 -2
  8. data/examples/getlabel.rb +3 -2
  9. data/examples/getrelease.rb +5 -2
  10. data/examples/getreleasegroup.rb +53 -0
  11. data/examples/gettrack.rb +3 -2
  12. data/examples/getuser.rb +2 -1
  13. data/examples/rate.rb +44 -0
  14. data/examples/searchartists.rb +3 -2
  15. data/examples/searchcdstubs.rb +41 -0
  16. data/examples/searchlabels.rb +3 -2
  17. data/examples/searchreleasegroups.rb +36 -0
  18. data/examples/searchreleases.rb +6 -4
  19. data/examples/searchtracks.rb +3 -2
  20. data/examples/submit_isrcs.rb +52 -0
  21. data/examples/tag.rb +3 -2
  22. data/lib/rbrainz.rb +2 -1
  23. data/lib/rbrainz/core_ext.rb +2 -1
  24. data/lib/rbrainz/core_ext/mbid.rb +2 -1
  25. data/lib/rbrainz/core_ext/net_http_digest.rb +3 -2
  26. data/lib/rbrainz/core_ext/range.rb +3 -2
  27. data/lib/rbrainz/core_ext/range/equality.rb +2 -1
  28. data/lib/rbrainz/data/countrynames.rb +6 -3
  29. data/lib/rbrainz/data/languagenames.rb +3 -2
  30. data/lib/rbrainz/data/releasetypenames.rb +3 -2
  31. data/lib/rbrainz/data/scriptnames.rb +3 -2
  32. data/lib/rbrainz/model.rb +3 -2
  33. data/lib/rbrainz/model/alias.rb +3 -2
  34. data/lib/rbrainz/model/artist.rb +11 -3
  35. data/lib/rbrainz/model/collection.rb +3 -2
  36. data/lib/rbrainz/model/default_factory.rb +18 -6
  37. data/lib/rbrainz/model/disc.rb +3 -2
  38. data/lib/rbrainz/model/entity.rb +2 -102
  39. data/lib/rbrainz/model/incomplete_date.rb +3 -2
  40. data/lib/rbrainz/model/individual.rb +11 -2
  41. data/lib/rbrainz/model/isrc.rb +100 -0
  42. data/lib/rbrainz/model/label.rb +5 -2
  43. data/lib/rbrainz/model/mbid.rb +28 -9
  44. data/lib/rbrainz/model/rateable.rb +34 -0
  45. data/lib/rbrainz/model/rating.rb +56 -0
  46. data/lib/rbrainz/model/relateable.rb +118 -0
  47. data/lib/rbrainz/model/relation.rb +2 -1
  48. data/lib/rbrainz/model/release.rb +17 -3
  49. data/lib/rbrainz/model/release_event.rb +3 -2
  50. data/lib/rbrainz/model/release_group.rb +97 -0
  51. data/lib/rbrainz/model/scored_collection.rb +3 -2
  52. data/lib/rbrainz/model/tag.rb +5 -4
  53. data/lib/rbrainz/model/taggable.rb +27 -0
  54. data/lib/rbrainz/model/track.rb +15 -2
  55. data/lib/rbrainz/model/user.rb +3 -2
  56. data/lib/rbrainz/utils.rb +2 -1
  57. data/lib/rbrainz/utils/data.rb +3 -2
  58. data/lib/rbrainz/utils/helper.rb +8 -2
  59. data/lib/rbrainz/version.rb +3 -2
  60. data/lib/rbrainz/webservice.rb +12 -7
  61. data/lib/rbrainz/webservice/filter.rb +53 -4
  62. data/lib/rbrainz/webservice/includes.rb +72 -11
  63. data/lib/rbrainz/webservice/mbxml.rb +129 -67
  64. data/lib/rbrainz/webservice/query.rb +156 -16
  65. data/lib/rbrainz/webservice/webservice.rb +104 -116
  66. data/test/lib/mock_webservice.rb +9 -2
  67. data/test/lib/test_entity.rb +2 -97
  68. data/test/lib/test_factory.rb +9 -1
  69. data/test/lib/test_rateable.rb +31 -0
  70. data/test/lib/test_relateable.rb +103 -0
  71. data/test/lib/test_taggable.rb +36 -0
  72. data/test/lib/testing_helper.rb +17 -2
  73. data/test/test-data/invalid/artist/ratings_1.xml +6 -0
  74. data/test/test-data/invalid/artist/ratings_2.xml +6 -0
  75. data/test/test-data/valid/artist/Tchaikovsky-2.xml +6 -0
  76. data/test/test-data/valid/label/Atlantic_Records_3.xml +6 -0
  77. data/test/test-data/valid/release-group/The_Cure_1.xml +36 -0
  78. data/test/test-data/valid/release/Highway_61_Revisited_2.xml +6 -0
  79. data/test/test-data/valid/track/Silent_All_These_Years_4.xml +3 -0
  80. data/test/test-data/valid/track/Silent_All_These_Years_6.xml +8 -0
  81. data/test/test_alias.rb +2 -1
  82. data/test/test_artist.rb +24 -2
  83. data/test/test_artist_filter.rb +2 -1
  84. data/test/test_artist_includes.rb +13 -3
  85. data/test/test_collection.rb +3 -2
  86. data/test/test_default_factory.rb +8 -1
  87. data/test/test_disc.rb +2 -1
  88. data/test/test_incomplete_date.rb +2 -1
  89. data/test/test_isrc.rb +87 -0
  90. data/test/test_label.rb +8 -1
  91. data/test/test_label_filter.rb +2 -1
  92. data/test/test_label_includes.rb +10 -3
  93. data/test/test_mbid.rb +2 -1
  94. data/test/test_mbxml.rb +93 -2
  95. data/test/test_query.rb +68 -5
  96. data/test/test_range_equality.rb +2 -1
  97. data/test/test_rating.rb +46 -0
  98. data/test/test_relation.rb +2 -1
  99. data/test/test_release.rb +37 -2
  100. data/test/test_release_event.rb +2 -1
  101. data/test/test_release_filter.rb +15 -2
  102. data/test/test_release_group.rb +104 -0
  103. data/test/test_release_group_filter.rb +61 -0
  104. data/test/test_release_group_includes.rb +46 -0
  105. data/test/test_release_includes.rb +16 -3
  106. data/test/test_scored_collection.rb +3 -2
  107. data/test/test_tag.rb +2 -1
  108. data/test/test_track.rb +28 -1
  109. data/test/test_track_filter.rb +2 -1
  110. data/test/test_track_includes.rb +13 -3
  111. data/test/test_utils.rb +2 -1
  112. data/test/test_webservice.rb +11 -1
  113. metadata +38 -20
  114. data/debian/changelog +0 -11
  115. data/debian/compat +0 -1
  116. data/debian/control +0 -13
  117. data/debian/copyright +0 -25
  118. data/debian/rules +0 -48
@@ -5,6 +5,9 @@
5
5
  <track id="d6118046-407d-4e06-a1ba-49c399a4c42f">
6
6
  <title>Silent All These Years</title>
7
7
  <duration>253466</duration>
8
+ <isrc-list>
9
+ <isrc id="USPR37300012"/>
10
+ </isrc-list>
8
11
  <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5" type="Person">
9
12
  <name>Tori Amos</name>
10
13
  <sort-name>Amos, Tori</sort-name>
@@ -3,6 +3,14 @@
3
3
  <track id="d6118046-407d-4e06-a1ba-49c399a4c42f">
4
4
  <title>Silent All These Years</title>
5
5
  <duration>253466</duration>
6
+ <isrc-list>
7
+ <isrc id="USPR37300012"/>
8
+ </isrc-list>
6
9
  <tag-list></tag-list>
10
+ <user-tag-list>
11
+ <user-tag>foo</user-tag>
12
+ </user-tag-list>
13
+ <rating votes-count="10">4.5</rating>
14
+ <user-rating>3</user-rating>
7
15
  </track>
8
16
  </metadata>
@@ -1,4 +1,5 @@
1
- # $Id: test_alias.rb 139 2007-07-17 10:02:30Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: test_alias.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Philipp Wolfer
@@ -1,11 +1,15 @@
1
- # $Id: test_artist.rb 138 2007-07-17 09:05:01Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: test_artist.rb 258 2009-05-17 17:43:58Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
- # Copyright:: Copyright (c) 2007, Philipp Wolfer
5
+ # Copyright:: Copyright (c) 2007-2009, Philipp Wolfer
5
6
  # License:: RBrainz is free software distributed under a BSD style license.
6
7
  # See LICENSE[file:../LICENSE.html] for permissions.
7
8
 
8
9
  require 'test_entity'
10
+ require 'test_rateable'
11
+ require 'test_relateable'
12
+ require 'test_taggable'
9
13
 
10
14
  # Unit test for the Artist model.
11
15
  class TestArtist < Test::Unit::TestCase
@@ -13,6 +17,7 @@ class TestArtist < Test::Unit::TestCase
13
17
  def setup
14
18
  @tested_class = Model::Artist
15
19
  @invalid_entity_types = [:release, :track, :label]
20
+ @release_groups = [Model::ReleaseGroup.new, Model::ReleaseGroup.new]
16
21
  @releases = [Model::Release.new, Model::Release.new]
17
22
  @aliases = [Model::Alias.new, Model::Alias.new]
18
23
  end
@@ -22,6 +27,9 @@ class TestArtist < Test::Unit::TestCase
22
27
 
23
28
  # Include the tests for Entity
24
29
  include TestEntity
30
+ include TestRateable
31
+ include TestRelateable
32
+ include TestTaggable
25
33
 
26
34
  def test_new_artist
27
35
  artist = nil
@@ -107,6 +115,20 @@ class TestArtist < Test::Unit::TestCase
107
115
  assert_equal Model::IncompleteDate.new('1988-04-20'), artist.end_date
108
116
  end
109
117
 
118
+ def test_add_and_remove_release_groups
119
+ artist = Model::Artist.new
120
+ assert_equal 0, artist.release_groups.size
121
+ assert_nothing_raised {artist.release_groups << @release_groups[0]}
122
+ assert_equal 1, artist.release_groups.size
123
+ assert_nothing_raised {artist.release_groups << @release_groups[1]}
124
+ assert_equal 2, artist.release_groups.size
125
+
126
+ assert_nothing_raised {artist.release_groups.delete @release_groups[1]}
127
+ assert_equal 1, artist.release_groups.size
128
+ assert_nothing_raised {artist.release_groups.delete @release_groups[0]}
129
+ assert_equal 0, artist.release_groups.size
130
+ end
131
+
110
132
  # Many releases can be added
111
133
  def test_add_and_remove_releases
112
134
  artist = Model::Artist.new
@@ -1,4 +1,5 @@
1
- # $Id: test_artist_filter.rb 121 2007-07-12 08:56:19Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: test_artist_filter.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Philipp Wolfer
@@ -1,4 +1,5 @@
1
- # $Id: test_artist_includes.rb 203 2008-03-17 11:00:15Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: test_artist_includes.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Philipp Wolfer
@@ -26,9 +27,13 @@ class TestArtistIncludes < Test::Unit::TestCase
26
27
  :track_rels => true,
27
28
  :label_rels => true,
28
29
  :url_rels => true,
30
+ :release_groups => true,
29
31
  :releases => [Model::Release::TYPE_ALBUM, 'Official'],
30
32
  :va_releases => ['Album', Model::Release::TYPE_OFFICIAL],
31
- :tags => true
33
+ :tags => true,
34
+ :user_tags => true,
35
+ :ratings => true,
36
+ :user_ratings => true
32
37
  )
33
38
  result_string = includes.to_s
34
39
  assert_equal 'inc=', result_string[0..3]
@@ -40,6 +45,7 @@ class TestArtistIncludes < Test::Unit::TestCase
40
45
  assert result_array.include?('track-rels')
41
46
  assert result_array.include?('label-rels')
42
47
  assert result_array.include?('url-rels')
48
+ assert result_array.include?('release-groups')
43
49
  assert result_array.include?('sa-Album')
44
50
  assert result_array.include?('sa-Official')
45
51
  assert result_array.include?('va-Album')
@@ -55,9 +61,13 @@ class TestArtistIncludes < Test::Unit::TestCase
55
61
  :track_rels => false,
56
62
  :label_rels => false,
57
63
  :url_rels => false,
64
+ :release_groups => false,
58
65
  :releases => [],
59
66
  :va_releases => [],
60
- :tags => false
67
+ :tags => false,
68
+ :user_tags => false,
69
+ :ratings => false,
70
+ :user_ratings => false
61
71
  )
62
72
  assert_equal '', includes.to_s
63
73
 
@@ -1,4 +1,5 @@
1
- # $Id: test_collection.rb 172 2007-08-24 11:19:19Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: test_collection.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Philipp Wolfer
@@ -62,4 +63,4 @@ class TestCollection < Test::Unit::TestCase
62
63
  assert_equal @artist_three, array[2]
63
64
  end
64
65
 
65
- end
66
+ end
@@ -1,4 +1,5 @@
1
- # $Id: test_default_factory.rb 134 2007-07-16 08:46:55Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: test_default_factory.rb 273 2009-05-24 22:29:04Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Philipp Wolfer
@@ -30,6 +31,12 @@ class TestDefaultFactory < Test::Unit::TestCase
30
31
  assert factory.new_entity(:label).is_a?(Model::Label)
31
32
  end
32
33
 
34
+ def test_new_release_group
35
+ factory = Model::DefaultFactory.new
36
+ assert factory.new_release_group.is_a?(Model::ReleaseGroup)
37
+ assert factory.new_entity(Model::ReleaseGroup.entity_type).is_a?(Model::ReleaseGroup)
38
+ end
39
+
33
40
  def test_new_release
34
41
  factory = Model::DefaultFactory.new
35
42
  assert factory.new_release.is_a?(Model::Release)
@@ -1,4 +1,5 @@
1
- # $Id: test_disc.rb 138 2007-07-17 09:05:01Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: test_disc.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Philipp Wolfer
@@ -1,4 +1,5 @@
1
- # $Id: test_incomplete_date.rb 154 2007-07-24 12:39:02Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: test_incomplete_date.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Philipp Wolfer
@@ -0,0 +1,87 @@
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: test_isrc.rb 263 2009-05-24 22:15:12Z phw $
3
+ #
4
+ # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
5
+ # Copyright:: Copyright (c) 2007, Philipp Wolfer
6
+ # License:: RBrainz is free software distributed under a BSD style license.
7
+ # See LICENSE[file:../LICENSE.html] for permissions.
8
+
9
+ require 'test/unit'
10
+ require 'rbrainz/model'
11
+ include MusicBrainz
12
+
13
+ # Unit test for the Tag model.
14
+ class TestISRC < Test::Unit::TestCase
15
+
16
+ def setup
17
+ @valid_raw_isrc = 'USPR37300012'
18
+ @valid_printable_isrc = 'US-PR3-73-00012'
19
+ @invalid_isrcs = ['', 'USPR37300012X', 'USPR3730001', 'ÜSPR37300012',
20
+ 'USPR_7300012', 'USPR37300012-', '-USPR37300012']
21
+ end
22
+
23
+ def teardown
24
+ end
25
+
26
+ def test_parse_valid_raw_isrc
27
+ isrc = nil
28
+ assert_nothing_raised {isrc = Model::ISRC.parse(@valid_raw_isrc)}
29
+ assert_equal 'US', isrc.country
30
+ assert_equal 'PR3', isrc.registrant
31
+ assert_equal '73', isrc.year
32
+ assert_equal '00012', isrc.designation
33
+ end
34
+
35
+ def test_parse_lowercase_raw_isrc
36
+ isrc = nil
37
+ assert_nothing_raised {isrc = Model::ISRC.parse(@valid_raw_isrc.downcase)}
38
+ assert_equal 'US', isrc.country
39
+ assert_equal 'PR3', isrc.registrant
40
+ assert_equal '73', isrc.year
41
+ assert_equal '00012', isrc.designation
42
+ end
43
+
44
+ def test_parse_valid_printable_isrc
45
+ isrc = nil
46
+ assert_nothing_raised {isrc = Model::ISRC.parse(@valid_printable_isrc)}
47
+ assert_equal 'US', isrc.country
48
+ assert_equal 'PR3', isrc.registrant
49
+ assert_equal '73', isrc.year
50
+ assert_equal '00012', isrc.designation
51
+ end
52
+
53
+ def test_parse_invalid_isrc
54
+ @invalid_isrcs.each do |isrc|
55
+ assert_raise(Model::InvalidISRCError) { Model::ISRC.parse(isrc) }
56
+ end
57
+ end
58
+
59
+ def test_isrc_to_readable_string
60
+ isrc = Model::ISRC.parse(@valid_raw_isrc)
61
+ assert_equal @valid_printable_isrc, isrc.to_s
62
+ isrc = Model::ISRC.parse(@valid_raw_isrc.downcase)
63
+ assert_equal @valid_printable_isrc, isrc.to_s
64
+ isrc = Model::ISRC.parse(@valid_printable_isrc.downcase)
65
+ assert_equal @valid_printable_isrc, isrc.to_s
66
+ end
67
+
68
+ def test_isrc_to_string
69
+ isrc = Model::ISRC.parse(@valid_raw_isrc)
70
+ assert_equal @valid_raw_isrc, isrc.to_str
71
+ isrc = Model::ISRC.parse(@valid_raw_isrc.downcase)
72
+ assert_equal @valid_raw_isrc, isrc.to_str
73
+ isrc = Model::ISRC.parse(@valid_printable_isrc.downcase)
74
+ assert_equal @valid_raw_isrc, isrc.to_str
75
+ end
76
+
77
+ def test_isrc_equality
78
+ isrc1 = Model::ISRC.parse(@valid_raw_isrc)
79
+ isrc2 = Model::ISRC.parse(@valid_printable_isrc)
80
+ assert_equal isrc1, isrc2
81
+ assert_equal isrc1, @valid_raw_isrc
82
+ assert_equal isrc2, @valid_raw_isrc
83
+ assert_equal isrc1, @valid_printable_isrc
84
+ assert_equal isrc2, @valid_printable_isrc
85
+ end
86
+
87
+ end
@@ -1,4 +1,5 @@
1
- # $Id: test_label.rb 138 2007-07-17 09:05:01Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: test_label.rb 258 2009-05-17 17:43:58Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Philipp Wolfer
@@ -6,6 +7,9 @@
6
7
  # See LICENSE[file:../LICENSE.html] for permissions.
7
8
 
8
9
  require 'test_entity'
10
+ require 'test_rateable'
11
+ require 'test_relateable'
12
+ require 'test_taggable'
9
13
 
10
14
  # Unit test for the Label model.
11
15
  class TestLabel < Test::Unit::TestCase
@@ -22,6 +26,9 @@ class TestLabel < Test::Unit::TestCase
22
26
 
23
27
  # Include the tests for Entity
24
28
  include TestEntity
29
+ include TestRateable
30
+ include TestRelateable
31
+ include TestTaggable
25
32
 
26
33
  def test_new_label
27
34
  label = nil
@@ -1,4 +1,5 @@
1
- # $Id: test_label_filter.rb 121 2007-07-12 08:56:19Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: test_label_filter.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Philipp Wolfer
@@ -1,4 +1,5 @@
1
- # $Id: test_label_includes.rb 203 2008-03-17 11:00:15Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: test_label_includes.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Philipp Wolfer
@@ -26,7 +27,10 @@ class TestLabelIncludes < Test::Unit::TestCase
26
27
  :track_rels => true,
27
28
  :label_rels => true,
28
29
  :url_rels => true,
29
- :tags => true
30
+ :tags => true,
31
+ :user_tags => true,
32
+ :ratings => true,
33
+ :user_ratings => true
30
34
  )
31
35
  result_string = includes.to_s
32
36
  assert_equal 'inc=', result_string[0..3]
@@ -49,7 +53,10 @@ class TestLabelIncludes < Test::Unit::TestCase
49
53
  :track_rels => false,
50
54
  :label_rels => false,
51
55
  :url_rels => false,
52
- :tags => false
56
+ :tags => false,
57
+ :user_tags => false,
58
+ :ratings => false,
59
+ :user_ratings => false
53
60
  )
54
61
  assert_equal '', includes.to_s
55
62
 
@@ -1,4 +1,5 @@
1
- # $Id: test_mbid.rb 142 2007-07-17 15:49:57Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: test_mbid.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Philipp Wolfer
@@ -1,4 +1,5 @@
1
- # $Id: test_mbxml.rb 189 2007-11-26 00:10:49Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: test_mbxml.rb 279 2009-06-14 20:51:02Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -81,6 +82,8 @@ class TestMBXML < Test::Unit::TestCase
81
82
  assert_equal '1840-05-07', artist.begin_date.to_s
82
83
  assert_equal '1893-11-06', artist.end_date.to_s
83
84
  assert_equal 80, artist.aliases.size
85
+ assert artist.rating.empty?
86
+ assert artist.user_rating.empty?
84
87
  end
85
88
 
86
89
  def test_artist_tchaikovsky_2
@@ -99,6 +102,11 @@ class TestMBXML < Test::Unit::TestCase
99
102
  assert_equal 40, artist.tags[2].count
100
103
  assert_equal 'composer', artist.tags[3].text
101
104
  assert_equal 120, artist.tags[3].count
105
+ assert_equal false, artist.rating.empty?
106
+ assert_equal 4.5, artist.rating.value
107
+ assert_equal 10, artist.rating.count
108
+ assert_equal false, artist.user_rating.empty?
109
+ assert_equal 3, artist.user_rating.value
102
110
  end
103
111
 
104
112
  def test_artist_tori_amos_1
@@ -194,6 +202,31 @@ class TestMBXML < Test::Unit::TestCase
194
202
  assert artist.releases[0].types.include?(Model::Release::TYPE_OFFICIAL)
195
203
  end
196
204
 
205
+ def test_release_group_the_cure_1
206
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'release-group/The_Cure_1.xml')
207
+ release_group = mbxml.get_entity(:release_group)
208
+
209
+ assert_equal 'c6a62b78-70f7-44f7-b159-064f6b7ba03a', release_group.id.uuid
210
+ assert_equal 1, release_group.types.size
211
+ assert release_group.types.include?(Model::ReleaseGroup::TYPE_ALBUM)
212
+ assert_equal 'The Cure', release_group.title
213
+
214
+ assert_equal 4, release_group.releases.size
215
+ assert_equal 'd984e1a3-7281-46bb-ad8b-1478a00f2fbf', release_group.releases[0].id.uuid
216
+ assert_equal 'The Cure', release_group.releases[0].title
217
+ assert_equal 'ENG', release_group.releases[0].text_language
218
+ assert_equal 'Latn', release_group.releases[0].text_script
219
+ assert release_group.releases[0].types.include?(Model::Release::TYPE_ALBUM)
220
+ assert release_group.releases[0].types.include?(Model::Release::TYPE_OFFICIAL)
221
+ assert_equal 'B0002CHGZI', release_group.releases[0].asin
222
+ assert_equal 'c100a398-3132-48a8-a5fc-c3e908ac17dc', release_group.releases[1].id.uuid
223
+ assert_equal '24bec892-b21d-47d8-a288-dc6450152574', release_group.releases[2].id.uuid
224
+ assert_equal '61a4ec51-fa34-4757-85d7-83231776ed14', release_group.releases[3].id.uuid
225
+
226
+ assert_equal '69ee3720-a7cb-4402-b48d-a02c366f2bcf', release_group.artist.id.uuid
227
+ assert_equal 'The Cure', release_group.artist.name
228
+ end
229
+
197
230
  def test_release_search
198
231
  mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'release/search_result_1.xml')
199
232
  assert_equal nil, mbxml.get_entity(:artist)
@@ -247,6 +280,8 @@ class TestMBXML < Test::Unit::TestCase
247
280
  assert_equal Model::NS_REL_1 + 'AmazonAsin', url_rels[1].type
248
281
  assert_equal Model::Relation::DIR_BOTH, url_rels[1].direction
249
282
  assert_equal 'http://www.amazon.com/gp/product/B0000024SI', url_rels[1].target
283
+ assert release.rating.empty?
284
+ assert release.user_rating.empty?
250
285
  end
251
286
 
252
287
  def test_release_highway_61_revisited_2
@@ -266,6 +301,11 @@ class TestMBXML < Test::Unit::TestCase
266
301
  assert_equal 40, release.tags[2].count
267
302
  assert_equal 'dylan', release.tags[3].text
268
303
  assert_equal 4, release.tags[3].count
304
+ assert_equal false, release.rating.empty?
305
+ assert_equal 4.5, release.rating.value
306
+ assert_equal 10, release.rating.count
307
+ assert_equal false, release.user_rating.empty?
308
+ assert_equal 3, release.user_rating.value
269
309
  end
270
310
 
271
311
  def test_release_little_earthquakes_1
@@ -414,6 +454,7 @@ class TestMBXML < Test::Unit::TestCase
414
454
  assert_equal 'd6118046-407d-4e06-a1ba-49c399a4c42f', track.id.uuid
415
455
  assert_equal 'Silent All These Years', track.title
416
456
  assert_equal 253466, track.duration
457
+ assert track.isrcs.empty?
417
458
  end
418
459
 
419
460
  def test_track_silent_all_these_years_2
@@ -431,6 +472,7 @@ class TestMBXML < Test::Unit::TestCase
431
472
  assert_equal Model::Relation::DIR_BACKWARD, track_rels[0].direction
432
473
  assert track_rels[0].target.is_a?(Model::Track)
433
474
  assert_equal '5bcd4eaa-fae7-465f-9f03-d005b959ed02', track_rels[0].target.artist.id.uuid
475
+ assert track.isrcs.empty?
434
476
  end
435
477
 
436
478
  def test_track_silent_all_these_years_3
@@ -443,6 +485,7 @@ class TestMBXML < Test::Unit::TestCase
443
485
  assert_equal 7, track.puids.size
444
486
  assert_equal 'c2a2cee5-a8ca-4f89-a092-c3e1e65ab7e6', track.puids[0]
445
487
  assert_equal '42ab76ea-5d42-4259-85d7-e7f2c69e4485', track.puids[6]
488
+ assert track.isrcs.empty?
446
489
  end
447
490
 
448
491
  def test_track_silent_all_these_years_4
@@ -458,6 +501,8 @@ class TestMBXML < Test::Unit::TestCase
458
501
  assert_equal 7, track.puids.size
459
502
  assert_equal 'c2a2cee5-a8ca-4f89-a092-c3e1e65ab7e6', track.puids[0]
460
503
  assert_equal '42ab76ea-5d42-4259-85d7-e7f2c69e4485', track.puids[6]
504
+ assert_equal 1, track.isrcs.size
505
+ assert_equal 'USPR37300012', track.isrcs[0]
461
506
  end
462
507
 
463
508
  # This test is similiar to silent_all_these_years_3, but it includes an
@@ -472,6 +517,9 @@ class TestMBXML < Test::Unit::TestCase
472
517
  assert_equal 7, track.puids.size
473
518
  assert_equal 'c2a2cee5-a8ca-4f89-a092-c3e1e65ab7e6', track.puids[0]
474
519
  assert_equal '42ab76ea-5d42-4259-85d7-e7f2c69e4485', track.puids[6]
520
+ assert track.rating.empty?
521
+ assert track.user_rating.empty?
522
+ assert track.isrcs.empty?
475
523
  end
476
524
 
477
525
  def test_track_silent_all_these_years_6
@@ -482,6 +530,14 @@ class TestMBXML < Test::Unit::TestCase
482
530
  assert_equal 'Silent All These Years', track.title
483
531
  assert_equal 253466, track.duration
484
532
  assert_equal 0, track.tags.size
533
+ assert_equal false, track.rating.empty?
534
+ assert_equal 4.5, track.rating.value
535
+ assert_equal 10, track.rating.count
536
+ assert_equal false, track.user_rating.empty?
537
+ assert_equal 3, track.user_rating.value
538
+ assert_equal 1, track.isrcs.size
539
+ assert_equal Model::ISRC.new("USPR37300012"), track.isrcs[0]
540
+ assert track.isrcs[0].is_a?(Model::ISRC)
485
541
  end
486
542
 
487
543
  def test_label_search
@@ -534,6 +590,8 @@ class TestMBXML < Test::Unit::TestCase
534
590
  assert_equal '2047', label.end_date.to_s
535
591
  assert_equal 1, label.aliases.size
536
592
  assert_equal 'Atlantic Rec.', label.aliases[0].name
593
+ assert label.rating.empty?
594
+ assert label.user_rating.empty?
537
595
  end
538
596
 
539
597
  def test_label_atlantic_records_3
@@ -547,6 +605,11 @@ class TestMBXML < Test::Unit::TestCase
547
605
  assert_equal 'american', label.tags[0].text
548
606
  assert_equal 'jazz', label.tags[1].text
549
607
  assert_equal 'blues', label.tags[2].text
608
+ assert_equal false, label.rating.empty?
609
+ assert_equal 4.5, label.rating.value
610
+ assert_equal 10, label.rating.count
611
+ assert_equal false, label.user_rating.empty?
612
+ assert_equal 3, label.user_rating.value
550
613
  end
551
614
 
552
615
  def test_user_1
@@ -561,7 +624,7 @@ class TestMBXML < Test::Unit::TestCase
561
624
  assert_equal Model::NS_EXT_1 + 'RelationshipEditor', users[0].types[1]
562
625
  end
563
626
 
564
- def test_new_with_factory
627
+ def test_artist_with_factory
565
628
  factory = MyFactory.new
566
629
  mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'artist/Tori_Amos_2.xml'), factory
567
630
  artist = mbxml.get_entity(:artist)
@@ -571,4 +634,32 @@ class TestMBXML < Test::Unit::TestCase
571
634
  end
572
635
  end
573
636
 
637
+ def test_release_group_with_factory
638
+ factory = MyFactory.new
639
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'release-group/The_Cure_1.xml'), factory
640
+ release_group = mbxml.get_entity(:release_group)
641
+ assert release_group.is_a?(MyReleaseGroup)
642
+ end
643
+
644
+ def test_release_with_factory
645
+ factory = MyFactory.new
646
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'release/Highway_61_Revisited_1.xml'), factory
647
+ release = mbxml.get_entity(:release)
648
+ assert release.is_a?(MyRelease)
649
+ end
650
+
651
+ def test_label_with_factory
652
+ factory = MyFactory.new
653
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'label/Atlantic_Records_1.xml'), factory
654
+ label = mbxml.get_entity(:label)
655
+ assert label.is_a?(MyLabel)
656
+ end
657
+
658
+ def test_track_with_factory
659
+ factory = MyFactory.new
660
+ mbxml = Webservice::MBXML.new File.new(DATA_PATH + 'track/Silent_All_These_Years_1.xml'), factory
661
+ track = mbxml.get_entity(:track)
662
+ assert track.is_a?(MyTrack)
663
+ end
664
+
574
665
  end