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,112 +1,49 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
2
- require 'time'
3
-
4
- describe "ApiResponse" do
5
-
6
- it "should be ok if error code is 0 and content is not empty" do
7
-
8
- response = Sevendigital::ApiResponse.new
9
- response.error_code = 0
10
- response.content = '<xml></xml>'
11
- response.ok?.should == true
12
-
13
- end
14
-
15
- it "should not be ok if error code is not 0" do
16
-
17
- response = Sevendigital::ApiResponse.new
18
- response.error_code = 5
19
- response.content = '<xml></xml>'
20
- response.ok?.should == false
21
-
22
- end
23
-
24
- it "should not be ok if response content is nil" do
25
-
26
- response = Sevendigital::ApiResponse.new
27
- response.error_code = 0
28
- response.ok?.should == false
29
-
30
- end
31
-
32
- it "should be serializable" do
33
- original_response = Sevendigital::ApiResponseDigestor.new(@client).from_xml\
34
- ("<response status='ok'><testElement id='123'>value</testElement></response>")
35
- original_response.error_code = 99
36
- original_response.headers = {"header" => "value"}
37
-
38
-
39
- tmp = Marshal.dump(original_response)
40
- restored_response = Marshal.load(tmp)
41
-
42
- restored_response.error_code.should == original_response.error_code
43
- restored_response.content.to_s.should == original_response.content.to_s
44
- restored_response.content.test_element.value.should == "value"
45
- restored_response.headers.should == original_response.headers
46
-
47
- end
48
-
49
- it "should be out of date if it's past its cache max age" do
50
- now = Time.now.utc
51
- yesterday = now - 24*60*60
52
- max_age = 12*60*60
53
-
54
- response = Sevendigital::ApiResponse.new
55
- response.headers = {"cache-control" => "private, max-age=#{max_age}", "Date" => yesterday.httpdate}
56
-
57
- response.out_of_date?(now).should == true
58
-
59
- end
60
-
61
- it "should be out of date if it's past its cache max age" do
62
- now = Time.now.utc
63
- yesterday = now - 24*60*60
64
- max_age = 12*60*60
65
-
66
- response = Sevendigital::ApiResponse.new
67
- response.headers = {"cache-control" => "private, max-age=#{max_age}", "Date" => yesterday.httpdate}
68
-
69
- response.out_of_date?(now).should == true
70
-
71
- end
72
-
73
- it "should not be out of date if it's within its cache max age" do
74
- now = Time.now.utc
75
- yesterday = now - 24*60*60
76
- max_age = 48*60*60
77
- # stub_time(now)
78
-
79
- response = Sevendigital::ApiResponse.new
80
- response.headers = {"cache-control" => "private, max-age=#{max_age}", "Date" => yesterday.httpdate}
81
-
82
- response.out_of_date?(now).should == false
83
-
84
- end
85
-
86
- it "should be out of date if it is missing caching headers" do
87
-
88
- response = Sevendigital::ApiResponse.new
89
- response.out_of_date?(Time.now.utc).should == true
90
-
91
- response.headers = {"Date" => Time.now.utc.httpdate}
92
- response.out_of_date?(Time.now.utc).should == true
93
-
94
- end
95
-
96
- it "should be out of date if no max-age has been specified" do
97
-
98
- response = Sevendigital::ApiResponse.new
99
- response.headers = {"cache-control" => "no-cache", "Date" => Time.now.utc.httpdate}
100
- response.out_of_date?(Time.now.utc).should == true
101
-
102
- end
103
-
104
- it "should be out of date if it is missing Date header" do
105
-
106
- response = Sevendigital::ApiResponse.new
107
- response.headers = {"cache-control" => "private, max-age=#{2**30}"}
108
- response.out_of_date?(Time.now.utc).should == true
109
-
110
- end
111
-
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+ require 'time'
3
+
4
+ describe "ApiResponse" do
5
+
6
+ it "should be ok if error code is 0 and content is not empty" do
7
+
8
+ response = Sevendigital::ApiResponse.new
9
+ response.error_code = 0
10
+ response.content = '<xml></xml>'
11
+ response.ok?.should == true
12
+
13
+ end
14
+
15
+ it "should not be ok if error code is not 0" do
16
+
17
+ response = Sevendigital::ApiResponse.new
18
+ response.error_code = 5
19
+ response.content = '<xml></xml>'
20
+ response.ok?.should == false
21
+
22
+ end
23
+
24
+ it "should not be ok if response content is nil" do
25
+
26
+ response = Sevendigital::ApiResponse.new
27
+ response.error_code = 0
28
+ response.ok?.should == false
29
+
30
+ end
31
+
32
+ it "should be serializable" do
33
+ original_response = Sevendigital::ApiResponseDigestor.new(@client).from_xml\
34
+ ("<response status='ok'><testElement id='123'>value</testElement></response>")
35
+ original_response.error_code = 99
36
+ original_response.headers = {"header" => "value"}
37
+
38
+
39
+ tmp = Marshal.dump(original_response)
40
+ restored_response = Marshal.load(tmp)
41
+
42
+ restored_response.error_code.should == original_response.error_code
43
+ restored_response.content.to_s.should == original_response.content.to_s
44
+ restored_response.content.test_element.value.should == "value"
45
+ restored_response.headers.should == original_response.headers
46
+
47
+ end
48
+
112
49
  end
