7digital 0.0.7 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. data/README.rdoc +8 -1
  2. data/lib/sevendigital.rb +4 -2
  3. data/lib/sevendigital/api_operator.rb +92 -94
  4. data/lib/sevendigital/api_operator_cached.rb +55 -33
  5. data/lib/sevendigital/api_request.rb +50 -54
  6. data/lib/sevendigital/client.rb +15 -6
  7. data/lib/sevendigital/client_configuration.rb +0 -3
  8. data/lib/sevendigital/client_digestors.rb +15 -0
  9. data/lib/sevendigital/client_managers.rb +11 -1
  10. data/lib/sevendigital/digestion_tract/api_response_digestor.rb +31 -40
  11. data/lib/sevendigital/digestion_tract/artist_digestor.rb +16 -13
  12. data/lib/sevendigital/digestion_tract/basket_digestor.rb +5 -5
  13. data/lib/sevendigital/digestion_tract/basket_item_digestor.rb +12 -12
  14. data/lib/sevendigital/digestion_tract/chart_item_digestor.rb +17 -11
  15. data/lib/sevendigital/digestion_tract/country_digestor.rb +16 -0
  16. data/lib/sevendigital/digestion_tract/digestor.rb +82 -28
  17. data/lib/sevendigital/digestion_tract/download_url_digestor.rb +10 -7
  18. data/lib/sevendigital/digestion_tract/format_digestor.rb +11 -9
  19. data/lib/sevendigital/digestion_tract/label_digestor.rb +8 -7
  20. data/lib/sevendigital/digestion_tract/list_digestor.rb +24 -0
  21. data/lib/sevendigital/digestion_tract/list_item_digestor.rb +26 -0
  22. data/lib/sevendigital/digestion_tract/locker_digestor.rb +9 -5
  23. data/lib/sevendigital/digestion_tract/locker_release_digestor.rb +13 -7
  24. data/lib/sevendigital/digestion_tract/locker_track_digestor.rb +13 -9
  25. data/lib/sevendigital/digestion_tract/oauth_access_token_digestor.rb +7 -3
  26. data/lib/sevendigital/digestion_tract/oauth_request_token_digestor.rb +7 -3
  27. data/lib/sevendigital/digestion_tract/pager_digestor.rb +13 -9
  28. data/lib/sevendigital/digestion_tract/price_digestor.rb +15 -12
  29. data/lib/sevendigital/digestion_tract/release_digestor.rb +26 -34
  30. data/lib/sevendigital/digestion_tract/tag_digestor.rb +8 -7
  31. data/lib/sevendigital/digestion_tract/track_digestor.rb +27 -28
  32. data/lib/sevendigital/digestion_tract/user_card_digestor.rb +9 -8
  33. data/lib/sevendigital/digestion_tract/user_digestor.rb +8 -7
  34. data/lib/sevendigital/management/artist_manager.rb +9 -11
  35. data/lib/sevendigital/management/basket_manager.rb +4 -4
  36. data/lib/sevendigital/management/country_manager.rb +11 -0
  37. data/lib/sevendigital/management/list_manager.rb +18 -0
  38. data/lib/sevendigital/management/oauth_manager.rb +2 -2
  39. data/lib/sevendigital/management/release_manager.rb +9 -11
  40. data/lib/sevendigital/management/tag_manager.rb +1 -1
  41. data/lib/sevendigital/management/track_manager.rb +4 -5
  42. data/lib/sevendigital/management/user_card_manager.rb +2 -2
  43. data/lib/sevendigital/management/user_manager.rb +9 -4
  44. data/lib/sevendigital/model/api_response.rb +12 -4
  45. data/lib/sevendigital/model/artist.rb +5 -0
  46. data/lib/sevendigital/model/list.rb +5 -0
  47. data/lib/sevendigital/model/list_item.rb +9 -0
  48. data/lib/sevendigital/model/release.rb +2 -2
  49. data/lib/sevendigital/model/sevendigital_object.rb +1 -1
  50. data/lib/sevendigital/model/user.rb +12 -1
  51. data/lib/sevendigital/pager.rb +2 -6
  52. data/lib/sevendigital/version.rb +1 -1
  53. data/spec/api_operator_cached_spec.rb +14 -14
  54. data/spec/api_operator_spec.rb +18 -34
  55. data/spec/digestion_tract/api_response_digestor_spec.rb +26 -25
  56. data/spec/digestion_tract/artist_digestor_spec.rb +9 -9
  57. data/spec/digestion_tract/basket_digestor_spec.rb +2 -2
  58. data/spec/digestion_tract/basket_item_digestor_spec.rb +4 -4
  59. data/spec/digestion_tract/chart_digestor_spec.rb +4 -4
  60. data/spec/digestion_tract/country_digestor_spec.rb +33 -0
  61. data/spec/digestion_tract/digestor_spec.rb +34 -0
  62. data/spec/digestion_tract/download_url_digestor_spec.rb +2 -2
  63. data/spec/digestion_tract/format_digestor_spec.rb +2 -2
  64. data/spec/digestion_tract/label_digestor_spec.rb +2 -2
  65. data/spec/digestion_tract/list_digestor_spec.rb +32 -0
  66. data/spec/digestion_tract/list_item_digestor_spec.rb +80 -0
  67. data/spec/digestion_tract/locker_digestor_spec.rb +2 -2
  68. data/spec/digestion_tract/locker_release_digestor_spec.rb +5 -5
  69. data/spec/digestion_tract/locker_track_digestor_spec.rb +4 -4
  70. data/spec/digestion_tract/oauth_access_token_digestor_spec.rb +2 -2
  71. data/spec/digestion_tract/oauth_request_token_digestor_spec.rb +2 -2
  72. data/spec/digestion_tract/pager_digestor_spec.rb +3 -3
  73. data/spec/digestion_tract/price_digestor_spec.rb +4 -4
  74. data/spec/digestion_tract/release_digestor_spec.rb +19 -5
  75. data/spec/digestion_tract/tag_digestor_spec.rb +3 -3
  76. data/spec/digestion_tract/track_digestor_spec.rb +4 -4
  77. data/spec/digestion_tract/user_card_digestor_spec.rb +5 -5
  78. data/spec/digestion_tract/user_digestor_spec.rb +4 -6
  79. data/spec/integration/artist_spec.rb +86 -0
  80. data/spec/integration/country_spec.rb +18 -0
  81. data/spec/integration/list_spec.rb +22 -0
  82. data/spec/integration/purchasing_spec.rb +24 -0
  83. data/spec/integration/release_spec.rb +34 -0
  84. data/spec/integration/sevendigital_spec.yml +5 -0
  85. data/spec/integration/track_spec.rb +23 -0
  86. data/spec/integration/user_spec.rb +22 -0
  87. data/spec/management/artist_manager_spec.rb +32 -11
  88. data/spec/management/basket_manager_spec.rb +4 -4
  89. data/spec/management/country_manager_spec.rb +34 -0
  90. data/spec/management/list_manager_spec.rb +27 -0
  91. data/spec/management/oauth_manager_spec.rb +4 -4
  92. data/spec/management/release_manager_spec.rb +13 -13
  93. data/spec/management/tag_manager_spec.rb +1 -1
  94. data/spec/management/track_manager_spec.rb +4 -4
  95. data/spec/management/user_card_manager_spec.rb +2 -2
  96. data/spec/management/user_manager_spec.rb +20 -4
  97. data/spec/model/api_response_spec.rb +3 -3
  98. data/spec/model/artist_spec.rb +2 -2
  99. data/spec/model/sevendigital_object_spec.rb +4 -4
  100. data/spec/model/user_spec.rb +21 -0
  101. data/spec/spec_helper.rb +31 -11
  102. data/spec/test-xml/methods/country/resolve.xml +7 -0
  103. data/spec/test-xml/methods/editorial/list.xml +171 -0
  104. data/spec/test-xml/methods/user/details.xml +5 -0
  105. data/spec/test-xml/objects/artist.xml +1 -0
  106. data/spec/test-xml/objects/list.xml +89 -0
  107. data/spec/test-xml/objects/list_item_list.xml +86 -0
  108. data/spec/test-xml/objects/list_item_release.xml +14 -0
  109. data/spec/test-xml/objects/nested_release_list.xml +23 -0
  110. metadata +126 -273
  111. data/lib/sevendigital/peachy_patchy.rb +0 -9
  112. data/lib/sevendigital/proxy_police.rb +0 -28
  113. data/spec/coverage/assets/0.3.9/app.js +0 -66
  114. data/spec/coverage/assets/0.3.9/fancybox/blank.gif +0 -0
  115. data/spec/coverage/assets/0.3.9/fancybox/fancy_close.png +0 -0
  116. data/spec/coverage/assets/0.3.9/fancybox/fancy_loading.png +0 -0
  117. data/spec/coverage/assets/0.3.9/fancybox/fancy_nav_left.png +0 -0
  118. data/spec/coverage/assets/0.3.9/fancybox/fancy_nav_right.png +0 -0
  119. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_e.png +0 -0
  120. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_n.png +0 -0
  121. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_ne.png +0 -0
  122. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_nw.png +0 -0
  123. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_s.png +0 -0
  124. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_se.png +0 -0
  125. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_sw.png +0 -0
  126. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_w.png +0 -0
  127. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_left.png +0 -0
  128. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_main.png +0 -0
  129. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_over.png +0 -0
  130. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_right.png +0 -0
  131. data/spec/coverage/assets/0.3.9/fancybox/fancybox-x.png +0 -0
  132. data/spec/coverage/assets/0.3.9/fancybox/fancybox-y.png +0 -0
  133. data/spec/coverage/assets/0.3.9/fancybox/fancybox.png +0 -0
  134. data/spec/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.css +0 -363
  135. data/spec/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.pack.js +0 -44
  136. data/spec/coverage/assets/0.3.9/favicon.png +0 -0
  137. data/spec/coverage/assets/0.3.9/jquery-1.4.2.min.js +0 -155
  138. data/spec/coverage/assets/0.3.9/jquery.dataTables.min.js +0 -152
  139. data/spec/coverage/assets/0.3.9/jquery.timeago.js +0 -141
  140. data/spec/coverage/assets/0.3.9/jquery.url.js +0 -174
  141. data/spec/coverage/assets/0.3.9/loading.gif +0 -0
  142. data/spec/coverage/assets/0.3.9/magnify.png +0 -0
  143. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  144. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  145. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  146. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  147. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  148. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  149. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  150. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  151. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_222222_256x240.png +0 -0
  152. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  153. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_454545_256x240.png +0 -0
  154. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_888888_256x240.png +0 -0
  155. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  156. data/spec/coverage/assets/0.3.9/smoothness/jquery-ui-1.8.4.custom.css +0 -295
  157. data/spec/coverage/assets/0.3.9/stylesheet.css +0 -341
  158. data/spec/coverage/index.html +0 -47481
  159. data/spec/coverage/resultset.yml +0 -3556
  160. data/spec/model/coverage/assets/0.3.9/app.js +0 -66
  161. data/spec/model/coverage/assets/0.3.9/fancybox/blank.gif +0 -0
  162. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_close.png +0 -0
  163. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_loading.png +0 -0
  164. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_nav_left.png +0 -0
  165. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_nav_right.png +0 -0
  166. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_e.png +0 -0
  167. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_n.png +0 -0
  168. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_ne.png +0 -0
  169. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_nw.png +0 -0
  170. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_s.png +0 -0
  171. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_se.png +0 -0
  172. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_sw.png +0 -0
  173. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_w.png +0 -0
  174. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_left.png +0 -0
  175. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_main.png +0 -0
  176. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_over.png +0 -0
  177. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_right.png +0 -0
  178. data/spec/model/coverage/assets/0.3.9/fancybox/fancybox-x.png +0 -0
  179. data/spec/model/coverage/assets/0.3.9/fancybox/fancybox-y.png +0 -0
  180. data/spec/model/coverage/assets/0.3.9/fancybox/fancybox.png +0 -0
  181. data/spec/model/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.css +0 -363
  182. data/spec/model/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.pack.js +0 -44
  183. data/spec/model/coverage/assets/0.3.9/favicon.png +0 -0
  184. data/spec/model/coverage/assets/0.3.9/jquery-1.4.2.min.js +0 -155
  185. data/spec/model/coverage/assets/0.3.9/jquery.dataTables.min.js +0 -152
  186. data/spec/model/coverage/assets/0.3.9/jquery.timeago.js +0 -141
  187. data/spec/model/coverage/assets/0.3.9/jquery.url.js +0 -174
  188. data/spec/model/coverage/assets/0.3.9/loading.gif +0 -0
  189. data/spec/model/coverage/assets/0.3.9/magnify.png +0 -0
  190. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  191. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  192. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  193. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  194. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  195. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  196. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  197. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  198. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_222222_256x240.png +0 -0
  199. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  200. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_454545_256x240.png +0 -0
  201. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_888888_256x240.png +0 -0
  202. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  203. data/spec/model/coverage/assets/0.3.9/smoothness/jquery-ui-1.8.4.custom.css +0 -295
  204. data/spec/model/coverage/assets/0.3.9/stylesheet.css +0 -341
  205. data/spec/model/coverage/index.html +0 -8637
  206. data/spec/model/coverage/resultset.yml +0 -642
  207. data/spec/pager_spec.rb +0 -7
  208. data/spec/peachy_spec_helper_patch.rb +0 -7
  209. data/spec/proxy_police_spec.rb +0 -70
  210. data/spec/sevendigital_spec.rb +0 -51
  211. data/spec/sevendigital_spec.yml +0 -5
