7digital 0.0.6 → 0.0.7

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 (269) hide show
  1. data/README.rdoc +136 -136
  2. data/lib/sevendigital.rb +53 -53
  3. data/lib/sevendigital/api_operator.rb +130 -130
  4. data/lib/sevendigital/api_operator_cached.rb +41 -41
  5. data/lib/sevendigital/api_request.rb +65 -65
  6. data/lib/sevendigital/client.rb +113 -113
  7. data/lib/sevendigital/client_configuration.rb +86 -86
  8. data/lib/sevendigital/client_digestors.rb +107 -107
  9. data/lib/sevendigital/client_managers.rb +47 -47
  10. data/lib/sevendigital/digestion_tract/api_response_digestor.rb +58 -58
  11. data/lib/sevendigital/digestion_tract/artist_digestor.rb +32 -32
  12. data/lib/sevendigital/digestion_tract/basket_digestor.rb +19 -19
  13. data/lib/sevendigital/digestion_tract/basket_item_digestor.rb +26 -26
  14. data/lib/sevendigital/digestion_tract/chart_item_digestor.rb +28 -28
  15. data/lib/sevendigital/digestion_tract/digestor.rb +71 -71
  16. data/lib/sevendigital/digestion_tract/download_url_digestor.rb +20 -20
  17. data/lib/sevendigital/digestion_tract/format_digestor.rb +22 -22
  18. data/lib/sevendigital/digestion_tract/label_digestor.rb +20 -20
  19. data/lib/sevendigital/digestion_tract/locker_digestor.rb +18 -18
  20. data/lib/sevendigital/digestion_tract/locker_release_digestor.rb +20 -20
  21. data/lib/sevendigital/digestion_tract/locker_track_digestor.rb +22 -22
  22. data/lib/sevendigital/digestion_tract/oauth_access_token_digestor.rb +14 -14
  23. data/lib/sevendigital/digestion_tract/oauth_request_token_digestor.rb +14 -14
  24. data/lib/sevendigital/digestion_tract/pager_digestor.rb +24 -24
  25. data/lib/sevendigital/digestion_tract/price_digestor.rb +25 -25
  26. data/lib/sevendigital/digestion_tract/release_digestor.rb +53 -53
  27. data/lib/sevendigital/digestion_tract/tag_digestor.rb +22 -22
  28. data/lib/sevendigital/digestion_tract/track_digestor.rb +38 -38
  29. data/lib/sevendigital/digestion_tract/user_card_digestor.rb +23 -23
  30. data/lib/sevendigital/digestion_tract/user_digestor.rb +20 -20
  31. data/lib/sevendigital/management/artist_manager.rb +99 -99
  32. data/lib/sevendigital/management/basket_manager.rb +29 -29
  33. data/lib/sevendigital/management/manager.rb +12 -12
  34. data/lib/sevendigital/management/oauth_manager.rb +23 -23
  35. data/lib/sevendigital/management/release_manager.rb +56 -56
  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 +26 -26
  39. data/lib/sevendigital/management/user_manager.rb +71 -71
  40. data/lib/sevendigital/model/api_response.rb +25 -25
  41. data/lib/sevendigital/model/artist.rb +94 -94
  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 +11 -11
  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 -52
  54. data/lib/sevendigital/model/sevendigital_error.rb +11 -11
  55. data/lib/sevendigital/model/sevendigital_object.rb +57 -57
  56. data/lib/sevendigital/model/tag.rb +7 -7
  57. data/lib/sevendigital/model/track.rb +83 -83
  58. data/lib/sevendigital/model/user.rb +63 -63
  59. data/lib/sevendigital/pager.rb +23 -23
  60. data/lib/sevendigital/peachy_patchy.rb +9 -9
  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 -178
  64. data/spec/api_operator_spec.rb +336 -336
  65. data/spec/api_request_spec.rb +31 -31
  66. data/spec/client_configuration_spec.rb +79 -74
  67. data/spec/client_spec.rb +162 -162
  68. data/spec/coverage/assets/0.3.9/app.js +66 -0
  69. data/spec/coverage/assets/0.3.9/fancybox/blank.gif +0 -0
  70. data/spec/coverage/assets/0.3.9/fancybox/fancy_close.png +0 -0
  71. data/spec/coverage/assets/0.3.9/fancybox/fancy_loading.png +0 -0
  72. data/spec/coverage/assets/0.3.9/fancybox/fancy_nav_left.png +0 -0
  73. data/spec/coverage/assets/0.3.9/fancybox/fancy_nav_right.png +0 -0
  74. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_e.png +0 -0
  75. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_n.png +0 -0
  76. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_ne.png +0 -0
  77. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_nw.png +0 -0
  78. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_s.png +0 -0
  79. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_se.png +0 -0
  80. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_sw.png +0 -0
  81. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_w.png +0 -0
  82. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_left.png +0 -0
  83. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_main.png +0 -0
  84. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_over.png +0 -0
  85. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_right.png +0 -0
  86. data/spec/coverage/assets/0.3.9/fancybox/fancybox-x.png +0 -0
  87. data/spec/coverage/assets/0.3.9/fancybox/fancybox-y.png +0 -0
  88. data/spec/coverage/assets/0.3.9/fancybox/fancybox.png +0 -0
  89. data/spec/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.css +363 -0
  90. data/spec/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.pack.js +44 -0
  91. data/spec/coverage/assets/0.3.9/favicon.png +0 -0
  92. data/spec/coverage/assets/0.3.9/jquery-1.4.2.min.js +155 -0
  93. data/spec/coverage/assets/0.3.9/jquery.dataTables.min.js +152 -0
  94. data/spec/coverage/assets/0.3.9/jquery.timeago.js +141 -0
  95. data/spec/coverage/assets/0.3.9/jquery.url.js +174 -0
  96. data/spec/coverage/assets/0.3.9/loading.gif +0 -0
  97. data/spec/coverage/assets/0.3.9/magnify.png +0 -0
  98. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  99. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  100. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  101. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  102. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  103. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  104. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  105. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  106. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_222222_256x240.png +0 -0
  107. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  108. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_454545_256x240.png +0 -0
  109. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_888888_256x240.png +0 -0
  110. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  111. data/spec/coverage/assets/0.3.9/smoothness/jquery-ui-1.8.4.custom.css +295 -0
  112. data/spec/coverage/assets/0.3.9/stylesheet.css +341 -0
  113. data/spec/coverage/index.html +47481 -0
  114. data/spec/coverage/resultset.yml +3556 -0
  115. data/spec/data/config/sevendigital.yml +5 -5
  116. data/spec/data/configuration_env_override.yml +5 -5
  117. data/spec/data/configuration_override.yml +1 -1
  118. data/spec/digestion_tract/api_response_digestor_spec.rb +92 -92
  119. data/spec/digestion_tract/artist_digestor_spec.rb +81 -81
  120. data/spec/digestion_tract/basket_digestor_spec.rb +31 -31
  121. data/spec/digestion_tract/basket_item_digestor_spec.rb +58 -58
  122. data/spec/digestion_tract/chart_digestor_spec.rb +52 -52
  123. data/spec/digestion_tract/download_url_digestor_spec.rb +40 -40
  124. data/spec/digestion_tract/format_digestor_spec.rb +38 -38
  125. data/spec/digestion_tract/label_digestor_spec.rb +33 -33
  126. data/spec/digestion_tract/locker_digestor_spec.rb +30 -30
  127. data/spec/digestion_tract/locker_release_digestor_spec.rb +70 -70
  128. data/spec/digestion_tract/locker_track_digestor_spec.rb +56 -56
  129. data/spec/digestion_tract/oauth_access_token_digestor_spec.rb +34 -34
  130. data/spec/digestion_tract/oauth_request_token_digestor_spec.rb +34 -34
  131. data/spec/digestion_tract/pager_digestor_spec.rb +50 -50
  132. data/spec/digestion_tract/price_digestor_spec.rb +73 -73
  133. data/spec/digestion_tract/release_digestor_spec.rb +101 -101
  134. data/spec/digestion_tract/tag_digestor_spec.rb +46 -46
  135. data/spec/digestion_tract/track_digestor_spec.rb +104 -104
  136. data/spec/digestion_tract/user_card_digestor_spec.rb +58 -58
  137. data/spec/digestion_tract/user_digestor_spec.rb +44 -44
  138. data/spec/management/artist_manager_spec.rb +151 -151
  139. data/spec/management/basket_manager_spec.rb +77 -77
  140. data/spec/management/oauth_manager_spec.rb +72 -72
  141. data/spec/management/release_manager_spec.rb +200 -200
  142. data/spec/management/tag_manager_spec.rb +34 -34
  143. data/spec/management/track_manager_spec.rb +107 -107
  144. data/spec/management/user_card_manager_spec.rb +78 -78
  145. data/spec/management/user_manager_spec.rb +202 -202
  146. data/spec/model/api_response_spec.rb +48 -48
  147. data/spec/model/artist_spec.rb +154 -154
  148. data/spec/model/basket_spec.rb +62 -62
  149. data/spec/model/coverage/assets/0.3.9/app.js +66 -0
  150. data/spec/model/coverage/assets/0.3.9/fancybox/blank.gif +0 -0
  151. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_close.png +0 -0
  152. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_loading.png +0 -0
  153. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_nav_left.png +0 -0
  154. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_nav_right.png +0 -0
  155. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_e.png +0 -0
  156. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_n.png +0 -0
  157. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_ne.png +0 -0
  158. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_nw.png +0 -0
  159. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_s.png +0 -0
  160. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_se.png +0 -0
  161. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_sw.png +0 -0
  162. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_w.png +0 -0
  163. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_left.png +0 -0
  164. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_main.png +0 -0
  165. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_over.png +0 -0
  166. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_right.png +0 -0
  167. data/spec/model/coverage/assets/0.3.9/fancybox/fancybox-x.png +0 -0
  168. data/spec/model/coverage/assets/0.3.9/fancybox/fancybox-y.png +0 -0
  169. data/spec/model/coverage/assets/0.3.9/fancybox/fancybox.png +0 -0
  170. data/spec/model/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.css +363 -0
  171. data/spec/model/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.pack.js +44 -0
  172. data/spec/model/coverage/assets/0.3.9/favicon.png +0 -0
  173. data/spec/model/coverage/assets/0.3.9/jquery-1.4.2.min.js +155 -0
  174. data/spec/model/coverage/assets/0.3.9/jquery.dataTables.min.js +152 -0
  175. data/spec/model/coverage/assets/0.3.9/jquery.timeago.js +141 -0
  176. data/spec/model/coverage/assets/0.3.9/jquery.url.js +174 -0
  177. data/spec/model/coverage/assets/0.3.9/loading.gif +0 -0
  178. data/spec/model/coverage/assets/0.3.9/magnify.png +0 -0
  179. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  180. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  181. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  182. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  183. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  184. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  185. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  186. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  187. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_222222_256x240.png +0 -0
  188. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  189. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_454545_256x240.png +0 -0
  190. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_888888_256x240.png +0 -0
  191. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  192. data/spec/model/coverage/assets/0.3.9/smoothness/jquery-ui-1.8.4.custom.css +295 -0
  193. data/spec/model/coverage/assets/0.3.9/stylesheet.css +341 -0
  194. data/spec/model/coverage/index.html +8637 -0
  195. data/spec/model/coverage/resultset.yml +642 -0
  196. data/spec/model/release_spec.rb +122 -122
  197. data/spec/model/sevendigital_object_spec.rb +73 -73
  198. data/spec/model/track_spec.rb +144 -144
  199. data/spec/model/user_spec.rb +160 -160
  200. data/spec/pager_spec.rb +7 -7
  201. data/spec/peachy_spec_helper_patch.rb +6 -6
  202. data/spec/proxy_police_spec.rb +69 -69
  203. data/spec/sevendigital_spec.rb +51 -70
  204. data/spec/sevendigital_spec.yml +4 -4
  205. data/spec/spec_helper.rb +64 -64
  206. data/spec/test-xml/methods/artist/browse.xml +21 -21
  207. data/spec/test-xml/methods/artist/byTag/top.xml +50 -50
  208. data/spec/test-xml/methods/artist/chart.xml +30 -30
  209. data/spec/test-xml/methods/artist/details.xml +9 -9
  210. data/spec/test-xml/methods/artist/releases.xml +544 -544
  211. data/spec/test-xml/methods/artist/search.xml +18 -18
  212. data/spec/test-xml/methods/artist/similar.xml +39 -39
  213. data/spec/test-xml/methods/artist/tags.xml +11 -11
  214. data/spec/test-xml/methods/artist/toptracks.xml +279 -279
  215. data/spec/test-xml/methods/basket/additem.xml +23 -23
  216. data/spec/test-xml/methods/basket/create.xml +10 -10
  217. data/spec/test-xml/methods/basket/index.xml +23 -23
  218. data/spec/test-xml/methods/basket/removeitem.xml +10 -10
  219. data/spec/test-xml/methods/oauth/accesstoken.xml +5 -5
  220. data/spec/test-xml/methods/oauth/requesttoken.xml +5 -5
  221. data/spec/test-xml/methods/release/bydate.xml +173 -173
  222. data/spec/test-xml/methods/release/bytag/top.xml +150 -150
  223. data/spec/test-xml/methods/release/chart.xml +181 -181
  224. data/spec/test-xml/methods/release/details.xml +48 -48
  225. data/spec/test-xml/methods/release/recommend.xml +89 -89
  226. data/spec/test-xml/methods/release/search.xml +194 -194
  227. data/spec/test-xml/methods/release/tags.xml +27 -27
  228. data/spec/test-xml/methods/release/tracks.xml +28 -28
  229. data/spec/test-xml/methods/tag/index.xml +16 -16
  230. data/spec/test-xml/methods/track/chart.xml +149 -149
  231. data/spec/test-xml/methods/track/details.xml +30 -30
  232. data/spec/test-xml/methods/track/search.xml +159 -159
  233. data/spec/test-xml/methods/user/locker.xml +49 -49
  234. data/spec/test-xml/methods/user/payment/card/add.xml +7 -7
  235. data/spec/test-xml/methods/user/payment/card/index.xml +7 -7
  236. data/spec/test-xml/methods/user/purchase/basket.xml +49 -0
  237. data/spec/test-xml/methods/user/purchase/item.xml +48 -48
  238. data/spec/test-xml/methods/user/signUp.xml +5 -5
  239. data/spec/test-xml/objects/artist.xml +6 -6
  240. data/spec/test-xml/objects/artist_chart_item.xml +7 -7
  241. data/spec/test-xml/objects/artist_list.xml +22 -22
  242. data/spec/test-xml/objects/artist_list_empty.xml +4 -4
  243. data/spec/test-xml/objects/basket.xml +21 -21
  244. data/spec/test-xml/objects/basket_item.xml +11 -11
  245. data/spec/test-xml/objects/basket_item_list.xml +25 -25
  246. data/spec/test-xml/objects/basket_item_list_empty.xml +1 -1
  247. data/spec/test-xml/objects/download_url.xml +7 -7
  248. data/spec/test-xml/objects/locker.xml +47 -47
  249. data/spec/test-xml/objects/locker_release.xml +40 -40
  250. data/spec/test-xml/objects/locker_release_list.xml +87 -87
  251. data/spec/test-xml/objects/locker_release_list_empty.xml +4 -4
  252. data/spec/test-xml/objects/locker_release_one_item_list.xml +43 -43
  253. data/spec/test-xml/objects/locker_track.xml +25 -25
  254. data/spec/test-xml/objects/locker_track_list.xml +26 -26
  255. data/spec/test-xml/objects/locker_track_list_empty.xml +2 -2
  256. data/spec/test-xml/objects/oauth_access_token.xml +3 -3
  257. data/spec/test-xml/objects/oauth_request_token.xml +3 -3
  258. data/spec/test-xml/objects/price.xml +7 -7
  259. data/spec/test-xml/objects/release.xml +40 -40
  260. data/spec/test-xml/objects/release_chart_item.xml +39 -39
  261. data/spec/test-xml/objects/release_list.xml +18 -18
  262. data/spec/test-xml/objects/release_list_empty.xml +4 -4
  263. data/spec/test-xml/objects/response.xml +38 -38
  264. data/spec/test-xml/objects/tag.xml +4 -4
  265. data/spec/test-xml/objects/track.xml +33 -33
  266. data/spec/test-xml/objects/track_chart_item.xml +27 -27
  267. data/spec/test-xml/objects/user.xml +4 -4
  268. data/spec/test-xml/objects/user_payment_card.xml +5 -5
  269. metadata +193 -3
