7digital 0.1.2 → 0.1.5

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 (197) hide show
  1. checksums.yaml +7 -0
  2. data/README.rdoc +143 -143
  3. data/lib/sevendigital.rb +55 -55
  4. data/lib/sevendigital/api_operator.rb +127 -127
  5. data/lib/sevendigital/api_operator_cached.rb +91 -62
  6. data/lib/sevendigital/api_request.rb +72 -62
  7. data/lib/sevendigital/client.rb +122 -122
  8. data/lib/sevendigital/client_configuration.rb +85 -83
  9. data/lib/sevendigital/client_digestors.rb +122 -122
  10. data/lib/sevendigital/client_managers.rb +57 -57
  11. data/lib/sevendigital/digestion_tract/api_response_digestor.rb +48 -48
  12. data/lib/sevendigital/digestion_tract/artist_digestor.rb +35 -35
  13. data/lib/sevendigital/digestion_tract/basket_digestor.rb +19 -19
  14. data/lib/sevendigital/digestion_tract/basket_item_digestor.rb +26 -26
  15. data/lib/sevendigital/digestion_tract/chart_item_digestor.rb +34 -34
  16. data/lib/sevendigital/digestion_tract/country_digestor.rb +15 -15
  17. data/lib/sevendigital/digestion_tract/digestor.rb +122 -122
  18. data/lib/sevendigital/digestion_tract/download_url_digestor.rb +23 -23
  19. data/lib/sevendigital/digestion_tract/format_digestor.rb +24 -24
  20. data/lib/sevendigital/digestion_tract/label_digestor.rb +21 -21
  21. data/lib/sevendigital/digestion_tract/list_digestor.rb +24 -24
  22. data/lib/sevendigital/digestion_tract/list_item_digestor.rb +26 -26
  23. data/lib/sevendigital/digestion_tract/locker_digestor.rb +22 -22
  24. data/lib/sevendigital/digestion_tract/locker_release_digestor.rb +26 -26
  25. data/lib/sevendigital/digestion_tract/locker_track_digestor.rb +26 -26
  26. data/lib/sevendigital/digestion_tract/oauth_access_token_digestor.rb +18 -18
  27. data/lib/sevendigital/digestion_tract/oauth_request_token_digestor.rb +18 -18
  28. data/lib/sevendigital/digestion_tract/pager_digestor.rb +28 -28
  29. data/lib/sevendigital/digestion_tract/price_digestor.rb +28 -28
  30. data/lib/sevendigital/digestion_tract/release_digestor.rb +45 -45
  31. data/lib/sevendigital/digestion_tract/tag_digestor.rb +23 -23
  32. data/lib/sevendigital/digestion_tract/track_digestor.rb +38 -37
  33. data/lib/sevendigital/digestion_tract/user_card_digestor.rb +24 -24
  34. data/lib/sevendigital/digestion_tract/user_digestor.rb +21 -21
  35. data/lib/sevendigital/management/artist_manager.rb +97 -97
  36. data/lib/sevendigital/management/basket_manager.rb +29 -29
  37. data/lib/sevendigital/management/country_manager.rb +10 -10
  38. data/lib/sevendigital/management/list_manager.rb +18 -18
  39. data/lib/sevendigital/management/manager.rb +12 -12
  40. data/lib/sevendigital/management/oauth_manager.rb +23 -23
  41. data/lib/sevendigital/management/release_manager.rb +54 -54
  42. data/lib/sevendigital/management/tag_manager.rb +10 -10
  43. data/lib/sevendigital/management/track_manager.rb +29 -27
  44. data/lib/sevendigital/management/user_card_manager.rb +26 -26
  45. data/lib/sevendigital/management/user_manager.rb +76 -76
  46. data/lib/sevendigital/model/api_response.rb +32 -32
  47. data/lib/sevendigital/model/artist.rb +104 -104
  48. data/lib/sevendigital/model/basket.rb +15 -15
  49. data/lib/sevendigital/model/basket_item.rb +14 -14
  50. data/lib/sevendigital/model/card.rb +11 -11
  51. data/lib/sevendigital/model/chart_item.rb +9 -9
  52. data/lib/sevendigital/model/download_url.rb +7 -7
  53. data/lib/sevendigital/model/format.rb +7 -7
  54. data/lib/sevendigital/model/label.rb +7 -7
  55. data/lib/sevendigital/model/list.rb +4 -4
  56. data/lib/sevendigital/model/list_item.rb +8 -8
  57. data/lib/sevendigital/model/locker.rb +4 -4
  58. data/lib/sevendigital/model/locker_release.rb +9 -9
  59. data/lib/sevendigital/model/locker_track.rb +9 -9
  60. data/lib/sevendigital/model/price.rb +9 -9
  61. data/lib/sevendigital/model/release.rb +57 -57
  62. data/lib/sevendigital/model/sevendigital_error.rb +11 -11
  63. data/lib/sevendigital/model/sevendigital_object.rb +57 -57
  64. data/lib/sevendigital/model/tag.rb +7 -7
  65. data/lib/sevendigital/model/track.rb +87 -83
  66. data/lib/sevendigital/model/user.rb +74 -74
  67. data/lib/sevendigital/pager.rb +20 -20
  68. data/lib/sevendigital/version.rb +5 -5
  69. data/spec/api_operator_cached_spec.rb +233 -178
  70. data/spec/api_operator_spec.rb +320 -320
  71. data/spec/api_request_spec.rb +46 -31
  72. data/spec/client_configuration_spec.rb +78 -78
  73. data/spec/client_spec.rb +161 -161
  74. data/spec/data/config/sevendigital.yml +5 -5
  75. data/spec/data/configuration_env_override.yml +5 -5
  76. data/spec/data/configuration_override.yml +1 -1
  77. data/spec/digestion_tract/api_response_digestor_spec.rb +93 -93
  78. data/spec/digestion_tract/artist_digestor_spec.rb +81 -81
  79. data/spec/digestion_tract/basket_digestor_spec.rb +31 -31
  80. data/spec/digestion_tract/basket_item_digestor_spec.rb +58 -58
  81. data/spec/digestion_tract/chart_digestor_spec.rb +52 -52
  82. data/spec/digestion_tract/country_digestor_spec.rb +33 -33
  83. data/spec/digestion_tract/digestor_spec.rb +33 -33
  84. data/spec/digestion_tract/download_url_digestor_spec.rb +40 -40
  85. data/spec/digestion_tract/format_digestor_spec.rb +38 -38
  86. data/spec/digestion_tract/label_digestor_spec.rb +33 -33
  87. data/spec/digestion_tract/list_digestor_spec.rb +31 -31
  88. data/spec/digestion_tract/list_item_digestor_spec.rb +80 -80
  89. data/spec/digestion_tract/locker_digestor_spec.rb +30 -30
  90. data/spec/digestion_tract/locker_release_digestor_spec.rb +70 -70
  91. data/spec/digestion_tract/locker_track_digestor_spec.rb +56 -56
  92. data/spec/digestion_tract/oauth_access_token_digestor_spec.rb +34 -34
  93. data/spec/digestion_tract/oauth_request_token_digestor_spec.rb +34 -34
  94. data/spec/digestion_tract/pager_digestor_spec.rb +50 -50
  95. data/spec/digestion_tract/price_digestor_spec.rb +73 -73
  96. data/spec/digestion_tract/release_digestor_spec.rb +115 -115
  97. data/spec/digestion_tract/tag_digestor_spec.rb +46 -46
  98. data/spec/digestion_tract/track_digestor_spec.rb +105 -104
  99. data/spec/digestion_tract/user_card_digestor_spec.rb +58 -58
  100. data/spec/digestion_tract/user_digestor_spec.rb +42 -42
  101. data/spec/integration/artist_spec.rb +99 -86
  102. data/spec/integration/country_spec.rb +18 -18
  103. data/spec/integration/list_spec.rb +22 -22
  104. data/spec/integration/purchasing_spec.rb +24 -24
  105. data/spec/integration/release_spec.rb +34 -34
  106. data/spec/integration/sevendigital_spec.yml +4 -4
  107. data/spec/integration/track_spec.rb +38 -23
  108. data/spec/integration/user_spec.rb +22 -22
  109. data/spec/management/artist_manager_spec.rb +172 -172
  110. data/spec/management/basket_manager_spec.rb +77 -77
  111. data/spec/management/country_manager_spec.rb +34 -34
  112. data/spec/management/list_manager_spec.rb +26 -26
  113. data/spec/management/oauth_manager_spec.rb +72 -72
  114. data/spec/management/release_manager_spec.rb +200 -200
  115. data/spec/management/tag_manager_spec.rb +34 -34
  116. data/spec/management/track_manager_spec.rb +111 -107
  117. data/spec/management/user_card_manager_spec.rb +78 -78
  118. data/spec/management/user_manager_spec.rb +218 -218
  119. data/spec/model/api_response_spec.rb +48 -48
  120. data/spec/model/artist_spec.rb +162 -162
  121. data/spec/model/basket_spec.rb +62 -62
  122. data/spec/model/release_spec.rb +133 -133
  123. data/spec/model/sevendigital_object_spec.rb +73 -73
  124. data/spec/model/track_spec.rb +146 -144
  125. data/spec/model/user_spec.rb +181 -181
  126. data/spec/spec_helper.rb +86 -84
  127. data/spec/test-xml/methods/artist/browse.xml +21 -21
  128. data/spec/test-xml/methods/artist/byTag/top.xml +50 -50
  129. data/spec/test-xml/methods/artist/chart.xml +30 -30
  130. data/spec/test-xml/methods/artist/details.xml +9 -9
  131. data/spec/test-xml/methods/artist/releases.xml +544 -544
  132. data/spec/test-xml/methods/artist/search.xml +18 -18
  133. data/spec/test-xml/methods/artist/similar.xml +39 -39
  134. data/spec/test-xml/methods/artist/tags.xml +11 -11
  135. data/spec/test-xml/methods/artist/toptracks.xml +279 -279
  136. data/spec/test-xml/methods/basket/additem.xml +23 -23
  137. data/spec/test-xml/methods/basket/create.xml +10 -10
  138. data/spec/test-xml/methods/basket/index.xml +23 -23
  139. data/spec/test-xml/methods/basket/removeitem.xml +10 -10
  140. data/spec/test-xml/methods/country/resolve.xml +6 -6
  141. data/spec/test-xml/methods/editorial/list.xml +170 -170
  142. data/spec/test-xml/methods/oauth/accesstoken.xml +5 -5
  143. data/spec/test-xml/methods/oauth/requesttoken.xml +5 -5
  144. data/spec/test-xml/methods/release/bydate.xml +173 -173
  145. data/spec/test-xml/methods/release/bytag/top.xml +150 -150
  146. data/spec/test-xml/methods/release/chart.xml +181 -181
  147. data/spec/test-xml/methods/release/details.xml +48 -48
  148. data/spec/test-xml/methods/release/recommend.xml +89 -89
  149. data/spec/test-xml/methods/release/search.xml +194 -194
  150. data/spec/test-xml/methods/release/tags.xml +27 -27
  151. data/spec/test-xml/methods/release/tracks.xml +28 -28
  152. data/spec/test-xml/methods/tag/index.xml +16 -16
  153. data/spec/test-xml/methods/track/chart.xml +149 -149
  154. data/spec/test-xml/methods/track/details.xml +30 -30
  155. data/spec/test-xml/methods/track/search.xml +159 -159
  156. data/spec/test-xml/methods/user/details.xml +4 -4
  157. data/spec/test-xml/methods/user/locker.xml +49 -49
  158. data/spec/test-xml/methods/user/payment/card/add.xml +7 -7
  159. data/spec/test-xml/methods/user/payment/card/index.xml +7 -7
  160. data/spec/test-xml/methods/user/purchase/basket.xml +48 -48
  161. data/spec/test-xml/methods/user/purchase/item.xml +48 -48
  162. data/spec/test-xml/methods/user/signUp.xml +5 -5
  163. data/spec/test-xml/objects/artist.xml +7 -7
  164. data/spec/test-xml/objects/artist_chart_item.xml +7 -7
  165. data/spec/test-xml/objects/artist_list.xml +22 -22
  166. data/spec/test-xml/objects/artist_list_empty.xml +4 -4
  167. data/spec/test-xml/objects/basket.xml +21 -21
  168. data/spec/test-xml/objects/basket_item.xml +11 -11
  169. data/spec/test-xml/objects/basket_item_list.xml +25 -25
  170. data/spec/test-xml/objects/basket_item_list_empty.xml +1 -1
  171. data/spec/test-xml/objects/download_url.xml +7 -7
  172. data/spec/test-xml/objects/list.xml +89 -89
  173. data/spec/test-xml/objects/list_item_list.xml +85 -85
  174. data/spec/test-xml/objects/list_item_release.xml +13 -13
  175. data/spec/test-xml/objects/locker.xml +47 -47
  176. data/spec/test-xml/objects/locker_release.xml +40 -40
  177. data/spec/test-xml/objects/locker_release_list.xml +87 -87
  178. data/spec/test-xml/objects/locker_release_list_empty.xml +4 -4
  179. data/spec/test-xml/objects/locker_release_one_item_list.xml +43 -43
  180. data/spec/test-xml/objects/locker_track.xml +25 -25
  181. data/spec/test-xml/objects/locker_track_list.xml +26 -26
  182. data/spec/test-xml/objects/locker_track_list_empty.xml +2 -2
  183. data/spec/test-xml/objects/nested_release_list.xml +22 -22
  184. data/spec/test-xml/objects/oauth_access_token.xml +3 -3
  185. data/spec/test-xml/objects/oauth_request_token.xml +3 -3
  186. data/spec/test-xml/objects/price.xml +7 -7
  187. data/spec/test-xml/objects/release.xml +40 -40
  188. data/spec/test-xml/objects/release_chart_item.xml +39 -39
  189. data/spec/test-xml/objects/release_list.xml +18 -18
  190. data/spec/test-xml/objects/release_list_empty.xml +4 -4
  191. data/spec/test-xml/objects/response.xml +38 -38
  192. data/spec/test-xml/objects/tag.xml +4 -4
  193. data/spec/test-xml/objects/track.xml +34 -33
  194. data/spec/test-xml/objects/track_chart_item.xml +27 -27
  195. data/spec/test-xml/objects/user.xml +4 -4
  196. data/spec/test-xml/objects/user_payment_card.xml +5 -5
  197. metadata +15 -25