@@ -0,0 +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
@@ -11,10 +11,10 @@ describe "ArtistManager" do
11
11
  it "get_details should call artist/details api method and return digested artist" do
12
12
  an_artist_id = 123
13
13
  an_artist = Sevendigital::Artist.new(@client)
14
- an_api_response = fake_api_response("release/details")
14
+ an_api_response = fake_api_response("artist/details")
15
15
 
16
16
  mock_client_digestor(@client, :artist_digestor) \
17
- .should_receive(:from_xml).with(an_api_response.content.artist).and_return(an_artist)
17
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("artist")).and_return(an_artist)
18
18
 
19
19
  @client.should_receive(:make_api_request) \
20
20
  .with(:GET, "artist/details", {:artistId => an_artist_id}, {}) \
@@ -30,7 +30,7 @@ describe "ArtistManager" do
30
30
  an_api_response = fake_api_response("artist/releases")
31
31
 
32
32
  mock_client_digestor(@client, :release_digestor) \
33
- .should_receive(:list_from_xml).with(an_api_response.content.releases).and_return(a_list_of_releases)
33
+ .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("releases")).and_return(a_list_of_releases)
34
34
 
35
35
  @client.should_receive(:make_api_request) \
36
36
  .with(:GET, "artist/releases", {:artistId => an_artist_id}, {}) \