@@ -1,142 +1,155 @@
1
- require "date"
2
- require File.expand_path('../../spec_helper', __FILE__)
3
-
4
- describe "Artist" do
5
-
6
- before do
7
- @client = stub(Sevendigital::Client)
8
- @artist_manager = mock(Sevendigital::ArtistManager)
9
- @client.stub!(:artist).and_return @artist_manager
10
-
11
- @artist = Sevendigital::Artist.new(@client)
12
- @artist.id = 1234
13
- end
14
-
15
- it "get_details should get artist's basic details from manager" do
16
- expected_options = {:page => 2}
17
- fresh_artist = fake_artist_with_details
18
-
19
- @artist_manager.should_receive(:get_details) { |artist_id, options|
20
- artist_id.should == @artist.id
21
- (options.keys & expected_options.keys).should == expected_options.keys
22
- fresh_artist
23
- }
24
- @artist.get_details(expected_options)
25
-
26
- @artist.sort_name.should == fresh_artist.sort_name
27
- @artist.image.should == fresh_artist.image
28
- @artist.url.should == fresh_artist.url
29
-
30
- end
31
-
32
- it "get_releases should get releases from manager" do
33
- expected_options = {:page => 2}
34
-
35
- @artist_manager.should_receive(:get_releases) { |artist_id, options|
36
- artist_id.should == @artist.id
37
- (options.keys & expected_options.keys).should == expected_options.keys
38
- fake_release_list
39
- }
40
- @artist.get_releases(expected_options)
41
-
42
- end
43
-
44
- it "get_top_tracks should get tracks from manager" do
45
- expected_options = {:page => 2}
46
-
47
- @artist_manager.should_receive(:get_top_tracks) { |artist_id, options|
48
- artist_id.should == @artist.id
49
- (options.keys & expected_options.keys).should == expected_options.keys
50
- fake_track_list
51
- }
52
- @artist.get_top_tracks(expected_options)
53
-
54
- end
55
-
56
- it "get_similar should get similar artists from manager" do
57
- expected_options = {:page => 2}
58
-
59
- @artist_manager.should_receive(:get_similar) { |artist_id, options|
60
- artist_id.should == @artist.id
61
- (options.keys & expected_options.keys).should == expected_options.keys
62
- fake_artist_list
63
- }
64
- @artist.get_similar(expected_options)
65
-
66
- end
67
-
68
- it "should be a various artist if name contains various" do
69
-
70
- @artist.name = "various"
71
- @artist.various?.should == true
72
-
73
- end
74
-
75
- it "should be a various artist if appears as contains various" do
76
-
77
- @artist.name = "mr"
78
- @artist.appears_as = "mr various"
79
- @artist.various?.should == true
80
-
81
- end
82
-
83
- it "should be a various artist if resembles various artist" do
84
-
85
- @artist.name = "v.a."
86
- @artist.various?.should == true
87
- @artist.name = "vario"
88
- @artist.various?.should == true
89
- @artist.name = "vaious"
90
- @artist.various?.should == true
91
- @artist.name = "varios"
92
- @artist.various?.should == true
93
- @artist.name = "aaaa"
94
- @artist.various?.should == false
95
- @artist.name = "vaious"
96
- @artist.various?.should == true
97
- @artist.name = "varoius"
98
- @artist.various?.should == true
99
- @artist.name = "variuos"
100
- @artist.various?.should == true
101
-
102
- end
103
-
104
- it "should not be a various artist if it doesn't resemble various artist" do
105
-
106
- @artist.name = "mr small"
107
- @artist.appears_as = "mr big"
108
- @artist.various?.should == false
109
-
110
- end
111
-
112
-
113
-
114
- def fake_track_list
115
- tracks = Array.new
116
- tracks << Sevendigital::Track.new(@client)
117
- tracks << Sevendigital::Track.new(@client)
118
- tracks
119
- end
120
-
121
- def fake_release_list
122
- releases = Array.new
123
- releases << Sevendigital::Release.new(@client)
124
- releases << Sevendigital::Release.new(@client)
125
- releases
126
- end
127
-
128
- def fake_artist_list
129
- artists = Array.new
130
- artists << Sevendigital::Artist.new(@client)
131
- artists << Sevendigital::Artist.new(@client)
132
- artists
133
- end
134
-
135
- def fake_artist_with_details
136
- artist = Sevendigital::Artist.new(@client)
137
- artist.sort_name = "The, The"
138
- artist.image = "image"
139
- artist.url = "url"
140
- artist
141
- end
1
+ require "date"
2
+ require File.expand_path('../../spec_helper', __FILE__)
3
+
4
+ describe "Artist" do
5
+
6
+ before do
7
+ @client = stub(Sevendigital::Client)
8
+ @artist_manager = mock(Sevendigital::ArtistManager)
9
+ @client.stub!(:artist).and_return @artist_manager
10
+
11
+ @artist = Sevendigital::Artist.new(@client)
12
+ @artist.id = 1234
13
+ end
14
+
15
+ it "get_details should get artist's basic details from manager" do
16
+ expected_options = {:page => 2}
17
+ fresh_artist = fake_artist_with_details
18
+
19
+ @artist_manager.should_receive(:get_details) { |artist_id, options|
20
+ artist_id.should == @artist.id
21
+ (options.keys & expected_options.keys).should == expected_options.keys
22
+ fresh_artist
23
+ }
24
+ @artist.get_details(expected_options)
25
+
26
+ @artist.sort_name.should == fresh_artist.sort_name
27
+ @artist.image.should == fresh_artist.image
28
+ @artist.url.should == fresh_artist.url
29
+
30
+ end
31
+
32
+ it "get_releases should get releases from manager" do
33
+ expected_options = {:page => 2}
34
+
35
+ @artist_manager.should_receive(:get_releases) { |artist_id, options|
36
+ artist_id.should == @artist.id
37
+ (options.keys & expected_options.keys).should == expected_options.keys
38
+ fake_release_list
39
+ }
40
+ @artist.get_releases(expected_options)
41
+
42
+ end
43
+
44
+ it "get_top_tracks should get tracks from manager" do
45
+ expected_options = {:page => 2}
46
+
47
+ @artist_manager.should_receive(:get_top_tracks) { |artist_id, options|
48
+ artist_id.should == @artist.id
49
+ (options.keys & expected_options.keys).should == expected_options.keys
50
+ fake_track_list
51
+ }
52
+ @artist.get_top_tracks(expected_options)
53
+
54
+ end
55
+
56
+ it "get_similar should get similar artists from manager" do
57
+ expected_options = {:page => 2}
58
+
59
+ @artist_manager.should_receive(:get_similar) { |artist_id, options|
60
+ artist_id.should == @artist.id
61
+ (options.keys & expected_options.keys).should == expected_options.keys
62
+ fake_artist_list
63
+ }
64
+ @artist.get_similar(expected_options)
65
+
66
+ end
67
+
68
+ it "get_tags should get tags from manager" do
69
+ expected_options = {:page => 2}
70
+
71
+ @artist_manager.should_receive(:get_tags) { |artist_id, options|
72
+ artist_id.should == @artist.id
73
+ (options.keys & expected_options.keys).should == expected_options.keys
74
+ []
75
+ }
76
+ @artist.get_tags(expected_options)
77
+
78
+ end
79
+
80
+
81
+ it "should be a various artist if name contains various" do
82
+
83
+ @artist.name = "various"
84
+ @artist.various?.should == true
85
+
86
+ end
87
+
88
+ it "should be a various artist if appears as contains various" do
89
+
90
+ @artist.name = "mr"
91
+ @artist.appears_as = "mr various"
92
+ @artist.various?.should == true
93
+
94
+ end
95
+
96
+ it "should be a various artist if resembles various artist" do
97
+
98
+ @artist.name = "v.a."
99
+ @artist.various?.should == true
100
+ @artist.name = "vario"
101
+ @artist.various?.should == true
102
+ @artist.name = "vaious"
103
+ @artist.various?.should == true
104
+ @artist.name = "varios"
105
+ @artist.various?.should == true
106
+ @artist.name = "aaaa"
107
+ @artist.various?.should == false
108
+ @artist.name = "vaious"
109
+ @artist.various?.should == true
110
+ @artist.name = "varoius"
111
+ @artist.various?.should == true
112
+ @artist.name = "variuos"
113
+ @artist.various?.should == true
114
+
115
+ end
116
+
117
+ it "should not be a various artist if it doesn't resemble various artist" do
118
+
119
+ @artist.name = "mr small"
120
+ @artist.appears_as = "mr big"
121
+ @artist.various?.should == false
122
+
123
+ end
124
+
125
+
126
+
127
+ def fake_track_list
128
+ tracks = Array.new
129
+ tracks << Sevendigital::Track.new(@client)
130
+ tracks << Sevendigital::Track.new(@client)
131
+ tracks
132
+ end
133
+
134
+ def fake_release_list
135
+ releases = Array.new
136
+ releases << Sevendigital::Release.new(@client)
137
+ releases << Sevendigital::Release.new(@client)
138
+ releases
139
+ end
140
+
141
+ def fake_artist_list
142
+ artists = Array.new
143
+ artists << Sevendigital::Artist.new(@client)
144
+ artists << Sevendigital::Artist.new(@client)
145
+ artists
146
+ end
147
+
148
+ def fake_artist_with_details
149
+ artist = Sevendigital::Artist.new(@client)
150
+ artist.sort_name = "The, The"
151
+ artist.image = "image"
152
+ artist.url = "url"
153
+ artist
154
+ end
142
155
  end