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
@@ -1,63 +1,63 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
2
-
3
- describe "Basket" do
4
-
5
- before do
6
- @client = stub(Sevendigital::Client)
7
- @basket_manager = mock(Sevendigital::BasketManager)
8
- @client.stub!(:basket).and_return @basket_manager
9
-
10
- @basket = Sevendigital::Basket.new(@client)
11
- @basket.id = "00000000-0000-0000-0000-000000000001"
12
- end
13
-
14
- it "add_item should should call add_item on basket manager and update the basket items" do
15
- expected_options = {:page => 2}
16
- a_track_id = 123
17
- a_release_id = 456
18
-
19
- a_basket_id = @basket.id
20
- an_updated_basket = fake_basket_with_items(@basket.id)
21
-
22
- @basket_manager.should_receive(:add_item) { |basket_id, release_id, track_id, options|
23
- basket_id.should == @basket.id
24
- release_id.should == a_release_id
25
- track_id.should == a_track_id
26
- (options.keys & expected_options.keys).should == expected_options.keys
27
- an_updated_basket
28
- }
29
- @basket.add_item(a_release_id, a_track_id, expected_options)
30
-
31
- @basket.id.should == a_basket_id
32
- @basket.basket_items.should == an_updated_basket.basket_items
33
-
34
- end
35
-
36
- it "remove_item should should call remove_item on basket manager and update the basket items" do
37
- expected_options = {:page => 2}
38
- an_item_id = 123
39
-
40
- a_basket_id = @basket.id
41
- an_updated_basket = fake_basket_with_items(@basket.id)
42
-
43
- @basket_manager.should_receive(:remove_item) { |basket_id, item_id, options|
44
- basket_id.should == @basket.id
45
- item_id.should == an_item_id
46
- (options.keys & expected_options.keys).should == expected_options.keys
47
- an_updated_basket
48
- }
49
- @basket.remove_item(an_item_id, expected_options)
50
-
51
- @basket.id.should == a_basket_id
52
- @basket.basket_items.should == an_updated_basket.basket_items
53
-
54
- end
55
-
56
-
57
- def fake_basket_with_items(id)
58
- basket = Sevendigital::Basket.new(@client)
59
- basket.id = id
60
- basket.basket_items = [Sevendigital::BasketItem.new(@client), Sevendigital::BasketItem.new(@client)]
61
- basket
62
- end
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "Basket" do
4
+
5
+ before do
6
+ @client = stub(Sevendigital::Client)
7
+ @basket_manager = mock(Sevendigital::BasketManager)
8
+ @client.stub!(:basket).and_return @basket_manager
9
+
10
+ @basket = Sevendigital::Basket.new(@client)
11
+ @basket.id = "00000000-0000-0000-0000-000000000001"
12
+ end
13
+
14
+ it "add_item should should call add_item on basket manager and update the basket items" do
15
+ expected_options = {:page => 2}
16
+ a_track_id = 123
17
+ a_release_id = 456
18
+
19
+ a_basket_id = @basket.id
20
+ an_updated_basket = fake_basket_with_items(@basket.id)
21
+
22
+ @basket_manager.should_receive(:add_item) { |basket_id, release_id, track_id, options|
23
+ basket_id.should == @basket.id
24
+ release_id.should == a_release_id
25
+ track_id.should == a_track_id
26
+ (options.keys & expected_options.keys).should == expected_options.keys
27
+ an_updated_basket
28
+ }
29
+ @basket.add_item(a_release_id, a_track_id, expected_options)
30
+
31
+ @basket.id.should == a_basket_id
32
+ @basket.basket_items.should == an_updated_basket.basket_items
33
+
34
+ end
35
+
36
+ it "remove_item should should call remove_item on basket manager and update the basket items" do
37
+ expected_options = {:page => 2}
38
+ an_item_id = 123
39
+
40
+ a_basket_id = @basket.id
41
+ an_updated_basket = fake_basket_with_items(@basket.id)
42
+
43
+ @basket_manager.should_receive(:remove_item) { |basket_id, item_id, options|
44
+ basket_id.should == @basket.id
45
+ item_id.should == an_item_id
46
+ (options.keys & expected_options.keys).should == expected_options.keys
47
+ an_updated_basket
48
+ }
49
+ @basket.remove_item(an_item_id, expected_options)
50
+
51
+ @basket.id.should == a_basket_id
52
+ @basket.basket_items.should == an_updated_basket.basket_items
53
+
54
+ end
55
+
56
+
57
+ def fake_basket_with_items(id)
58
+ basket = Sevendigital::Basket.new(@client)
59
+ basket.id = id
60
+ basket.basket_items = [Sevendigital::BasketItem.new(@client), Sevendigital::BasketItem.new(@client)]
61
+ basket
62
+ end
63
63
  end