@@ -46,7 +46,7 @@ describe "ArtistManager" do
46
46
  an_api_response = fake_api_response("artist/toptracks")
47
47
 
48
48
  mock_client_digestor(@client, :track_digestor) \
49
- .should_receive(:list_from_xml).with(an_api_response.content.tracks).and_return(a_top_tracks_list)
49
+ .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("tracks")).and_return(a_top_tracks_list)
50
50
 
51
51
  @client.should_receive(:make_api_request) \
52
52
  .with(:GET, "artist/topTracks", {:artistId => an_artist_id}, {}) \
@@ -63,7 +63,7 @@ describe "ArtistManager" do
63
63
  an_api_response = fake_api_response("artist/similar")
64
64
 
65
65
  mock_client_digestor(@client, :artist_digestor) \
66
- .should_receive(:list_from_xml).with(an_api_response.content.artists).and_return(a_similar_artists_list)
66
+ .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("artists")).and_return(a_similar_artists_list)
67
67
 
68
68
  @client.should_receive(:make_api_request) \
69
69
  .with(:GET, "artist/similar", {:artistId => an_artist_id}, {}) \
@@ -81,8 +81,8 @@ describe "ArtistManager" do
81
81
  a_release_list = []
82
82
 
83
83
  mock_client_digestor(@client, :artist_digestor) \
