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,10 +1,14 @@
1
1
  require "date"
2
- require File.join(File.dirname(__FILE__), %w[../spec_helper])
2
+ require File.expand_path('../../spec_helper', __FILE__)
3
3
 
4
4
  describe "Release" do
5
5
 
6
6
  before do
7
+ @configuration = stub(OpenStruct)
8
+ @configuration.stub!(:lazy_load?).and_return(true)
9
+
7
10
  @client = stub(Sevendigital::Client)
11
+ @client.stub!(:configuration).and_return(@configuration)
8
12
  @release_manager = mock(Sevendigital::ReleaseManager)
9
13
  @client.stub!(:release).and_return @release_manager
10
14
 
@@ -39,6 +43,13 @@ describe "Release" do
39
43
 
40
44
  end
41
45
 
46
+ it "should lazy load price even if already populated but price value is not available" do
47
+ @release.price = Sevendigital::Price.new
48
+ @release.should_receive(:demand_price)
49
+ @release.price
50
+
51
+ end
52
+
42
53
  it "get_tracks should get tracks from manager" do
43
54
  expected_options = {:page => 2}
44
55
 
@@ -51,18 +62,6 @@ describe "Release" do
51
62
 
52
63
  end
53
64
 
54
- it "get_tracks should link all tracks back to release itself" do
55
-
56
- @release_manager.should_receive(:get_tracks) { |release_id, options|
57
- release_id.should == @release.id
58
- fake_track_list
59
- }
60
-
61
- tracks = @release.get_tracks()
62
-
63
- tracks.all?{|track| track.release == @release}.should == true
64
-
65
- end
66
65
 
67
66
  it "get_recommendations should get recommendations from manager" do
68
67
  expected_options = {:page => 2}
@@ -104,7 +103,9 @@ describe "Release" do
104
103
  release.explicit_content = true
105
104
  release.formats = []
106
105
  release.label = Sevendigital::Label.new
107
- release.price = Sevendigital::Price.new
106
+ price = Sevendigital::Price.new
107
+ price.value = 5
108
+ release.price = price
108
109
  release
109
110
  end
110
111
  end
@@ -0,0 +1,74 @@
1
+ require "date"
2
+ require File.expand_path('../../spec_helper', __FILE__)
3
+
4
+ describe "SevendigitalObject" do
5
+
6
+ before do
7
+
8
+ @configuration = stub(Sevendigital::ClientConfiguration)
9
+ @configuration.stub!(:lazy_load).and_return(true)
10
+
11
+ @client = stub(Sevendigital::Client)
12
+ @client.stub!(:configuration).and_return(@configuration)
13
+ @client.stub!(:verbose?).and_return(true)
14
+ @test_object = Sevendigital::SevendigitalObject.new(@client)
15
+ end
16
+
17
+ it "sevendigital extended property should define accessor that calls demand method" do
18
+ class TestClass < Sevendigital::SevendigitalObject
19
+ sevendigital_extended_property :test_property
20
+ end
21
+
22
+ test_object = TestClass.new(@client)
23
+ test_object.should_receive(:demand_test_property)
24
+ test_object.test_property
25
+
26
+ end
27
+
28
+ it "sevendigital extended property should define accessor that doesn't swallow SevenDigital errors" do
29
+ class TestClass < Sevendigital::SevendigitalObject
30
+ sevendigital_extended_property :test_property
31
+ end
32
+ @configuration.stub!(:ignorant_lazy_load).and_return(false)
33
+ test_object = TestClass.new(@client)
34
+ test_object.should_receive(:demand_test_property).and_raise(Sevendigital::SevendigitalError)
35
+ running {test_object.test_property}.should raise_error(Sevendigital::SevendigitalError)
36
+ end
37
+
38
+ it "sevendigital extended property should define accessor that swallows SevenDigital errors if client is ignorant" do
39
+ class TestClass < Sevendigital::SevendigitalObject
40
+ sevendigital_extended_property :test_property
41
+ end
42
+ @configuration.stub!(:ignorant_lazy_load).and_return(true)
43
+ test_object = TestClass.new(@client)
44
+ test_object.should_receive(:demand_test_property).and_raise(Sevendigital::SevendigitalError)
45
+ test_object.test_property
46
+ end
47
+
48
+ it "sevendigital extended property should define demand method that calls get method if property not set" do
49
+ class TestClass < Sevendigital::SevendigitalObject
50
+ sevendigital_extended_property :test_property
51
+ end
52
+
53
+ test_object = TestClass.new(@client)
54
+ test_object.should_receive(:get_test_property).and_return("a value")
55
+ test_object.instance_variable_get("@test_property").should == nil
56
+ test_object.demand_test_property
57
+ test_object.instance_variable_get("@test_property").should == "a value"
58
+
59
+ end
60
+
61
+ it "sevendigital extended property should define demand method that does nothing if property is set" do
62
+ class TestClass < Sevendigital::SevendigitalObject
63
+ sevendigital_extended_property :test_property
64
+ end
65
+
66
+ test_object = TestClass.new(@client)
67
+ test_object.instance_variable_set("@test_property", "a value")
68
+ test_object.should_not_receive(:get_test_property)
69
+ test_object.demand_test_property
70
+
71
+ end
72
+
73
+
74
+ end
@@ -1,5 +1,5 @@
1
1
  require "date"
