7digital 0.0.2 → 0.0.5

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 (220) hide show
  1. data/README.rdoc +132 -5
  2. data/lib/sevendigital.rb +1 -2
  3. data/lib/sevendigital/api_operator.rb +103 -12
  4. data/lib/sevendigital/api_operator_cached.rb +14 -8
  5. data/lib/sevendigital/api_request.rb +50 -9
  6. data/lib/sevendigital/client.rb +51 -89
  7. data/lib/sevendigital/client_configuration.rb +86 -0
  8. data/lib/sevendigital/client_digestors.rb +79 -0
  9. data/lib/sevendigital/client_managers.rb +34 -0
  10. data/lib/sevendigital/digestion_tract/api_response_digestor.rb +8 -3
  11. data/lib/sevendigital/digestion_tract/artist_digestor.rb +1 -1
  12. data/lib/sevendigital/digestion_tract/basket_digestor.rb +18 -0
  13. data/lib/sevendigital/digestion_tract/basket_item_digestor.rb +25 -0
  14. data/lib/sevendigital/digestion_tract/chart_item_digestor.rb +1 -1
  15. data/lib/sevendigital/digestion_tract/digestor.rb +7 -3
  16. data/lib/sevendigital/digestion_tract/download_url_digestor.rb +19 -0
  17. data/lib/sevendigital/digestion_tract/format_digestor.rb +1 -1
  18. data/lib/sevendigital/digestion_tract/label_digestor.rb +1 -1
  19. data/lib/sevendigital/digestion_tract/locker_digestor.rb +17 -0
  20. data/lib/sevendigital/digestion_tract/locker_release_digestor.rb +19 -0
  21. data/lib/sevendigital/digestion_tract/locker_track_digestor.rb +21 -0
  22. data/lib/sevendigital/digestion_tract/oauth_access_token_digestor.rb +14 -0
  23. data/lib/sevendigital/digestion_tract/oauth_request_token_digestor.rb +14 -0
  24. data/lib/sevendigital/digestion_tract/pager_digestor.rb +1 -1
  25. data/lib/sevendigital/digestion_tract/price_digestor.rb +3 -3
  26. data/lib/sevendigital/digestion_tract/release_digestor.rb +1 -1
  27. data/lib/sevendigital/digestion_tract/tag_digestor.rb +22 -0
  28. data/lib/sevendigital/digestion_tract/track_digestor.rb +1 -1
  29. data/lib/sevendigital/management/artist_manager.rb +71 -34
  30. data/lib/sevendigital/management/basket_manager.rb +29 -0
  31. data/lib/sevendigital/management/manager.rb +1 -1
  32. data/lib/sevendigital/management/oauth_manager.rb +23 -0
  33. data/lib/sevendigital/management/release_manager.rb +7 -14
  34. data/lib/sevendigital/management/tag_manager.rb +11 -0
  35. data/lib/sevendigital/management/track_manager.rb +9 -9
  36. data/lib/sevendigital/management/user_manager.rb +51 -0
  37. data/lib/sevendigital/model/api_response.rb +19 -3
  38. data/lib/sevendigital/model/artist.rb +27 -9
  39. data/lib/sevendigital/model/basket.rb +16 -0
  40. data/lib/sevendigital/model/basket_item.rb +15 -0
  41. data/lib/sevendigital/model/download_url.rb +7 -0
  42. data/lib/sevendigital/model/format.rb +0 -2
  43. data/lib/sevendigital/model/label.rb +1 -3
  44. data/lib/sevendigital/model/locker.rb +5 -0
  45. data/lib/sevendigital/model/locker_release.rb +9 -0
  46. data/lib/sevendigital/model/locker_track.rb +9 -0
  47. data/lib/sevendigital/model/price.rb +0 -2
  48. data/lib/sevendigital/model/release.rb +22 -8
  49. data/lib/sevendigital/model/sevendigital_error.rb +9 -1
  50. data/lib/sevendigital/model/sevendigital_object.rb +16 -11
  51. data/lib/sevendigital/model/tag.rb +7 -0
  52. data/lib/sevendigital/model/track.rb +4 -4
  53. data/lib/sevendigital/model/user.rb +34 -0
  54. data/lib/sevendigital/pager.rb +8 -2
  55. data/lib/sevendigital/proxy_police.rb +5 -1
  56. data/lib/sevendigital/version.rb +5 -0
  57. data/spec/api_operator_cached_spec.rb +62 -7
  58. data/spec/api_operator_spec.rb +245 -21
  59. data/spec/api_request_spec.rb +20 -15
  60. data/spec/client_configuration_spec.rb +75 -0
  61. data/spec/client_spec.rb +126 -48
  62. data/spec/coverage/assets/0.3.9/app.js +66 -0
  63. data/spec/coverage/assets/0.3.9/fancybox/blank.gif +0 -0
  64. data/spec/coverage/assets/0.3.9/fancybox/fancy_close.png +0 -0
  65. data/spec/coverage/assets/0.3.9/fancybox/fancy_loading.png +0 -0
  66. data/spec/coverage/assets/0.3.9/fancybox/fancy_nav_left.png +0 -0
  67. data/spec/coverage/assets/0.3.9/fancybox/fancy_nav_right.png +0 -0
  68. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_e.png +0 -0
  69. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_n.png +0 -0
  70. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_ne.png +0 -0
  71. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_nw.png +0 -0
  72. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_s.png +0 -0
  73. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_se.png +0 -0
  74. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_sw.png +0 -0
  75. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_w.png +0 -0
  76. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_left.png +0 -0
  77. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_main.png +0 -0
  78. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_over.png +0 -0
  79. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_right.png +0 -0
  80. data/spec/coverage/assets/0.3.9/fancybox/fancybox-x.png +0 -0
  81. data/spec/coverage/assets/0.3.9/fancybox/fancybox-y.png +0 -0
  82. data/spec/coverage/assets/0.3.9/fancybox/fancybox.png +0 -0
  83. data/spec/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.css +363 -0
  84. data/spec/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.pack.js +44 -0
  85. data/spec/coverage/assets/0.3.9/favicon.png +0 -0
  86. data/spec/coverage/assets/0.3.9/jquery-1.4.2.min.js +155 -0
  87. data/spec/coverage/assets/0.3.9/jquery.dataTables.min.js +152 -0
  88. data/spec/coverage/assets/0.3.9/jquery.timeago.js +141 -0
  89. data/spec/coverage/assets/0.3.9/jquery.url.js +174 -0
  90. data/spec/coverage/assets/0.3.9/loading.gif +0 -0
  91. data/spec/coverage/assets/0.3.9/magnify.png +0 -0
  92. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  93. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  94. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  95. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  96. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  97. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  98. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  99. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  100. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_222222_256x240.png +0 -0
  101. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  102. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_454545_256x240.png +0 -0
  103. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_888888_256x240.png +0 -0
  104. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  105. data/spec/coverage/assets/0.3.9/smoothness/jquery-ui-1.8.4.custom.css +295 -0
  106. data/spec/coverage/assets/0.3.9/stylesheet.css +341 -0
  107. data/spec/coverage/index.html +43412 -0
  108. data/spec/coverage/resultset.yml +3251 -0
  109. data/spec/data/configuration_override.yml +2 -1
  110. data/spec/digestion_tract/api_response_digestor_spec.rb +15 -1
  111. data/spec/digestion_tract/artist_digestor_spec.rb +3 -3
  112. data/spec/digestion_tract/basket_digestor_spec.rb +32 -0
  113. data/spec/digestion_tract/basket_item_digestor_spec.rb +58 -0
  114. data/spec/digestion_tract/chart_digestor_spec.rb +2 -2
  115. data/spec/digestion_tract/download_url_digestor_spec.rb +41 -0
  116. data/spec/digestion_tract/format_digestor_spec.rb +2 -2
  117. data/spec/digestion_tract/label_digestor_spec.rb +2 -2
  118. data/spec/digestion_tract/locker_digestor_spec.rb +31 -0
  119. data/spec/digestion_tract/locker_release_digestor_spec.rb +71 -0
  120. data/spec/digestion_tract/locker_track_digestor_spec.rb +56 -0
  121. data/spec/digestion_tract/oauth_access_token_digestor_spec.rb +35 -0
  122. data/spec/digestion_tract/oauth_request_token_digestor_spec.rb +35 -0
  123. data/spec/digestion_tract/pager_digestor_spec.rb +2 -2
  124. data/spec/digestion_tract/price_digestor_spec.rb +21 -5
  125. data/spec/digestion_tract/release_digestor_spec.rb +2 -2
  126. data/spec/digestion_tract/tag_digestor_spec.rb +46 -0
  127. data/spec/digestion_tract/track_digestor_spec.rb +1 -1
  128. data/spec/management/artist_manager_spec.rb +46 -41
  129. data/spec/management/basket_manager_spec.rb +78 -0
  130. data/spec/management/oauth_manager_spec.rb +73 -0
  131. data/spec/management/release_manager_spec.rb +33 -74
  132. data/spec/management/tag_manager_spec.rb +34 -0
  133. data/spec/management/track_manager_spec.rb +42 -25
  134. data/spec/management/user_manager_spec.rb +163 -0
  135. data/spec/model/api_response_spec.rb +69 -2
  136. data/spec/model/artist_spec.rb +1 -26
  137. data/spec/model/basket_spec.rb +63 -0
  138. data/spec/model/coverage/assets/0.3.9/app.js +66 -0
  139. data/spec/model/coverage/assets/0.3.9/fancybox/blank.gif +0 -0
  140. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_close.png +0 -0
  141. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_loading.png +0 -0
  142. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_nav_left.png +0 -0
  143. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_nav_right.png +0 -0
  144. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_e.png +0 -0
  145. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_n.png +0 -0
  146. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_ne.png +0 -0
  147. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_nw.png +0 -0
  148. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_s.png +0 -0
  149. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_se.png +0 -0
  150. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_sw.png +0 -0
  151. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_w.png +0 -0
  152. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_left.png +0 -0
  153. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_main.png +0 -0
  154. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_over.png +0 -0
  155. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_right.png +0 -0
  156. data/spec/model/coverage/assets/0.3.9/fancybox/fancybox-x.png +0 -0
  157. data/spec/model/coverage/assets/0.3.9/fancybox/fancybox-y.png +0 -0
  158. data/spec/model/coverage/assets/0.3.9/fancybox/fancybox.png +0 -0
  159. data/spec/model/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.css +363 -0
  160. data/spec/model/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.pack.js +44 -0
  161. data/spec/model/coverage/assets/0.3.9/favicon.png +0 -0
  162. data/spec/model/coverage/assets/0.3.9/jquery-1.4.2.min.js +155 -0
  163. data/spec/model/coverage/assets/0.3.9/jquery.dataTables.min.js +152 -0
  164. data/spec/model/coverage/assets/0.3.9/jquery.timeago.js +141 -0
  165. data/spec/model/coverage/assets/0.3.9/jquery.url.js +174 -0
  166. data/spec/model/coverage/assets/0.3.9/loading.gif +0 -0
  167. data/spec/model/coverage/assets/0.3.9/magnify.png +0 -0
  168. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  169. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  170. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  171. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  172. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  173. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  174. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  175. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  176. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_222222_256x240.png +0 -0
  177. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  178. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_454545_256x240.png +0 -0
  179. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_888888_256x240.png +0 -0
  180. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  181. data/spec/model/coverage/assets/0.3.9/smoothness/jquery-ui-1.8.4.custom.css +295 -0
  182. data/spec/model/coverage/assets/0.3.9/stylesheet.css +341 -0
  183. data/spec/model/coverage/index.html +8637 -0
  184. data/spec/model/coverage/resultset.yml +642 -0
  185. data/spec/model/release_spec.rb +15 -14
  186. data/spec/model/sevendigital_object_spec.rb +74 -0
  187. data/spec/model/track_spec.rb +8 -4
  188. data/spec/model/user_spec.rb +98 -0
  189. data/spec/pager_spec.rb +2 -2
  190. data/spec/proxy_police_spec.rb +1 -1
  191. data/spec/spec_helper.rb +11 -3
  192. data/spec/test-xml/methods/artist/browse.xml +22 -0
  193. data/spec/test-xml/methods/artist/chart.xml +31 -0
  194. data/spec/test-xml/methods/basket/additem.xml +24 -0
  195. data/spec/test-xml/methods/basket/create.xml +11 -0
  196. data/spec/test-xml/methods/basket/index.xml +24 -0
  197. data/spec/test-xml/methods/basket/removeitem.xml +11 -0
  198. data/spec/test-xml/methods/oauth/accesstoken.xml +6 -0
  199. data/spec/test-xml/methods/oauth/requesttoken.xml +6 -0
  200. data/spec/test-xml/methods/tag/index.xml +17 -0
  201. data/spec/test-xml/methods/user/locker.xml +50 -0
  202. data/spec/test-xml/methods/user/purchase/item.xml +49 -0
  203. data/spec/test-xml/objects/basket.xml +22 -0
  204. data/spec/test-xml/objects/basket_item.xml +12 -0
  205. data/spec/test-xml/objects/basket_item_list.xml +26 -0
  206. data/spec/test-xml/objects/basket_item_list_empty.xml +2 -0
  207. data/spec/test-xml/objects/download_url.xml +8 -0
  208. data/spec/test-xml/objects/locker.xml +48 -0
  209. data/spec/test-xml/objects/locker_release.xml +41 -0
  210. data/spec/test-xml/objects/locker_release_list.xml +87 -0
  211. data/spec/test-xml/objects/locker_release_list_empty.xml +5 -0
  212. data/spec/test-xml/objects/locker_release_one_item_list.xml +43 -0
  213. data/spec/test-xml/objects/locker_track.xml +25 -0
  214. data/spec/test-xml/objects/locker_track_list.xml +26 -0
  215. data/spec/test-xml/objects/locker_track_list_empty.xml +2 -0
  216. data/spec/test-xml/objects/oauth_access_token.xml +4 -0
  217. data/spec/test-xml/objects/oauth_request_token.xml +4 -0
  218. data/spec/test-xml/objects/tag.xml +5 -0
  219. metadata +395 -13
  220. data/lib/sevendigital/peachy_patch.rb +0 -19