84
- .should_receive(:nested_list_from_xml) \
85
- .with(an_api_response.content.tagged_results, :tagged_item, :tagged_results) \
84
+ .should_receive(:nested_list_from_xml_doc) \
85
+ .with(an_api_response.item_xml("taggedResults"), :taggedItem, :artist) \
86
86
  .and_return(a_release_list)
87
87
 
88
88
  @client.should_receive(:make_api_request) \
@@ -94,6 +94,27 @@ describe "ArtistManager" do
94
94
 
95
95
  end
96
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
+
97
118
  it "browse should call artist/browse api method and digest the artist list from response" do
98
119
 
99
120
  letter = "ra"
@@ -101,8 +122,8 @@ describe "ArtistManager" do
101
122
  an_artist_list = []
102
123
 
103
124
  mock_client_digestor(@client, :artist_digestor) \
104
- .should_receive(:list_from_xml) \
105
- .with(an_api_response.content.artists) \
125
+ .should_receive(:list_from_xml_doc) \
126
+ .with(an_api_response.item_xml("artists")) \
106
127
  .and_return(an_artist_list)
107
128
 
108
129
  @client.should_receive(:make_api_request) \
@@ -121,7 +142,7 @@ describe "ArtistManager" do
121
142
  a_chart = [Sevendigital::ChartItem.new(@client)]
122
143
 
123
144
  mock_client_digestor(@client, :chart_item_digestor) \
124
- .should_receive(:list_from_xml).with(api_response.content.chart).and_return(a_chart)
145
+ .should_receive(:list_from_xml_doc).with(api_response.item_xml("chart")).and_return(a_chart)
125
146
 
126
147
  @client.should_receive(:make_api_request) \
127
148
  .with(:GET, "artist/chart", {}, {}) \