2
- require File.join(File.dirname(__FILE__), %w[../spec_helper])
2
+ require File.expand_path('../../spec_helper', __FILE__)
3
3
 
4
4
  describe "Track" do
5
5
 
@@ -10,14 +10,17 @@ describe "Track" do
10
10
 
11
11
  @track = Sevendigital::Track.new(@client)
12
12
  @track.id = 1234
13
+ @track.release = Sevendigital::Release.new(@client)
14
+ @track.release.id = 5678
13
15
  end
14
16
 
15
- it "get_details should get track's basic details from manager" do
17
+ it "get_details should get track's basic details from track manager " do
16
18
  expected_options = {:page => 2}
17
19
  fresh_track = fake_track_with_details
18
20
 
19
- @track_manager.should_receive(:get_details) { |track_id, options|
21
+ @track_manager.should_receive(:get_details_from_release) { |track_id, release_id, options|
20
22
  track_id.should == @track.id
23
+ release_id.should == @track.release.id
21
24
  (options.keys & expected_options.keys).should == expected_options.keys
22
25
  fresh_track
23
26
  }
@@ -27,7 +30,7 @@ describe "Track" do
27
30
  @track.duration.should == fresh_track.duration
28
31
  @track.explicit_content.should == fresh_track.explicit_content
29
32
  @track.isrc.should == fresh_track.isrc
30
- @track.release.should == fresh_track.release
33
+ @track.release.id.should == fresh_track.release.id
31
34
  @track.url.should == fresh_track.url
32
35
 
33
36
  end
@@ -134,6 +137,7 @@ describe "Track" do
134
137
  track.explicit_content = true
135
138
  track.isrc = "7D"
136
139
  track.release = Sevendigital::Release.new(@client)
140
+ track.release.id = 5678
137
141
  track.url = "http://aaa.bbb.ccc/"
138
142
  track
139
143
  end
@@ -0,0 +1,98 @@
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
+
98
+ end
data/spec/pager_spec.rb CHANGED
@@ -1,7 +1,7 @@
1
- require File.join(File.dirname(__FILE__), %w[spec_helper])
1
+ require "spec_helper"
2
2
 
3
3
  describe "Pager" do
4
4
 
5
- it "should paginate list"
5
+ #it "should paginate list"
6
6
 
7
7
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
  require 'date'
3
- require File.join(File.dirname(__FILE__), %w[spec_helper])
3
+ require "spec_helper"
4
4
 
5
5
  describe "Proxy Police" do
6
6
 
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,13 @@
1
- $: << 'sevendigital'
2
- $: << 'spec'
1
+ #$: << 'sevendigital'
2
+ #$: << 'spec'
3
+
4
+ require 'simplecov'
5
+
6
+ SimpleCov.start do
7
+ add_group 'Management', 'lib/sevendigital/management'
8
+ add_group 'Digestion', 'lib/sevendigital/digestion_tract'
9
+ add_group 'Model', 'lib/sevendigital/model'
10
+ end
3
11
 
4
12
  require 'spec'
5
13
  require File.expand_path(
@@ -10,7 +18,7 @@ require "peachy_spec_helper_patch"
10
18
  Peachy.whine
11
19
 
12
20
  Spec::Runner.configure do |config|
13
- # == Mock Framework
21
+ # == Mock Framework
14
22
  #
15
23
  # RSpec uses it's own mocking framework by default. If you prefer to
16
24
  # use mocha, flexmock or RR, uncomment the appropriate line:
@@ -0,0 +1,22 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <response status="ok" version="1.2"
3
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+ xsi:noNamespaceSchemaLocation="http://api.7digital.com/1.2/static/7digitalAPI.xsd">
5
+ <artists>
6
+ <page>1</page>
7
+ <pageSize>10</pageSize>
8
+ <totalItems>3256</totalItems>
9
+ <artist id="144641">
10
+ <name>P J Harvey</name>
11
+ <url>http://www.7digital.com/artists/p-j-harvey/?partner=123</url>
12
+ <sortName>P J Harvey</sortName>
13
+ <image>http://cdn.7static.com/static/img/artistimages/00/001/446/0000144641_50.jpg</image>
14
+ </artist>
15
+ <artist id="17168">
16
+ <name>P J Proby</name>
17
+ <url>http://www.7digital.com/artists/p-j-proby/?partner=123</url>
18
+ <sortName>P J Proby</sortName>
19
+ <image>http://cdn.7static.com/static/img/artistimages/00/001/716/000017168_50.jpg</image>
20
+ </artist>
21
+ </artists>
22
+ </response>
@@ -0,0 +1,31 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <response status="ok" version="1.2"
3
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+ xsi:noNamespaceSchemaLocation="http://api.7digital.com/1.2/static/7digitalAPI.xsd">
5
+ <chart>
6
+ <type>artist</type>
7
+ <fromDate>2009-03-24T00:00:00Z</fromDate>
8
+ <toDate>2009-03-30T00:00:00+01:00</toDate>
9
+ <page>1</page>
10
+ <pageSize>10</pageSize>
11
+ <totalItems>20</totalItems>
12
+ <chartItem>
13
+ <position>1</position>
14
+ <change>Up</change>
15
+ <artist id="162872">
16
+ <name>The Last Shadow Puppets</name>
17
+ <url>http://www.7digital.com/artists/the-last-shadow-puppets/?partner=123</url>
18
+ </artist>
19
+ </chartItem>
20
+ <chartItem>
21
+ <position>2</position>
22
+ <change>Down</change>
23
+ <artist id="304">
24
+ <name>Radiohead</name>
25
+ <sortName>Radiohead</sortName>
26
+ <url>http://eu.7digital.com/artists/radiohead/?partner=827</url>
27
+ <image>http://cdn.7static.com/static/img/artistimages/00/000/003/0000000304_150.jpg</image>
28
+ </artist>
29
+ </chartItem>
30
+ </chart>
31
+ </response>
@@ -0,0 +1,24 @@
1
+ <response status="ok" version="1.2">
2
+ <basket id="00000000-0000-0000-0000-000000000001">
3
+ <itemCount>1</itemCount>
4
+ <price>
5
+ <currency code="EUR">€</currency>
6
+ <value>0.99</value>
7
+ <formattedPrice>0,99€</formattedPrice>
8
+ </price>
9
+ <basketItems>
10
+ <basketItem id="15284882">
11
+ <type>track</type>
12
+ <itemName>Test</itemName>
13
+ <artistName>Ghetto</artistName>
14
+ <trackId>2458384</trackId>
15
+ <releaseId>224820</releaseId>
16
+ <price>
17
+ <currency code="EUR">€</currency>
18
+ <value>0.99</value>
19
+ <formattedPrice>0,99€</formattedPrice>
20
+ </price>
21
+ </basketItem>
22
+ </basketItems>
23
+ </basket>
24
+ </response>
@@ -0,0 +1,11 @@
1
+ <response status="ok" version="1.2">
2
+ <basket id="00000000-0000-0000-0000-000000000000">
3
+ <itemCount>0</itemCount>
4
+ <price>
5
+ <currency code="GBP">&#163;</currency>
6
+ <value>0</value>
7
+ <formattedPrice>&#163;0.00</formattedPrice>
8
+ </price>
9
+ <basketItems/>
10
+ </basket>
11
+ </response>
@@ -0,0 +1,24 @@
1
+ <response status="ok" version="1.2">
2
+ <basket id="00000000-0000-0000-0000-000000000001">
3
+ <itemCount>1</itemCount>
4
+ <price>
5
+ <currency code="EUR">€</currency>
6
+ <value>0.99</value>
7
+ <formattedPrice>0,99€</formattedPrice>
8
+ </price>
9
+ <basketItems>
10
+ <basketItem id="15284882">
11
+ <type>track</type>
12
+ <itemName>Test</itemName>
13
+ <artistName>Ghetto</artistName>
14
+ <trackId>2458384</trackId>
15
+ <releaseId>224820</releaseId>
16
+ <price>
17
+ <currency code="EUR">€</currency>
18
+ <value>0.99</value>
19
+ <formattedPrice>0,99€</formattedPrice>
20
+ </price>
21
+ </basketItem>
22
+ </basketItems>
23
+ </basket>
24
+ </response>
@@ -0,0 +1,11 @@
1
+ <response status="ok" version="1.2">
2
+ <basket id="00000000-0000-0000-0000-000000000000">
3
+ <itemCount>1</itemCount>
4
+ <price>
5
+ <currency code="EUR">€</currency>
6
+ <value>0.00</value>
7
+ <formattedPrice>0,00€</formattedPrice>
8
+ </price>
9
+ <basketItems/>
10
+ </basket>
11
+ </response>