@@ -1 +1,2 @@
1
- api_url: test-yml-simple.7digital.com
1
+ api_url: test-yml-simple.7digital.com
2
+ api_version: yml-simple
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), %w[../spec_helper])
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
2
 
3
3
  describe "ApiResponseDigestor" do
4
4
 
@@ -11,6 +11,7 @@ describe "ApiResponseDigestor" do
11
11
  stub_http_response = stub(Net::HTTPSuccess)
12
12
  stub_http_response.stub!(:is_a?).with(Net::HTTPSuccess).and_return(true)
13
13
  stub_http_response.stub!(:body).and_return('<response status="ok"></response>')
14
+ stub_http_response.stub!(:header).and_return(nil)
14
15
 
15
16
  response = @api_response_digestor.from_http_response(stub_http_response)
16
17
  response.error_code.should == 0
@@ -24,6 +25,7 @@ describe "ApiResponseDigestor" do
24
25
  stub_http_response.stub!(:is_a?).with(Net::HTTPSuccess).and_return(false)
25
26
  stub_http_response.stub!(:code).and_return(expected_error_code.to_s)
26
27
  stub_http_response.stub!(:body).and_return(expected_message)
28
+ stub_http_response.stub!(:header).and_return(nil)
27
29
 
28
30
  response = @api_response_digestor.from_http_response(stub_http_response)
