7digital 0.0.5 → 0.0.6

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 (271) hide show
  1. data/README.rdoc +136 -136
  2. data/lib/sevendigital.rb +53 -53
  3. data/lib/sevendigital/api_operator.rb +130 -124
  4. data/lib/sevendigital/api_operator_cached.rb +41 -29
  5. data/lib/sevendigital/api_request.rb +65 -64
  6. data/lib/sevendigital/client.rb +113 -98
  7. data/lib/sevendigital/client_configuration.rb +86 -86
  8. data/lib/sevendigital/client_digestors.rb +107 -79
  9. data/lib/sevendigital/client_managers.rb +47 -34
  10. data/lib/sevendigital/digestion_tract/api_response_digestor.rb +58 -57
  11. data/lib/sevendigital/digestion_tract/artist_digestor.rb +32 -31
  12. data/lib/sevendigital/digestion_tract/basket_digestor.rb +19 -18
  13. data/lib/sevendigital/digestion_tract/basket_item_digestor.rb +26 -25
  14. data/lib/sevendigital/digestion_tract/chart_item_digestor.rb +28 -27
  15. data/lib/sevendigital/digestion_tract/digestor.rb +71 -70
  16. data/lib/sevendigital/digestion_tract/download_url_digestor.rb +20 -19
  17. data/lib/sevendigital/digestion_tract/format_digestor.rb +22 -21
  18. data/lib/sevendigital/digestion_tract/label_digestor.rb +20 -19
  19. data/lib/sevendigital/digestion_tract/locker_digestor.rb +18 -17
  20. data/lib/sevendigital/digestion_tract/locker_release_digestor.rb +20 -19
  21. data/lib/sevendigital/digestion_tract/locker_track_digestor.rb +22 -21
  22. data/lib/sevendigital/digestion_tract/oauth_access_token_digestor.rb +14 -13
  23. data/lib/sevendigital/digestion_tract/oauth_request_token_digestor.rb +14 -13
  24. data/lib/sevendigital/digestion_tract/pager_digestor.rb +24 -23
  25. data/lib/sevendigital/digestion_tract/price_digestor.rb +25 -24
  26. data/lib/sevendigital/digestion_tract/release_digestor.rb +53 -52
  27. data/lib/sevendigital/digestion_tract/tag_digestor.rb +22 -21
  28. data/lib/sevendigital/digestion_tract/track_digestor.rb +38 -37
  29. data/lib/sevendigital/digestion_tract/user_card_digestor.rb +24 -0
  30. data/lib/sevendigital/digestion_tract/user_digestor.rb +21 -0
  31. data/lib/sevendigital/management/artist_manager.rb +99 -82
  32. data/lib/sevendigital/management/basket_manager.rb +29 -29
  33. data/lib/sevendigital/management/manager.rb +12 -11
  34. data/lib/sevendigital/management/oauth_manager.rb +23 -23
  35. data/lib/sevendigital/management/release_manager.rb +56 -50
  36. data/lib/sevendigital/management/tag_manager.rb +10 -10
  37. data/lib/sevendigital/management/track_manager.rb +28 -28
  38. data/lib/sevendigital/management/user_card_manager.rb +27 -0
  39. data/lib/sevendigital/management/user_manager.rb +71 -51
  40. data/lib/sevendigital/model/api_response.rb +25 -40
  41. data/lib/sevendigital/model/artist.rb +94 -64
  42. data/lib/sevendigital/model/basket.rb +15 -15
  43. data/lib/sevendigital/model/basket_item.rb +14 -14
  44. data/lib/sevendigital/model/card.rb +12 -0
  45. data/lib/sevendigital/model/chart_item.rb +9 -9
  46. data/lib/sevendigital/model/download_url.rb +7 -7
  47. data/lib/sevendigital/model/format.rb +7 -7
  48. data/lib/sevendigital/model/label.rb +7 -7
  49. data/lib/sevendigital/model/locker.rb +4 -4
  50. data/lib/sevendigital/model/locker_release.rb +9 -9
  51. data/lib/sevendigital/model/locker_track.rb +9 -9
  52. data/lib/sevendigital/model/price.rb +9 -9
  53. data/lib/sevendigital/model/release.rb +52 -47
  54. data/lib/sevendigital/model/sevendigital_error.rb +11 -11
  55. data/lib/sevendigital/model/sevendigital_object.rb +57 -56
  56. data/lib/sevendigital/model/tag.rb +7 -7
  57. data/lib/sevendigital/model/track.rb +83 -28
  58. data/lib/sevendigital/model/user.rb +63 -33
  59. data/lib/sevendigital/pager.rb +23 -22
  60. data/lib/sevendigital/peachy_patchy.rb +9 -0
  61. data/lib/sevendigital/proxy_police.rb +27 -27
  62. data/lib/sevendigital/version.rb +5 -5
  63. data/spec/api_operator_cached_spec.rb +178 -102
  64. data/spec/api_operator_spec.rb +336 -338
  65. data/spec/api_request_spec.rb +31 -31
  66. data/spec/client_configuration_spec.rb +74 -74
  67. data/spec/client_spec.rb +162 -153
  68. data/spec/data/config/sevendigital.yml +5 -5
  69. data/spec/data/configuration_env_override.yml +5 -5
  70. data/spec/data/configuration_override.yml +1 -1
  71. data/spec/digestion_tract/api_response_digestor_spec.rb +92 -92
  72. data/spec/digestion_tract/artist_digestor_spec.rb +81 -81
  73. data/spec/digestion_tract/basket_digestor_spec.rb +31 -31
  74. data/spec/digestion_tract/basket_item_digestor_spec.rb +58 -58
  75. data/spec/digestion_tract/chart_digestor_spec.rb +52 -52
  76. data/spec/digestion_tract/download_url_digestor_spec.rb +40 -40
  77. data/spec/digestion_tract/format_digestor_spec.rb +38 -38
  78. data/spec/digestion_tract/label_digestor_spec.rb +33 -33
  79. data/spec/digestion_tract/locker_digestor_spec.rb +30 -30
  80. data/spec/digestion_tract/locker_release_digestor_spec.rb +70 -71
  81. data/spec/digestion_tract/locker_track_digestor_spec.rb +56 -56
  82. data/spec/digestion_tract/oauth_access_token_digestor_spec.rb +34 -34
  83. data/spec/digestion_tract/oauth_request_token_digestor_spec.rb +34 -34
  84. data/spec/digestion_tract/pager_digestor_spec.rb +50 -50
  85. data/spec/digestion_tract/price_digestor_spec.rb +73 -73
  86. data/spec/digestion_tract/release_digestor_spec.rb +101 -101
  87. data/spec/digestion_tract/tag_digestor_spec.rb +46 -46
  88. data/spec/digestion_tract/track_digestor_spec.rb +104 -104
  89. data/spec/digestion_tract/user_card_digestor_spec.rb +58 -0
  90. data/spec/digestion_tract/user_digestor_spec.rb +44 -0
  91. data/spec/management/artist_manager_spec.rb +151 -133
  92. data/spec/management/basket_manager_spec.rb +77 -77
  93. data/spec/management/oauth_manager_spec.rb +72 -72
  94. data/spec/management/release_manager_spec.rb +200 -181
  95. data/spec/management/tag_manager_spec.rb +34 -34
  96. data/spec/management/track_manager_spec.rb +107 -105
  97. data/spec/management/user_card_manager_spec.rb +79 -0
  98. data/spec/management/user_manager_spec.rb +202 -162
  99. data/spec/model/api_response_spec.rb +48 -111
  100. data/spec/model/artist_spec.rb +154 -141
  101. data/spec/model/basket_spec.rb +62 -62
  102. data/spec/model/release_spec.rb +122 -110
  103. data/spec/model/sevendigital_object_spec.rb +73 -73
  104. data/spec/model/track_spec.rb +144 -143
  105. data/spec/model/user_spec.rb +160 -97
  106. data/spec/pager_spec.rb +7 -7
  107. data/spec/peachy_spec_helper_patch.rb +6 -6
  108. data/spec/proxy_police_spec.rb +69 -47
  109. data/spec/sevendigital_spec.rb +70 -0
  110. data/spec/sevendigital_spec.yml +5 -0
  111. data/spec/spec_helper.rb +64 -60
  112. data/spec/test-xml/methods/artist/browse.xml +21 -21
  113. data/spec/test-xml/methods/artist/byTag/top.xml +50 -50
  114. data/spec/test-xml/methods/artist/chart.xml +30 -30
  115. data/spec/test-xml/methods/artist/details.xml +9 -9
  116. data/spec/test-xml/methods/artist/releases.xml +544 -544
  117. data/spec/test-xml/methods/artist/search.xml +18 -18
  118. data/spec/test-xml/methods/artist/similar.xml +39 -39
  119. data/spec/test-xml/methods/artist/tags.xml +12 -0
  120. data/spec/test-xml/methods/artist/toptracks.xml +279 -279
  121. data/spec/test-xml/methods/basket/additem.xml +23 -23
  122. data/spec/test-xml/methods/basket/create.xml +10 -10
  123. data/spec/test-xml/methods/basket/index.xml +23 -23
  124. data/spec/test-xml/methods/basket/removeitem.xml +10 -10
  125. data/spec/test-xml/methods/oauth/accesstoken.xml +5 -5
  126. data/spec/test-xml/methods/oauth/requesttoken.xml +5 -5
  127. data/spec/test-xml/methods/release/bydate.xml +173 -173
  128. data/spec/test-xml/methods/release/bytag/top.xml +150 -150
  129. data/spec/test-xml/methods/release/chart.xml +181 -181
  130. data/spec/test-xml/methods/release/details.xml +48 -48
  131. data/spec/test-xml/methods/release/recommend.xml +89 -89
  132. data/spec/test-xml/methods/release/search.xml +194 -194
  133. data/spec/test-xml/methods/release/tags.xml +27 -0
  134. data/spec/test-xml/methods/release/tracks.xml +28 -28
  135. data/spec/test-xml/methods/tag/index.xml +16 -16
  136. data/spec/test-xml/methods/track/chart.xml +149 -149
  137. data/spec/test-xml/methods/track/details.xml +30 -30
  138. data/spec/test-xml/methods/track/search.xml +159 -159
  139. data/spec/test-xml/methods/user/locker.xml +49 -49
  140. data/spec/test-xml/methods/user/payment/card/add.xml +8 -0
  141. data/spec/test-xml/methods/user/payment/card/index.xml +8 -0
  142. data/spec/test-xml/methods/user/payment/card/select.xml +1 -0
  143. data/spec/test-xml/methods/user/purchase/item.xml +48 -48
  144. data/spec/test-xml/methods/user/signUp.xml +6 -0
  145. data/spec/test-xml/objects/artist.xml +6 -6
  146. data/spec/test-xml/objects/artist_chart_item.xml +7 -7
  147. data/spec/test-xml/objects/artist_list.xml +22 -22
  148. data/spec/test-xml/objects/artist_list_empty.xml +4 -4
  149. data/spec/test-xml/objects/basket.xml +21 -21
  150. data/spec/test-xml/objects/basket_item.xml +11 -11
  151. data/spec/test-xml/objects/basket_item_list.xml +25 -25
  152. data/spec/test-xml/objects/basket_item_list_empty.xml +1 -1
  153. data/spec/test-xml/objects/download_url.xml +7 -7
  154. data/spec/test-xml/objects/locker.xml +47 -47
  155. data/spec/test-xml/objects/locker_release.xml +40 -40
  156. data/spec/test-xml/objects/locker_release_list.xml +87 -87
  157. data/spec/test-xml/objects/locker_release_list_empty.xml +4 -4
  158. data/spec/test-xml/objects/locker_release_one_item_list.xml +43 -43
  159. data/spec/test-xml/objects/locker_track.xml +25 -25
  160. data/spec/test-xml/objects/locker_track_list.xml +26 -26
  161. data/spec/test-xml/objects/locker_track_list_empty.xml +2 -2
  162. data/spec/test-xml/objects/oauth_access_token.xml +3 -3
  163. data/spec/test-xml/objects/oauth_request_token.xml +3 -3
  164. data/spec/test-xml/objects/price.xml +7 -7
  165. data/spec/test-xml/objects/release.xml +40 -40
  166. data/spec/test-xml/objects/release_chart_item.xml +39 -39
  167. data/spec/test-xml/objects/release_list.xml +18 -18
  168. data/spec/test-xml/objects/release_list_empty.xml +4 -4
  169. data/spec/test-xml/objects/response.xml +38 -38
  170. data/spec/test-xml/objects/tag.xml +4 -4
  171. data/spec/test-xml/objects/track.xml +33 -33
  172. data/spec/test-xml/objects/track_chart_item.xml +27 -27
  173. data/spec/test-xml/objects/user.xml +4 -0
  174. data/spec/test-xml/objects/user_payment_card.xml +6 -0
  175. data/spec/test-xml/objects/user_payment_card_list_empty.xml +1 -0
  176. metadata +51 -192
  177. data/lib/sevendigital/default_configuration.yml +0 -2
  178. data/spec/coverage/assets/0.3.9/app.js +0 -66
  179. data/spec/coverage/assets/0.3.9/fancybox/blank.gif +0 -0
  180. data/spec/coverage/assets/0.3.9/fancybox/fancy_close.png +0 -0
  181. data/spec/coverage/assets/0.3.9/fancybox/fancy_loading.png +0 -0
  182. data/spec/coverage/assets/0.3.9/fancybox/fancy_nav_left.png +0 -0
  183. data/spec/coverage/assets/0.3.9/fancybox/fancy_nav_right.png +0 -0
  184. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_e.png +0 -0
  185. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_n.png +0 -0
  186. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_ne.png +0 -0
  187. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_nw.png +0 -0
  188. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_s.png +0 -0
  189. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_se.png +0 -0
  190. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_sw.png +0 -0
  191. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_w.png +0 -0
  192. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_left.png +0 -0
  193. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_main.png +0 -0
  194. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_over.png +0 -0
  195. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_right.png +0 -0
  196. data/spec/coverage/assets/0.3.9/fancybox/fancybox-x.png +0 -0
  197. data/spec/coverage/assets/0.3.9/fancybox/fancybox-y.png +0 -0
  198. data/spec/coverage/assets/0.3.9/fancybox/fancybox.png +0 -0
  199. data/spec/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.css +0 -363
  200. data/spec/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.pack.js +0 -44
  201. data/spec/coverage/assets/0.3.9/favicon.png +0 -0
  202. data/spec/coverage/assets/0.3.9/jquery-1.4.2.min.js +0 -155
  203. data/spec/coverage/assets/0.3.9/jquery.dataTables.min.js +0 -152
  204. data/spec/coverage/assets/0.3.9/jquery.timeago.js +0 -141
  205. data/spec/coverage/assets/0.3.9/jquery.url.js +0 -174
  206. data/spec/coverage/assets/0.3.9/loading.gif +0 -0
  207. data/spec/coverage/assets/0.3.9/magnify.png +0 -0
  208. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  209. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  210. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  211. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  212. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  213. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  214. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  215. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  216. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_222222_256x240.png +0 -0
  217. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  218. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_454545_256x240.png +0 -0
  219. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_888888_256x240.png +0 -0
  220. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  221. data/spec/coverage/assets/0.3.9/smoothness/jquery-ui-1.8.4.custom.css +0 -295
  222. data/spec/coverage/assets/0.3.9/stylesheet.css +0 -341
  223. data/spec/coverage/index.html +0 -43412
  224. data/spec/coverage/resultset.yml +0 -3251
  225. data/spec/model/coverage/assets/0.3.9/app.js +0 -66
  226. data/spec/model/coverage/assets/0.3.9/fancybox/blank.gif +0 -0
  227. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_close.png +0 -0
  228. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_loading.png +0 -0
  229. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_nav_left.png +0 -0
  230. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_nav_right.png +0 -0
  231. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_e.png +0 -0
  232. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_n.png +0 -0
  233. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_ne.png +0 -0
  234. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_nw.png +0 -0
  235. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_s.png +0 -0
  236. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_se.png +0 -0
  237. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_sw.png +0 -0
  238. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_w.png +0 -0
  239. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_left.png +0 -0
  240. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_main.png +0 -0
  241. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_over.png +0 -0
  242. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_right.png +0 -0
  243. data/spec/model/coverage/assets/0.3.9/fancybox/fancybox-x.png +0 -0
  244. data/spec/model/coverage/assets/0.3.9/fancybox/fancybox-y.png +0 -0
  245. data/spec/model/coverage/assets/0.3.9/fancybox/fancybox.png +0 -0
  246. data/spec/model/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.css +0 -363
  247. data/spec/model/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.pack.js +0 -44
  248. data/spec/model/coverage/assets/0.3.9/favicon.png +0 -0
  249. data/spec/model/coverage/assets/0.3.9/jquery-1.4.2.min.js +0 -155
  250. data/spec/model/coverage/assets/0.3.9/jquery.dataTables.min.js +0 -152
  251. data/spec/model/coverage/assets/0.3.9/jquery.timeago.js +0 -141
  252. data/spec/model/coverage/assets/0.3.9/jquery.url.js +0 -174
  253. data/spec/model/coverage/assets/0.3.9/loading.gif +0 -0
  254. data/spec/model/coverage/assets/0.3.9/magnify.png +0 -0
  255. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  256. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  257. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  258. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  259. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  260. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  261. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  262. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  263. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_222222_256x240.png +0 -0
  264. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  265. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_454545_256x240.png +0 -0
  266. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_888888_256x240.png +0 -0
  267. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  268. data/spec/model/coverage/assets/0.3.9/smoothness/jquery-ui-1.8.4.custom.css +0 -295
  269. data/spec/model/coverage/assets/0.3.9/stylesheet.css +0 -341
  270. data/spec/model/coverage/index.html +0 -8637
  271. data/spec/model/coverage/resultset.yml +0 -642
