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,144 +1,145 @@
1
- require "date"
2
- require File.expand_path('../../spec_helper', __FILE__)
3
-
4
- describe "Track" do
5
-
6
- before do
7
- @client = stub(Sevendigital::Client)
8
- @track_manager = mock(Sevendigital::TrackManager)
9
- @client.stub!(:track).and_return @track_manager
10
-
11
- @track = Sevendigital::Track.new(@client)
12
- @track.id = 1234
13
- @track.release = Sevendigital::Release.new(@client)
14
- @track.release.id = 5678
15
- end
16
-
17
- it "get_details should get track's basic details from track manager " do
18
- expected_options = {:page => 2}
19
- fresh_track = fake_track_with_details
20
-
21
- @track_manager.should_receive(:get_details_from_release) { |track_id, release_id, options|
22
- track_id.should == @track.id
23
- release_id.should == @track.release.id
24
- (options.keys & expected_options.keys).should == expected_options.keys
25
- fresh_track
26
- }
27
- @track.get_details(expected_options)
28
-
29
- @track.track_number.should == fresh_track.track_number
30
- @track.duration.should == fresh_track.duration
31
- @track.explicit_content.should == fresh_track.explicit_content
32
- @track.isrc.should == fresh_track.isrc
33
- @track.release.id.should == fresh_track.release.id
34
- @track.url.should == fresh_track.url
35
-
36
- end
37
-
38
- it "preview_url should get preview URL from manager" do
39
- expected_options = {:country => "mx"}
40
- fake_preview_url = "http://preview.com/trackid/123456"
41
-
42
- @track_manager.should_receive(:build_preview_url) { |track_id, options|
43
- track_id.should == @track.id
44
- (options.keys & expected_options.keys).should == expected_options.keys
45
- fake_preview_url
46
- }
47
-
48
- @track.preview_url(expected_options).should == fake_preview_url
49
-
50
- end
51
-
52
- it "should have a short title without any version in brackets" do
53
-
54
- @track.title = "Girl With One Eye (Bayou Percussion Version)"
55
- @track.short_title.should == "Girl With One Eye"
56
-
57
- @track.title = "The Thing I Like Best About Him Is His Girlfriend (Gr's Man-Made Island Edition)"
58
- @track.short_title.should == "The Thing I Like Best About Him Is His Girlfriend"
59
-
60
- @track.title = "Your Head to Your Toes (Live at the BBC)"
61
- @track.short_title.should == "Your Head to Your Toes"
62
-
63
- @track.title = "Welcome To The World of The Plastic Beach (Feat. Snoop Dogg and Hypnotic Brass Ensemble)"
64
- @track.short_title.should == "Welcome To The World of The Plastic Beach"
65
-
66
- @track.title = "(lp version)"
67
- @track.short_title.should == "(lp version)"
68
-
69
- @track.title = "What's the Story (Morning Glory)"
70
- @track.short_title.should == "What's the Story (Morning Glory)"
71
-
72
- @track.title = "track 1 (something else)"
73
- @track.short_title.should == "track 1 (something else)"
74
-
75
- @track.title = "track 1 (dj remix)"
76
- @track.short_title.should == "track 1"
77
-
78
- @track.title = "track 1 ( dj mix )"
79
- @track.short_title.should == "track 1"
80
- end
81
-
82
- describe "alternate_version?" do
83
-
84
- before do
85
- @artist1 = Sevendigital::Artist.new(@client)
86
- @artist2 = Sevendigital::Artist.new(@client)
87
- @track1 = Sevendigital::Track.new(@client)
88
- @track1.artist = @artist1
89
- @track2 = Sevendigital::Track.new(@client)
90
- @track2.artist = @artist2
91
-
92
- @artist1.name = "artist 1"
93
- @track1.title = "track 1"
94
-
95
- end
96
-
97
- it "should be considered alternate version if artist names and titles match" do
98
- @artist2.name = "Artist 1"
99
- @track2.title = "Track 1"
100
-
101
- @track1.alternate_version_of?(@track2).should == true
102
- end
103
-
104
- it "should be considered alternate version if artist names and short titles match" do
105
- @track1.title = "track 1 (uk version)"
106
-
107
- @artist2.name = "Artist 1"
108
- @track2.title = "TRACK 1 (us remix)"
109
-
110
- @track1.alternate_version_of?(@track2).should == true
111
- end
112
-
113
- it "should not be considered alternate version if artist names don't match" do
114
- @artist2.name = "artist 2"
115
- @track2.title = "track 1"
116
-
117
- @track1.alternate_version_of?(@track2).should == false
118
- end
119
-
120
- it "should not be considered alternate version if short titles don't match" do
121
- @artist2.name = "artist 1"
122
- @track2.title = "track 2"
123
-
124
- @track1.alternate_version_of?(@track2).should == false
125
- end
126
-
127
-
128
- end
129
-
130
- def fake_track_with_details
131
- track = Sevendigital::Track.new(@client)
132
- track.title = "Song 1"
133
- track.version = "Version 2"
134
- track.artist = Sevendigital::Artist.new(@client)
135
- track.track_number = 7
136
- track.duration = 77
137
- track.explicit_content = true
138
- track.isrc = "7D"
139
- track.release = Sevendigital::Release.new(@client)
140
- track.release.id = 5678
141
- track.url = "http://aaa.bbb.ccc/"
142
- track
143
- end
1
+ require "date"
2
+ require File.expand_path('../../spec_helper', __FILE__)
3
+
4
+ describe "Track" do
5
+
6
+ before do
7
+ @client = stub(Sevendigital::Client)
8
+ @track_manager = mock(Sevendigital::TrackManager)
9
+ @client.stub!(:track).and_return @track_manager
10
+ @client.stub!(:configuration).and_return OpenStruct.new
11
+
12
+ @track = Sevendigital::Track.new(@client)
13
+ @track.id = 1234
14
+ @track.release = Sevendigital::Release.new(@client)
15
+ @track.release.id = 5678
16
+ end
17
+
18
+ it "get_details should get track's basic details from track manager " do
19
+ expected_options = {:page => 2}
20
+ fresh_track = fake_track_with_details
21
+
22
+ @track_manager.should_receive(:get_details_from_release) { |track_id, release_id, options|
23
+ track_id.should == @track.id
24
+ release_id.should == @track.release.id
25
+ (options.keys & expected_options.keys).should == expected_options.keys
26
+ fresh_track
27
+ }
28
+ @track.get_details(expected_options)
29
+
30
+ @track.track_number.should == fresh_track.track_number
31
+ @track.duration.should == fresh_track.duration
32
+ @track.explicit_content.should == fresh_track.explicit_content
33
+ @track.isrc.should == fresh_track.isrc
34
+ @track.release.id.should == fresh_track.release.id
35
+ @track.url.should == fresh_track.url
36
+
37
+ end
38
+
39
+ it "preview_url should get preview URL from manager" do
40
+ expected_options = {:country => "mx"}
41
+ fake_preview_url = "http://preview.com/trackid/123456"
42
+
43
+ @track_manager.should_receive(:build_preview_url) { |track_id, options|
44
+ track_id.should == @track.id
45
+ (options.keys & expected_options.keys).should == expected_options.keys
46
+ fake_preview_url
47
+ }
48
+
49
+ @track.preview_url(expected_options).should == fake_preview_url
50
+
51
+ end
52
+
53
+ it "should have a short title without any version in brackets" do
54
+
55
+ @track.title = "Girl With One Eye (Bayou Percussion Version)"
56
+ @track.short_title.should == "Girl With One Eye"
57
+
58
+ @track.title = "The Thing I Like Best About Him Is His Girlfriend (Gr's Man-Made Island Edition)"
59
+ @track.short_title.should == "The Thing I Like Best About Him Is His Girlfriend"
60
+
61
+ @track.title = "Your Head to Your Toes (Live at the BBC)"
62
+ @track.short_title.should == "Your Head to Your Toes"
63
+
64
+ @track.title = "Welcome To The World of The Plastic Beach (Feat. Snoop Dogg and Hypnotic Brass Ensemble)"
65
+ @track.short_title.should == "Welcome To The World of The Plastic Beach"
66
+
67
+ @track.title = "(lp version)"
68
+ @track.short_title.should == "(lp version)"
69
+
70
+ @track.title = "What's the Story (Morning Glory)"
71
+ @track.short_title.should == "What's the Story (Morning Glory)"
72
+
73
+ @track.title = "track 1 (something else)"
74
+ @track.short_title.should == "track 1 (something else)"
75
+
76
+ @track.title = "track 1 (dj remix)"
77
+ @track.short_title.should == "track 1"
78
+
79
+ @track.title = "track 1 ( dj mix )"
80
+ @track.short_title.should == "track 1"
81
+ end
82
+
83
+ describe "alternate_version?" do
84
+
85
+ before do
86
+ @artist1 = Sevendigital::Artist.new(@client)
87
+ @artist2 = Sevendigital::Artist.new(@client)
88
+ @track1 = Sevendigital::Track.new(@client)
89
+ @track1.artist = @artist1
90
+ @track2 = Sevendigital::Track.new(@client)
91
+ @track2.artist = @artist2
92
+
93
+ @artist1.name = "artist 1"
94
+ @track1.title = "track 1"
95
+
96
+ end
97
+
98
+ it "should be considered alternate version if artist names and titles match" do
99
+ @artist2.name = "Artist 1"
100
+ @track2.title = "Track 1"
101
+
102
+ @track1.alternate_version_of?(@track2).should == true
103
+ end
104
+
105
+ it "should be considered alternate version if artist names and short titles match" do
106
+ @track1.title = "track 1 (uk version)"
107
+
108
+ @artist2.name = "Artist 1"
109
+ @track2.title = "TRACK 1 (us remix)"
110
+
111
+ @track1.alternate_version_of?(@track2).should == true
112
+ end
113
+
114
+ it "should not be considered alternate version if artist names don't match" do
115
+ @artist2.name = "artist 2"
116
+ @track2.title = "track 1"
117
+
118
+ @track1.alternate_version_of?(@track2).should == false
119
+ end
120
+
121
+ it "should not be considered alternate version if short titles don't match" do
122
+ @artist2.name = "artist 1"
123
+ @track2.title = "track 2"
124
+
125
+ @track1.alternate_version_of?(@track2).should == false
126
+ end
127
+
128
+
129
+ end
130
+
131
+ def fake_track_with_details
132
+ track = Sevendigital::Track.new(@client)
133
+ track.title = "Song 1"
134
+ track.version = "Version 2"
135
+ track.artist = Sevendigital::Artist.new(@client)
136
+ track.track_number = 7
137
+ track.duration = 77
138
+ track.explicit_content = true
139
+ track.isrc = "7D"
140
+ track.release = Sevendigital::Release.new(@client)
141
+ track.release.id = 5678
142
+ track.url = "http://aaa.bbb.ccc/"
143
+ track
144
+ end
144
145
  end
