rbrainz 0.1.0

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