@@ -1,34 +1,34 @@
1
- # encoding: UTF-8
2
- require 'date'
3
- require File.expand_path('../../spec_helper', __FILE__)
4
-
5
- describe "TagManager" do
6
-
7
- before do
8
-
9
- @client = stub(Sevendigital::Client)
10
- @client.stub!(:operator).and_return(mock(Sevendigital::ApiOperator))
11
- @tag_manager = Sevendigital::TagManager.new(@client)
12
-
13
- end
14
-
15
-
16
- it "get_tag_list should call tag api method and digest the tag list from response" do
17
-
18
- an_api_response = fake_api_response("tag/index")
19
- a_tag_list = [Sevendigital::Tag.new]
20
-
21
- mock_client_digestor(@client, :tag_digestor) \
22
- .should_receive(:list_from_xml).with(an_api_response.content.tags).and_return(a_tag_list)
23
-
24
- @client.should_receive(:make_api_request) \
25
- .with(:GET, "tag", {}, {}) \
26
- .and_return(an_api_response)
27
-
28
-
29
- tags = @tag_manager.get_tag_list
30
- tags.should == a_tag_list
31
- end
32
-
33
-
34
- end
1
+ # encoding: UTF-8
2
+ require 'date'
3
+ require File.expand_path('../../spec_helper', __FILE__)
4
+
5
+ describe "TagManager" do
6
+
7
+ before do
8
+
9
+ @client = stub(Sevendigital::Client)
10
+ @client.stub!(:operator).and_return(mock(Sevendigital::ApiOperator))
11
+ @tag_manager = Sevendigital::TagManager.new(@client)
12
+
13
+ end
14
+
15
+
16
+ it "get_tag_list should call tag api method and digest the tag list from response" do
17
+
18
+ an_api_response = fake_api_response("tag/index")
19
+ a_tag_list = [Sevendigital::Tag.new]
20
+
21
+ mock_client_digestor(@client, :tag_digestor) \
22
+ .should_receive(:list_from_xml).with(an_api_response.content.tags).and_return(a_tag_list)
23
+
24
+ @client.should_receive(:make_api_request) \
25
+ .with(:GET, "tag", {}, {}) \
26
+ .and_return(an_api_response)
27
+
28
+
29
+ tags = @tag_manager.get_tag_list
30
+ tags.should == a_tag_list
31
+ end
32
+
33
+
34
+ end
@@ -1,107 +1,107 @@
1
- # encoding: UTF-8
2
- require 'date'
3
- require File.expand_path('../../spec_helper', __FILE__)
4
-
5
- describe "TrackManager" do
6
-
7
- before do
8
-
9
- @client = stub(Sevendigital::Client)
10
- @client.stub!(:operator).and_return(mock(Sevendigital::ApiOperator))
11
- @track_manager = Sevendigital::TrackManager.new(@client)
12
-
13
- end
14
-
15
- it "get_details should call track/details api method and return digested track" do
16
- a_track_id = 123
17
- an_api_response = fake_api_response("track/details")
18
- a_track = Sevendigital::Track.new(@client)
19
-
20
- mock_client_digestor(@client, :track_digestor) \
21
- .should_receive(:from_xml).with(an_api_response.content.track).and_return(a_track)
22
-
23
- @client.should_receive(:make_api_request) \
24
- .with(:GET, "track/details", {:trackId => a_track_id}, {}) \
25
- .and_return(an_api_response)
26
-
27
- @track_manager.get_details(a_track_id).should == a_track
28
-
29
- end
30
-
31
- it "get_details_from_release should get all tracks from the release and pick the relevant one" do
32
-
33
- @client.stub!(:release).and_return(mock(Sevendigital::ReleaseManager))
34
-
35
- options = []
36
- track_1 = Sevendigital::Track.new(@client)
37
- track_1.id = 1
38
- track_2 = Sevendigital::Track.new(@client)
39
- track_2.id = 2
40
- track_3 = Sevendigital::Track.new(@client)
41
- track_3.id = 3
42
- a_track_list = [track_1, track_2, track_3]
43
- a_release_id = 123456
44
-
45
- @client.release.should_receive(:get_tracks).with(a_release_id, options).and_return(a_track_list)
46
-
47
- track = @track_manager.get_details_from_release(track_2.id, a_release_id, options)
48
- track.should == track_2
49
- end
50
-
51
- it "get_chart should call track/chart api method and digest the release list from response" do
52
-
53
- an_api_response = fake_api_response("track/chart")
54
- a_chart = []
55
-
56
- mock_client_digestor(@client, :chart_item_digestor) \
57
- .should_receive(:list_from_xml).with(an_api_response.content.chart).and_return(a_chart)
58
-
59
- @client.should_receive(:make_api_request) \
60
- .with(:GET, "track/chart", {}, {}) \
61
- .and_return(an_api_response)
62
-
63
-
64
- chart = @track_manager.get_chart
65
- chart.should == a_chart
66
- end
67
-
68
- it "build_preview_url should return URL for track/preview api request" do
69
- track_id = 123456
70
- fake_preview_url = "http://7digital.com/track/preview"
71
- fake_api_request = stub(Sevendigital::ApiRequest)
72
-
73
- @client.should_receive(:create_api_request) \
74
- .with(:GET, "track/preview", {:trackId => track_id}, {}) \
75
- .and_return(fake_api_request)
76
-
77
- @client.operator.should_receive(:get_request_uri) \
78
- .with(fake_api_request) \
79
- .and_return(fake_preview_url)
80
-
81
- preview_url = @track_manager.build_preview_url(track_id)
82
-
83
- preview_url.should == fake_preview_url
84
- end
85
-
86
- it "search should call track/search api method and digest the nested track list from response" do
87
-
88
- query = "radiohead"
89
- an_api_response = fake_api_response("track/search")
90
- a_track_list = [Sevendigital::Track.new(@client)]
91
-
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) \
95
- .and_return(a_track_list)
96
-
97
- @client.should_receive(:make_api_request) \
98
- .with(:GET, "track/search", {:q => query}, {}) \
99
- .and_return(an_api_response)
100
-
101
- tracks = @track_manager.search(query)
102
- tracks.should == a_track_list
103
-
104
- end
105
-
106
-
107
- end
1
+ # encoding: UTF-8
2
+ require 'date'
3
+ require File.expand_path('../../spec_helper', __FILE__)
4
+
5
+ describe "TrackManager" do
6
+
7
+ before do
8
+
9
+ @client = stub(Sevendigital::Client)
10
+ @client.stub!(:operator).and_return(mock(Sevendigital::ApiOperator))
11
+ @track_manager = Sevendigital::TrackManager.new(@client)
12
+
13
+ end
14
+
15
+ it "get_details should call track/details api method and return digested track" do
16
+ a_track_id = 123
17
+ an_api_response = fake_api_response("track/details")
18
+ a_track = Sevendigital::Track.new(@client)
19
+
20
+ mock_client_digestor(@client, :track_digestor) \
21
+ .should_receive(:from_xml).with(an_api_response.content.track).and_return(a_track)
22
+
23
+ @client.should_receive(:make_api_request) \
24
+ .with(:GET, "track/details", {:trackId => a_track_id}, {}) \
25
+ .and_return(an_api_response)
26
+
27
+ @track_manager.get_details(a_track_id).should == a_track
28
+
29
+ end
30
+
31
+ it "get_details_from_release should get all tracks from the release and pick the relevant one" do
32
+
33
+ @client.stub!(:release).and_return(mock(Sevendigital::ReleaseManager))
34
+
35
+ options = []
36
+ track_1 = Sevendigital::Track.new(@client)
37
+ track_1.id = 1
38
+ track_2 = Sevendigital::Track.new(@client)
39
+ track_2.id = 2
40
+ track_3 = Sevendigital::Track.new(@client)
41
+ track_3.id = 3
42
+ a_track_list = [track_1, track_2, track_3]
43
+ a_release_id = 123456
44
+
45
+ @client.release.should_receive(:get_tracks).with(a_release_id, options).and_return(a_track_list)
46
+
47
+ track = @track_manager.get_details_from_release(track_2.id, a_release_id, options)
48
+ track.should == track_2
49
+ end
50
+
51
+ it "get_chart should call track/chart api method and digest the release list from response" do
52
+
53
+ an_api_response = fake_api_response("track/chart")
54
+ a_chart = []
55
+
56
+ mock_client_digestor(@client, :chart_item_digestor) \
57
+ .should_receive(:list_from_xml).with(an_api_response.content.chart).and_return(a_chart)
58
+
59
+ @client.should_receive(:make_api_request) \
60
+ .with(:GET, "track/chart", {}, {}) \
61
+ .and_return(an_api_response)
62
+
63
+
64
+ chart = @track_manager.get_chart
65
+ chart.should == a_chart
66
+ end
67
+
68
+ it "build_preview_url should return URL for track/preview api request" do
69
+ track_id = 123456
70
+ fake_preview_url = "http://7digital.com/track/preview"
71
+ fake_api_request = stub(Sevendigital::ApiRequest)
72
+
73
+ @client.should_receive(:create_api_request) \
74
+ .with(:GET, "track/preview", {:trackId => track_id}, {}) \
75
+ .and_return(fake_api_request)
76
+
77
+ @client.operator.should_receive(:get_request_uri) \
78
+ .with(fake_api_request) \
79
+ .and_return(fake_preview_url)
80
+
81
+ preview_url = @track_manager.build_preview_url(track_id)
82
+
83
+ preview_url.should == fake_preview_url
84
+ end
85
+
86
+ it "search should call track/search api method and digest the nested track list from response" do
87
+
88
+ query = "radiohead"
89
+ an_api_response = fake_api_response("track/search")
90
+ a_track_list = [Sevendigital::Track.new(@client)]
91
+
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) \
95
+ .and_return(a_track_list)
96
+
97
+ @client.should_receive(:make_api_request) \
98
+ .with(:GET, "track/search", {:q => query}, {}) \
99
+ .and_return(an_api_response)
100
+
101
+ tracks = @track_manager.search(query)
102
+ tracks.should == a_track_list
103
+
104
+ end
105
+
106
+
107
+ end
@@ -1,79 +1,79 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
2
-
3
- describe "UserCardManager" do
4
-
5
- before do
6
- @client = stub(Sevendigital::Client)
7
- @client.stub!(:operator).and_return(mock(Sevendigital::ApiOperator))
8
- @card_manager = Sevendigital::UserCardManager.new(@client)
9
- end
10
-
11
- it "get_card_list should call user/payment/card api method and return list of cards" do
12
- a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
13
- a_card_list = [Sevendigital::Card.new(@client)]
14
- an_api_response = fake_api_response("user/payment/card/index")
15
- options = {:pagesize => 20 }
16
-
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)
19
-
20
- @client.should_receive(:make_signed_api_request) \
21
- .with(:GET, "user/payment/card", {}, options, a_token) \
22
- .and_return(an_api_response)
23
-
24
- cards = @card_manager.get_card_list(a_token, options)
25
- cards.should == a_card_list
26
- end
27
-
28
- it "add_card should call user/payment/card/add api method and return the added card" do
29
- card_number = "4444333322221111"
30
- card_type = "VISA"
31
- card_holder_name = "Mr John Simth"
32
- card_start_date = "200909"
33
- card_expiry_date = "201109"
34
- card_issue_number = "1"
35
- card_verification_code ="123"
36
- card_post_code = "EC2A 4HJ"
37
- card_country = "GB"
38
- a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
39
- a_card = Sevendigital::Card.new(@client)
40
- an_api_response = fake_api_response("user/payment/card/add")
41
- options = {:pagesize => 20 }
42
-
43
- mock_client_digestor(@client, :user_card_digestor) \
44
- .should_receive(:from_xml).with(an_api_response.content.card).and_return(a_card)
45
-
46
- @client.should_receive(:make_signed_api_request) \
47
- .with(:POST, "user/payment/card/add", {
48
- :cardNumber => card_number,
49
- :cardType => card_type,
50
- :cardHolderName => card_holder_name,
51
- :cardStartDate => card_start_date,
52
- :cardExpiryDate => card_expiry_date,
53
- :cardIssueNumber => card_issue_number,
54
- :cardVerificationCode => card_verification_code,
55
- :cardPostCode => card_post_code,
56
- :cardCountry => card_country
57
- }, options, a_token) \
58
- .and_return(an_api_response)
59
-
60
- card = @card_manager.add_card(
61
- card_number, card_type, card_holder_name, card_start_date, card_expiry_date, card_issue_number,
62
- card_verification_code, card_post_code, card_country, a_token, options)
63
- card.should == a_card
64
- end
65
-
66
- it "select_card should call user/payment/card/select api method and return true if successful " do
67
- card_id = 123
68
- a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
69
- an_api_response = fake_api_response("user/payment/card/select")
70
- options = {:pagesize => 20 }
71
-
72
- @client.should_receive(:make_signed_api_request) \
73
- .with(:POST, "user/payment/card/select", {:cardId => card_id}, options, a_token) \
74
- .and_return(an_api_response)
75
-
76
- @card_manager.select_card(card_id, a_token, options).should == true
77
- end
78
-
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "UserCardManager" do
4
+
5
+ before do
6
+ @client = stub(Sevendigital::Client)
7
+ @client.stub!(:operator).and_return(mock(Sevendigital::ApiOperator))
8
+ @card_manager = Sevendigital::UserCardManager.new(@client)
9
+ end
10
+
11
+ it "get_card_list should call user/payment/card api method and return list of cards" do
12
+ a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
13
+ a_card_list = [Sevendigital::Card.new(@client)]
14
+ an_api_response = fake_api_response("user/payment/card/index")
15
+ options = {:pagesize => 20 }
16
+
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)
19
+
20
+ @client.should_receive(:make_signed_api_request) \
21
+ .with(:GET, "user/payment/card", {}, options, a_token) \
22
+ .and_return(an_api_response)
23
+
24
+ cards = @card_manager.get_card_list(a_token, options)
25
+ cards.should == a_card_list
26
+ end
27
+
28
+ it "add_card should call user/payment/card/add api method and return the added card" do
29
+ card_number = "4444333322221111"
30
+ card_type = "VISA"
31
+ card_holder_name = "Mr John Simth"
32
+ card_start_date = "200909"
33
+ card_expiry_date = "201109"
34
+ card_issue_number = "1"
35
+ card_verification_code ="123"
36
+ card_post_code = "EC2A 4HJ"
37
+ card_country = "GB"
38
+ a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
39
+ a_card = Sevendigital::Card.new(@client)
40
+ an_api_response = fake_api_response("user/payment/card/add")
41
+ options = {:pagesize => 20 }
42
+
43
+ mock_client_digestor(@client, :user_card_digestor) \
44
+ .should_receive(:from_xml).with(an_api_response.content.card).and_return(a_card)
45
+
46
+ @client.should_receive(:make_signed_api_request) \
47
+ .with(:POST, "user/payment/card/add", {
48
+ :cardNumber => card_number,
49
+ :cardType => card_type,
50
+ :cardHolderName => card_holder_name,
51
+ :cardStartDate => card_start_date,
52
+ :cardExpiryDate => card_expiry_date,
53
+ :cardIssueNumber => card_issue_number,
54
+ :cardVerificationCode => card_verification_code,
55
+ :cardPostCode => card_post_code,
56
+ :cardCountry => card_country
57
+ }, options, a_token) \
58
+ .and_return(an_api_response)
59
+
60
+ card = @card_manager.add_card(
61
+ card_number, card_type, card_holder_name, card_start_date, card_expiry_date, card_issue_number,
62
+ card_verification_code, card_post_code, card_country, a_token, options)
63
+ card.should == a_card
64
+ end
65
+
66
+ it "select_card should call user/payment/card/select api method and return true if successful " do
67
+ card_id = 123
68
+ a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
69
+ an_api_response = fake_api_response("user/payment/card/select")
70
+ options = {:pagesize => 20 }
71
+
72
+ @client.should_receive(:make_signed_api_request) \
73
+ .with(:POST, "user/payment/card/select", {:cardId => card_id}, options, a_token) \
74
+ .and_return(an_api_response)
75
+
76
+ @card_manager.select_card(card_id, a_token, options).should == true
77
+ end
78
+
79
79
  end