@@ -139,7 +160,7 @@ describe "ArtistManager" do
139
160
  options = {:page => 1}
140
161
 
141
162
  mock_client_digestor(@client, :tag_digestor) \
142
- .should_receive(:list_from_xml).with(an_api_response.content.tags).and_return(a_list_of_tags)
163
+ .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("tags")).and_return(a_list_of_tags)
143
164
 
144
165
  @client.should_receive(:make_api_request) \
145
166
  .with(:GET, "artist/tags", {:artistId => an_artist_id}, options) \
@@ -14,7 +14,7 @@ describe "BasketManager" do
14
14
  an_api_response = fake_api_response("basket/index")
15
15
 
16
16
  mock_client_digestor(@client, :basket_digestor) \
17
- .should_receive(:from_xml).with(an_api_response.content.basket).and_return(a_basket)
17
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("basket")).and_return(a_basket)
18
18
 
19
19
  @client.should_receive(:make_api_request) \
20
20
  .with(:GET, "basket", {:basketId => a_basket_id}, {}) \
@@ -29,7 +29,7 @@ describe "BasketManager" do
29
29
  an_api_response = fake_api_response("basket/create")
30
30
 
31
31
  mock_client_digestor(@client, :basket_digestor) \
32
- .should_receive(:from_xml).with(an_api_response.content.basket).and_return(a_basket)
32
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("basket")).and_return(a_basket)
33
33
 
34
34
  @client.should_receive(:make_api_request) \
35
35
  .with(:GET, "basket/create", {}, {}) \
@@ -47,7 +47,7 @@ describe "BasketManager" do
47
47
  an_api_response = fake_api_response("basket/additem")
48
48
 
49
49
  mock_client_digestor(@client, :basket_digestor) \
50
- .should_receive(:from_xml).with(an_api_response.content.basket).and_return(a_basket)
50
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("basket")).and_return(a_basket)
51
51
 
52
52
  @client.should_receive(:make_api_request) \
53
53
  .with(:GET, "basket/addItem", {:basketId => a_basket_id, :releaseId => a_release_id, :trackId => a_track_id}, {}) \
@@ -64,7 +64,7 @@ describe "BasketManager" do
64
64
  an_api_response = fake_api_response("basket/removeitem")
65
65
 
66
66
  mock_client_digestor(@client, :basket_digestor) \
67
- .should_receive(:from_xml).with(an_api_response.content.basket).and_return(a_basket)
67
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("basket")).and_return(a_basket)
68
68
 
69
69
  @client.should_receive(:make_api_request) \
70
70
  .with(:GET, "basket/removeItem", {:basketId => a_basket_id, :itemId => an_item_id}, {}) \
@@ -0,0 +1,34 @@
1
+ # encoding: UTF-8
2
+ require 'date'
3
+ require File.expand_path('../../spec_helper', __FILE__)
4
+
5
+ describe "CountryManager" do
6
+
7
+ before do
8
+
9
+ @client = stub(Sevendigital::Client)
10
+ @client.stub!(:operator).and_return(mock(Sevendigital::ApiOperator))
11
+ @country_manager = Sevendigital::CountryManager.new(@client)
12
+
13
+ end
14
+
15
+
16
+ it "resolve should call country/resolve api method and digest the country code from response" do
17
+
18
+ an_api_response = fake_api_response("country/resolve")
19
+ a_country_code = 'XX'
20
+ an_ip_address = '127.0.0.1'
21
+
22
+ mock_client_digestor(@client, :country_digestor) \
23
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("GeoIpLookup") ).and_return(a_country_code)
24
+
25
+ @client.should_receive(:make_api_request) \
26
+ .with(:GET, "country/resolve", {:ipaddress => an_ip_address}, {}) \
27
+ .and_return(an_api_response)
28
+
29
+
30
+ @country_manager.resolve(an_ip_address).should == a_country_code
31
+ end
32
+
33
+
34
+ end
@@ -0,0 +1,27 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "ListManager" do
4
+
5
+ before do
6
+ @client = stub(Sevendigital::Client)
7
+ @client.stub!(:operator).and_return(mock(Sevendigital::ApiOperator))
8
+ @list_manager = Sevendigital::ListManager.new(@client)
9
+ end
10
+
11
+ it "get_editorial_list should call editorial/list api method and return digested list" do
12
+ an_editorial_list_key = "featured"
13
+ an_editorial_list = Sevendigital::List.new(@client)
14
+ an_api_response = fake_api_response("editorial/list")
15
+
16
+ mock_client_digestor(@client, :list_digestor) \
17
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("list")).and_return(an_editorial_list)
18
+
19
+ @client.should_receive(:make_api_request) \
20
+ .with(:GET, "editorial/list", {:key => an_editorial_list_key}, {}) \
21
+ .and_return(an_api_response)
22
+
23
+ list = @list_manager.get_editorial_list(an_editorial_list_key)
24
+ list.should == an_editorial_list
25
+ end
26
+
27
+ end
@@ -17,8 +17,8 @@ describe "OAuthManager" do
17
17
  digestor = mock(Sevendigital::OAuthRequestTokenDigestor)