29
31
  response.error_code.should == 401
@@ -32,6 +34,18 @@ describe "ApiResponseDigestor" do
32
34
  end
33
35
 
34
36
 
37
+ it "should store headers from http response" do
38
+
39
+ stub_http_response = stub(Net::HTTPSuccess)
40
+ stub_http_response.stub!(:is_a?).with(Net::HTTPSuccess).and_return(true)
41
+ stub_http_response.stub!(:body).and_return('<response status="ok"></response>')
42
+ stub_http_response.stub!(:header).and_return({"cache-control" => "test", "date" => "now"})
43
+
44
+ response = @api_response_digestor.from_http_response(stub_http_response)
45
+ response.headers["cache-control"].should == "test"
46
+ response.headers["date"].should == "now"
47
+ end
48
+
35
49
 
36
50
  it "should create a response with body from xml ok response" do
37
51
 
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), %w[../spec_helper])
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
2
 
3
3
  describe "ArtistDigestor" do
4
4
 
@@ -14,7 +14,7 @@ describe "ArtistDigestor" do
14
14
  </release>
15
15
  XML
16
16
 
17
- running {@artist_digestor.from_xml(xml_response)}.should raise_error Sevendigital::DigestiveProblem
17
+ running {@artist_digestor.from_xml(xml_response)}.should raise_error(Sevendigital::DigestiveProblem)
18
18
 