@@ -1,22 +1,22 @@
1
- # encoding: UTF-8
2
- require File.expand_path('../../spec_helper', __FILE__)
3
- require 'date'
4
-
5
- describe "User integration tests" do
6
-
7
- before do
8
- @api_client = Sevendigital::Client.new(
9
- File.join(File.dirname(__FILE__),"sevendigital_spec.yml"),
10
- :verbose => "verbose"
11
- )
12
-
13
- end
14
-
15
- it "should fail to sign up an existing user" do
16
- running {user = @api_client.user.sign_up("filip@7digital.com", "£$%^&*()_+")}.should raise_error(Sevendigital::SevendigitalError) { |error|
17
- error.error_message.should == "User with given email already exists"
18
- error.error_code.should == 2003
19
- }
20
- end
21
-
22
- end
1
+ # encoding: UTF-8
2
+ require File.expand_path('../../spec_helper', __FILE__)
3
+ require 'date'
4
+
5
+ describe "User integration tests" do
6
+
7
+ before do
8
+ @api_client = Sevendigital::Client.new(
9
+ File.join(File.dirname(__FILE__),"sevendigital_spec.yml"),
10
+ :verbose => "verbose"
11
+ )
12
+
13
+ end
14
+
15
+ it "should fail to sign up an existing user" do
16
+ running {user = @api_client.user.sign_up("filip@7digital.com", "£$%^&*()_+")}.should raise_error(Sevendigital::SevendigitalError) { |error|
17
+ error.error_message.should == "User with given email already exists"
18
+ error.error_code.should == 2003
19
+ }
20
+ end
21
+
22
+ end
@@ -1,173 +1,173 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
2
-
3
- describe "ArtistManager" do
4
-
5
- before do
6
- @client = stub(Sevendigital::Client)
7
- @client.stub!(:operator).and_return(mock(Sevendigital::ApiOperator))
8
- @artist_manager = Sevendigital::ArtistManager.new(@client)
9
- end
10
-
11
- it "get_details should call artist/details api method and return digested artist" do
12
- an_artist_id = 123
13
- an_artist = Sevendigital::Artist.new(@client)
14
- an_api_response = fake_api_response("artist/details")
15
-
16
- mock_client_digestor(@client, :artist_digestor) \
17
- .should_receive(:from_xml_doc).with(an_api_response.item_xml("artist")).and_return(an_artist)
18
-
19
- @client.should_receive(:make_api_request) \
20
- .with(:GET, "artist/details", {:artistId => an_artist_id}, {}) \
21
- .and_return(an_api_response)
22
-
23
- artist = @artist_manager.get_details(an_artist_id)
24
- artist.should == an_artist
25
- end
26
-
27
- it "get_releases should call artist/releases api method and return list of digested releases" do
28
- an_artist_id = 123
29
- a_list_of_releases = [Sevendigital::Release.new(@client), Sevendigital::Release.new(@client)]
30
- an_api_response = fake_api_response("artist/releases")
31
-
32
- mock_client_digestor(@client, :release_digestor) \
33
- .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("releases")).and_return(a_list_of_releases)
34
-
35
- @client.should_receive(:make_api_request) \
36
- .with(:GET, "artist/releases", {:artistId => an_artist_id}, {}) \
37
- .and_return(an_api_response)
38
-
39
- releases = @artist_manager.get_releases(an_artist_id)
40
- releases.should == a_list_of_releases
41
- end
42
-
43
- it "get_top_tracks should call artist/topTracks method and digest the returned list of tracks" do
44
- an_artist_id = 123
45
- a_top_tracks_list = [Sevendigital::Track.new(@client)]
46
- an_api_response = fake_api_response("artist/toptracks")
47
-
48
- mock_client_digestor(@client, :track_digestor) \
49
- .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("tracks")).and_return(a_top_tracks_list)
50
-
51
- @client.should_receive(:make_api_request) \
52
- .with(:GET, "artist/topTracks", {:artistId => an_artist_id}, {}) \
53
- .and_return(an_api_response)
54
-
55
- tracks = @artist_manager.get_top_tracks(an_artist_id)
56
- tracks.should == a_top_tracks_list
57
-
58
- end
59
-
60
- it "get_similar should call artist/similar method and digest the returned list of artists" do
61
- an_artist_id = 123
62
- a_similar_artists_list = [Sevendigital::Artist.new(@client), Sevendigital::Artist.new(@client)]
63
- an_api_response = fake_api_response("artist/similar")
64
-
65
- mock_client_digestor(@client, :artist_digestor) \
66
- .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("artists")).and_return(a_similar_artists_list)
67
-
68
- @client.should_receive(:make_api_request) \
69
- .with(:GET, "artist/similar", {:artistId => an_artist_id}, {}) \
70
- .and_return(an_api_response)
71
-
72
- artists = @artist_manager.get_similar(an_artist_id)
73
- artists.should == a_similar_artists_list
74
-
75
- end
76
-
77
- it "get_top_by_tag should call artist/byTag/top api method and digest the nested artist list from response" do
78
-
79
- tags = "alternative-indie"
80
- an_api_response = fake_api_response("artist/byTag/top")
81
- a_release_list = []
82
-
83
- mock_client_digestor(@client, :artist_digestor) \
84
- .should_receive(:nested_list_from_xml_doc) \
85
- .with(an_api_response.item_xml("taggedResults"), :taggedItem, :artist) \
86
- .and_return(a_release_list)
87
-
88
- @client.should_receive(:make_api_request) \
89
- .with(:GET, "artist/byTag/top", {:tags => tags}, {}) \
90
- .and_return(an_api_response)
91
-
92
- releases = @artist_manager.get_top_by_tag(tags)
93
- releases.should == a_release_list
94
-
95
- end
96
-
97
- it "search should call artist/search api method and digest the nested artist list from response" do
98
-
99
- query = "radiohead"
100
- api_response = fake_api_response("artist/search")
101
- an_artist_list = []
102
-
103
- mock_client_digestor(@client, :artist_digestor) \
104
- .should_receive(:nested_list_from_xml_doc) \
105
- .with(api_response.item_xml("searchResults"), :searchResult, :artist) \
106
- .and_return(an_artist_list)
107
-
108
- @client.should_receive(:make_api_request) \
109
- .with(:GET, "artist/search", {:q => query}, {}) \
110
- .and_return(api_response)
111
-
112
- artists = @artist_manager.search(query)
113
- artists.should == an_artist_list
114
-
115
- end
116
-
117
-
118
- it "browse should call artist/browse api method and digest the artist list from response" do
119
-
120
- letter = "ra"
121
- an_api_response = fake_api_response("artist/browse")
122
- an_artist_list = []
123
-
124
- mock_client_digestor(@client, :artist_digestor) \
125
- .should_receive(:list_from_xml_doc) \
126
- .with(an_api_response.item_xml("artists")) \
127
- .and_return(an_artist_list)
128
-
129
- @client.should_receive(:make_api_request) \
130
- .with(:GET, "artist/browse", {:letter => letter}, {}) \
131
- .and_return(an_api_response)
132
-
133
- artists = @artist_manager.browse(letter)
134
- artists.should == an_artist_list
135
-
136
- end
137
-
138
-
139
- it "get_chart should call artist/chart api method and digest the artist list from response" do
140
-
141
- api_response = fake_api_response("artist/chart")
142
- a_chart = [Sevendigital::ChartItem.new(@client)]
143
-
144
- mock_client_digestor(@client, :chart_item_digestor) \
145
- .should_receive(:list_from_xml_doc).with(api_response.item_xml("chart")).and_return(a_chart)
146
-
147
- @client.should_receive(:make_api_request) \
148
- .with(:GET, "artist/chart", {}, {}) \
149
- .and_return(api_response)
150
-
151
- chart = @artist_manager.get_chart
152
- chart.should == a_chart
153
- end
154
-
155
-
156
- it "get_tags should call artist/tags api method and return list of digested tags" do
157
- an_artist_id = 123
158
- a_list_of_tags = [Sevendigital::Tag.new, Sevendigital::Tag.new]
159
- an_api_response = fake_api_response("artist/tags")
160
- options = {:page => 1}
161
-
162
- mock_client_digestor(@client, :tag_digestor) \
163
- .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("tags")).and_return(a_list_of_tags)
164
-
165
- @client.should_receive(:make_api_request) \
166
- .with(:GET, "artist/tags", {:artistId => an_artist_id}, options) \
167
- .and_return(an_api_response)
168
-
169
- releases = @artist_manager.get_tags(an_artist_id, options)
170
- releases.should == a_list_of_tags
171
- end
172
-
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "ArtistManager" do
4
+
5
+ before do
6
+ @client = stub(Sevendigital::Client)
7
+ @client.stub!(:operator).and_return(mock(Sevendigital::ApiOperator))
8
+ @artist_manager = Sevendigital::ArtistManager.new(@client)
9
+ end
10
+
11
+ it "get_details should call artist/details api method and return digested artist" do
12
+ an_artist_id = 123
13
+ an_artist = Sevendigital::Artist.new(@client)
14
+ an_api_response = fake_api_response("artist/details")
15
+
16
+ mock_client_digestor(@client, :artist_digestor) \
17
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("artist")).and_return(an_artist)
18
+
19
+ @client.should_receive(:make_api_request) \
20
+ .with(:GET, "artist/details", {:artistId => an_artist_id}, {}) \
21
+ .and_return(an_api_response)
22
+
23
+ artist = @artist_manager.get_details(an_artist_id)
24
+ artist.should == an_artist
25
+ end
26
+
27
+ it "get_releases should call artist/releases api method and return list of digested releases" do
28
+ an_artist_id = 123
29
+ a_list_of_releases = [Sevendigital::Release.new(@client), Sevendigital::Release.new(@client)]
30
+ an_api_response = fake_api_response("artist/releases")
31
+
32
+ mock_client_digestor(@client, :release_digestor) \
33
+ .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("releases")).and_return(a_list_of_releases)
34
+
35
+ @client.should_receive(:make_api_request) \
36
+ .with(:GET, "artist/releases", {:artistId => an_artist_id}, {}) \
37
+ .and_return(an_api_response)
38
+
39
+ releases = @artist_manager.get_releases(an_artist_id)
40
+ releases.should == a_list_of_releases
41
+ end
42
+
43
+ it "get_top_tracks should call artist/topTracks method and digest the returned list of tracks" do
44
+ an_artist_id = 123
45
+ a_top_tracks_list = [Sevendigital::Track.new(@client)]
46
+ an_api_response = fake_api_response("artist/toptracks")
47
+
48
+ mock_client_digestor(@client, :track_digestor) \
49
+ .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("tracks")).and_return(a_top_tracks_list)
50
+
51
+ @client.should_receive(:make_api_request) \
52
+ .with(:GET, "artist/topTracks", {:artistId => an_artist_id}, {}) \
53
+ .and_return(an_api_response)
54
+
55
+ tracks = @artist_manager.get_top_tracks(an_artist_id)
56
+ tracks.should == a_top_tracks_list
57
+
58
+ end
59
+
60
+ it "get_similar should call artist/similar method and digest the returned list of artists" do
61
+ an_artist_id = 123
62
+ a_similar_artists_list = [Sevendigital::Artist.new(@client), Sevendigital::Artist.new(@client)]
63
+ an_api_response = fake_api_response("artist/similar")
64
+
65
+ mock_client_digestor(@client, :artist_digestor) \
66
+ .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("artists")).and_return(a_similar_artists_list)
67
+
68
+ @client.should_receive(:make_api_request) \
69
+ .with(:GET, "artist/similar", {:artistId => an_artist_id}, {}) \
70
+ .and_return(an_api_response)
71
+
72
+ artists = @artist_manager.get_similar(an_artist_id)
73
+ artists.should == a_similar_artists_list
74
+
75
+ end
76
+
77
+ it "get_top_by_tag should call artist/byTag/top api method and digest the nested artist list from response" do
78
+
79
+ tags = "alternative-indie"
80
+ an_api_response = fake_api_response("artist/byTag/top")
81
+ a_release_list = []
82
+
83
+ mock_client_digestor(@client, :artist_digestor) \
84
+ .should_receive(:nested_list_from_xml_doc) \
85
+ .with(an_api_response.item_xml("taggedResults"), :taggedItem, :artist) \
86
+ .and_return(a_release_list)
87
+
88
+ @client.should_receive(:make_api_request) \
89
+ .with(:GET, "artist/byTag/top", {:tags => tags}, {}) \
90
+ .and_return(an_api_response)
91
+
92
+ releases = @artist_manager.get_top_by_tag(tags)
93
+ releases.should == a_release_list
94
+
95
+ end
96
+
97
+ it "search should call artist/search api method and digest the nested artist list from response" do
98
+
99
+ query = "radiohead"
100
+ api_response = fake_api_response("artist/search")
101
+ an_artist_list = []
102
+
103
+ mock_client_digestor(@client, :artist_digestor) \
104
+ .should_receive(:nested_list_from_xml_doc) \
105
+ .with(api_response.item_xml("searchResults"), :searchResult, :artist) \
106
+ .and_return(an_artist_list)
107
+
108
+ @client.should_receive(:make_api_request) \
109
+ .with(:GET, "artist/search", {:q => query}, {}) \
110
+ .and_return(api_response)
111
+
112
+ artists = @artist_manager.search(query)
113
+ artists.should == an_artist_list
114
+
115
+ end
116
+
117
+
118
+ it "browse should call artist/browse api method and digest the artist list from response" do
119
+
120
+ letter = "ra"
121
+ an_api_response = fake_api_response("artist/browse")
122
+ an_artist_list = []
123
+
124
+ mock_client_digestor(@client, :artist_digestor) \
125
+ .should_receive(:list_from_xml_doc) \
126
+ .with(an_api_response.item_xml("artists")) \
127
+ .and_return(an_artist_list)
128
+
129
+ @client.should_receive(:make_api_request) \
130
+ .with(:GET, "artist/browse", {:letter => letter}, {}) \
131
+ .and_return(an_api_response)
132
+
133
+ artists = @artist_manager.browse(letter)
134
+ artists.should == an_artist_list
135
+
136
+ end
137
+
138
+
139
+ it "get_chart should call artist/chart api method and digest the artist list from response" do
140
+
141
+ api_response = fake_api_response("artist/chart")
142
+ a_chart = [Sevendigital::ChartItem.new(@client)]
143
+
144
+ mock_client_digestor(@client, :chart_item_digestor) \
145
+ .should_receive(:list_from_xml_doc).with(api_response.item_xml("chart")).and_return(a_chart)
146
+
147
+ @client.should_receive(:make_api_request) \
148
+ .with(:GET, "artist/chart", {}, {}) \
149
+ .and_return(api_response)
150
+
151
+ chart = @artist_manager.get_chart
152
+ chart.should == a_chart
153
+ end
154
+
155
+
156
+ it "get_tags should call artist/tags api method and return list of digested tags" do
157
+ an_artist_id = 123
158
+ a_list_of_tags = [Sevendigital::Tag.new, Sevendigital::Tag.new]
159
+ an_api_response = fake_api_response("artist/tags")
160
+ options = {:page => 1}
161
+
162
+ mock_client_digestor(@client, :tag_digestor) \
163
+ .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("tags")).and_return(a_list_of_tags)
164
+
165
+ @client.should_receive(:make_api_request) \
166
+ .with(:GET, "artist/tags", {:artistId => an_artist_id}, options) \
167
+ .and_return(an_api_response)
168
+
169
+ releases = @artist_manager.get_tags(an_artist_id, options)
170
+ releases.should == a_list_of_tags
171
+ end
172
+
173
173
  end