18
18
  @client.stub!(:oauth_request_token_digestor).and_return(digestor)
19
19
 
20
- digestor.should_receive(:from_xml) \
21
- .with(an_api_response.content.oauth_request_token, :oauth_request_token) \
20
+ digestor.should_receive(:from_xml_doc) \
21
+ .with(an_api_response.item_xml("oauth_request_token")) \
22
22
  .and_return(fake_token)
23
23
 
24
24
  @client.should_receive(:make_signed_api_request) \
@@ -39,8 +39,8 @@ describe "OAuthManager" do
39
39
  digestor = mock(Sevendigital::OAuthAccessTokenDigestor)
40
40
  @client.stub!(:oauth_access_token_digestor).and_return(digestor)
41
41
 
42
- digestor.should_receive(:from_xml) \
43
- .with(an_api_response.content.oauth_access_token, :oauth_access_token) \
42
+ digestor.should_receive(:from_xml_doc) \
43
+ .with(an_api_response.item_xml("oauth_access_token")) \
44
44
  .and_return(fake_token)
45
45
 
46
46
  @client.should_receive(:make_signed_api_request) \
@@ -18,7 +18,7 @@ describe "ReleaseManager" do
18
18
  a_release = Sevendigital::Release.new(@client)
19
19
 
20
20
  mock_client_digestor(@client, :release_digestor) \
21
- .should_receive(:from_xml).with(api_response.content.release).and_return(a_release)
21
+ .should_receive(:from_xml_doc).with(api_response.item_xml("release")).and_return(a_release)
22
22
 
23
23
  @client.should_receive(:make_api_request) \
24
24
  .with(:GET, "release/details", {:releaseId => expected_release_id}, {}) \
@@ -35,7 +35,7 @@ describe "ReleaseManager" do
35
35
  a_track_list = []
36
36
 
37
37
  mock_client_digestor(@client, :track_digestor) \
38
- .should_receive(:list_from_xml).with(api_response.content.tracks).and_return(a_track_list)
38
+ .should_receive(:list_from_xml_doc).with(api_response.item_xml("tracks")).and_return(a_track_list)
39
39
 
40
40
  @client.should_receive(:make_api_request) \
41
41
  .with(:GET, "release/tracks", {:releaseId=>a_release_id}, expected_options) \
@@ -53,7 +53,7 @@ describe "ReleaseManager" do
53
53
  a_track_list = []
54
54
 
55
55
  mock_client_digestor(@client, :track_digestor) \
56
- .should_receive(:list_from_xml).with(api_response.content.tracks).and_return(a_track_list)
56
+ .should_receive(:list_from_xml_doc).with(api_response.item_xml("tracks")).and_return(a_track_list)
57
57
 
58
58
  @client.should_receive(:make_api_request) \
59
59
  .with(:GET, "release/tracks", {:releaseId => a_release_id}, {:page_size => 100}) \
@@ -71,7 +71,7 @@ describe "ReleaseManager" do
71
71
  a_chart = []
72
72
 
73
73
  mock_client_digestor(@client, :chart_item_digestor) \
74
- .should_receive(:list_from_xml).with(api_response.content.chart).and_return(a_chart)
74
+ .should_receive(:list_from_xml_doc).with(api_response.item_xml("chart")).and_return(a_chart)
75
75
 
76
76
  @client.should_receive(:make_api_request) \
77
77
  .with(:GET, "release/chart", {}, {}) \
@@ -89,7 +89,7 @@ describe "ReleaseManager" do
89
89
  a_release_list = []
90
90
 
91
91
  mock_client_digestor(@client, :release_digestor) \
92
- .should_receive(:list_from_xml).with(api_response.content.releases).and_return(a_release_list)
92
+ .should_receive(:list_from_xml_doc).with(api_response.item_xml("releases")).and_return(a_release_list)
93
93
 
94
94
  @client.should_receive(:make_api_request) \