19
19
  end
20
20
 
@@ -75,7 +75,7 @@ XML
75
75
  </release>
76
76
  XML
77
77
 
78
- running {@artist_digestor.list_from_xml(xml_response)}.should raise_error Sevendigital::DigestiveProblem
78
+ running {@artist_digestor.list_from_xml(xml_response)}.should raise_error(Sevendigital::DigestiveProblem)
79
79
 
80
80
  end
81
81
 
@@ -0,0 +1,32 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "BasketDigestor" do
4
+
5
+ before do
6
+ @basket_digestor = Sevendigital::BasketDigestor.new(Sevendigital::Client.new(nil))
7
+ end
8
+
9
+ it "should not digest from invalid xml but throw up (exception)" do
10
+
11
+ xml_response = <<XML
12
+ <zzz id="17">
13
+ <fileFormat>MP3</fileFormat>
14
+ <bitRate>320</bitRate>
15
+ <drmFree>True</drmFree>
16
+ </zzz>
17
+ XML
18
+
19
+ running {@basket_digestor.from_xml(xml_response)}.should raise_error(Sevendigital::DigestiveProblem)
20
+ end
21
+
22
+ it "should parse from Basket xml and populate all properties" do
23
+
24
+ xml_response = load_sample_object_xml("basket")
25
+
26
+ basket = @basket_digestor.from_xml(xml_response)
27
+ basket.id.should == "00000000-0000-0000-0000-000000000000"
28
+ basket.basket_items.size == 1
29
+ basket.basket_items[0].id == 15284882
30
+ end
31
+
32
+ end
@@ -0,0 +1,58 @@
1
+ # coding: utf-8
2
+ require 'date'
3
+ require File.expand_path('../../spec_helper', __FILE__)
4
+
5
+ describe "BasketItemDigestor" do
6
+
7
+ before do
8
+ @basket_item_digestor = Sevendigital::BasketItemDigestor.new(Sevendigital::Client.new(nil))
9
+ end
10
+
11
+ it "should not digest from invalid xml but throw up (exception)" do
12
+
13
+ xml_response = <<XML
14
+ <artist id="123">
15
+ <name>expected artist name</name>
16
+ </artist>
17
+ XML
18
+
19
+ running {@basket_item_digestor.from_xml(xml_response)}.should raise_error(Sevendigital::DigestiveProblem)
20
+ end
21
+
22
+ it "should digest basket item xml and populate all properties" do
23
+
24
+ xml_response = load_sample_object_xml("basket_item")
25
+
26
+ basket_item = @basket_item_digestor.from_xml(xml_response)
27
+ basket_item.id.should == 15284882
28
+ basket_item.type.should == :track
29
+ basket_item.item_name.should == "Test"
30
+ basket_item.artist_name.should == "Ghetto"
31
+ basket_item.track_id.should == 2458384
32
+ basket_item.release_id.should == 224820
33
+ basket_item.price.value.should == 0.99
34
+ end
35
+
36
+ it "should digest xml containing list of basket items and return an array" do
37
+
38
+ xml_response = load_sample_object_xml("basket_item_list")
39
+
40
+ basket_items = @basket_item_digestor.list_from_xml(xml_response)
41
+ basket_items[0].id.should == 15284882
42
+ basket_items[0].type.should == :track
43
+ basket_items[1].id.should == 15284883
44
+ basket_items[1].type.should == :release
45
+ basket_items.size.should == 2
46
+
47
+ end
48
+
49
+ it "should digest xml containing empty list of releases and return an empty paginated array" do
50
+
51
+ xml_response = load_sample_object_xml("basket_item_list_empty")
52
+
53
+ basket_items = @basket_item_digestor.list_from_xml(xml_response)
54
+ basket_items.size.should == 0
55
+
56
+ end
57
+
58
+ end
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), %w[../spec_helper])
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
2
 
