rbrainz 0.1.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/LICENSE +25 -0
- data/README +11 -0
- data/Rakefile +110 -0
- data/TODO +24 -0
- data/doc/README.rdoc +68 -0
- data/examples/getartist.rb +54 -0
- data/lib/rbrainz.rb +11 -0
- data/lib/rbrainz/data/countrynames.rb +259 -0
- data/lib/rbrainz/data/languagenames.rb +404 -0
- data/lib/rbrainz/data/scriptnames.rb +64 -0
- data/lib/rbrainz/model.rb +48 -0
- data/lib/rbrainz/model/alias.rb +23 -0
- data/lib/rbrainz/model/artist.rb +54 -0
- data/lib/rbrainz/model/disc.rb +30 -0
- data/lib/rbrainz/model/entity.rb +72 -0
- data/lib/rbrainz/model/incomplete_date.rb +76 -0
- data/lib/rbrainz/model/label.rb +55 -0
- data/lib/rbrainz/model/mbid.rb +82 -0
- data/lib/rbrainz/model/release.rb +50 -0
- data/lib/rbrainz/model/release_event.rb +34 -0
- data/lib/rbrainz/model/track.rb +27 -0
- data/lib/rbrainz/webservice.rb +6 -0
- data/lib/rbrainz/webservice/filter.rb +132 -0
- data/lib/rbrainz/webservice/includes.rb +150 -0
- data/lib/rbrainz/webservice/mbxml.rb +404 -0
- data/lib/rbrainz/webservice/query.rb +61 -0
- data/lib/rbrainz/webservice/webservice.rb +69 -0
- data/test/lib/test_entity.rb +58 -0
- data/test/lib/testing_helper.rb +13 -0
- data/test/test-data/README +13 -0
- data/test/test-data/invalid/artist/basic_1.xml +12 -0
- data/test/test-data/invalid/artist/basic_2.xml +12 -0
- data/test/test-data/invalid/artist/empty_1.xml +0 -0
- data/test/test-data/invalid/artist/empty_2.xml +3 -0
- data/test/test-data/invalid/artist/empty_3.xml +7 -0
- data/test/test-data/invalid/artist/search_result_1.xml +11 -0
- data/test/test-data/valid/artist/Tchaikovsky-1.xml +90 -0
- data/test/test-data/valid/artist/Tori_Amos_1.xml +8 -0
- data/test/test-data/valid/artist/Tori_Amos_2.xml +53 -0
- data/test/test-data/valid/artist/Tori_Amos_3.xml +25 -0
- data/test/test-data/valid/artist/Tori_Amos_4.xml +14 -0
- data/test/test-data/valid/artist/Tori_Amos_5.xml +13 -0
- data/test/test-data/valid/artist/empty_1.xml +7 -0
- data/test/test-data/valid/artist/empty_2.xml +11 -0
- data/test/test-data/valid/artist/search_result_1.xml +19 -0
- data/test/test-data/valid/label/Atlantic_Records_1.xml +9 -0
- data/test/test-data/valid/label/Atlantic_Records_2.xml +11 -0
- data/test/test-data/valid/label/search_result_1.xml +14 -0
- data/test/test-data/valid/release/Highway_61_Revisited_1.xml +68 -0
- data/test/test-data/valid/release/Little_Earthquakes_1.xml +24 -0
- data/test/test-data/valid/release/Little_Earthquakes_2.xml +73 -0
- data/test/test-data/valid/release/Mission_Impossible_2.xml +155 -0
- data/test/test-data/valid/release/Under_the_Pink_1.xml +16 -0
- data/test/test-data/valid/release/Under_the_Pink_2.xml +14 -0
- data/test/test-data/valid/release/Under_the_Pink_3.xml +16 -0
- data/test/test-data/valid/release/search_result_1.xml +29 -0
- data/test/test-data/valid/track/Silent_All_These_Years_1.xml +7 -0
- data/test/test-data/valid/track/Silent_All_These_Years_2.xml +21 -0
- data/test/test-data/valid/track/Silent_All_These_Years_3.xml +16 -0
- data/test/test-data/valid/track/Silent_All_These_Years_4.xml +30 -0
- data/test/test-data/valid/track/Silent_All_These_Years_5.xml +20 -0
- data/test/test-data/valid/track/search_result_1.xml +45 -0
- data/test/test-data/valid/user/User_1.xml +15 -0
- data/test/test_alias.rb +50 -0
- data/test/test_artist.rb +132 -0
- data/test/test_artist_filter.rb +36 -0
- data/test/test_artist_includes.rb +63 -0
- data/test/test_disc.rb +38 -0
- data/test/test_incomplete_date.rb +60 -0
- data/test/test_label.rb +129 -0
- data/test/test_label_filter.rb +36 -0
- data/test/test_label_includes.rb +55 -0
- data/test/test_mbid.rb +99 -0
- data/test/test_mbxml.rb +368 -0
- data/test/test_query.rb +24 -0
- data/test/test_release.rb +161 -0
- data/test/test_release_event.rb +67 -0
- data/test/test_release_filter.rb +57 -0
- data/test/test_release_includes.rb +73 -0
- data/test/test_track.rb +102 -0
- data/test/test_track_filter.rb +57 -0
- data/test/test_track_includes.rb +61 -0
- data/test/test_webservice.rb +23 -0
- metadata +138 -0
@@ -0,0 +1,63 @@
|
|
1
|
+
# $Id$
|
2
|
+
# Copyright (c) 2007, Philipp Wolfer
|
3
|
+
# All rights reserved.
|
4
|
+
# See LICENSE for permissions.
|
5
|
+
|
6
|
+
require 'test/unit'
|
7
|
+
require 'rbrainz'
|
8
|
+
include MusicBrainz
|
9
|
+
|
10
|
+
# Unit test for the ArtistIncludes class.
|
11
|
+
class TestArtistIncludes < Test::Unit::TestCase
|
12
|
+
|
13
|
+
def setup
|
14
|
+
end
|
15
|
+
|
16
|
+
def teardown
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_includes
|
20
|
+
includes = Webservice::ArtistIncludes.new(
|
21
|
+
:aliases => true,
|
22
|
+
:artist_rels => true,
|
23
|
+
:release_rels => true,
|
24
|
+
:track_rels => true,
|
25
|
+
:label_rels => true,
|
26
|
+
:url_rels => true,
|
27
|
+
:releases => ['Album', 'Official'],
|
28
|
+
:va_releases => ['Album', 'Official']
|
29
|
+
)
|
30
|
+
result_string = includes.to_s
|
31
|
+
assert_equal 'inc=', result_string[0..3]
|
32
|
+
|
33
|
+
result_array = result_string[4..-1].split('%20')
|
34
|
+
assert result_array.include?('aliases')
|
35
|
+
assert result_array.include?('artist-rels')
|
36
|
+
assert result_array.include?('release-rels')
|
37
|
+
assert result_array.include?('track-rels')
|
38
|
+
assert result_array.include?('label-rels')
|
39
|
+
assert result_array.include?('url-rels')
|
40
|
+
assert result_array.include?('sa-Album')
|
41
|
+
assert result_array.include?('sa-Official')
|
42
|
+
assert result_array.include?('va-Album')
|
43
|
+
assert result_array.include?('va-Official')
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_empty_includes
|
47
|
+
includes = Webservice::ArtistIncludes.new(
|
48
|
+
:aliases => false,
|
49
|
+
:artist_rels => false,
|
50
|
+
:release_rels => false,
|
51
|
+
:track_rels => false,
|
52
|
+
:label_rels => false,
|
53
|
+
:url_rels => false,
|
54
|
+
:releases => [],
|
55
|
+
:va_releases => []
|
56
|
+
)
|
57
|
+
assert_equal '', includes.to_s
|
58
|
+
|
59
|
+
includes = Webservice::ArtistIncludes.new({})
|
60
|
+
assert_equal '', includes.to_s
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
data/test/test_disc.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# $Id$
|
2
|
+
# Copyright (c) 2007, Philipp Wolfer
|
3
|
+
# All rights reserved.
|
4
|
+
# See LICENSE for permissions.
|
5
|
+
|
6
|
+
require 'test/unit'
|
7
|
+
require 'rbrainz/model'
|
8
|
+
include MusicBrainz
|
9
|
+
|
10
|
+
# Unit test for the Disc model.
|
11
|
+
class TestDisc < Test::Unit::TestCase
|
12
|
+
|
13
|
+
def setup
|
14
|
+
end
|
15
|
+
|
16
|
+
def teardown
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_new_disc
|
20
|
+
disc = nil
|
21
|
+
assert_nothing_raised {disc = Model::Disc.new}
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_id
|
25
|
+
disc = Model::Disc.new
|
26
|
+
assert disc.id.nil?
|
27
|
+
assert_nothing_raised {disc.id = 'Tit3F0Do_sZ_7NbfM_1vlEbF0wo-'}
|
28
|
+
assert_equal 'Tit3F0Do_sZ_7NbfM_1vlEbF0wo-', disc.id
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_sectors
|
32
|
+
disc = Model::Disc.new
|
33
|
+
assert disc.sectors.nil?
|
34
|
+
assert_nothing_raised {disc.sectors = 264432}
|
35
|
+
assert_equal 264432, disc.sectors
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# $Id$
|
2
|
+
# Copyright (c) 2007, Philipp Wolfer
|
3
|
+
# All rights reserved.
|
4
|
+
# See LICENSE for permissions.
|
5
|
+
|
6
|
+
require 'test/unit'
|
7
|
+
require 'rbrainz/model'
|
8
|
+
include MusicBrainz
|
9
|
+
|
10
|
+
# Unit test for the IncompleteDate model.
|
11
|
+
class TestIncompleteDate < Test::Unit::TestCase
|
12
|
+
|
13
|
+
def setup
|
14
|
+
@date_year_month_day = Model::IncompleteDate.new '1980-08-22'
|
15
|
+
@date_year_month = Model::IncompleteDate.new '1980-08'
|
16
|
+
@date_year = Model::IncompleteDate.new '1980'
|
17
|
+
end
|
18
|
+
|
19
|
+
def teardown
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_new
|
23
|
+
date = nil
|
24
|
+
assert_nothing_raised {date = Model::IncompleteDate.new('1969-01-05')}
|
25
|
+
assert_equal 1969, date.year
|
26
|
+
assert_equal 1, date.month
|
27
|
+
assert_equal 5, date.day
|
28
|
+
assert_nothing_raised {date = Model::IncompleteDate.new(1980)}
|
29
|
+
assert_equal 1980, date.year
|
30
|
+
assert_nothing_raised {date = Model::IncompleteDate.new(Date.parse('1969-01-05'))}
|
31
|
+
assert_equal 1969, date.year
|
32
|
+
assert_equal 1, date.month
|
33
|
+
assert_equal 5, date.day
|
34
|
+
assert_nothing_raised {date = Model::IncompleteDate.new(nil)}
|
35
|
+
assert_equal nil, date.year
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_invalid_format
|
39
|
+
assert_raise(ArgumentError) {date = Model::IncompleteDate.new('69-01-05')}
|
40
|
+
assert_raise(ArgumentError) {date = Model::IncompleteDate.new(69)}
|
41
|
+
assert_raise(ArgumentError) {date = Model::IncompleteDate.new('1969/01/05')}
|
42
|
+
assert_raise(ArgumentError) {date = Model::IncompleteDate.new('01-05-1969')}
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_to_string
|
46
|
+
assert_equal '1980-08-22', @date_year_month_day.to_s
|
47
|
+
assert_equal '1980-08', @date_year_month.to_s
|
48
|
+
assert_equal '1980', @date_year.to_s
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_equality
|
52
|
+
assert_equal(@date_year_month_day, @date_year_month,
|
53
|
+
"#{@date_year_month_day.to_s} <=> #{@date_year_month.to_s}")
|
54
|
+
assert_equal(@date_year_month, @date_year,
|
55
|
+
"#{@date_year_month.to_s} <=> #{@date_year.to_s}")
|
56
|
+
assert_equal(@date_year, @date_year_month_day,
|
57
|
+
"#{@date_year.to_s} <=> #{@date_year_month_day.to_s}")
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
data/test/test_label.rb
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
# $Id$
|
2
|
+
# Copyright (c) 2007, Philipp Wolfer
|
3
|
+
# All rights reserved.
|
4
|
+
# See LICENSE for permissions.
|
5
|
+
|
6
|
+
require 'test_entity'
|
7
|
+
|
8
|
+
# Unit test for the Label model.
|
9
|
+
class TestLabel < Test::Unit::TestCase
|
10
|
+
|
11
|
+
def setup
|
12
|
+
@tested_class = Model::Label
|
13
|
+
@invalid_entity_types = [:artist, :release, :track]
|
14
|
+
@releases = [Model::Release.new, Model::Release.new]
|
15
|
+
end
|
16
|
+
|
17
|
+
def teardown
|
18
|
+
end
|
19
|
+
|
20
|
+
# Include the tests for Entity
|
21
|
+
include TestEntity
|
22
|
+
|
23
|
+
def test_new_label
|
24
|
+
label = nil
|
25
|
+
assert_nothing_raised {label = Model::Label.new}
|
26
|
+
assert label.is_a?(Model::Entity)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_name
|
30
|
+
label = Model::Label.new
|
31
|
+
assert label.name.nil?
|
32
|
+
assert_nothing_raised {label.name = 'Century Media'}
|
33
|
+
assert_equal 'Century Media', label.name
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_sort_name
|
37
|
+
label = Model::Label.new
|
38
|
+
assert label.sort_name.nil?
|
39
|
+
assert_nothing_raised {label.sort_name = 'Century Media'}
|
40
|
+
assert_equal 'Century Media', label.sort_name
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_disambiguation
|
44
|
+
label = Model::Label.new
|
45
|
+
assert label.disambiguation.nil?
|
46
|
+
assert_nothing_raised {label.disambiguation = 'Disambiguation comment'}
|
47
|
+
assert_equal 'Disambiguation comment', label.disambiguation
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_code
|
51
|
+
label = Model::Label.new
|
52
|
+
assert label.code.nil?
|
53
|
+
assert_nothing_raised {label.code = '6975'}
|
54
|
+
assert_equal '6975', label.code
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_country
|
58
|
+
label = Model::Label.new
|
59
|
+
assert label.country.nil?
|
60
|
+
assert_nothing_raised {label.country = 'DE'}
|
61
|
+
assert_equal 'DE', label.country
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_type
|
65
|
+
label = Model::Label.new
|
66
|
+
assert label.type.nil?
|
67
|
+
assert_nothing_raised {label.type = Model::Label::TYPE_DISTRIBUTOR}
|
68
|
+
assert_equal Model::Label::TYPE_DISTRIBUTOR, label.type
|
69
|
+
assert_nothing_raised {label.type = Model::Label::TYPE_HOLDING}
|
70
|
+
assert_equal Model::Label::TYPE_HOLDING, label.type
|
71
|
+
assert_nothing_raised {label.type = Model::Label::TYPE_ORIGINAL_PRODUCTION}
|
72
|
+
assert_equal Model::Label::TYPE_ORIGINAL_PRODUCTION, label.type
|
73
|
+
assert_nothing_raised {label.type = Model::Label::TYPE_BOOTLEG_PRODUCTION}
|
74
|
+
assert_equal Model::Label::TYPE_BOOTLEG_PRODUCTION, label.type
|
75
|
+
assert_nothing_raised {label.type = Model::Label::TYPE_REISSUE_PRODUCTION}
|
76
|
+
assert_equal Model::Label::TYPE_REISSUE_PRODUCTION, label.type
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_founding_date
|
80
|
+
label = Model::Label.new
|
81
|
+
date = Model::IncompleteDate.new '1988-04-18'
|
82
|
+
assert_nothing_raised {label.founding_date}
|
83
|
+
assert_equal nil, label.founding_date
|
84
|
+
assert_nothing_raised {label.founding_date = date}
|
85
|
+
assert_equal date, label.founding_date
|
86
|
+
|
87
|
+
# It should be able to supply a date as a string,
|
88
|
+
# but Label should convert it to an IncompleteDate.
|
89
|
+
assert_nothing_raised {label.founding_date = '1988-04-20'}
|
90
|
+
assert_equal Model::IncompleteDate.new('1988-04-20'), label.founding_date
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_dissolving_date
|
94
|
+
label = Model::Label.new
|
95
|
+
date = Model::IncompleteDate.new '1988-04-18'
|
96
|
+
assert_nothing_raised {label.dissolving_date}
|
97
|
+
assert_equal nil, label.dissolving_date
|
98
|
+
assert_nothing_raised {label.dissolving_date = date}
|
99
|
+
assert_equal date, label.dissolving_date
|
100
|
+
|
101
|
+
# It should be able to supply a date as a string,
|
102
|
+
# but Label should convert it to an IncompleteDate.
|
103
|
+
assert_nothing_raised {label.dissolving_date = '1988-04-20'}
|
104
|
+
assert_equal Model::IncompleteDate.new('1988-04-20'), label.dissolving_date
|
105
|
+
end
|
106
|
+
|
107
|
+
# Many releases can be added
|
108
|
+
def test_add_and_remove_releases
|
109
|
+
label = Model::Label.new
|
110
|
+
assert_equal 0, label.releases.size
|
111
|
+
assert_nothing_raised {label.releases << @releases[0]}
|
112
|
+
assert_equal 1, label.releases.size
|
113
|
+
assert_nothing_raised {label.releases << @releases[1]}
|
114
|
+
assert_equal 2, label.releases.size
|
115
|
+
|
116
|
+
assert_nothing_raised {label.releases.delete @releases[1]}
|
117
|
+
assert_equal 1, label.releases.size
|
118
|
+
assert_nothing_raised {label.releases.delete @releases[0]}
|
119
|
+
assert_equal 0, label.releases.size
|
120
|
+
end
|
121
|
+
|
122
|
+
# You can pass an array of releases to add them all.
|
123
|
+
def test_add_several_releases_at_once
|
124
|
+
label = Model::Label.new
|
125
|
+
assert_nothing_raised {label.releases = @releases}
|
126
|
+
assert_equal @releases, label.releases
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# $Id$
|
2
|
+
# Copyright (c) 2007, Philipp Wolfer
|
3
|
+
# All rights reserved.
|
4
|
+
# See LICENSE for permissions.
|
5
|
+
|
6
|
+
require 'test/unit'
|
7
|
+
require 'testing_helper'
|
8
|
+
require 'rbrainz'
|
9
|
+
include MusicBrainz
|
10
|
+
|
11
|
+
# Unit test for the LabelFilter class.
|
12
|
+
class TestLabelFilter < Test::Unit::TestCase
|
13
|
+
|
14
|
+
def setup
|
15
|
+
@filter_hash = {:name => 'Century Media', :limit => 10}
|
16
|
+
end
|
17
|
+
|
18
|
+
def teardown
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_filter
|
22
|
+
filter = Webservice::LabelFilter.new(@filter_hash)
|
23
|
+
filter_string = filter.to_s
|
24
|
+
assert_not_equal '&', filter_string[0]
|
25
|
+
|
26
|
+
result_hash = query_string_to_hash filter_string
|
27
|
+
assert_equal @filter_hash[:name], result_hash['name'], filter_string
|
28
|
+
assert_equal @filter_hash[:limit].to_s, result_hash['limit'], filter_string
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_empty_filter
|
32
|
+
filter = Webservice::LabelFilter.new({})
|
33
|
+
assert_equal '', filter.to_s
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# $Id$
|
2
|
+
# Copyright (c) 2007, Philipp Wolfer
|
3
|
+
# All rights reserved.
|
4
|
+
# See LICENSE for permissions.
|
5
|
+
|
6
|
+
require 'test/unit'
|
7
|
+
require 'rbrainz'
|
8
|
+
include MusicBrainz
|
9
|
+
|
10
|
+
# Unit test for the LabelIncludes class.
|
11
|
+
class TestLabelIncludes < Test::Unit::TestCase
|
12
|
+
|
13
|
+
def setup
|
14
|
+
end
|
15
|
+
|
16
|
+
def teardown
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_includes
|
20
|
+
includes = Webservice::LabelIncludes.new(
|
21
|
+
:aliases => true,
|
22
|
+
:artist_rels => true,
|
23
|
+
:release_rels => true,
|
24
|
+
:track_rels => true,
|
25
|
+
:label_rels => true,
|
26
|
+
:url_rels => true
|
27
|
+
)
|
28
|
+
result_string = includes.to_s
|
29
|
+
assert_equal 'inc=', result_string[0..3]
|
30
|
+
|
31
|
+
result_array = result_string[4..-1].split('%20')
|
32
|
+
assert result_array.include?('aliases')
|
33
|
+
assert result_array.include?('artist-rels')
|
34
|
+
assert result_array.include?('release-rels')
|
35
|
+
assert result_array.include?('track-rels')
|
36
|
+
assert result_array.include?('label-rels')
|
37
|
+
assert result_array.include?('url-rels')
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_empty_includes
|
41
|
+
includes = Webservice::LabelIncludes.new(
|
42
|
+
:aliases => false,
|
43
|
+
:artist_rels => false,
|
44
|
+
:release_rels => false,
|
45
|
+
:track_rels => false,
|
46
|
+
:label_rels => false,
|
47
|
+
:url_rels => false
|
48
|
+
)
|
49
|
+
assert_equal '', includes.to_s
|
50
|
+
|
51
|
+
includes = Webservice::LabelIncludes.new({})
|
52
|
+
assert_equal '', includes.to_s
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
data/test/test_mbid.rb
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
# $Id$
|
2
|
+
# Copyright (c) 2007, Philipp Wolfer
|
3
|
+
# All rights reserved.
|
4
|
+
# See LICENSE for permissions.
|
5
|
+
|
6
|
+
require 'test/unit'
|
7
|
+
require 'rbrainz/model'
|
8
|
+
include MusicBrainz
|
9
|
+
|
10
|
+
# Unit test for the MBID model.
|
11
|
+
class TestMBID < Test::Unit::TestCase
|
12
|
+
|
13
|
+
def setup
|
14
|
+
@valid_entities = [:artist, :release, :track, :label,
|
15
|
+
'artist', 'release', 'track', 'label']
|
16
|
+
@valid_uuids = ['9d30e408-1559-448b-b491-2f8de1583ccf']
|
17
|
+
@invalid_uris = [nil, '', 'http://musicbrainz.org/labels/727ad90b-7ef4-48d2-8f16-c34016544822',
|
18
|
+
'http://musicbrainz.org/label/727ad90b-7ef4-48d2-8f16-c34016544822?']
|
19
|
+
@invalid_entities = [nil, '', 'entity', :entity, 1]
|
20
|
+
@invalid_uuids = [nil, '', 1, '727ad90b7ef448d28f16c34016544822',
|
21
|
+
'727ad90b-7ef4-48d2-8f16-c34016544822.html',
|
22
|
+
'9g30e408-1559-448b-b491-2f8de1583ccf']
|
23
|
+
end
|
24
|
+
|
25
|
+
def teardown
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_private_new
|
29
|
+
assert_raise(NoMethodError) {Model::MBID.new}
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_from_uri
|
33
|
+
@valid_entities.each{|entity|
|
34
|
+
@valid_uuids.each{|uuid|
|
35
|
+
assert_nothing_raised \
|
36
|
+
{Model::MBID.from_uri 'http://musicbrainz.org/' + entity.to_s + '/' + uuid}
|
37
|
+
}
|
38
|
+
}
|
39
|
+
@invalid_uris.each{|uri|
|
40
|
+
assert_raise(Model::InvalidMBIDError) {Model::MBID.from_uri uri}
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_from_uuid
|
45
|
+
@valid_entities.each{|entity|
|
46
|
+
@valid_uuids.each{|uuid|
|
47
|
+
assert_nothing_raised {Model::MBID.from_uuid entity, uuid}
|
48
|
+
}
|
49
|
+
}
|
50
|
+
@invalid_entities.each{|entity|
|
51
|
+
assert_raise(Model::UnknownEntityError, 'Invalid entity ' + entity.inspect + '') \
|
52
|
+
{Model::MBID.from_uuid entity, @valid_uuids[0]}
|
53
|
+
}
|
54
|
+
@invalid_uuids.each{|uuid|
|
55
|
+
assert_raise(Model::InvalidUUIDError, 'Invalid uuid ' + uuid.inspect + '') \
|
56
|
+
{Model::MBID.from_uuid @valid_entities[0], uuid}
|
57
|
+
}
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_to_s
|
61
|
+
@valid_entities.each{|entity|
|
62
|
+
@valid_uuids.each{|uuid|
|
63
|
+
uri = 'http://musicbrainz.org/' + entity.to_s + '/' + uuid
|
64
|
+
mbid = Model::MBID.from_uuid entity, uuid
|
65
|
+
assert_equal uri, mbid.to_s
|
66
|
+
mbid = Model::MBID.from_uri uri
|
67
|
+
assert_equal uri, mbid.to_s
|
68
|
+
}
|
69
|
+
}
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_read_attributes
|
73
|
+
@valid_entities.each{|entity|
|
74
|
+
@valid_uuids.each{|uuid|
|
75
|
+
mbid = Model::MBID.from_uuid entity, uuid
|
76
|
+
assert_equal entity.to_sym, mbid.entity
|
77
|
+
assert_equal uuid, mbid.uuid
|
78
|
+
mbid = Model::MBID.from_uri 'http://musicbrainz.org/' + entity.to_s + '/' + uuid
|
79
|
+
assert_equal entity.to_sym, mbid.entity
|
80
|
+
assert_equal uuid, mbid.uuid
|
81
|
+
}
|
82
|
+
}
|
83
|
+
end
|
84
|
+
|
85
|
+
# Test if the attributes are read only.
|
86
|
+
def test_write_attributes
|
87
|
+
mbid = Model::MBID.from_uuid @valid_entities[0], @valid_uuids[0]
|
88
|
+
assert_raise(NoMethodError) {mbid.entity = :release}
|
89
|
+
assert_raise(NoMethodError) {mbid.uuid = @valid_uuids[0]}
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_equality
|
93
|
+
mbid1 = Model::MBID.from_uuid @valid_entities[0], @valid_uuids[0]
|
94
|
+
mbid2 = Model::MBID.from_uuid @valid_entities[0], @valid_uuids[0]
|
95
|
+
assert_equal mbid1, mbid1
|
96
|
+
assert_equal mbid1, mbid2
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|