rbrainz 0.4.2 → 0.5.0

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