3
3
  describe "ChartItemDigestor" do
4
4
 
@@ -14,7 +14,7 @@ describe "ChartItemDigestor" do
14
14
  </release>
15
15
  XML
16
16
 
17
- running {@chart_item_digestor.from_xml(xml_response)}.should raise_error Sevendigital::DigestiveProblem
17
+ running {@chart_item_digestor.from_xml(xml_response)}.should raise_error(Sevendigital::DigestiveProblem)
18
18
  end
19
19
 
20
20
  it "should digest artist chart item" do
@@ -0,0 +1,41 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "DownloadUrlDigestor" do
4
+
5
+ before do
6
+ @download_url_digestor = Sevendigital::DownloadUrlDigestor.new(Sevendigital::Client.new(nil))
7
+ end
8
+
9
+ it "should not digest from invalid xml but throw up (exception)" do
10
+
11
+ xml_response = <<XML
12
+ <zzz id="17">
13
+ <fileFormat>MP3</fileFormat>
14
+ <bitRate>320</bitRate>
15
+ <drmFree>True</drmFree>
16
+ </zzz>
17
+ XML
18
+
19
+ running {@download_url_digestor.from_xml(xml_response)}.should raise_error(Sevendigital::DigestiveProblem)
20
+ end
21
+
22
+ it "should parse from xml and populate all properties" do
23
+
24
+ xml_response = <<XML
25
+ <downloadUrl>
26
+ <url>http://media3.7digital.com/media/user/downloadtrack?</url>
27
+ <format id="17">
28
+ <fileFormat>MP3</fileFormat>
29
+ <bitRate>320</bitRate>
30
+ <drmFree>true</drmFree>
31
+ </format>
32
+ </downloadUrl>
33
+ XML
34
+
35
+ download_url = @download_url_digestor.from_xml(xml_response)
36
+ download_url.url.should == "http://media3.7digital.com/media/user/downloadtrack?"
37
+ download_url.format.id.should == 17
38
+ download_url.format.file_format.should == :MP3
39
+ end
40
+
41
+ end
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), %w[../spec_helper])
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
2
 
