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.
- data/CHANGES +13 -1
- data/LICENSE +1 -1
- data/README +2 -2
- data/Rakefile +2 -2
- data/TODO +9 -2
- data/doc/README.rdoc +5 -5
- data/examples/getartist.rb +3 -2
- data/examples/getlabel.rb +3 -2
- data/examples/getrelease.rb +5 -2
- data/examples/getreleasegroup.rb +53 -0
- data/examples/gettrack.rb +3 -2
- data/examples/getuser.rb +2 -1
- data/examples/rate.rb +44 -0
- data/examples/searchartists.rb +3 -2
- data/examples/searchcdstubs.rb +41 -0
- data/examples/searchlabels.rb +3 -2
- data/examples/searchreleasegroups.rb +36 -0
- data/examples/searchreleases.rb +6 -4
- data/examples/searchtracks.rb +3 -2
- data/examples/submit_isrcs.rb +52 -0
- data/examples/tag.rb +3 -2
- data/lib/rbrainz.rb +2 -1
- data/lib/rbrainz/core_ext.rb +2 -1
- data/lib/rbrainz/core_ext/mbid.rb +2 -1
- data/lib/rbrainz/core_ext/net_http_digest.rb +3 -2
- data/lib/rbrainz/core_ext/range.rb +3 -2
- data/lib/rbrainz/core_ext/range/equality.rb +2 -1
- data/lib/rbrainz/data/countrynames.rb +6 -3
- data/lib/rbrainz/data/languagenames.rb +3 -2
- data/lib/rbrainz/data/releasetypenames.rb +3 -2
- data/lib/rbrainz/data/scriptnames.rb +3 -2
- data/lib/rbrainz/model.rb +3 -2
- data/lib/rbrainz/model/alias.rb +3 -2
- data/lib/rbrainz/model/artist.rb +11 -3
- data/lib/rbrainz/model/collection.rb +3 -2
- data/lib/rbrainz/model/default_factory.rb +18 -6
- data/lib/rbrainz/model/disc.rb +3 -2
- data/lib/rbrainz/model/entity.rb +2 -102
- data/lib/rbrainz/model/incomplete_date.rb +3 -2
- data/lib/rbrainz/model/individual.rb +11 -2
- data/lib/rbrainz/model/isrc.rb +100 -0
- data/lib/rbrainz/model/label.rb +5 -2
- data/lib/rbrainz/model/mbid.rb +28 -9
- data/lib/rbrainz/model/rateable.rb +34 -0
- data/lib/rbrainz/model/rating.rb +56 -0
- data/lib/rbrainz/model/relateable.rb +118 -0
- data/lib/rbrainz/model/relation.rb +2 -1
- data/lib/rbrainz/model/release.rb +17 -3
- data/lib/rbrainz/model/release_event.rb +3 -2
- data/lib/rbrainz/model/release_group.rb +97 -0
- data/lib/rbrainz/model/scored_collection.rb +3 -2
- data/lib/rbrainz/model/tag.rb +5 -4
- data/lib/rbrainz/model/taggable.rb +27 -0
- data/lib/rbrainz/model/track.rb +15 -2
- data/lib/rbrainz/model/user.rb +3 -2
- data/lib/rbrainz/utils.rb +2 -1
- data/lib/rbrainz/utils/data.rb +3 -2
- data/lib/rbrainz/utils/helper.rb +8 -2
- data/lib/rbrainz/version.rb +3 -2
- data/lib/rbrainz/webservice.rb +12 -7
- data/lib/rbrainz/webservice/filter.rb +53 -4
- data/lib/rbrainz/webservice/includes.rb +72 -11
- data/lib/rbrainz/webservice/mbxml.rb +129 -67
- data/lib/rbrainz/webservice/query.rb +156 -16
- data/lib/rbrainz/webservice/webservice.rb +104 -116
- data/test/lib/mock_webservice.rb +9 -2
- data/test/lib/test_entity.rb +2 -97
- data/test/lib/test_factory.rb +9 -1
- data/test/lib/test_rateable.rb +31 -0
- data/test/lib/test_relateable.rb +103 -0
- data/test/lib/test_taggable.rb +36 -0
- data/test/lib/testing_helper.rb +17 -2
- data/test/test-data/invalid/artist/ratings_1.xml +6 -0
- data/test/test-data/invalid/artist/ratings_2.xml +6 -0
- data/test/test-data/valid/artist/Tchaikovsky-2.xml +6 -0
- data/test/test-data/valid/label/Atlantic_Records_3.xml +6 -0
- data/test/test-data/valid/release-group/The_Cure_1.xml +36 -0
- data/test/test-data/valid/release/Highway_61_Revisited_2.xml +6 -0
- data/test/test-data/valid/track/Silent_All_These_Years_4.xml +3 -0
- data/test/test-data/valid/track/Silent_All_These_Years_6.xml +8 -0
- data/test/test_alias.rb +2 -1
- data/test/test_artist.rb +24 -2
- data/test/test_artist_filter.rb +2 -1
- data/test/test_artist_includes.rb +13 -3
- data/test/test_collection.rb +3 -2
- data/test/test_default_factory.rb +8 -1
- data/test/test_disc.rb +2 -1
- data/test/test_incomplete_date.rb +2 -1
- data/test/test_isrc.rb +87 -0
- data/test/test_label.rb +8 -1
- data/test/test_label_filter.rb +2 -1
- data/test/test_label_includes.rb +10 -3
- data/test/test_mbid.rb +2 -1
- data/test/test_mbxml.rb +93 -2
- data/test/test_query.rb +68 -5
- data/test/test_range_equality.rb +2 -1
- data/test/test_rating.rb +46 -0
- data/test/test_relation.rb +2 -1
- data/test/test_release.rb +37 -2
- data/test/test_release_event.rb +2 -1
- data/test/test_release_filter.rb +15 -2
- data/test/test_release_group.rb +104 -0
- data/test/test_release_group_filter.rb +61 -0
- data/test/test_release_group_includes.rb +46 -0
- data/test/test_release_includes.rb +16 -3
- data/test/test_scored_collection.rb +3 -2
- data/test/test_tag.rb +2 -1
- data/test/test_track.rb +28 -1
- data/test/test_track_filter.rb +2 -1
- data/test/test_track_includes.rb +13 -3
- data/test/test_utils.rb +2 -1
- data/test/test_webservice.rb +11 -1
- metadata +38 -20
- data/debian/changelog +0 -11
- data/debian/compat +0 -1
- data/debian/control +0 -13
- data/debian/copyright +0 -25
- data/debian/rules +0 -48
data/test/test_query.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
#
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# $Id: test_query.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, Nigel Graham, Philipp Wolfer
|
|
@@ -22,7 +23,16 @@ class TestQuery < Test::Unit::TestCase
|
|
|
22
23
|
def teardown
|
|
23
24
|
end
|
|
24
25
|
|
|
25
|
-
def
|
|
26
|
+
def test_get_artist_with_includes
|
|
27
|
+
id = 'c0b2500e-0cef-4130-869d-732b23ed9df5'
|
|
28
|
+
includes = Webservice::ArtistIncludes.new(:aliases => true)
|
|
29
|
+
entity = @query.get_artist_by_id(id, includes)
|
|
30
|
+
assert entity.is_a?(Model::Artist)
|
|
31
|
+
assert_equal id, entity.id.uuid
|
|
32
|
+
assert_equal 'Tori Amos', entity.name
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def test_get_artist_without_includes
|
|
26
36
|
id = 'c0b2500e-0cef-4130-869d-732b23ed9df5'
|
|
27
37
|
entity = @query.get_artist_by_id(id)
|
|
28
38
|
assert entity.is_a?(Model::Artist)
|
|
@@ -38,7 +48,42 @@ class TestQuery < Test::Unit::TestCase
|
|
|
38
48
|
collection.entities.each {|e| assert e.is_a?(Model::Artist) }
|
|
39
49
|
end
|
|
40
50
|
|
|
41
|
-
def
|
|
51
|
+
def test_get_release_group_with_includes
|
|
52
|
+
id = 'c6a62b78-70f7-44f7-b159-064f6b7ba03a'
|
|
53
|
+
includes = Webservice::ReleaseGroupIncludes.new(:artist => true)
|
|
54
|
+
entity = @query.get_release_group_by_id(id, includes)
|
|
55
|
+
assert entity.is_a?(Model::ReleaseGroup)
|
|
56
|
+
assert_equal id, entity.id.uuid
|
|
57
|
+
assert_equal 'The Cure', entity.title
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def test_get_release_group_without_includes
|
|
61
|
+
id = 'c6a62b78-70f7-44f7-b159-064f6b7ba03a'
|
|
62
|
+
entity = @query.get_release_group_by_id(id)
|
|
63
|
+
assert entity.is_a?(Model::ReleaseGroup)
|
|
64
|
+
assert_equal id, entity.id.uuid
|
|
65
|
+
assert_equal 'The Cure', entity.title
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# TODO: Enable this test once there is a proper test file.
|
|
69
|
+
#def test_get_release_groups
|
|
70
|
+
# filter = Webservice::ReleaseGroupFilter.new(:title=>'The Cure')
|
|
71
|
+
# collection = @query.get_release_groups(filter)
|
|
72
|
+
# assert collection.is_a?(Model::Collection)
|
|
73
|
+
# assert_equal 2, collection.size
|
|
74
|
+
# collection.entities.each {|e| assert e.is_a?(Model::ReleaseGroup) }
|
|
75
|
+
#end
|
|
76
|
+
|
|
77
|
+
def test_get_release_with_includes
|
|
78
|
+
id = '290e10c5-7efc-4f60-ba2c-0dfc0208fbf5'
|
|
79
|
+
includes = Webservice::ReleaseIncludes.new(:artist => true)
|
|
80
|
+
entity = @query.get_release_by_id(id, includes)
|
|
81
|
+
assert entity.is_a?(Model::Release)
|
|
82
|
+
assert_equal id, entity.id.uuid
|
|
83
|
+
assert_equal 'Under the Pink', entity.title
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def test_get_release_without_includes
|
|
42
87
|
id = '290e10c5-7efc-4f60-ba2c-0dfc0208fbf5'
|
|
43
88
|
entity = @query.get_release_by_id(id)
|
|
44
89
|
assert entity.is_a?(Model::Release)
|
|
@@ -54,7 +99,16 @@ class TestQuery < Test::Unit::TestCase
|
|
|
54
99
|
collection.entities.each {|e| assert e.is_a?(Model::Release) }
|
|
55
100
|
end
|
|
56
101
|
|
|
57
|
-
def
|
|
102
|
+
def test_get_track_with_includes
|
|
103
|
+
id = 'd6118046-407d-4e06-a1ba-49c399a4c42f'
|
|
104
|
+
includes = Webservice::TrackIncludes.new(:releases => true)
|
|
105
|
+
entity = @query.get_track_by_id(id, includes)
|
|
106
|
+
assert entity.is_a?(Model::Track)
|
|
107
|
+
assert_equal id, entity.id.uuid
|
|
108
|
+
assert_equal 'Silent All These Years', entity.title
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def test_get_track_without_includes
|
|
58
112
|
id = 'd6118046-407d-4e06-a1ba-49c399a4c42f'
|
|
59
113
|
entity = @query.get_track_by_id(id)
|
|
60
114
|
assert entity.is_a?(Model::Track)
|
|
@@ -70,7 +124,16 @@ class TestQuery < Test::Unit::TestCase
|
|
|
70
124
|
collection.entities.each {|e| assert e.is_a?(Model::Track) }
|
|
71
125
|
end
|
|
72
126
|
|
|
73
|
-
def
|
|
127
|
+
def test_get_label_with_includes
|
|
128
|
+
id = '50c384a2-0b44-401b-b893-8181173339c7'
|
|
129
|
+
includes = Webservice::LabelIncludes.new(:aliases => true)
|
|
130
|
+
entity = @query.get_label_by_id(id, includes)
|
|
131
|
+
assert entity.is_a?(Model::Label)
|
|
132
|
+
assert_equal id, entity.id.uuid
|
|
133
|
+
assert_equal 'Atlantic Records', entity.name
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def test_get_label_without_includes
|
|
74
137
|
id = '50c384a2-0b44-401b-b893-8181173339c7'
|
|
75
138
|
entity = @query.get_label_by_id(id)
|
|
76
139
|
assert entity.is_a?(Model::Label)
|
data/test/test_range_equality.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
#
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# $Id: test_range_equality.rb 254 2009-05-13 20:04:36Z phw $
|
|
2
3
|
#
|
|
3
4
|
# Author:: Nigel Graham (mailto:nigel_graham@rubyforge.org)
|
|
4
5
|
# Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
|
data/test/test_rating.rb
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# $Id: test_rating.rb 254 2009-05-13 20:04:36Z 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 TestRating < Test::Unit::TestCase
|
|
15
|
+
|
|
16
|
+
def setup
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def teardown
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_rating
|
|
23
|
+
rating = nil
|
|
24
|
+
assert_nothing_raised {rating = Model::Rating.new}
|
|
25
|
+
assert rating.empty?
|
|
26
|
+
rating.value = 3.3
|
|
27
|
+
rating.count = 12
|
|
28
|
+
assert_equal 3.3, rating.value
|
|
29
|
+
assert_equal 3.3, rating.to_f
|
|
30
|
+
assert_equal 3, rating.to_i
|
|
31
|
+
assert_equal '3.3', rating.to_s
|
|
32
|
+
assert_equal 12, rating.count
|
|
33
|
+
assert_equal false, rating.empty?
|
|
34
|
+
|
|
35
|
+
assert_nothing_raised {rating = Model::Rating.new(5)}
|
|
36
|
+
assert_equal 5.0, rating.value
|
|
37
|
+
assert_equal nil, rating.count
|
|
38
|
+
assert_equal false, rating.empty?
|
|
39
|
+
|
|
40
|
+
assert_nothing_raised {rating = Model::Rating.new(1.0, 11)}
|
|
41
|
+
assert_equal 1.0, rating.value
|
|
42
|
+
assert_equal 11, rating.count
|
|
43
|
+
assert_equal false, rating.empty?
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
data/test/test_relation.rb
CHANGED
data/test/test_release.rb
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
#
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# $Id: test_release.rb 278 2009-06-07 21:30:51Z 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 Release model.
|
|
11
15
|
class TestRelease < Test::Unit::TestCase
|
|
@@ -13,6 +17,8 @@ class TestRelease < Test::Unit::TestCase
|
|
|
13
17
|
def setup
|
|
14
18
|
@tested_class = Model::Release
|
|
15
19
|
@invalid_entity_types = [:artist, :track, :label]
|
|
20
|
+
|
|
21
|
+
@release_groups = [Model::ReleaseGroup.new, Model::ReleaseGroup.new]
|
|
16
22
|
@tracks = [Model::Track.new, Model::Track.new]
|
|
17
23
|
@release_events = [Model::ReleaseEvent.new('DE', 2007), Model::ReleaseEvent.new('GB', 1996),
|
|
18
24
|
Model::ReleaseEvent.new('GB', '1996-06-01'), Model::ReleaseEvent.new('GB', '1996-06')]
|
|
@@ -24,6 +30,9 @@ class TestRelease < Test::Unit::TestCase
|
|
|
24
30
|
|
|
25
31
|
# Include the tests for Entity
|
|
26
32
|
include TestEntity
|
|
33
|
+
include TestRateable
|
|
34
|
+
include TestRelateable
|
|
35
|
+
include TestTaggable
|
|
27
36
|
|
|
28
37
|
def test_new_release
|
|
29
38
|
release = nil
|
|
@@ -104,6 +113,14 @@ class TestRelease < Test::Unit::TestCase
|
|
|
104
113
|
assert_equal 0, release.types.size
|
|
105
114
|
end
|
|
106
115
|
|
|
116
|
+
def test_release_group
|
|
117
|
+
release = Model::Release.new
|
|
118
|
+
release_group = Model::ReleaseGroup.new
|
|
119
|
+
assert release.release_group.nil?
|
|
120
|
+
assert_nothing_raised {release.release_group = release_group}
|
|
121
|
+
assert_equal release_group, release.release_group
|
|
122
|
+
end
|
|
123
|
+
|
|
107
124
|
# Many tracks can be added
|
|
108
125
|
def test_add_and_remove_tracks
|
|
109
126
|
release = Model::Release.new
|
|
@@ -164,4 +181,22 @@ class TestRelease < Test::Unit::TestCase
|
|
|
164
181
|
assert_equal 0, release.discs.size
|
|
165
182
|
end
|
|
166
183
|
|
|
184
|
+
def test_single_artist_release
|
|
185
|
+
release = Model::Release.new
|
|
186
|
+
assert_raise(RuntimeError) {release.single_artist_release?}
|
|
187
|
+
|
|
188
|
+
artist = Model::Artist.new('9d30e408-1559-448b-b491-2f8de1583ccf')
|
|
189
|
+
release.artist = artist
|
|
190
|
+
assert release.single_artist_release?
|
|
191
|
+
|
|
192
|
+
@tracks.each {|track| release.tracks << track}
|
|
193
|
+
assert release.single_artist_release?
|
|
194
|
+
|
|
195
|
+
release.tracks[0].artist = artist
|
|
196
|
+
assert release.single_artist_release?
|
|
197
|
+
|
|
198
|
+
release.tracks[1].artist = Model::Artist.new('10bf95b6-30e3-44f1-817f-45762cdc0de0')
|
|
199
|
+
assert release.single_artist_release? == false
|
|
200
|
+
end
|
|
201
|
+
|
|
167
202
|
end
|
data/test/test_release_event.rb
CHANGED
data/test/test_release_filter.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
#
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# $Id: test_release_filter.rb 264 2009-05-24 22:15:19Z phw $
|
|
2
3
|
#
|
|
3
4
|
# Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
|
|
4
5
|
# Copyright:: Copyright (c) 2007, Philipp Wolfer
|
|
@@ -25,6 +26,7 @@ class TestReleaseFilter < Test::Unit::TestCase
|
|
|
25
26
|
:asin => 'B00004VVW9',
|
|
26
27
|
:lang => 'ENG',
|
|
27
28
|
:script => 'Latn',
|
|
29
|
+
:cdstubs => false,
|
|
28
30
|
:limit => 10,
|
|
29
31
|
:offset => 20,
|
|
30
32
|
:query => 'date:2000'
|
|
@@ -50,6 +52,7 @@ class TestReleaseFilter < Test::Unit::TestCase
|
|
|
50
52
|
assert_equal @filter_hash[:asin], result_hash['asin'], filter_string
|
|
51
53
|
assert_equal @filter_hash[:lang], result_hash['lang'], filter_string
|
|
52
54
|
assert_equal @filter_hash[:script], result_hash['script'], filter_string
|
|
55
|
+
assert_equal 'no', result_hash['cdstubs'], filter_string
|
|
53
56
|
assert_equal @filter_hash[:limit].to_s, result_hash['limit'], filter_string
|
|
54
57
|
assert_equal @filter_hash[:offset].to_s, result_hash['offset'], filter_string
|
|
55
58
|
assert_equal @filter_hash[:query].to_s, result_hash['query'], filter_string
|
|
@@ -66,7 +69,17 @@ class TestReleaseFilter < Test::Unit::TestCase
|
|
|
66
69
|
|
|
67
70
|
def test_empty_filter
|
|
68
71
|
filter = Webservice::ReleaseFilter.new({})
|
|
69
|
-
assert_equal '', filter.to_s
|
|
72
|
+
assert_equal 'cdstubs=no', filter.to_s
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def test_include_cdstubs
|
|
76
|
+
filter = Webservice::ReleaseFilter.new({ :cdstubs => true })
|
|
77
|
+
assert_equal 'cdstubs=yes', filter.to_s
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def test_exclude_cdstubs
|
|
81
|
+
filter = Webservice::ReleaseFilter.new({ :cdstubs => false })
|
|
82
|
+
assert_equal 'cdstubs=no', filter.to_s
|
|
70
83
|
end
|
|
71
84
|
|
|
72
85
|
end
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# $Id: test_release_group.rb 271 2009-05-24 22:15:31Z phw $
|
|
3
|
+
#
|
|
4
|
+
# Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
|
|
5
|
+
# Copyright:: Copyright (c) 2009, 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_entity'
|
|
10
|
+
|
|
11
|
+
# Unit test for the Release model.
|
|
12
|
+
class TestReleaseGroup < Test::Unit::TestCase
|
|
13
|
+
|
|
14
|
+
def setup
|
|
15
|
+
@tested_class = Model::ReleaseGroup
|
|
16
|
+
@invalid_entity_types = [:artist, :track, :label, :release]
|
|
17
|
+
@releases = [Model::Release.new, Model::Release.new]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def teardown
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Include the tests for Entity
|
|
24
|
+
include TestEntity
|
|
25
|
+
|
|
26
|
+
def test_new_release_group
|
|
27
|
+
release_group = nil
|
|
28
|
+
assert_nothing_raised {release_group = Model::ReleaseGroup.new}
|
|
29
|
+
assert release_group.is_a?(Model::Entity)
|
|
30
|
+
|
|
31
|
+
mbid = Model::MBID.new('a07cbaff-aa79-35a9-9932-af7335f306eb', :release_group)
|
|
32
|
+
assert_nothing_raised {release_group = Model::ReleaseGroup.new(
|
|
33
|
+
mbid,
|
|
34
|
+
'In Requiem'
|
|
35
|
+
)}
|
|
36
|
+
assert_equal mbid, release_group.id
|
|
37
|
+
assert_equal 'In Requiem', release_group.title
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_title
|
|
41
|
+
release_group = Model::ReleaseGroup.new
|
|
42
|
+
assert release_group.title.nil?
|
|
43
|
+
assert_nothing_raised {release_group.title = 'Draconian Times'}
|
|
44
|
+
assert_equal 'Draconian Times', release_group.title
|
|
45
|
+
assert_equal 'Draconian Times', release_group.to_s
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def test_types
|
|
49
|
+
release_group = Model::ReleaseGroup.new
|
|
50
|
+
assert_equal 0, release_group.types.size
|
|
51
|
+
types = []
|
|
52
|
+
assert_nothing_raised {
|
|
53
|
+
types = [Model::ReleaseGroup::TYPE_NONE,
|
|
54
|
+
Model::ReleaseGroup::TYPE_NON_ALBUM_TRACKS,
|
|
55
|
+
Model::ReleaseGroup::TYPE_ALBUM,
|
|
56
|
+
Model::ReleaseGroup::TYPE_SINGLE,
|
|
57
|
+
Model::ReleaseGroup::TYPE_EP,
|
|
58
|
+
Model::ReleaseGroup::TYPE_SOUNDTRACK,
|
|
59
|
+
Model::ReleaseGroup::TYPE_SPOKENWORD,
|
|
60
|
+
Model::ReleaseGroup::TYPE_INTERVIEW,
|
|
61
|
+
Model::ReleaseGroup::TYPE_AUDIOBOOK,
|
|
62
|
+
Model::ReleaseGroup::TYPE_LIVE,
|
|
63
|
+
Model::ReleaseGroup::TYPE_REMIX,
|
|
64
|
+
Model::ReleaseGroup::TYPE_OTHER,
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
# Adding all those types should be possible.
|
|
69
|
+
types.each {|type|
|
|
70
|
+
assert_nothing_raised {release_group.types << type}
|
|
71
|
+
}
|
|
72
|
+
assert_equal 12, release_group.types.size
|
|
73
|
+
|
|
74
|
+
# Removing the types again
|
|
75
|
+
types.each {|type|
|
|
76
|
+
assert_nothing_raised {release_group.types.delete type}
|
|
77
|
+
}
|
|
78
|
+
assert_equal 0, release_group.types.size
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def test_artist
|
|
82
|
+
release_group = Model::ReleaseGroup.new
|
|
83
|
+
artist = Model::Artist.new
|
|
84
|
+
assert release_group.artist.nil?
|
|
85
|
+
assert_nothing_raised {release_group.artist = artist}
|
|
86
|
+
assert_equal artist, release_group.artist
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Many releases can be added
|
|
90
|
+
def test_add_and_remove_releases
|
|
91
|
+
release_group = Model::ReleaseGroup.new
|
|
92
|
+
assert_equal 0, release_group.releases.size
|
|
93
|
+
assert_nothing_raised {release_group.releases << @releases[0]}
|
|
94
|
+
assert_equal 1, release_group.releases.size
|
|
95
|
+
assert_nothing_raised {release_group.releases << @releases[1]}
|
|
96
|
+
assert_equal 2, release_group.releases.size
|
|
97
|
+
|
|
98
|
+
assert_nothing_raised {release_group.releases.delete @releases[1]}
|
|
99
|
+
assert_equal 1, release_group.releases.size
|
|
100
|
+
assert_nothing_raised {release_group.releases.delete @releases[0]}
|
|
101
|
+
assert_equal 0, release_group.releases.size
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# $Id: test_release_group_filter.rb 273 2009-05-24 22:29:04Z 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 'testing_helper'
|
|
11
|
+
require 'rbrainz'
|
|
12
|
+
include MusicBrainz
|
|
13
|
+
|
|
14
|
+
# Unit test for the ReleaseFilter class.
|
|
15
|
+
class TestReleaseGroupFilter < Test::Unit::TestCase
|
|
16
|
+
|
|
17
|
+
def setup
|
|
18
|
+
@filter_hash = {
|
|
19
|
+
:title => 'Haven',
|
|
20
|
+
:artist => 'Dark Tranquillity',
|
|
21
|
+
:artistid => '9d30e408-1559-448b-b491-2f8de1583ccf',
|
|
22
|
+
:releasetypes => 'Album Official',
|
|
23
|
+
:limit => 10,
|
|
24
|
+
:offset => 20,
|
|
25
|
+
:query => 'title:Haven'
|
|
26
|
+
}
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def teardown
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_filter
|
|
33
|
+
filter = Webservice::ReleaseGroupFilter.new(@filter_hash)
|
|
34
|
+
filter_string = filter.to_s
|
|
35
|
+
assert_not_equal '&', filter_string[0]
|
|
36
|
+
|
|
37
|
+
result_hash = query_string_to_hash filter_string
|
|
38
|
+
assert_equal @filter_hash[:title], result_hash['title'], filter_string
|
|
39
|
+
assert_equal @filter_hash[:artist], result_hash['artist'], filter_string
|
|
40
|
+
assert_equal @filter_hash[:artistid], result_hash['artistid'], filter_string
|
|
41
|
+
assert_equal @filter_hash[:releasetypes], result_hash['releasetypes'], filter_string
|
|
42
|
+
assert_equal @filter_hash[:limit].to_s, result_hash['limit'], filter_string
|
|
43
|
+
assert_equal @filter_hash[:offset].to_s, result_hash['offset'], filter_string
|
|
44
|
+
assert_equal @filter_hash[:query].to_s, result_hash['query'], filter_string
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_release_types_as_array
|
|
48
|
+
filter = Webservice::ReleaseGroupFilter.new(:releasetypes => [Model::ReleaseGroup::TYPE_ALBUM, 'Official'])
|
|
49
|
+
filter_string = filter.to_s
|
|
50
|
+
assert_not_equal '&', filter_string[0]
|
|
51
|
+
|
|
52
|
+
result_hash = query_string_to_hash filter_string
|
|
53
|
+
assert_equal 'Album Official', result_hash['releasetypes'], filter_string
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def test_empty_filter
|
|
57
|
+
filter = Webservice::ReleaseGroupFilter.new({})
|
|
58
|
+
assert_equal '', filter.to_s
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
end
|