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.
Files changed (84) hide show
  1. data/LICENSE +25 -0
  2. data/README +11 -0
  3. data/Rakefile +110 -0
  4. data/TODO +24 -0
  5. data/doc/README.rdoc +68 -0
  6. data/examples/getartist.rb +54 -0
  7. data/lib/rbrainz.rb +11 -0
  8. data/lib/rbrainz/data/countrynames.rb +259 -0
  9. data/lib/rbrainz/data/languagenames.rb +404 -0
  10. data/lib/rbrainz/data/scriptnames.rb +64 -0
  11. data/lib/rbrainz/model.rb +48 -0
  12. data/lib/rbrainz/model/alias.rb +23 -0
  13. data/lib/rbrainz/model/artist.rb +54 -0
  14. data/lib/rbrainz/model/disc.rb +30 -0
  15. data/lib/rbrainz/model/entity.rb +72 -0
  16. data/lib/rbrainz/model/incomplete_date.rb +76 -0
  17. data/lib/rbrainz/model/label.rb +55 -0
  18. data/lib/rbrainz/model/mbid.rb +82 -0
  19. data/lib/rbrainz/model/release.rb +50 -0
  20. data/lib/rbrainz/model/release_event.rb +34 -0
  21. data/lib/rbrainz/model/track.rb +27 -0
  22. data/lib/rbrainz/webservice.rb +6 -0
  23. data/lib/rbrainz/webservice/filter.rb +132 -0
  24. data/lib/rbrainz/webservice/includes.rb +150 -0
  25. data/lib/rbrainz/webservice/mbxml.rb +404 -0
  26. data/lib/rbrainz/webservice/query.rb +61 -0
  27. data/lib/rbrainz/webservice/webservice.rb +69 -0
  28. data/test/lib/test_entity.rb +58 -0
  29. data/test/lib/testing_helper.rb +13 -0
  30. data/test/test-data/README +13 -0
  31. data/test/test-data/invalid/artist/basic_1.xml +12 -0
  32. data/test/test-data/invalid/artist/basic_2.xml +12 -0
  33. data/test/test-data/invalid/artist/empty_1.xml +0 -0
  34. data/test/test-data/invalid/artist/empty_2.xml +3 -0
  35. data/test/test-data/invalid/artist/empty_3.xml +7 -0
  36. data/test/test-data/invalid/artist/search_result_1.xml +11 -0
  37. data/test/test-data/valid/artist/Tchaikovsky-1.xml +90 -0
  38. data/test/test-data/valid/artist/Tori_Amos_1.xml +8 -0
  39. data/test/test-data/valid/artist/Tori_Amos_2.xml +53 -0
  40. data/test/test-data/valid/artist/Tori_Amos_3.xml +25 -0
  41. data/test/test-data/valid/artist/Tori_Amos_4.xml +14 -0
  42. data/test/test-data/valid/artist/Tori_Amos_5.xml +13 -0
  43. data/test/test-data/valid/artist/empty_1.xml +7 -0
  44. data/test/test-data/valid/artist/empty_2.xml +11 -0
  45. data/test/test-data/valid/artist/search_result_1.xml +19 -0
  46. data/test/test-data/valid/label/Atlantic_Records_1.xml +9 -0
  47. data/test/test-data/valid/label/Atlantic_Records_2.xml +11 -0
  48. data/test/test-data/valid/label/search_result_1.xml +14 -0
  49. data/test/test-data/valid/release/Highway_61_Revisited_1.xml +68 -0
  50. data/test/test-data/valid/release/Little_Earthquakes_1.xml +24 -0
  51. data/test/test-data/valid/release/Little_Earthquakes_2.xml +73 -0
  52. data/test/test-data/valid/release/Mission_Impossible_2.xml +155 -0
  53. data/test/test-data/valid/release/Under_the_Pink_1.xml +16 -0
  54. data/test/test-data/valid/release/Under_the_Pink_2.xml +14 -0
  55. data/test/test-data/valid/release/Under_the_Pink_3.xml +16 -0
  56. data/test/test-data/valid/release/search_result_1.xml +29 -0
  57. data/test/test-data/valid/track/Silent_All_These_Years_1.xml +7 -0
  58. data/test/test-data/valid/track/Silent_All_These_Years_2.xml +21 -0
  59. data/test/test-data/valid/track/Silent_All_These_Years_3.xml +16 -0
  60. data/test/test-data/valid/track/Silent_All_These_Years_4.xml +30 -0
  61. data/test/test-data/valid/track/Silent_All_These_Years_5.xml +20 -0
  62. data/test/test-data/valid/track/search_result_1.xml +45 -0
  63. data/test/test-data/valid/user/User_1.xml +15 -0
  64. data/test/test_alias.rb +50 -0
  65. data/test/test_artist.rb +132 -0
  66. data/test/test_artist_filter.rb +36 -0
  67. data/test/test_artist_includes.rb +63 -0
  68. data/test/test_disc.rb +38 -0
  69. data/test/test_incomplete_date.rb +60 -0
  70. data/test/test_label.rb +129 -0
  71. data/test/test_label_filter.rb +36 -0
  72. data/test/test_label_includes.rb +55 -0
  73. data/test/test_mbid.rb +99 -0
  74. data/test/test_mbxml.rb +368 -0
  75. data/test/test_query.rb +24 -0
  76. data/test/test_release.rb +161 -0
  77. data/test/test_release_event.rb +67 -0
  78. data/test/test_release_filter.rb +57 -0
  79. data/test/test_release_includes.rb +73 -0
  80. data/test/test_track.rb +102 -0
  81. data/test/test_track_filter.rb +57 -0
  82. data/test/test_track_includes.rb +61 -0
  83. data/test/test_webservice.rb +23 -0
  84. metadata +138 -0
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
3
+ <release id="290e10c5-7efc-4f60-ba2c-0dfc0208fbf5" type="Album Official">
4
+ <title>Under the Pink</title>
5
+ <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5">
6
+ <name>Tori Amos</name>
7
+ </artist>
8
+ <track-list offset="1" count="12">
9
+ <track id="0a984e3b-e38a-4b86-80be-f3a3eb1114ca">
10
+ <title>God</title>
11
+ </track>
12
+ </track-list>
13
+ </release>
14
+ </metadata>
@@ -0,0 +1,16 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
3
+ <release id="290e10c5-7efc-4f60-ba2c-0dfc0208fbf5" type="Album Official">
4
+ <title>Under the Pink</title>
5
+ <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5">
6
+ <name>Tori Amos</name>
7
+ </artist>
8
+ <release-event-list>
9
+ <event date="1994-01-31" catalog-number="82567-2" barcode="07567825672">
10
+ <label id="50c384a2-0b44-401b-b893-8181173339c7">
11
+ <name>Atlantic Records</name>
12
+ </label>
13
+ </event>
14
+ </release-event-list>
15
+ </release>
16
+ </metadata>
@@ -0,0 +1,29 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+
3
+ <metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#"
4
+ xmlns:ext="http://musicbrainz.org/ns/ext-1.0#">
5
+
6
+ <release-list offset="0" count="234">
7
+ <release id="290e10c5-7efc-4f60-ba2c-0dfc0208fbf5" type="Album Official" ext:score="100">
8
+ <title>Under the Pink</title>
9
+ <text-representation language="ENG" script="Latn"/>
10
+ <asin>B000002IXU</asin>
11
+ <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5">
12
+ <name>Tori Amos</name>
13
+ </artist>
14
+ <release-event-list>
15
+ <event date="1994-01-28"/>
16
+ </release-event-list>
17
+ <disc-list count="4"/>
18
+ <track-list count="12"/>
19
+ </release>
20
+ <release id="005fe18b-144b-4fee-81c0-e04737a23500" type="Live Bootleg" ext:score="80">
21
+ <title>Under the Pink Tour 1994</title>
22
+ <text-representation language="ENG" script="Latn"/>
23
+ <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5">
24
+ <name>Tori Amos</name>
25
+ </artist>
26
+ <track-list count="17"/>
27
+ </release>
28
+ </release-list>
29
+ </metadata>
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
3
+ <track id="d6118046-407d-4e06-a1ba-49c399a4c42f">
4
+ <title>Silent All These Years</title>
5
+ <duration>253466</duration>
6
+ </track>
7
+ </metadata>
@@ -0,0 +1,21 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
3
+ <track id="d6118046-407d-4e06-a1ba-49c399a4c42f">
4
+ <title>Silent All These Years</title>
5
+ <duration>253466</duration>
6
+ <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5" type="Person">
7
+ <name>Tori Amos</name>
8
+ <sort-name>Amos, Tori</sort-name>
9
+ </artist>
10
+ <relation-list target-type="Track">
11
+ <relation type="Cover"
12
+ direction="backward"
13
+ target="31e1c0c4-967f-435e-b09a-35ee079ee234">
14
+ <track id="31e1c0c4-967f-435e-b09a-35ee079ee234">
15
+ <title>Silent All These Years</title>
16
+ <artist id="5bcd4eaa-fae7-465f-9f03-d005b959ed02"/>
17
+ </track>
18
+ </relation>
19
+ </relation-list>
20
+ </track>
21
+ </metadata>
@@ -0,0 +1,16 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
3
+ <track id="d6118046-407d-4e06-a1ba-49c399a4c42f">
4
+ <title>Silent All These Years</title>
5
+ <duration>253466</duration>
6
+ <puid-list>
7
+ <puid id="c2a2cee5-a8ca-4f89-a092-c3e1e65ab7e6"/>
8
+ <puid id="db5b66b3-fa97-4cfa-9296-de7e57ef05f4"/>
9
+ <puid id="fbb3d1b6-f9e7-49ed-834c-03e9ec9726e5"/>
10
+ <puid id="0e2e66e3-13d7-4138-af90-5ec8a4c2db99"/>
11
+ <puid id="4778d58b-50fe-4004-8cd6-462a816114c8"/>
12
+ <puid id="88541d46-9b74-4835-b8e8-d985fc77e02a"/>
13
+ <puid id="42ab76ea-5d42-4259-85d7-e7f2c69e4485"/>
14
+ </puid-list>
15
+ </track>
16
+ </metadata>
@@ -0,0 +1,30 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#"
3
+ xmlns:mm="http://mafr.de/ns/mm-0.1#">
4
+
5
+ <track id="d6118046-407d-4e06-a1ba-49c399a4c42f">
6
+ <title>Silent All These Years</title>
7
+ <duration>253466</duration>
8
+ <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5" type="Person">
9
+ <name>Tori Amos</name>
10
+ <sort-name>Amos, Tori</sort-name>
11
+ <life-span begin="1963-08-22"/>
12
+ </artist>
13
+ <release-list>
14
+ <release id="02232360-337e-4a3f-ad20-6cdd4c34288c" type="Album Official">
15
+ <title>Little Earthquakes</title>
16
+ <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5" type="Person"/>
17
+ <track-list offset="2"/>
18
+ </release>
19
+ </release-list>
20
+ <puid-list>
21
+ <puid id="c2a2cee5-a8ca-4f89-a092-c3e1e65ab7e6"/>
22
+ <puid id="db5b66b3-fa97-4cfa-9296-de7e57ef05f4"/>
23
+ <puid id="fbb3d1b6-f9e7-49ed-834c-03e9ec9726e5"/>
24
+ <puid id="0e2e66e3-13d7-4138-af90-5ec8a4c2db99"/>
25
+ <puid id="4778d58b-50fe-4004-8cd6-462a816114c8"/>
26
+ <puid id="88541d46-9b74-4835-b8e8-d985fc77e02a"/>
27
+ <puid id="42ab76ea-5d42-4259-85d7-e7f2c69e4485"/>
28
+ </puid-list>
29
+ </track>
30
+ </metadata>
@@ -0,0 +1,20 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#"
3
+ xmlns:mm="http://mafr.de/ns/mm-0.1#">
4
+
5
+ <track id="d6118046-407d-4e06-a1ba-49c399a4c42f">
6
+ <title>Silent All These Years</title>
7
+ <duration>253466</duration>
8
+ <puid-list>
9
+ <puid id="c2a2cee5-a8ca-4f89-a092-c3e1e65ab7e6"/>
10
+ <puid id="db5b66b3-fa97-4cfa-9296-de7e57ef05f4"/>
11
+ <puid id="fbb3d1b6-f9e7-49ed-834c-03e9ec9726e5"/>
12
+ <puid id="0e2e66e3-13d7-4138-af90-5ec8a4c2db99"/>
13
+ <puid id="4778d58b-50fe-4004-8cd6-462a816114c8"/>
14
+ <puid id="88541d46-9b74-4835-b8e8-d985fc77e02a"/>
15
+ <puid id="42ab76ea-5d42-4259-85d7-e7f2c69e4485"/>
16
+ </puid-list>
17
+ <mm:rating value="9"/>
18
+ <mm:annotation>This is a <em>very</em> nice song.</mm:annotation>
19
+ </track>
20
+ </metadata>
@@ -0,0 +1,45 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#"
3
+ xmlns:ext="http://musicbrainz.org/ns/ext-1.0#">
4
+ <track-list count="100" offset="7">
5
+ <track id="748f2b79-8c50-4581-adb1-7708118a48fc" ext:score="100">
6
+ <title>Little Earthquakes</title>
7
+ <duration>457760</duration>
8
+ <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5">
9
+ <name>Tori Amos</name>
10
+ </artist>
11
+ <release-list>
12
+ <release id="93264fe5-dff2-47ab-9ca8-1c865733aad9">
13
+ <title>To Venus and Back (disc 2: Live, Still Orbiting)</title>
14
+ <track-list offset="9"/>
15
+ </release>
16
+ </release-list>
17
+ </track>
18
+ <track id="51d2c2ff-a5fd-44f9-9c1c-7ca9fdc7dd1d" ext:score="99">
19
+ <title>Little Earthquakes</title>
20
+ <duration>413693</duration>
21
+ <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5">
22
+ <name>Tori Amos</name>
23
+ </artist>
24
+ <release-list>
25
+ <release id="02232360-337e-4a3f-ad20-6cdd4c34288c">
26
+ <title>Little Earthquakes</title>
27
+ <track-list offset="11"/>
28
+ </release>
29
+ </release-list>
30
+ </track>
31
+ <track id="1954d2a1-d021-4426-b818-b5a5bce1ca07" ext:score="80">
32
+ <title>Little Amsterdam</title>
33
+ <duration>270106</duration>
34
+ <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5">
35
+ <name>Tori Amos</name>
36
+ </artist>
37
+ <release-list>
38
+ <release id="4c31aef1-177e-4bba-9a56-180e21a0d043">
39
+ <title>Boys for Pele</title>
40
+ <track-list offset="11"/>
41
+ </release>
42
+ </release-list>
43
+ </track>
44
+ </track-list>
45
+ </metadata>
@@ -0,0 +1,15 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+
3
+ <!-- Note: This is a MusicBrainz extension. -->
4
+
5
+ <metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#"
6
+ xmlns:ext="http://musicbrainz.org/ns/ext-1.0#">
7
+
8
+ <ext:user-list>
9
+ <ext:user type="AutoEditor RelationshipEditor">
10
+ <name>matt</name>
11
+ <ext:nag show="false"/>
12
+ </ext:user>
13
+ </ext:user-list>
14
+
15
+ </metadata>
@@ -0,0 +1,50 @@
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 Alias model.
11
+ class TestAlias < Test::Unit::TestCase
12
+
13
+ def setup
14
+ end
15
+
16
+ def teardown
17
+ end
18
+
19
+ def test_new_alias
20
+ assert_nothing_raised {Model::Alias.new}
21
+ end
22
+
23
+ def test_name
24
+ alias_ = Model::Alias.new
25
+ alias_.name = 'Dark Tranquility'
26
+ assert_equal 'Dark Tranquility', alias_.name
27
+ end
28
+
29
+ def test_type
30
+ alias_ = Model::Alias.new
31
+ alias_.type = 'Misspelling'
32
+ assert_equal 'Misspelling', alias_.type
33
+ end
34
+
35
+ def test_script
36
+ alias_ = Model::Alias.new
37
+ alias_.script = 'Latn'
38
+ assert_equal 'Latn', alias_.script
39
+ end
40
+
41
+ def test_to_string
42
+ alias_ = Model::Alias.new
43
+ assert_equal '', alias_.to_s
44
+ alias_.name = 'Dark Tranquility'
45
+ alias_.type = 'Misspelling'
46
+ alias_.script = 'Latn'
47
+ assert_equal 'Dark Tranquility', alias_.to_s
48
+ end
49
+
50
+ end
@@ -0,0 +1,132 @@
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 Artist model.
9
+ class TestArtist < Test::Unit::TestCase
10
+
11
+ def setup
12
+ @tested_class = Model::Artist
13
+ @invalid_entity_types = [:release, :track, :label]
14
+ @releases = [Model::Release.new, Model::Release.new]
15
+ @aliases = [Model::Alias.new, Model::Alias.new]
16
+ end
17
+
18
+ def teardown
19
+ end
20
+
21
+ # Include the tests for Entity
22
+ include TestEntity
23
+
24
+ def test_new_artist
25
+ artist = nil
26
+ assert_nothing_raised {artist = Model::Artist.new}
27
+ assert artist.is_a?(Model::Entity)
28
+ end
29
+
30
+ def test_name
31
+ artist = Model::Artist.new
32
+ assert artist.name.nil?
33
+ assert_nothing_raised {artist.name = 'Paradise Lost'}
34
+ assert_equal 'Paradise Lost', artist.name
35
+ end
36
+
37
+ def test_sort_name
38
+ artist = Model::Artist.new
39
+ assert artist.sort_name.nil?
40
+ assert_nothing_raised {artist.sort_name = 'Paradise Lost'}
41
+ assert_equal 'Paradise Lost', artist.sort_name
42
+ end
43
+
44
+ def test_disambiguation
45
+ artist = Model::Artist.new
46
+ assert artist.disambiguation.nil?
47
+ assert_nothing_raised {artist.disambiguation = 'Disambiguation comment'}
48
+ assert_equal 'Disambiguation comment', artist.disambiguation
49
+ end
50
+
51
+ def test_type
52
+ artist = Model::Artist.new
53
+ assert artist.type.nil?
54
+ assert_nothing_raised {artist.type = Model::Artist::TYPE_PERSON}
55
+ assert_equal Model::Artist::TYPE_PERSON, artist.type
56
+ assert_nothing_raised {artist.type = Model::Artist::TYPE_GROUP}
57
+ assert_equal Model::Artist::TYPE_GROUP, artist.type
58
+ end
59
+
60
+ def test_begin_date
61
+ artist = Model::Artist.new
62
+ date = Model::IncompleteDate.new '1988-04-18'
63
+ assert_nothing_raised {artist.begin_date}
64
+ assert_equal nil, artist.begin_date
65
+ assert_nothing_raised {artist.begin_date = date}
66
+ assert_equal date, artist.begin_date
67
+
68
+ # It should be able to supply a date as a string,
69
+ # but Artist should convert it to an IncompleteDate.
70
+ assert_nothing_raised {artist.begin_date = '1988-04-20'}
71
+ assert_equal Model::IncompleteDate.new('1988-04-20'), artist.begin_date
72
+ end
73
+
74
+ def test_end_date
75
+ artist = Model::Artist.new
76
+ date = Model::IncompleteDate.new '1988-04-18'
77
+ assert_nothing_raised {artist.end_date}
78
+ assert_equal nil, artist.end_date
79
+ assert_nothing_raised {artist.end_date = date}
80
+ assert_equal date, artist.end_date
81
+
82
+ # It should be able to supply a date as a string,
83
+ # but Artist should convert it to an IncompleteDate.
84
+ assert_nothing_raised {artist.end_date = '1988-04-20'}
85
+ assert_equal Model::IncompleteDate.new('1988-04-20'), artist.end_date
86
+ end
87
+
88
+ # Many releases can be added
89
+ def test_add_and_remove_releases
90
+ artist = Model::Artist.new
91
+ assert_equal 0, artist.releases.size
92
+ assert_nothing_raised {artist.releases << @releases[0]}
93
+ assert_equal 1, artist.releases.size
94
+ assert_nothing_raised {artist.releases << @releases[1]}
95
+ assert_equal 2, artist.releases.size
96
+
97
+ assert_nothing_raised {artist.releases.delete @releases[1]}
98
+ assert_equal 1, artist.releases.size
99
+ assert_nothing_raised {artist.releases.delete @releases[0]}
100
+ assert_equal 0, artist.releases.size
101
+ end
102
+
103
+ # You can pass an array of releases to add them all.
104
+ def test_add_several_releases_at_once
105
+ artist = Model::Artist.new
106
+ assert_nothing_raised {artist.releases = @releases}
107
+ assert_equal @releases, artist.releases
108
+ end
109
+
110
+ # Many aliases can be added
111
+ def test_add_and_remove_aliases
112
+ artist = Model::Artist.new
113
+ assert_equal 0, artist.aliases.size
114
+ assert_nothing_raised {artist.aliases << @aliases[0]}
115
+ assert_equal 1, artist.aliases.size
116
+ assert_nothing_raised {artist.aliases << @aliases[1]}
117
+ assert_equal 2, artist.aliases.size
118
+
119
+ assert_nothing_raised {artist.aliases.delete @aliases[1]}
120
+ assert_equal 1, artist.aliases.size
121
+ assert_nothing_raised {artist.aliases.delete @aliases[0]}
122
+ assert_equal 0, artist.aliases.size
123
+ end
124
+
125
+ # You can pass an array of aliases to add them all.
126
+ def test_add_several_aliases_at_once
127
+ artist = Model::Artist.new
128
+ assert_nothing_raised {artist.aliases = @aliases}
129
+ assert_equal @aliases, artist.aliases
130
+ end
131
+
132
+ 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 ArtistFilter class.
12
+ class TestArtistFilter < Test::Unit::TestCase
13
+
14
+ def setup
15
+ @filter_hash = {:name => 'Tori Amos', :limit => 10}
16
+ end
17
+
18
+ def teardown
19
+ end
20
+
21
+ def test_filter
22
+ filter = Webservice::ArtistFilter.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::ArtistFilter.new({})
33
+ assert_equal '', filter.to_s
34
+ end
35
+
36
+ end