@@ -0,0 +1,58 @@
1
+ # coding: utf-8
2
+ require File.expand_path('../../spec_helper', __FILE__)
3
+
4
+ describe "UserCardDigestor" do
5
+
6
+ before do
7
+ @card_digestor = Sevendigital::UserCardDigestor.new(nil)
8
+ end
9
+
10
+ it "should not digest from invalid xml but throw up (exception)" do
11
+
12
+ xml_response = <<XML
13
+ <xxx>
14
+ <type>invalid</type>
15
+ </xxx>
16
+ XML
17
+
18
+ running {@card_digestor.from_xml(xml_response)}.should raise_error(Sevendigital::DigestiveProblem)
19
+ end
20
+
21
+ it "should parse from xml and populate minimum available properties" do
22
+
23
+ xml_response = <<XML
24
+ <card>
25
+ <type>MasterCard</type>
26
+ <last4digits>1234</last4digits>
27
+ </card>
28
+ XML
29
+
30
+ card = @card_digestor.from_xml(xml_response)
31
+ card.type.should == "MasterCard"
32
+ card.last_4_digits.should == "1234"
33
+
34
+ end
35
+
36
+ it "should parse from xml and populate all properties" do
37
+
38
+ xml_response = load_sample_object_xml("user_payment_card")
39
+
40
+ card = @card_digestor.from_xml(xml_response)
41
+ card.id.should == 9876
42
+ card.type.should == "VISA"
43
+ card.last_4_digits.should == "2345"
44
+ card.expiry_date.should == "201109"
45
+ card.card_holder_name.should == "Mr. John Smith"
46
+
47
+ end
48
+
49
+ it "should digest xml containing empty list of cards and return an empty array" do
50
+
51
+ xml_response = load_sample_object_xml("user_payment_card_list_empty")
52
+
53
+ cards = @card_digestor.list_from_xml(xml_response, :cards)
54
+ cards.size.should == 0
55
+
56
+ end
57
+
58
+ end
@@ -0,0 +1,44 @@
1
+ # coding: utf-8
2
+ require File.expand_path('../../spec_helper', __FILE__)
3
+
4
+ describe "UserDigestor" do
5
+
6
+ before do
7
+ @user_digestor = Sevendigital::UserDigestor.new(nil)
8
+ end
9
+
10
+ it "should not digest from invalid xml but throw up (exception)" do
11
+
12
+ xml_response = <<XML
13
+ <xxx>
14
+ <type>invalid</type>
15
+ </xxx>
16
+ XML
17
+
18
+ running {@user_digestor.from_xml(xml_response)}.should raise_error(Sevendigital::DigestiveProblem)
19
+ end
20
+
21
+ it "should parse from xml and populate minimum available properties" do
22
+
23
+ xml_response = <<XML
24
+ <user>
25
+ <type>7digital</type>
26
+ </user>
27
+ XML
28
+
29
+ user = @user_digestor.from_xml(xml_response)
30
+ user.type.should == :"7digital"
31
+
32
+ end
33
+
34
+ it "should parse from xml and populate all properties" do
35
+
36
+ xml_response = load_sample_object_xml("user")
37
+
38
+ user = @user_digestor.from_xml(xml_response)
39
+ user.id.should == "123456"
40
+ user.type.should == :"7digital"
41
+ user.email_address.should == "user@example.com"
42
+ end
43
+
44
+ end
@@ -1,134 +1,152 @@
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("release/details")
15
-
16
- mock_client_digestor(@client, :artist_digestor) \
17
- .should_receive(:from_xml).with(an_api_response.content.artist).and_return(an_artist)
18
-
19
- @client.should_receive(:make_api_request) \
20
- .with("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).with(an_api_response.content.releases).and_return(a_list_of_releases)
34
-
35
- @client.should_receive(:make_api_request) \
36
- .with("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).with(an_api_response.content.tracks).and_return(a_top_tracks_list)
50
-
51
- @client.should_receive(:make_api_request) \
52
- .with("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).with(an_api_response.content.artists).and_return(a_similar_artists_list)
67
-
68
- @client.should_receive(:make_api_request) \
69
- .with("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) \
85
- .with(an_api_response.content.tagged_results, :tagged_item, :tagged_results) \
86
- .and_return(a_release_list)
87
-
88
- @client.should_receive(:make_api_request) \
89
- .with("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 "browse should call artist/browse api method and digest the artist list from response" do
98
-
99
- letter = "ra"
100
- an_api_response = fake_api_response("artist/browse")
101
- an_artist_list = []
102
-
103
- mock_client_digestor(@client, :artist_digestor) \
104
- .should_receive(:list_from_xml) \
105
- .with(an_api_response.content.artists) \
106
- .and_return(an_artist_list)
107
-
108
- @client.should_receive(:make_api_request) \
109
- .with("artist/browse", {:letter => letter}, {}) \
110
- .and_return(an_api_response)
111
-
112
- artists = @artist_manager.browse(letter)
113
- artists.should == an_artist_list
114
-
115
- end
116
-
117
-
118
- it "get_chart should call artist/chart api method and digest the artist list from response" do
119
-
120
- api_response = fake_api_response("artist/chart")
121
- a_chart = [Sevendigital::ChartItem.new(@client)]
122
-
123
- mock_client_digestor(@client, :chart_item_digestor) \
124
- .should_receive(:list_from_xml).with(api_response.content.chart).and_return(a_chart)
125
-
126
- @client.should_receive(:make_api_request) \
127
- .with("artist/chart", {}, {}) \
128
- .and_return(api_response)
129
-
130
- chart = @artist_manager.get_chart
131
- chart.should == a_chart
132
- end
133
-
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("release/details")
15
+
16
+ mock_client_digestor(@client, :artist_digestor) \
17
+ .should_receive(:from_xml).with(an_api_response.content.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).with(an_api_response.content.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).with(an_api_response.content.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).with(an_api_response.content.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) \
85
+ .with(an_api_response.content.tagged_results, :tagged_item, :tagged_results) \
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 "browse should call artist/browse api method and digest the artist list from response" do
98
+
99
+ letter = "ra"
100
+ an_api_response = fake_api_response("artist/browse")
101
+ an_artist_list = []
102
+
103
+ mock_client_digestor(@client, :artist_digestor) \
104
+ .should_receive(:list_from_xml) \
105
+ .with(an_api_response.content.artists) \
106
+ .and_return(an_artist_list)
107
+
108
+ @client.should_receive(:make_api_request) \
109
+ .with(:GET, "artist/browse", {:letter => letter}, {}) \
110
+ .and_return(an_api_response)
111
+
112
+ artists = @artist_manager.browse(letter)
113
+ artists.should == an_artist_list
114
+
115
+ end
116
+
117
+
118
+ it "get_chart should call artist/chart api method and digest the artist list from response" do
119
+
120
+ api_response = fake_api_response("artist/chart")
121
+ a_chart = [Sevendigital::ChartItem.new(@client)]
122
+
123
+ mock_client_digestor(@client, :chart_item_digestor) \
124
+ .should_receive(:list_from_xml).with(api_response.content.chart).and_return(a_chart)
125
+
126
+ @client.should_receive(:make_api_request) \
127
+ .with(:GET, "artist/chart", {}, {}) \
128
+ .and_return(api_response)
129
+
130
+ chart = @artist_manager.get_chart
131
+ chart.should == a_chart
132
+ end
133
+
134
+
135
+ it "get_tags should call artist/tags api method and return list of digested tags" do
136
+ an_artist_id = 123
137
+ a_list_of_tags = [Sevendigital::Tag.new, Sevendigital::Tag.new]
138
+ an_api_response = fake_api_response("artist/tags")
139
+ options = {:page => 1}
140
+
141
+ mock_client_digestor(@client, :tag_digestor) \
142
+ .should_receive(:list_from_xml).with(an_api_response.content.tags).and_return(a_list_of_tags)
143
+
144
+ @client.should_receive(:make_api_request) \
145
+ .with(:GET, "artist/tags", {:artistId => an_artist_id}, options) \
146
+ .and_return(an_api_response)
147
+
148
+ releases = @artist_manager.get_tags(an_artist_id, options)
149
+ releases.should == a_list_of_tags
150
+ end
151
+
134
152
  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).with(an_api_response.content.basket).and_return(a_basket)
18
-
19
- @client.should_receive(:make_api_request) \
20
- .with("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).with(an_api_response.content.basket).and_return(a_basket)
33
-
34
- @client.should_receive(:make_api_request) \
35
- .with("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).with(an_api_response.content.basket).and_return(a_basket)
51
-
52
- @client.should_receive(:make_api_request) \
53
- .with("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).with(an_api_response.content.basket).and_return(a_basket)
68
-
69
- @client.should_receive(:make_api_request) \
70
- .with("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).with(an_api_response.content.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).with(an_api_response.content.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).with(an_api_response.content.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).with(an_api_response.content.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