95
95
  .with(:GET, "release/byDate", {:fromDate => from_date.strftime("%Y%m%d"), :toDate => to_date.strftime("%Y%m%d")}, {}) \
@@ -106,7 +106,7 @@ describe "ReleaseManager" do
106
106
  a_release_list = []
107
107
 
108
108
  mock_client_digestor(@client, :release_digestor) \
109
- .should_receive(:list_from_xml).with(api_response.content.releases).and_return(a_release_list)
109
+ .should_receive(:list_from_xml_doc).with(api_response.item_xml("releases")).and_return(a_release_list)
110
110
 
111
111
  @client.should_receive(:make_api_request) \
112
112
  .with(:GET, "release/byDate", {}, {}) \
@@ -124,8 +124,8 @@ describe "ReleaseManager" do
124
124
  a_release_list = []
125
125
 
126
126
  mock_client_digestor(@client, :release_digestor) \
127
- .should_receive(:nested_list_from_xml) \
128
- .with(api_response.content.recommendations, :recommended_item, :recommendations) \
127
+ .should_receive(:nested_list_from_xml_doc) \
128
+ .with(api_response.item_xml("recommendations"), :recommendedItem, :release) \
129
129
  .and_return(a_release_list)
130
130
 
131
131
  @client.should_receive(:make_api_request) \
@@ -144,8 +144,8 @@ describe "ReleaseManager" do
144
144
  a_release_list = []
145
145
 
146
146
  mock_client_digestor(@client, :release_digestor) \
147
- .should_receive(:nested_list_from_xml) \
148
- .with(api_response.content.tagged_results, :tagged_item, :tagged_results) \
147
+ .should_receive(:nested_list_from_xml_doc) \
148
+ .with(api_response.item_xml("taggedResults"), :taggedItem, :release) \
149
149
  .and_return(a_release_list)
150
150
 
151
151
  @client.should_receive(:make_api_request) \
@@ -164,8 +164,8 @@ describe "ReleaseManager" do
164
164
  a_release_list = []
165
165
 
166
166
  mock_client_digestor(@client, :release_digestor) \
167
- .should_receive(:nested_list_from_xml) \
168
- .with(api_response.content.search_results, :search_result, :search_results) \
167
+ .should_receive(:nested_list_from_xml_doc) \
168
+ .with(api_response.item_xml("searchResults"), :searchResult, :release) \
169
169
  .and_return(a_release_list)
170
170
 
171
171
  @client.should_receive(:make_api_request) \
@@ -184,7 +184,7 @@ describe "ReleaseManager" do
184
184
  a_tag_list = []
185
185
 
186
186
  mock_client_digestor(@client, :tag_digestor) \
187
- .should_receive(:list_from_xml).with(api_response.content.tags).and_return(a_tag_list)
187
+ .should_receive(:list_from_xml_doc).with(api_response.item_xml("tags")).and_return(a_tag_list)
188
188
 
189
189
  @client.should_receive(:make_api_request) \
190
190
  .with(:GET, "release/tags", {:releaseId=>a_release_id}, expected_options) \
@@ -19,7 +19,7 @@ describe "TagManager" do
19
19
  a_tag_list = [Sevendigital::Tag.new]
20
20
 
21
21
  mock_client_digestor(@client, :tag_digestor) \
22
- .should_receive(:list_from_xml).with(an_api_response.content.tags).and_return(a_tag_list)
22
+ .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("tags") ).and_return(a_tag_list)
23
23
 
24
24
  @client.should_receive(:make_api_request) \
25
25
  .with(:GET, "tag", {}, {}) \
@@ -18,7 +18,7 @@ describe "TrackManager" do
18
18
  a_track = Sevendigital::Track.new(@client)
19
19
 
20
20
  mock_client_digestor(@client, :track_digestor) \
21
- .should_receive(:from_xml).with(an_api_response.content.track).and_return(a_track)
21
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("track")).and_return(a_track)
22
22
 
23
23
  @client.should_receive(:make_api_request) \
24
24
  .with(:GET, "track/details", {:trackId => a_track_id}, {}) \
@@ -54,7 +54,7 @@ describe "TrackManager" do
54
54
  a_chart = []
55
55
 
56
56
  mock_client_digestor(@client, :chart_item_digestor) \
57
- .should_receive(:list_from_xml).with(an_api_response.content.chart).and_return(a_chart)
57
+ .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("chart")).and_return(a_chart)
58
58
 
59
59
  @client.should_receive(:make_api_request) \
60
60
  .with(:GET, "track/chart", {}, {}) \
@@ -90,8 +90,8 @@ describe "TrackManager" do
90
90
  a_track_list = [Sevendigital::Track.new(@client)]