@@ -1,111 +1,123 @@
1
- require "date"
2
- require File.expand_path('../../spec_helper', __FILE__)
3
-
4
- describe "Release" do
5
-
6
- before do
7
- @configuration = stub(OpenStruct)
8
- @configuration.stub!(:lazy_load?).and_return(true)
9
-
10
- @client = stub(Sevendigital::Client)
11
- @client.stub!(:configuration).and_return(@configuration)
12
- @release_manager = mock(Sevendigital::ReleaseManager)
13
- @client.stub!(:release).and_return @release_manager
14
-
15
- @release = Sevendigital::Release.new(@client)
16
- @release.id = 1234
17
- end
18
-
19
- it "should get its basic details from manager" do
20
- expected_options = {:page => 2}
21
- fresh_release = fake_release_with_details
22
-
23
- @release_manager.should_receive(:get_details) { |release_id, options|
24
- release_id.should == @release.id
25
- (options.keys & expected_options.keys).should == expected_options.keys
26
- fresh_release
27
- }
28
- @release.get_details(expected_options)
29
-
30
- @release.version.should == fresh_release.version
31
- @release.type.should == fresh_release.type
32
- @release.artist.should == fresh_release.artist
33
- @release.image.should == fresh_release.image
34
- @release.url.should == fresh_release.url
35
- @release.release_date.should == fresh_release.release_date
36
- @release.added_date.should == fresh_release.added_date
37
- @release.barcode.should == fresh_release.barcode
38
- @release.year.should == fresh_release.year
39
- @release.explicit_content.should == fresh_release.explicit_content
40
- @release.formats.should == fresh_release.formats
41
- @release.label.should == fresh_release.label
42
- @release.price.should == fresh_release.price
43
-
44
- end
45
-
46
- it "should lazy load price even if already populated but price value is not available" do
47
- @release.price = Sevendigital::Price.new
48
- @release.should_receive(:demand_price)
49
- @release.price
50
-
51
- end
52
-
53
- it "get_tracks should get tracks from manager" do
54
- expected_options = {:page => 2}
55
-
56
- @release_manager.should_receive(:get_tracks) { |release_id, options|
57
- release_id.should == @release.id
58
- (options.keys & expected_options.keys).should == expected_options.keys
59
- fake_track_list
60
- }
61
- @release.get_tracks(expected_options)
62
-
63
- end
64
-
65
-
66
- it "get_recommendations should get recommendations from manager" do
67
- expected_options = {:page => 2}
68
-
69
- @release_manager.should_receive(:get_recommendations) { |release_id, options|
70
- release_id.should == @release.id
71
- (options.keys & expected_options.keys).should == expected_options.keys
72
- fake_releases_list
73
- }
74
- @release.get_recommendations(expected_options)
75
-
76
- end
77
-
78
- def fake_releases_list
79
- releases = Array.new
80
- releases << Sevendigital::Release.new(@client)
81
- releases << Sevendigital::Release.new(@client)
82
- releases
83
- end
84
-
85
- def fake_track_list
86
- tracks = Array.new
87
- tracks << Sevendigital::Track.new(@client)
88
- tracks << Sevendigital::Track.new(@client)
89
- tracks
90
- end
91
-
92
- def fake_release_with_details
93
- release = Sevendigital::Release.new(@client)
94
- release.version = "(release version)"
95
- release.type = :album
96
- release.artist = Sevendigital::Artist.new(@client)
97
- release.image = "image"
98
- release.url = "url"
99
- release.release_date = DateTime.new(2010, 1, 1)
100
- release.added_date = DateTime.new(2000, 1, 1)
101
- release.barcode = "AAA"
102
- release.year = 1999
103
- release.explicit_content = true
104
- release.formats = []
105
- release.label = Sevendigital::Label.new
106
- price = Sevendigital::Price.new
107
- price.value = 5
108
- release.price = price
109
- release
110
- end
1
+ require "date"
2
+ require File.expand_path('../../spec_helper', __FILE__)
3
+
4
+ describe "Release" do
5
+
6
+ before do
7
+ @configuration = stub(OpenStruct)
8
+ @configuration.stub!(:lazy_load).and_return(true)
9
+
10
+ @client = stub(Sevendigital::Client)
11
+ @client.stub!(:configuration).and_return(@configuration)
12
+ @release_manager = mock(Sevendigital::ReleaseManager)
13
+ @client.stub!(:release).and_return @release_manager
14
+
15
+ @release = Sevendigital::Release.new(@client)
16
+ @release.id = 1234
17
+ end
18
+
19
+ it "should get its basic details from manager" do
20
+ expected_options = {:page => 2}
21
+ fresh_release = fake_release_with_details
22
+
23
+ @release_manager.should_receive(:get_details) { |release_id, options|
24
+ release_id.should == @release.id
25
+ (options.keys & expected_options.keys).should == expected_options.keys
26
+ fresh_release
27
+ }
28
+ @release.get_details(expected_options)
29
+
30
+ @release.version.should == fresh_release.version
31
+ @release.type.should == fresh_release.type
32
+ @release.artist.should == fresh_release.artist
33
+ @release.image.should == fresh_release.image
34
+ @release.url.should == fresh_release.url
35
+ @release.release_date.should == fresh_release.release_date
36
+ @release.added_date.should == fresh_release.added_date
37
+ @release.barcode.should == fresh_release.barcode
38
+ @release.year.should == fresh_release.year
39
+ @release.explicit_content.should == fresh_release.explicit_content
40
+ @release.formats.should == fresh_release.formats
41
+ @release.label.should == fresh_release.label
42
+ @release.price.should == fresh_release.price
43
+
44
+ end
45
+
46
+ it "should lazy load price even if already populated but price value is not available" do
47
+ @release.price = Sevendigital::Price.new
48
+ @release.should_receive(:demand_price)
49
+ @release.price
50
+
51
+ end
52
+
53
+ it "get_tracks should get tracks from manager" do
54
+ expected_options = {:page => 2}
55
+
56
+ @release_manager.should_receive(:get_tracks) { |release_id, options|
57
+ release_id.should == @release.id
58
+ (options.keys & expected_options.keys).should == expected_options.keys
59
+ fake_track_list
60
+ }
61
+ @release.get_tracks(expected_options)
62
+
63
+ end
64
+
65
+
66
+ it "get_recommendations should get recommendations from manager" do
67
+ expected_options = {:page => 2}
68
+
69
+ @release_manager.should_receive(:get_recommendations) { |release_id, options|
70
+ release_id.should == @release.id
71
+ (options.keys & expected_options.keys).should == expected_options.keys
72
+ fake_releases_list
73
+ }
74
+ @release.get_recommendations(expected_options)
75
+
76
+ end
77
+
78
+ it "get_tags should get tags from manager" do
79
+ expected_options = {:page => 2}
80
+
81
+ @release_manager.should_receive(:get_tags) { |release_id, options|
82
+ release_id.should == @release.id
83
+ (options.keys & expected_options.keys).should == expected_options.keys
84
+ []
85
+ }
86
+ @release.get_tags(expected_options)
87
+
88
+ end
89
+
90
+ def fake_releases_list
91
+ releases = Array.new
92
+ releases << Sevendigital::Release.new(@client)
93
+ releases << Sevendigital::Release.new(@client)
94
+ releases
95
+ end
96
+
97
+ def fake_track_list
98
+ tracks = Array.new
99
+ tracks << Sevendigital::Track.new(@client)
100
+ tracks << Sevendigital::Track.new(@client)
101
+ tracks
102
+ end
103
+
104
+ def fake_release_with_details
105
+ release = Sevendigital::Release.new(@client)
106
+ release.version = "(release version)"
107
+ release.type = :album
108
+ release.artist = Sevendigital::Artist.new(@client)
109
+ release.image = "image"
110
+ release.url = "url"
111
+ release.release_date = DateTime.new(2010, 1, 1)
112
+ release.added_date = DateTime.new(2000, 1, 1)
113
+ release.barcode = "AAA"
114
+ release.year = 1999
115
+ release.explicit_content = true
116
+ release.formats = []
117
+ release.label = Sevendigital::Label.new
118
+ price = Sevendigital::Price.new
119
+ price.value = 5
120
+ release.price = price
121
+ release
122
+ end
111
123
  end