@@ -1,78 +1,78 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
2
-
3
- describe "BasketManager" do
4
-
5
- before do
6
- @client = stub(Sevendigital::Client)
7
- @client.stub!(:operator).and_return(mock(Sevendigital::ApiOperator))
8
- @basket_manager = Sevendigital::BasketManager.new(@client)
9
- end
10
-
11
- it "get should call basket api method and return digested basket" do
12
- a_basket_id = "00000000-0000-0000-0000-000000000001"
13
- a_basket = Sevendigital::Basket.new(@client)
14
- an_api_response = fake_api_response("basket/index")
15
-
16
- mock_client_digestor(@client, :basket_digestor) \
17
- .should_receive(:from_xml_doc).with(an_api_response.item_xml("basket")).and_return(a_basket)
18
-
19
- @client.should_receive(:make_api_request) \
20
- .with(:GET, "basket", {:basketId => a_basket_id}, {}) \
21
- .and_return(an_api_response)
22
-
23
- basket = @basket_manager.get(a_basket_id)
24
- basket.should == a_basket
25
- end
26
-
27
- it "create should call basket/create api method and return digested created basket" do
28
- a_basket = Sevendigital::Basket.new(@client)
29
- an_api_response = fake_api_response("basket/create")
30
-
31
- mock_client_digestor(@client, :basket_digestor) \
32
- .should_receive(:from_xml_doc).with(an_api_response.item_xml("basket")).and_return(a_basket)
33
-
34
- @client.should_receive(:make_api_request) \
35
- .with(:GET, "basket/create", {}, {}) \
36
- .and_return(an_api_response)
37
-
38
- basket = @basket_manager.create
39
- basket.should == a_basket
40
- end
41
-
42
- it "add_item should call basket/addItem api method and return digested basket" do
43
- a_basket_id = "00000000-0000-0000-0000-000000000001"
44
- a_release_id = 123
45
- a_track_id = 456
46
- a_basket = Sevendigital::Basket.new(@client)
47
- an_api_response = fake_api_response("basket/additem")
48
-
49
- mock_client_digestor(@client, :basket_digestor) \
50
- .should_receive(:from_xml_doc).with(an_api_response.item_xml("basket")).and_return(a_basket)
51
-
52
- @client.should_receive(:make_api_request) \
53
- .with(:GET, "basket/addItem", {:basketId => a_basket_id, :releaseId => a_release_id, :trackId => a_track_id}, {}) \
54
- .and_return(an_api_response)
55
-
56
- basket = @basket_manager.add_item(a_basket_id, a_release_id, a_track_id)
57
- basket.should == a_basket
58
- end
59
-
60
- it "remove_item should call basket/removeItem api method and return digested basket" do
61
- a_basket_id = "00000000-0000-0000-0000-000000000001"
62
- an_item_id = 123456
63
- a_basket = Sevendigital::Basket.new(@client)
64
- an_api_response = fake_api_response("basket/removeitem")
65
-
66
- mock_client_digestor(@client, :basket_digestor) \
67
- .should_receive(:from_xml_doc).with(an_api_response.item_xml("basket")).and_return(a_basket)
68
-
69
- @client.should_receive(:make_api_request) \
70
- .with(:GET, "basket/removeItem", {:basketId => a_basket_id, :itemId => an_item_id}, {}) \
71
- .and_return(an_api_response)
72
-
73
- basket = @basket_manager.remove_item(a_basket_id, an_item_id)
74
- basket.should == a_basket
75
- end
76
-
77
-
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "BasketManager" do
4
+
5
+ before do
6
+ @client = stub(Sevendigital::Client)
7
+ @client.stub!(:operator).and_return(mock(Sevendigital::ApiOperator))
8
+ @basket_manager = Sevendigital::BasketManager.new(@client)
9
+ end
10
+
11
+ it "get should call basket api method and return digested basket" do
12
+ a_basket_id = "00000000-0000-0000-0000-000000000001"
13
+ a_basket = Sevendigital::Basket.new(@client)
14
+ an_api_response = fake_api_response("basket/index")
15
+
16
+ mock_client_digestor(@client, :basket_digestor) \
17
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("basket")).and_return(a_basket)
18
+
19
+ @client.should_receive(:make_api_request) \
20
+ .with(:GET, "basket", {:basketId => a_basket_id}, {}) \
21
+ .and_return(an_api_response)
22
+
23
+ basket = @basket_manager.get(a_basket_id)
24
+ basket.should == a_basket
25
+ end
26
+
27
+ it "create should call basket/create api method and return digested created basket" do
28
+ a_basket = Sevendigital::Basket.new(@client)
29
+ an_api_response = fake_api_response("basket/create")
30
+
31
+ mock_client_digestor(@client, :basket_digestor) \
32
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("basket")).and_return(a_basket)
33
+
34
+ @client.should_receive(:make_api_request) \
35
+ .with(:GET, "basket/create", {}, {}) \
36
+ .and_return(an_api_response)
37
+
38
+ basket = @basket_manager.create
39
+ basket.should == a_basket
40
+ end
41
+
42
+ it "add_item should call basket/addItem api method and return digested basket" do
43
+ a_basket_id = "00000000-0000-0000-0000-000000000001"
44
+ a_release_id = 123
45
+ a_track_id = 456
46
+ a_basket = Sevendigital::Basket.new(@client)
47
+ an_api_response = fake_api_response("basket/additem")
48
+
49
+ mock_client_digestor(@client, :basket_digestor) \
50
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("basket")).and_return(a_basket)
51
+
52
+ @client.should_receive(:make_api_request) \
53
+ .with(:GET, "basket/addItem", {:basketId => a_basket_id, :releaseId => a_release_id, :trackId => a_track_id}, {}) \
54
+ .and_return(an_api_response)
55
+
56
+ basket = @basket_manager.add_item(a_basket_id, a_release_id, a_track_id)
57
+ basket.should == a_basket
58
+ end
59
+
60
+ it "remove_item should call basket/removeItem api method and return digested basket" do
61
+ a_basket_id = "00000000-0000-0000-0000-000000000001"
62
+ an_item_id = 123456
63
+ a_basket = Sevendigital::Basket.new(@client)
64
+ an_api_response = fake_api_response("basket/removeitem")
65
+
66
+ mock_client_digestor(@client, :basket_digestor) \
67
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("basket")).and_return(a_basket)
68
+
69
+ @client.should_receive(:make_api_request) \
70
+ .with(:GET, "basket/removeItem", {:basketId => a_basket_id, :itemId => an_item_id}, {}) \
71
+ .and_return(an_api_response)
72
+
73
+ basket = @basket_manager.remove_item(a_basket_id, an_item_id)
74
+ basket.should == a_basket
75
+ end
76
+
77
+
78
78
  end