91
91
 
92
92
  mock_client_digestor(@client, :track_digestor) \
93
- .should_receive(:nested_list_from_xml) \
94
- .with(an_api_response.content.search_results, :search_result, :search_results) \
93
+ .should_receive(:nested_list_from_xml_doc) \
94
+ .with(an_api_response.item_xml("searchResults"), :searchResult, :track) \
95
95
  .and_return(a_track_list)
96
96
 
97
97
  @client.should_receive(:make_api_request) \
@@ -15,7 +15,7 @@ describe "UserCardManager" do
15
15
  options = {:pagesize => 20 }
16
16
 
17
17
  mock_client_digestor(@client, :user_card_digestor) \
18
- .should_receive(:list_from_xml).with(an_api_response.content.cards).and_return(a_card_list)
18
+ .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("cards")).and_return(a_card_list)
19
19
 
20
20
  @client.should_receive(:make_signed_api_request) \
21
21
  .with(:GET, "user/payment/card", {}, options, a_token) \
@@ -41,7 +41,7 @@ describe "UserCardManager" do
41
41
  options = {:pagesize => 20 }
42
42
 
43
43
  mock_client_digestor(@client, :user_card_digestor) \
44
- .should_receive(:from_xml).with(an_api_response.content.card).and_return(a_card)
44
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("card")).and_return(a_card)
45
45
 
46
46
  @client.should_receive(:make_signed_api_request) \
47
47
  .with(:POST, "user/payment/card/add", {
@@ -21,6 +21,22 @@ describe "UserManager" do
21
21
  @user_manager = Sevendigital::UserManager.new(@client)
22
22
  end
23
23
 
24
+ it "get_details should call user/details api method and return user's email" do
25
+ an_api_response = fake_api_response("user/details")
26
+ a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
27
+ fake_user = [Sevendigital::User.new(@client)]
28
+ options = {:sort => "random"}
29
+
30
+ mock_client_digestor(@client, :user_digestor) \
31
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("user")).and_return(fake_user)
32
+
33
+ @client.should_receive(:make_signed_api_request) \
34
+ .with(:GET, "user/details", {}, options, a_token) \
35
+ .and_return(an_api_response)
36
+
37
+ @user_manager.get_details(a_token, options).should == fake_user
38
+ end
39
+
24
40
  it "should log in user using an existing access token" do
25
41
  an_access_token = OAuth::AccessToken.new("aaa", "bbb", nil)
26
42
  @user = @user_manager.login(an_access_token)
@@ -39,7 +55,7 @@ describe "UserManager" do
39
55
  options = {:country => "XX"}
40
56
 
41
57
  mock_client_digestor(@client, :user_digestor) \
42
- .should_receive(:from_xml).with(an_api_response.content.user).and_return(fake_user)
58
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("user")).and_return(fake_user)
43
59
 
44
60
  @client.should_receive(:make_signed_api_request) \
45
61
  .with(:POST, "user/signUp", {:emailAddress => @an_email, :password => @a_password}, options) \
@@ -101,7 +117,7 @@ describe "UserManager" do
101
117
  options = {:sort => "random"}
102
118
 
103
119
  mock_client_digestor(@client, :locker_digestor) \
104
- .should_receive(:from_xml).with(an_api_response.content.locker).and_return(fake_locker)
120
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("locker")).and_return(fake_locker)
105
121
 
106
122
  @client.should_receive(:make_signed_api_request) \
107
123
  .with(:GET, "user/locker", {}, options, a_token) \
@@ -120,7 +136,7 @@ describe "UserManager" do
120
136
  fake_locker = [Sevendigital::LockerRelease.new(@client)]
121
137
 
122
138
  mock_client_digestor(@client, :locker_digestor) \
123
- .should_receive(:from_xml).with(an_api_response.content.purchase).and_return(fake_locker)
139
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("purchase")).and_return(fake_locker)
124
140
 
125
141
  @client.should_receive(:make_signed_api_request) \
126
142
  .with(:GET, "user/purchase/item", \
@@ -139,7 +155,7 @@ describe "UserManager" do
139
155
  fake_locker = [Sevendigital::LockerRelease.new(@client)]
140
156
 
141
157
  mock_client_digestor(@client, :locker_digestor) \
142
- .should_receive(:from_xml).with(an_api_response.content.purchase).and_return(fake_locker)
158
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("purchase")).and_return(fake_locker)
143
159
 
144
160
  @client.should_receive(:make_signed_api_request) \
145
161
  .with(:GET, "user/purchase/basket", \