@@ -1,98 +1,161 @@
1
- require "date"
2
- require File.expand_path('../../spec_helper', __FILE__)
3
-
4
- describe "User" do
5
-
6
- before do
7
- @client = stub(Sevendigital::Client)
8
- @user_manager = mock(Sevendigital::UserManager)
9
- @client.stub!(:user).and_return @user_manager
10
-
11
- @user = Sevendigital::User.new(@client)
12
- end
13
-
14
- it "should not be authorised if does not have access_token" do
15
- @user.oauth_access_token = nil
16
- @user.authenticated?.should == false
17
- end
18
-
19
- it "should be authorised if does have access_token" do
20
- @user.oauth_access_token = "something"
21
- @user.authenticated?.should == true
22
- end
23
-
24
- it "should get user's locker from locker manager" do
25
- @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
26
- fake_locker = [Sevendigital::LockerRelease.new(@client)]
27
- expected_options = {:page => 2}
28
-
29
- @user_manager.should_receive(:get_locker) { |token, options|
30
- token.should == @user.oauth_access_token
31
- (options.keys & expected_options.keys).should == expected_options.keys
32
- fake_locker
33
- }
34
- locker = @user.get_locker(expected_options)
35
- locker.should == fake_locker
36
- end
37
-
38
- it "should get user manager to make a purchase" do
39
- @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
40
- a_release_id = 123
41
- a_track_id = 456
42
- a_price = 1.29
43
- fake_locker = [Sevendigital::LockerRelease.new(@client)]
44
- expected_options = {:page => 2}
45
-
46
- @user_manager.should_receive(:purchase) { |release_id, track_id, price, token, options|
47
- token.should == @user.oauth_access_token
48
- release_id.should == a_release_id
49
- track_id.should == a_track_id
50
- price.should == a_price
51
- (options.keys & expected_options.keys).should == expected_options.keys
52
- fake_locker
53
- }
54
- purchase_locker = @user.purchase!(a_release_id, a_track_id, a_price, expected_options)
55
- purchase_locker.should == fake_locker
56
- end
57
-
58
- it "should get stream track url from user manager" do
59
- @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
60
- a_track_id = 456
61
- a_release_id = 123
62
- a_stream_track_url = "http://whatever"
63
- expected_options = {:page => 2}
64
-
65
- @user_manager.should_receive(:get_stream_track_url) { |release_id, track_id, token, options|
66
- token.should == @user.oauth_access_token
67
- track_id.should == a_track_id
68
- release_id.should == a_release_id
69
- (options.keys & expected_options.keys).should == expected_options.keys
70
- a_stream_track_url
71
- }
72
- @user.stream_track_url(a_release_id, a_track_id, expected_options).should == a_stream_track_url
73
- end
74
-
75
- it "should not get a stream tack url but raise Sevendigital::Error if user is not authenticated" do
76
- running {@user.get_locker}.should raise_error(Sevendigital::SevendigitalError)
77
- end
78
-
79
- it "should get an add card url from user manager" do
80
- @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
81
- a_stream_track_url = "http://whatever"
82
- a_return_url = "http://example.com"
83
- expected_options = {:page => 2}
84
-
85
- @user_manager.should_receive(:get_add_card_url) { |return_url, token, options|
86
- return_url.should == a_return_url
87
- token.should == @user.oauth_access_token
88
- (options.keys & expected_options.keys).should == expected_options.keys
89
- a_stream_track_url
90
- }
91
- @user.add_card_url(a_return_url, expected_options).should == a_stream_track_url
92
- end
93
-
94
- it "should not get a stream tack url but raise Sevendigital::Error if user is not authenticated" do
95
- running {@user.get_locker}.should raise_error(Sevendigital::SevendigitalError)
96
- end
97
-
1
+ require "date"
2
+ require File.expand_path('../../spec_helper', __FILE__)
3
+
4
+ describe "User" do
5
+
6
+ before do
7
+ @client = stub(Sevendigital::Client)
8
+ @user_manager = mock(Sevendigital::UserManager)
9
+ @user_card_manager = mock(Sevendigital::UserCardManager)
10
+ @client.stub!(:user).and_return @user_manager
11
+ @client.stub!(:user_payment_card).and_return @user_card_manager
12
+
13
+ @user = Sevendigital::User.new(@client)
14
+ end
15
+
16
+ it "should not be authorised if does not have access_token" do
17
+ @user.oauth_access_token = nil
18
+ @user.authenticated?.should == false
19
+ end
20
+
21
+ it "should be authorised if does have access_token" do
22
+ @user.oauth_access_token = "something"
23
+ @user.authenticated?.should == true
24
+ end
25
+
26
+ it "should get user's locker from locker manager" do
27
+ @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
28
+ fake_locker = [Sevendigital::LockerRelease.new(@client)]
29
+ expected_options = {:page => 2}
30
+
31
+ @user_manager.should_receive(:get_locker) { |token, options|
32
+ token.should == @user.oauth_access_token
33
+ (options.keys & expected_options.keys).should == expected_options.keys
34
+ fake_locker
35
+ }
36
+ locker = @user.get_locker(expected_options)
37
+ locker.should == fake_locker
38
+ end
39
+
40
+ it "should get user's payment cards from user card manager" do
41
+ @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
42
+ fake_card_list = [Sevendigital::Card.new(@client)]
43
+ expected_options = {:page => 2}
44
+
45
+ @user_card_manager.should_receive(:get_card_list) { |token, options|
46
+ token.should == @user.oauth_access_token
47
+ (options.keys & expected_options.keys).should == expected_options.keys
48
+ fake_card_list
49
+ }
50
+ cards = @user.get_cards(expected_options)
51
+ cards.should == fake_card_list
52
+ end
53
+
54
+ it "should add payment card for user using user card manager" do
55
+ @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
56
+ card_number = "4444333322221111"
57
+ card_type = "VISA"
58
+ card_holder_name = "Mr John Simth"
59
+ card_start_date = "200909"
60
+ card_expiry_date = "201109"
61
+ card_issue_number = "1"
62
+ card_verification_code ="123"
63
+ card_post_code = "EC2A 4HJ"
64
+ card_country = "GB"
65
+ fake_card = Sevendigital::Card.new(@client)
66
+
67
+ @user_card_manager.should_receive(:add_card).with(
68
+ card_number, card_type, card_holder_name, card_start_date, card_expiry_date, card_issue_number,
69
+ card_verification_code, card_post_code, card_country, @user.oauth_access_token, {}).and_return(fake_card)
70
+ card = @user.add_card(card_number, card_type, card_holder_name, card_start_date, card_expiry_date,
71
+ card_issue_number, card_verification_code, card_post_code, card_country)
72
+ card.should == fake_card
73
+ end
74
+
75
+ it "should select a default payment card for user using user card manager" do
76
+ @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
77
+ card_id = 123456
78
+
79
+ @user_card_manager.should_receive(:select_card).with(
80
+ card_id, @user.oauth_access_token, {}).and_return(true)
81
+ @user.select_card(card_id).should == true
82
+ end
83
+
84
+
85
+ it "should purchase a track using user manger" do
86
+ @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
87
+ a_release_id = 123
88
+ a_track_id = 456
89
+ a_price = 1.29
90
+ fake_locker = [Sevendigital::LockerRelease.new(@client)]
91
+ expected_options = {:page => 2}
92
+
93
+ @user_manager.should_receive(:purchase_item) { |release_id, track_id, price, token, options|
94
+ token.should == @user.oauth_access_token
95
+ release_id.should == a_release_id
96
+ track_id.should == a_track_id
97
+ price.should == a_price
98
+ (options.keys & expected_options.keys).should == expected_options.keys
99
+ fake_locker
100
+ }
101
+ purchase_locker = @user.purchase_item!(a_release_id, a_track_id, a_price, expected_options)
102
+ purchase_locker.should == fake_locker
103
+ end
104
+
105
+ it "should purchase a basket using user manger" do
106
+ @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
107
+ a_basket_id = 123
108
+ fake_locker = [Sevendigital::LockerRelease.new(@client)]
109
+ expected_options = {:page => 2}
110
+
111
+ @user_manager.should_receive(:purchase_basket) { |basket_id, token, options|
112
+ token.should == @user.oauth_access_token
113
+ basket_id.should == a_basket_id
114
+ (options.keys & expected_options.keys).should == expected_options.keys
115
+ fake_locker
116
+ }
117
+ purchase_locker = @user.purchase_basket!(a_basket_id, expected_options)
118
+ purchase_locker.should == fake_locker
119
+ end
120
+
121
+ it "should get stream track url from user manager" do
122
+ @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
123
+ a_track_id = 456
124
+ a_release_id = 123
125
+ a_stream_track_url = "http://whatever"
126
+ expected_options = {:page => 2}
127
+
128
+ @user_manager.should_receive(:get_stream_track_url) { |release_id, track_id, token, options|
129
+ token.should == @user.oauth_access_token
130
+ track_id.should == a_track_id
131
+ release_id.should == a_release_id
132
+ (options.keys & expected_options.keys).should == expected_options.keys
133
+ a_stream_track_url
134
+ }
135
+ @user.stream_track_url(a_release_id, a_track_id, expected_options).should == a_stream_track_url
136
+ end
137
+
138
+ it "should not get a stream tack url but raise Sevendigital::Error if user is not authenticated" do
139
+ running {@user.get_locker}.should raise_error(Sevendigital::SevendigitalError)
140
+ end
141
+
142
+ it "should get an add card url from user manager" do
143
+ @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
144
+ a_stream_track_url = "http://whatever"
145
+ a_return_url = "http://example.com"
146
+ expected_options = {:page => 2}
147
+
148
+ @user_manager.should_receive(:get_add_card_url) { |return_url, token, options|
149
+ return_url.should == a_return_url
150
+ token.should == @user.oauth_access_token
151
+ (options.keys & expected_options.keys).should == expected_options.keys
152
+ a_stream_track_url
153
+ }
154
+ @user.add_card_url(a_return_url, expected_options).should == a_stream_track_url
155
+ end
156
+
157
+ it "should not get a stream tack url but raise Sevendigital::Error if user is not authenticated" do
158
+ running {@user.get_locker}.should raise_error(Sevendigital::SevendigitalError)
159
+ end
160
+
98
161
  end