@@ -1,74 +1,74 @@
1
- require "date"
2
- require File.expand_path('../../spec_helper', __FILE__)
3
-
4
- describe "SevendigitalObject" do
5
-
6
- before do
7
-
8
- @configuration = stub(Sevendigital::ClientConfiguration)
9
- @configuration.stub!(:lazy_load).and_return(true)
10
-
11
- @client = stub(Sevendigital::Client)
12
- @client.stub!(:configuration).and_return(@configuration)
13
- @client.stub!(:verbose?).and_return(true)
14
- @test_object = Sevendigital::SevendigitalObject.new(@client)
15
- end
16
-
17
- it "sevendigital extended property should define accessor that calls demand method" do
18
- class TestClass < Sevendigital::SevendigitalObject
19
- sevendigital_extended_property :test_property
20
- end
21
-
22
- test_object = TestClass.new(@client)
23
- test_object.should_receive(:demand_test_property)
24
- test_object.test_property
25
-
26
- end
27
-
28
- it "sevendigital extended property should define accessor that doesn't swallow SevenDigital errors" do
29
- class TestClass < Sevendigital::SevendigitalObject
30
- sevendigital_extended_property :test_property
31
- end
32
- @configuration.stub!(:ignorant_lazy_load).and_return(false)
33
- test_object = TestClass.new(@client)
34
- test_object.should_receive(:demand_test_property).and_raise(Sevendigital::SevendigitalError)
35
- running {test_object.test_property}.should raise_error(Sevendigital::SevendigitalError)
36
- end
37
-
38
- it "sevendigital extended property should define accessor that swallows SevenDigital errors if client is ignorant" do
39
- class TestClass < Sevendigital::SevendigitalObject
40
- sevendigital_extended_property :test_property
41
- end
42
- @configuration.stub!(:ignorant_lazy_load).and_return(true)
43
- test_object = TestClass.new(@client)
44
- test_object.should_receive(:demand_test_property).and_raise(Sevendigital::SevendigitalError)
45
- test_object.test_property
46
- end
47
-
48
- it "sevendigital extended property should define demand method that calls get method if property not set" do
49
- class TestClass < Sevendigital::SevendigitalObject
50
- sevendigital_extended_property :test_property
51
- end
52
-
53
- test_object = TestClass.new(@client)
54
- test_object.should_receive(:get_test_property).and_return("a value")
55
- test_object.instance_variable_get("@test_property").should == nil
56
- test_object.demand_test_property
57
- test_object.instance_variable_get("@test_property").should == "a value"
58
-
59
- end
60
-
61
- it "sevendigital extended property should define demand method that does nothing if property is set" do
62
- class TestClass < Sevendigital::SevendigitalObject
63
- sevendigital_extended_property :test_property
64
- end
65
-
66
- test_object = TestClass.new(@client)
67
- test_object.instance_variable_set("@test_property", "a value")
68
- test_object.should_not_receive(:get_test_property)
69
- test_object.demand_test_property
70
-
71
- end
72
-
73
-
1
+ require "date"
2
+ require File.expand_path('../../spec_helper', __FILE__)
3
+
4
+ describe "SevendigitalObject" do
5
+
6
+ before do
7
+
8
+ @configuration = stub(Sevendigital::ClientConfiguration)
9
+ @configuration.stub!(:lazy_load).and_return(true)
10
+
11
+ @client = stub(Sevendigital::Client)
12
+ @client.stub!(:configuration).and_return(@configuration)
13
+ @client.stub!(:verbose?).and_return(true)
14
+ @test_object = Sevendigital::SevendigitalObject.new(@client)
15
+ end
16
+
17
+ it "sevendigital extended property should define accessor that calls demand method" do
18
+ class TestClass < Sevendigital::SevendigitalObject
19
+ sevendigital_extended_property :test_property
20
+ end
21
+
22
+ test_object = TestClass.new(@client)
23
+ test_object.should_receive(:demand_test_property)
24
+ test_object.test_property
25
+
26
+ end
27
+
28
+ it "sevendigital extended property should define accessor that doesn't swallow SevenDigital errors" do
29
+ class TestClass < Sevendigital::SevendigitalObject
30
+ sevendigital_extended_property :test_property
31
+ end
32
+ @configuration.stub!(:ignorant_lazy_load).and_return(false)
33
+ test_object = TestClass.new(@client)
34
+ test_object.should_receive(:demand_test_property).and_raise(Sevendigital::SevendigitalError)
35
+ running {test_object.test_property}.should raise_error(Sevendigital::SevendigitalError)
36
+ end
37
+
38
+ it "sevendigital extended property should define accessor that swallows SevenDigital errors if client is ignorant" do
39
+ class TestClass < Sevendigital::SevendigitalObject
40
+ sevendigital_extended_property :test_property
41
+ end
42
+ @configuration.stub!(:ignorant_lazy_load).and_return(true)
43
+ test_object = TestClass.new(@client)
44
+ test_object.should_receive(:demand_test_property).and_raise(Sevendigital::SevendigitalError)
45
+ test_object.test_property
46
+ end
47
+
48
+ it "sevendigital extended property should define demand method that calls get method if property not set" do
49
+ class TestClass < Sevendigital::SevendigitalObject
50
+ sevendigital_extended_property :test_property
51
+ end
52
+
53
+ test_object = TestClass.new(@client)
54
+ test_object.should_receive(:get_test_property).and_return("a value")
55
+ test_object.instance_variable_get("@test_property").should == nil
56
+ test_object.demand_test_property
57
+ test_object.instance_variable_get("@test_property").should == "a value"
58
+
59
+ end
60
+
61
+ it "sevendigital extended property should define demand method that does nothing if property is set" do
62
+ class TestClass < Sevendigital::SevendigitalObject
63
+ sevendigital_extended_property :test_property
64
+ end
65
+
66
+ test_object = TestClass.new(@client)
67
+ test_object.instance_variable_set("@test_property", "a value")
68
+ test_object.should_not_receive(:get_test_property)
69
+ test_object.demand_test_property
70
+
71
+ end
72
+
73
+
74
74
  end