@@ -1,203 +1,203 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
2
-
3
- describe "UserManager" do
4
-
5
- before do
6
-
7
- @an_email = "email"
8
- @a_password = "password"
9
- @a_request_token = fake_request_token
10
- @an_access_token = fake_access_token
11
-
12
- @client = stub(Sevendigital::Client)
13
-
14
- @oauth_manager = mock(Sevendigital::OAuthManager)
15
- @oauth_manager.stub!(:get_request_token).and_return(@a_request_token)
16
- @oauth_manager.stub!(:authorise_request_token).and_return(true)
17
- @oauth_manager.stub!(:get_access_token).and_return(@an_access_token)
18
-
19
- @client.stub!(:operator).and_return(mock(Sevendigital::ApiOperator))
20
- @client.stub!(:oauth).and_return(@oauth_manager )
21
- @user_manager = Sevendigital::UserManager.new(@client)
22
- end
23
-
24
- it "should log in user using an existing access token" do
25
- an_access_token = OAuth::AccessToken.new("aaa", "bbb", nil)
26
- @user = @user_manager.login(an_access_token)
27
- @user.authenticated?.should == true
28
- end
29
-
30
- it "should not log in user using an request token but raise an exception" do
31
- a_request_token = OAuth::RequestToken.new("aaa", "bbb", nil)
32
- running {@user = @user_manager.login(a_request_token)}.should raise_exception Sevendigital::SevendigitalError
33
- @user.nil?.should == true
34
- end
35
-
36
- it "sign_up should call user/signUp api method and return signed up and authenticated user" do
37
- an_api_response = fake_api_response("user/signup")
38
- fake_user = Sevendigital::User.new(@client)
39
- options = {:country => "XX"}
40
-
41
- mock_client_digestor(@client, :user_digestor) \
42
- .should_receive(:from_xml).with(an_api_response.content.user).and_return(fake_user)
43
-
44
- @client.should_receive(:make_signed_api_request) \
45
- .with(:POST, "user/signUp", {:emailAddress => @an_email, :password => @a_password}, options) \
46
- .and_return(an_api_response)
47
-
48
- user = @user_manager.sign_up(@an_email, @a_password, options)
49
- user.should == fake_user
50
- user.authenticated?.should == true
51
- end
52
-
53
- it "authenticate should return an authenticated user if supplied with valid login details" do
54
- user = @user_manager.authenticate("email", "password")
55
- user.kind_of?(Sevendigital::User).should == true
56
- user.authenticated?.should == true
57
- end
58
-
59
- it "authenticate should return nil if user does not authenticate" do
60
- @oauth_manager.stub!(:authorise_request_token).and_return(false)
61
- user = @user_manager.authenticate("email", "password")
62
- user.nil?.should == true
63
- end
64
-
65
- it "authenticate should get a request token" do
66
- @client.oauth.should_receive(:get_request_token).and_return(nil)
67
- @user_manager.authenticate("email", "password")
68
- end
69
-
70
- it "authenticate should attempt to authorise request token" do
71
- @client.oauth.should_receive(:authorise_request_token) \
72
- .with(@an_email, @a_password, @a_request_token) \
73
- .and_return(true)
74
- @user_manager.authenticate(@an_email, @a_password)
75
- end
76
-
77
- it "authenticate should retrieve access_token for authenticated user" do
78
- @client.oauth.should_receive(:get_access_token) \
79
- .with(@a_request_token) \
80
- .and_return(@an_access_token)
81
- user = @user_manager.authenticate(@an_email, @a_password)
82
- user.oauth_access_token.should == @an_access_token
83
- end
84
-
85
- def fake_request_token
86
- token = stub(OAuth::RequestToken)
87
- token.stub(:token).and_return("key")
88
- token
89
- end
90
-
91
- def fake_access_token
92
- token = stub(OAuth::RequestToken)
93
- token.stub(:token).and_return("key")
94
- token
95
- end
96
-
97
- it "get_locker should call user/locker api method and return digested locker" do
98
- an_api_response = fake_api_response("user/locker")
99
- a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
100
- fake_locker = [Sevendigital::LockerRelease.new(@client)]
101
- options = {:sort => "random"}
102
-
103
- mock_client_digestor(@client, :locker_digestor) \
104
- .should_receive(:from_xml).with(an_api_response.content.locker).and_return(fake_locker)
105
-
106
- @client.should_receive(:make_signed_api_request) \
107
- .with(:GET, "user/locker", {}, options, a_token) \
108
- .and_return(an_api_response)
109
-
110
- @user_manager.get_locker(a_token, options).should == fake_locker
111
-
112
- end
113
-
114
- it "purchase should call user/purchase/item api method and return digested locker items" do
115
- an_api_response = fake_api_response("user/purchase/item")
116
- a_track_id = 123456
117
- a_release_id = 56879
118
- a_price = 0.99
119
- a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
120
- fake_locker = [Sevendigital::LockerRelease.new(@client)]
121
-
122
- mock_client_digestor(@client, :locker_digestor) \
123
- .should_receive(:from_xml).with(an_api_response.content.purchase).and_return(fake_locker)
124
-
125
- @client.should_receive(:make_signed_api_request) \
126
- .with(:GET, "user/purchase/item", \
127
- {:trackId => a_track_id, :releaseId => a_release_id, :price => a_price}, \
128
- {}, a_token) \
129
- .and_return(an_api_response)
130
-
131
- @user_manager.purchase(a_release_id, a_track_id, a_price, a_token).should == fake_locker
132
-
133
- end
134
-
135
- it "purchase_basket should call user/purchase/basket api method and return digested locker items" do
136
- an_api_response = fake_api_response("user/purchase/basket")
137
- a_basket_id = 123456
138
- a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
139
- fake_locker = [Sevendigital::LockerRelease.new(@client)]
140
-
141
- mock_client_digestor(@client, :locker_digestor) \
142
- .should_receive(:from_xml).with(an_api_response.content.purchase).and_return(fake_locker)
143
-
144
- @client.should_receive(:make_signed_api_request) \
145
- .with(:GET, "user/purchase/basket", \
146
- {:basketId => a_basket_id}, \
147
- {}, a_token) \
148
- .and_return(an_api_response)
149
-
150
- @user_manager.purchase_basket(a_basket_id, a_token).should == fake_locker
151
-
152
- end
153
-
154
-
155
- it "should get stream track URI" do
156
- a_stream_track_uri = "http://media.com/streamtrack"
157
- a_track_id = 123456
158
- a_release_id = 78910
159
- a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
160
- an_api_request = stub(Sevendigital::ApiRequest)
161
-
162
- @client.should_receive(:create_api_request) \
163
- .with(:GET, "user/streamtrack", {:trackId => a_track_id, :releaseId => a_release_id}, {}) \
164
- .and_return(an_api_request)
165
-
166
- an_api_request.should_receive(:api_service=).with(:media)
167
- an_api_request.should_receive(:require_signature)
168
- an_api_request.should_not_receive(:require_secure_connection)
169
- an_api_request.should_receive(:token=).with(a_token)
170
-
171
- @client.operator.should_receive(:get_request_uri) \
172
- .with(an_api_request) \
173
- .and_return(a_stream_track_uri)
174
-
175
- @user_manager.get_stream_track_url(a_release_id, a_track_id, a_token).should == a_stream_track_uri
176
-
177
- end
178
-
179
- it "should get add card URI" do
180
- an_add_card_uri = "http://account.com/addcard"
181
- a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
182
- a_return_url = "http://example.com/"
183
- an_api_request = stub(Sevendigital::ApiRequest)
184
-
185
- @client.should_receive(:create_api_request) \
186
- .with(:GET, "payment/addcard", {:returnUrl => a_return_url}, {}) \
187
- .and_return(an_api_request)
188
-
189
- an_api_request.should_receive(:api_service=).with(:account)
190
- an_api_request.should_receive(:require_signature)
191
- an_api_request.should_receive(:require_secure_connection)
192
- an_api_request.should_receive(:token=).with(a_token)
193
-
194
- @client.operator.should_receive(:get_request_uri) \
195
- .with(an_api_request) \
196
- .and_return(an_add_card_uri)
197
-
198
- @user_manager.get_add_card_url(a_return_url, a_token).should == an_add_card_uri
199
-
200
- end
201
-
202
-
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "UserManager" do
4
+
5
+ before do
6
+
7
+ @an_email = "email"
8
+ @a_password = "password"
9
+ @a_request_token = fake_request_token
10
+ @an_access_token = fake_access_token
11
+
12
+ @client = stub(Sevendigital::Client)
13
+
14
+ @oauth_manager = mock(Sevendigital::OAuthManager)
15
+ @oauth_manager.stub!(:get_request_token).and_return(@a_request_token)
16
+ @oauth_manager.stub!(:authorise_request_token).and_return(true)
17
+ @oauth_manager.stub!(:get_access_token).and_return(@an_access_token)
18
+
19
+ @client.stub!(:operator).and_return(mock(Sevendigital::ApiOperator))
20
+ @client.stub!(:oauth).and_return(@oauth_manager )
21
+ @user_manager = Sevendigital::UserManager.new(@client)
22
+ end
23
+
24
+ it "should log in user using an existing access token" do
25
+ an_access_token = OAuth::AccessToken.new("aaa", "bbb", nil)
26
+ @user = @user_manager.login(an_access_token)
27
+ @user.authenticated?.should == true
28
+ end
29
+
30
+ it "should not log in user using an request token but raise an exception" do
31
+ a_request_token = OAuth::RequestToken.new("aaa", "bbb", nil)
32
+ running {@user = @user_manager.login(a_request_token)}.should raise_exception Sevendigital::SevendigitalError
33
+ @user.nil?.should == true
34
+ end
35
+
36
+ it "sign_up should call user/signUp api method and return signed up and authenticated user" do
37
+ an_api_response = fake_api_response("user/signup")
38
+ fake_user = Sevendigital::User.new(@client)
39
+ options = {:country => "XX"}
40
+
41
+ mock_client_digestor(@client, :user_digestor) \
42
+ .should_receive(:from_xml).with(an_api_response.content.user).and_return(fake_user)
43
+
44
+ @client.should_receive(:make_signed_api_request) \
45
+ .with(:POST, "user/signUp", {:emailAddress => @an_email, :password => @a_password}, options) \
46
+ .and_return(an_api_response)
47
+
48
+ user = @user_manager.sign_up(@an_email, @a_password, options)
49
+ user.should == fake_user
50
+ user.authenticated?.should == true
51
+ end
52
+
53
+ it "authenticate should return an authenticated user if supplied with valid login details" do
54
+ user = @user_manager.authenticate("email", "password")
55
+ user.kind_of?(Sevendigital::User).should == true
56
+ user.authenticated?.should == true
57
+ end
58
+
59
+ it "authenticate should return nil if user does not authenticate" do
60
+ @oauth_manager.stub!(:authorise_request_token).and_return(false)
61
+ user = @user_manager.authenticate("email", "password")
62
+ user.nil?.should == true
63
+ end
64
+
65
+ it "authenticate should get a request token" do
66
+ @client.oauth.should_receive(:get_request_token).and_return(nil)
67
+ @user_manager.authenticate("email", "password")
68
+ end
69
+
70
+ it "authenticate should attempt to authorise request token" do
71
+ @client.oauth.should_receive(:authorise_request_token) \
72
+ .with(@an_email, @a_password, @a_request_token) \
73
+ .and_return(true)
74
+ @user_manager.authenticate(@an_email, @a_password)
75
+ end
76
+
77
+ it "authenticate should retrieve access_token for authenticated user" do
78
+ @client.oauth.should_receive(:get_access_token) \
79
+ .with(@a_request_token) \
80
+ .and_return(@an_access_token)
81
+ user = @user_manager.authenticate(@an_email, @a_password)
82
+ user.oauth_access_token.should == @an_access_token
83
+ end
84
+
85
+ def fake_request_token
86
+ token = stub(OAuth::RequestToken)
87
+ token.stub(:token).and_return("key")
88
+ token
89
+ end
90
+
91
+ def fake_access_token
92
+ token = stub(OAuth::RequestToken)
93
+ token.stub(:token).and_return("key")
94
+ token
95
+ end
96
+
97
+ it "get_locker should call user/locker api method and return digested locker" do
98
+ an_api_response = fake_api_response("user/locker")
99
+ a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
100
+ fake_locker = [Sevendigital::LockerRelease.new(@client)]
101
+ options = {:sort => "random"}
102
+
103
+ mock_client_digestor(@client, :locker_digestor) \
104
+ .should_receive(:from_xml).with(an_api_response.content.locker).and_return(fake_locker)
105
+
106
+ @client.should_receive(:make_signed_api_request) \
107
+ .with(:GET, "user/locker", {}, options, a_token) \
108
+ .and_return(an_api_response)
109
+
110
+ @user_manager.get_locker(a_token, options).should == fake_locker
111
+
112
+ end
113
+
114
+ it "purchase should call user/purchase/item api method and return digested locker items" do
115
+ an_api_response = fake_api_response("user/purchase/item")
116
+ a_track_id = 123456
117
+ a_release_id = 56879
118
+ a_price = 0.99
119
+ a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
120
+ fake_locker = [Sevendigital::LockerRelease.new(@client)]
121
+
122
+ mock_client_digestor(@client, :locker_digestor) \
123
+ .should_receive(:from_xml).with(an_api_response.content.purchase).and_return(fake_locker)
124
+
125
+ @client.should_receive(:make_signed_api_request) \
126
+ .with(:GET, "user/purchase/item", \
127
+ {:trackId => a_track_id, :releaseId => a_release_id, :price => a_price}, \
128
+ {}, a_token) \
129
+ .and_return(an_api_response)
130
+
131
+ @user_manager.purchase(a_release_id, a_track_id, a_price, a_token).should == fake_locker
132
+
133
+ end
134
+
135
+ it "purchase_basket should call user/purchase/basket api method and return digested locker items" do
136
+ an_api_response = fake_api_response("user/purchase/basket")
137
+ a_basket_id = 123456
138
+ a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
139
+ fake_locker = [Sevendigital::LockerRelease.new(@client)]
140
+
141
+ mock_client_digestor(@client, :locker_digestor) \
142
+ .should_receive(:from_xml).with(an_api_response.content.purchase).and_return(fake_locker)
143
+
144
+ @client.should_receive(:make_signed_api_request) \
145
+ .with(:GET, "user/purchase/basket", \
146
+ {:basketId => a_basket_id}, \
147
+ {}, a_token) \
148
+ .and_return(an_api_response)
149
+
150
+ @user_manager.purchase_basket(a_basket_id, a_token).should == fake_locker
151
+
152
+ end
153
+
154
+
155
+ it "should get stream track URI" do
156
+ a_stream_track_uri = "http://media.com/streamtrack"
157
+ a_track_id = 123456
158
+ a_release_id = 78910
159
+ a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
160
+ an_api_request = stub(Sevendigital::ApiRequest)
161
+
162
+ @client.should_receive(:create_api_request) \
163
+ .with(:GET, "user/streamtrack", {:trackId => a_track_id, :releaseId => a_release_id}, {}) \
164
+ .and_return(an_api_request)
165
+
166
+ an_api_request.should_receive(:api_service=).with(:media)
167
+ an_api_request.should_receive(:require_signature)
168
+ an_api_request.should_not_receive(:require_secure_connection)
169
+ an_api_request.should_receive(:token=).with(a_token)
170
+
171
+ @client.operator.should_receive(:get_request_uri) \
172
+ .with(an_api_request) \
173
+ .and_return(a_stream_track_uri)
174
+
175
+ @user_manager.get_stream_track_url(a_release_id, a_track_id, a_token).should == a_stream_track_uri
176
+
177
+ end
178
+
179
+ it "should get add card URI" do
180
+ an_add_card_uri = "http://account.com/addcard"
181
+ a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
182
+ a_return_url = "http://example.com/"
183
+ an_api_request = stub(Sevendigital::ApiRequest)
184
+
185
+ @client.should_receive(:create_api_request) \
186
+ .with(:GET, "payment/addcard", {:returnUrl => a_return_url}, {}) \
187
+ .and_return(an_api_request)
188
+
189
+ an_api_request.should_receive(:api_service=).with(:account)
190
+ an_api_request.should_receive(:require_signature)
191
+ an_api_request.should_receive(:require_secure_connection)
192
+ an_api_request.should_receive(:token=).with(a_token)
193
+
194
+ @client.operator.should_receive(:get_request_uri) \
195
+ .with(an_api_request) \
196
+ .and_return(an_add_card_uri)
197
+
198
+ @user_manager.get_add_card_url(a_return_url, a_token).should == an_add_card_uri
199
+
200
+ end
201
+
202
+
203
203
  end