3
3
  describe "FormatDigestor" do
4
4
 
@@ -16,7 +16,7 @@ describe "FormatDigestor" do
16
16
  </zzz>
17
17
  XML
18
18
 
19
- running {@format_digestor.from_xml(xml_response)}.should raise_error Sevendigital::DigestiveProblem
19
+ running {@format_digestor.from_xml(xml_response)}.should raise_error(Sevendigital::DigestiveProblem)
20
20
  end
21
21
 
22
22
  it "should parse from xml and populate all properties" do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), %w[../spec_helper])
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
2
 
3
3
  describe "LabelDigestor" do
4
4
 
@@ -15,7 +15,7 @@ describe "LabelDigestor" do
15
15
  </release>
16
16
  XML
17
17
 
18
- running {@label_digestor.from_xml(xml_response)}.should raise_error Sevendigital::DigestiveProblem
18
+ running {@label_digestor.from_xml(xml_response)}.should raise_error(Sevendigital::DigestiveProblem)
19
19
  end
20
20
 
21
21
  it "should digest label xml and populate all properties" do
@@ -0,0 +1,31 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "LockerDigestor" do
4
+
5
+ before do
6
+ @locker_digestor = Sevendigital::LockerDigestor.new(Sevendigital::Client.new(nil))
7
+ end
8
+
9
+ it "should not digest from invalid xml but throw up (exception)" do
10
+
11
+ xml_response = <<XML
12
+ <zzz id="17">
13
+ <fileFormat>MP3</fileFormat>
14
+ <bitRate>320</bitRate>
15
+ <drmFree>True</drmFree>
16
+ </zzz>
17
+ XML
18
+
19
+ running {@locker_digestor.from_xml(xml_response)}.should raise_error(Sevendigital::DigestiveProblem)
20
+ end
21
+
22
+ it "should parse from xml and populate all properties" do
23
+
24
+ xml_response = load_sample_object_xml("locker")
25
+
26
+ locker = @locker_digestor.from_xml(xml_response)
27
+ locker.locker_releases.size.should == 1
28
+ locker.locker_releases[0].release.id.should == 302123
29
+ end
30
+
31
+ end
@@ -0,0 +1,71 @@
1
+ # coding: utf-8
2
+ require 'date'
3
+ require File.expand_path('../../spec_helper', __FILE__)
4
+
5
+ describe "LockerReleaseDigestor" do
6
+
7
+ before do
8
+ @locker_release_digestor = Sevendigital::LockerReleaseDigestor.new(Sevendigital::Client.new(nil))
9
+ end
10
+
11
+ it "should not digest from invalid xml but throw up (exception)" do
12
+
13
+ xml_response = <<XML
14
+ <artist id="123">
15
+ <name>expected artist name</name>
16
+ </artist>
17
+ XML
18
+
19
+ running {@locker_release_digestor.from_xml(xml_response)}.should raise_error(Sevendigital::DigestiveProblem)
20
+ end
21
+
22
+ it "should digest locker release xml and populate all available properties" do
23
+
24
+ xml_response = load_sample_object_xml("locker_release")
25
+ puts @locker_release_digestor
26
+
27
+ locker_release = @locker_release_digestor.from_xml(xml_response)
28
+
29
+ locker_release.release.id.should == 302123
30
+ locker_release.release.title.should == "Original Album Classics"
31
+ locker_release.locker_tracks.size.should == 1
32
+ locker_release.locker_tracks[0].track.id.should == 3544116
33
+ locker_release.locker_tracks[0].track.title.should == "Gloria"
34
+ locker_release.locker_tracks[0].remaining_downloads.should == 355
35
+ locker_release.locker_tracks[0].download_urls[0].url.should == "http://media3.7digital.com/media/user/downloadtrack?"
36
+
37
+ end
38
+
39
+ it "should digest xml containing list of locker releases and return a paginated array" do
40
+
41
+ xml_response = load_sample_object_xml("locker_release_list")
42
+
43
+ locker_releases = @locker_release_digestor.list_from_xml(xml_response, :locker_releases)
44
+ locker_releases[0].release.id.should == 302123
45
+ locker_releases[0].locker_tracks[0].track.id.should == 3544116
46
+ locker_releases.size.should == 2
47
+ locker_releases.total_entries.should == 50
48
+
49
+ end
50
+
51
+ it "should digest xml containing single item list of locker releases and return a paginated array" do
52
+
53
+ xml_response = load_sample_object_xml("locker_release_one_item_list")
54
+
55
+ locker_releases = @locker_release_digestor.list_from_xml(xml_response, :locker_releases)
56
+ locker_releases[0].release.id.should == 302123
57
+ locker_releases[0].locker_tracks[0].track.id.should == 3544116
58
+ locker_releases.size.should == 1
59
+ end
60
+
61
+ it "should digest xml containing empty list of locker releases and return an empty paginated array" do
62
+
63
+ xml_response = load_sample_object_xml("locker_release_list_empty")
64
+
65
+ locker_releases = @locker_release_digestor.list_from_xml(xml_response, :locker_releases)
66
+ locker_releases.size.should == 0
67
+ locker_releases.total_entries.should == 0
68
+
69
+ end
70
+
71
+ end
@@ -0,0 +1,56 @@
1
+ # coding: utf-8
2
+ require 'date'
3
+ require File.expand_path('../../spec_helper', __FILE__)
4
+
5
+ describe "LockerTrackDigestor" do
6
+
7
+ before do
8
+ @locker_track_digestor = Sevendigital::LockerTrackDigestor.new(Sevendigital::Client.new(nil))
9
+ end
10
+
11
+ it "should not digest from invalid xml but throw up (exception)" do
12
+
13
+ xml_response = <<XML
14
+ <artist id="123">
15
+ <name>expected artist name</name>
16
+ </artist>
17
+ XML
18
+
19
+ running {@locker_track_digestor.from_xml(xml_response)}.should raise_error(Sevendigital::DigestiveProblem)
20
+ end
21
+
22
+ it "should digest locker track xml and populate all available properties" do
23
+
24
+ xml_response = load_sample_object_xml("locker_track")
25
+
26
+ locker_track = @locker_track_digestor.from_xml(xml_response)
27
+
28
+ locker_track.track.id.should == 3544116
29
+ locker_track.track.title.should == "Gloria"
30
+ locker_track.remaining_downloads.should == 355
31
+ locker_track.purchase_date.should == DateTime.new(2009,7,22,11,41,41, 1.quo(24))
32
+ locker_track.download_urls.size.should == 1
33
+ locker_track.download_urls[0].url.should == "http://media3.7digital.com/media/user/downloadtrack?"
34
+
35
+ end
36
+
37
+ it "should digest xml containing single item list of locker tracks and return an array" do
38
+
39
+ xml_response = load_sample_object_xml("locker_track_list")
40
+
41
+ locker_tracks = @locker_track_digestor.list_from_xml(xml_response, :locker_tracks)
42
+ locker_tracks[0].track.id.should == 3544116
43
+ locker_tracks[0].download_urls[0].url.should == "http://media3.7digital.com/media/user/downloadtrack?"
44
+ locker_tracks.size.should == 1
45
+ end
46
+
47
+ it "should digest xml containing empty list of locker tracks and return an empty array" do
48
+
49
+ xml_response = load_sample_object_xml("locker_track_list_empty")
50
+
51
+ locker_tracks = @locker_track_digestor.list_from_xml(xml_response, :locker_tracks)
52
+ locker_tracks.size.should == 0
53
+
54
+ end
55
+
56
+ end
@@ -0,0 +1,35 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "OAuthAccessTokenDigestor" do
4
+
5
+ before do
6
+ @stub_oauth_consumer = stub(OAuth::Consumer)
7
+ api_client = stub(Sevendigital::Client)
8
+ api_client.stub!(:oauth_consumer).and_return(@stub_oauth_consumer)
9
+ @token_digestor = Sevendigital::OAuthAccessTokenDigestor.new(api_client)
10
+ end
11
+
12
+
13
+ it "should not digest from invalid xml but throw up (exception)" do
14
+
15
+ xml_response = <<XML
16
+ <release id="123">
17
+ <name>expected artist name</name>
18
+ </release>
19
+ XML
20
+
21
+ running {@token_digestor.from_xml(xml_response)}.should raise_error(Sevendigital::DigestiveProblem)
22
+ end
23
+
24
+ it "should digest access token xml and populate all properties" do
25
+
26
+ xml_response = load_sample_object_xml("oauth_access_token")
27
+
28
+ token = @token_digestor.from_xml(xml_response, :oauth_access_token)
29
+ token.kind_of?(OAuth::AccessToken).should == true
30
+ token.token.should == "E3w4FV3oirRfj4KfT7alOpa893mmn4HJ"
31
+ token.secret.should == "923kj3Kspa304n4Oamd3201pLkgjeM32"
32
+ token.consumer.should == @stub_oauth_consumer
33
+ end
34
+
35
+ end