7digital 0.1.2 → 0.1.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 (197) hide show
  1. checksums.yaml +7 -0
  2. data/README.rdoc +143 -143
  3. data/lib/sevendigital.rb +55 -55
  4. data/lib/sevendigital/api_operator.rb +127 -127
  5. data/lib/sevendigital/api_operator_cached.rb +91 -62
  6. data/lib/sevendigital/api_request.rb +72 -62
  7. data/lib/sevendigital/client.rb +122 -122
  8. data/lib/sevendigital/client_configuration.rb +85 -83
  9. data/lib/sevendigital/client_digestors.rb +122 -122
  10. data/lib/sevendigital/client_managers.rb +57 -57
  11. data/lib/sevendigital/digestion_tract/api_response_digestor.rb +48 -48
  12. data/lib/sevendigital/digestion_tract/artist_digestor.rb +35 -35
  13. data/lib/sevendigital/digestion_tract/basket_digestor.rb +19 -19
  14. data/lib/sevendigital/digestion_tract/basket_item_digestor.rb +26 -26
  15. data/lib/sevendigital/digestion_tract/chart_item_digestor.rb +34 -34
  16. data/lib/sevendigital/digestion_tract/country_digestor.rb +15 -15
  17. data/lib/sevendigital/digestion_tract/digestor.rb +122 -122
  18. data/lib/sevendigital/digestion_tract/download_url_digestor.rb +23 -23
  19. data/lib/sevendigital/digestion_tract/format_digestor.rb +24 -24
  20. data/lib/sevendigital/digestion_tract/label_digestor.rb +21 -21
  21. data/lib/sevendigital/digestion_tract/list_digestor.rb +24 -24
  22. data/lib/sevendigital/digestion_tract/list_item_digestor.rb +26 -26
  23. data/lib/sevendigital/digestion_tract/locker_digestor.rb +22 -22
  24. data/lib/sevendigital/digestion_tract/locker_release_digestor.rb +26 -26
  25. data/lib/sevendigital/digestion_tract/locker_track_digestor.rb +26 -26
  26. data/lib/sevendigital/digestion_tract/oauth_access_token_digestor.rb +18 -18
  27. data/lib/sevendigital/digestion_tract/oauth_request_token_digestor.rb +18 -18
  28. data/lib/sevendigital/digestion_tract/pager_digestor.rb +28 -28
  29. data/lib/sevendigital/digestion_tract/price_digestor.rb +28 -28
  30. data/lib/sevendigital/digestion_tract/release_digestor.rb +45 -45
  31. data/lib/sevendigital/digestion_tract/tag_digestor.rb +23 -23
  32. data/lib/sevendigital/digestion_tract/track_digestor.rb +38 -37
  33. data/lib/sevendigital/digestion_tract/user_card_digestor.rb +24 -24
  34. data/lib/sevendigital/digestion_tract/user_digestor.rb +21 -21
  35. data/lib/sevendigital/management/artist_manager.rb +97 -97
  36. data/lib/sevendigital/management/basket_manager.rb +29 -29
  37. data/lib/sevendigital/management/country_manager.rb +10 -10
  38. data/lib/sevendigital/management/list_manager.rb +18 -18
  39. data/lib/sevendigital/management/manager.rb +12 -12
  40. data/lib/sevendigital/management/oauth_manager.rb +23 -23
  41. data/lib/sevendigital/management/release_manager.rb +54 -54
  42. data/lib/sevendigital/management/tag_manager.rb +10 -10
  43. data/lib/sevendigital/management/track_manager.rb +29 -27
  44. data/lib/sevendigital/management/user_card_manager.rb +26 -26
  45. data/lib/sevendigital/management/user_manager.rb +76 -76
  46. data/lib/sevendigital/model/api_response.rb +32 -32
  47. data/lib/sevendigital/model/artist.rb +104 -104
  48. data/lib/sevendigital/model/basket.rb +15 -15
  49. data/lib/sevendigital/model/basket_item.rb +14 -14
  50. data/lib/sevendigital/model/card.rb +11 -11
  51. data/lib/sevendigital/model/chart_item.rb +9 -9
  52. data/lib/sevendigital/model/download_url.rb +7 -7
  53. data/lib/sevendigital/model/format.rb +7 -7
  54. data/lib/sevendigital/model/label.rb +7 -7
  55. data/lib/sevendigital/model/list.rb +4 -4
  56. data/lib/sevendigital/model/list_item.rb +8 -8
  57. data/lib/sevendigital/model/locker.rb +4 -4
  58. data/lib/sevendigital/model/locker_release.rb +9 -9
  59. data/lib/sevendigital/model/locker_track.rb +9 -9
  60. data/lib/sevendigital/model/price.rb +9 -9
  61. data/lib/sevendigital/model/release.rb +57 -57
  62. data/lib/sevendigital/model/sevendigital_error.rb +11 -11
  63. data/lib/sevendigital/model/sevendigital_object.rb +57 -57
  64. data/lib/sevendigital/model/tag.rb +7 -7
  65. data/lib/sevendigital/model/track.rb +87 -83
  66. data/lib/sevendigital/model/user.rb +74 -74
  67. data/lib/sevendigital/pager.rb +20 -20
  68. data/lib/sevendigital/version.rb +5 -5
  69. data/spec/api_operator_cached_spec.rb +233 -178
  70. data/spec/api_operator_spec.rb +320 -320
  71. data/spec/api_request_spec.rb +46 -31
  72. data/spec/client_configuration_spec.rb +78 -78
  73. data/spec/client_spec.rb +161 -161
  74. data/spec/data/config/sevendigital.yml +5 -5
  75. data/spec/data/configuration_env_override.yml +5 -5
  76. data/spec/data/configuration_override.yml +1 -1
  77. data/spec/digestion_tract/api_response_digestor_spec.rb +93 -93
  78. data/spec/digestion_tract/artist_digestor_spec.rb +81 -81
  79. data/spec/digestion_tract/basket_digestor_spec.rb +31 -31
  80. data/spec/digestion_tract/basket_item_digestor_spec.rb +58 -58
  81. data/spec/digestion_tract/chart_digestor_spec.rb +52 -52
  82. data/spec/digestion_tract/country_digestor_spec.rb +33 -33
  83. data/spec/digestion_tract/digestor_spec.rb +33 -33
  84. data/spec/digestion_tract/download_url_digestor_spec.rb +40 -40
  85. data/spec/digestion_tract/format_digestor_spec.rb +38 -38
  86. data/spec/digestion_tract/label_digestor_spec.rb +33 -33
  87. data/spec/digestion_tract/list_digestor_spec.rb +31 -31
  88. data/spec/digestion_tract/list_item_digestor_spec.rb +80 -80
  89. data/spec/digestion_tract/locker_digestor_spec.rb +30 -30
  90. data/spec/digestion_tract/locker_release_digestor_spec.rb +70 -70
  91. data/spec/digestion_tract/locker_track_digestor_spec.rb +56 -56
  92. data/spec/digestion_tract/oauth_access_token_digestor_spec.rb +34 -34
  93. data/spec/digestion_tract/oauth_request_token_digestor_spec.rb +34 -34
  94. data/spec/digestion_tract/pager_digestor_spec.rb +50 -50
  95. data/spec/digestion_tract/price_digestor_spec.rb +73 -73
  96. data/spec/digestion_tract/release_digestor_spec.rb +115 -115
  97. data/spec/digestion_tract/tag_digestor_spec.rb +46 -46
  98. data/spec/digestion_tract/track_digestor_spec.rb +105 -104
  99. data/spec/digestion_tract/user_card_digestor_spec.rb +58 -58
  100. data/spec/digestion_tract/user_digestor_spec.rb +42 -42
  101. data/spec/integration/artist_spec.rb +99 -86
  102. data/spec/integration/country_spec.rb +18 -18
  103. data/spec/integration/list_spec.rb +22 -22
  104. data/spec/integration/purchasing_spec.rb +24 -24
  105. data/spec/integration/release_spec.rb +34 -34
  106. data/spec/integration/sevendigital_spec.yml +4 -4
  107. data/spec/integration/track_spec.rb +38 -23
  108. data/spec/integration/user_spec.rb +22 -22
  109. data/spec/management/artist_manager_spec.rb +172 -172
  110. data/spec/management/basket_manager_spec.rb +77 -77
  111. data/spec/management/country_manager_spec.rb +34 -34
  112. data/spec/management/list_manager_spec.rb +26 -26
  113. data/spec/management/oauth_manager_spec.rb +72 -72
  114. data/spec/management/release_manager_spec.rb +200 -200
  115. data/spec/management/tag_manager_spec.rb +34 -34
  116. data/spec/management/track_manager_spec.rb +111 -107
  117. data/spec/management/user_card_manager_spec.rb +78 -78
  118. data/spec/management/user_manager_spec.rb +218 -218
  119. data/spec/model/api_response_spec.rb +48 -48
  120. data/spec/model/artist_spec.rb +162 -162
  121. data/spec/model/basket_spec.rb +62 -62
  122. data/spec/model/release_spec.rb +133 -133
  123. data/spec/model/sevendigital_object_spec.rb +73 -73
  124. data/spec/model/track_spec.rb +146 -144
  125. data/spec/model/user_spec.rb +181 -181
  126. data/spec/spec_helper.rb +86 -84
  127. data/spec/test-xml/methods/artist/browse.xml +21 -21
  128. data/spec/test-xml/methods/artist/byTag/top.xml +50 -50
  129. data/spec/test-xml/methods/artist/chart.xml +30 -30
  130. data/spec/test-xml/methods/artist/details.xml +9 -9
  131. data/spec/test-xml/methods/artist/releases.xml +544 -544
  132. data/spec/test-xml/methods/artist/search.xml +18 -18
  133. data/spec/test-xml/methods/artist/similar.xml +39 -39
  134. data/spec/test-xml/methods/artist/tags.xml +11 -11
  135. data/spec/test-xml/methods/artist/toptracks.xml +279 -279
  136. data/spec/test-xml/methods/basket/additem.xml +23 -23
  137. data/spec/test-xml/methods/basket/create.xml +10 -10
  138. data/spec/test-xml/methods/basket/index.xml +23 -23
  139. data/spec/test-xml/methods/basket/removeitem.xml +10 -10
  140. data/spec/test-xml/methods/country/resolve.xml +6 -6
  141. data/spec/test-xml/methods/editorial/list.xml +170 -170
  142. data/spec/test-xml/methods/oauth/accesstoken.xml +5 -5
  143. data/spec/test-xml/methods/oauth/requesttoken.xml +5 -5
  144. data/spec/test-xml/methods/release/bydate.xml +173 -173
  145. data/spec/test-xml/methods/release/bytag/top.xml +150 -150
  146. data/spec/test-xml/methods/release/chart.xml +181 -181
  147. data/spec/test-xml/methods/release/details.xml +48 -48
  148. data/spec/test-xml/methods/release/recommend.xml +89 -89
  149. data/spec/test-xml/methods/release/search.xml +194 -194
  150. data/spec/test-xml/methods/release/tags.xml +27 -27
  151. data/spec/test-xml/methods/release/tracks.xml +28 -28
  152. data/spec/test-xml/methods/tag/index.xml +16 -16
  153. data/spec/test-xml/methods/track/chart.xml +149 -149
  154. data/spec/test-xml/methods/track/details.xml +30 -30
  155. data/spec/test-xml/methods/track/search.xml +159 -159
  156. data/spec/test-xml/methods/user/details.xml +4 -4
  157. data/spec/test-xml/methods/user/locker.xml +49 -49
  158. data/spec/test-xml/methods/user/payment/card/add.xml +7 -7
  159. data/spec/test-xml/methods/user/payment/card/index.xml +7 -7
  160. data/spec/test-xml/methods/user/purchase/basket.xml +48 -48
  161. data/spec/test-xml/methods/user/purchase/item.xml +48 -48
  162. data/spec/test-xml/methods/user/signUp.xml +5 -5
  163. data/spec/test-xml/objects/artist.xml +7 -7
  164. data/spec/test-xml/objects/artist_chart_item.xml +7 -7
  165. data/spec/test-xml/objects/artist_list.xml +22 -22
  166. data/spec/test-xml/objects/artist_list_empty.xml +4 -4
  167. data/spec/test-xml/objects/basket.xml +21 -21
  168. data/spec/test-xml/objects/basket_item.xml +11 -11
  169. data/spec/test-xml/objects/basket_item_list.xml +25 -25
  170. data/spec/test-xml/objects/basket_item_list_empty.xml +1 -1
  171. data/spec/test-xml/objects/download_url.xml +7 -7
  172. data/spec/test-xml/objects/list.xml +89 -89
  173. data/spec/test-xml/objects/list_item_list.xml +85 -85
  174. data/spec/test-xml/objects/list_item_release.xml +13 -13
  175. data/spec/test-xml/objects/locker.xml +47 -47
  176. data/spec/test-xml/objects/locker_release.xml +40 -40
  177. data/spec/test-xml/objects/locker_release_list.xml +87 -87
  178. data/spec/test-xml/objects/locker_release_list_empty.xml +4 -4
  179. data/spec/test-xml/objects/locker_release_one_item_list.xml +43 -43
  180. data/spec/test-xml/objects/locker_track.xml +25 -25
  181. data/spec/test-xml/objects/locker_track_list.xml +26 -26
  182. data/spec/test-xml/objects/locker_track_list_empty.xml +2 -2
  183. data/spec/test-xml/objects/nested_release_list.xml +22 -22
  184. data/spec/test-xml/objects/oauth_access_token.xml +3 -3
  185. data/spec/test-xml/objects/oauth_request_token.xml +3 -3
  186. data/spec/test-xml/objects/price.xml +7 -7
  187. data/spec/test-xml/objects/release.xml +40 -40
  188. data/spec/test-xml/objects/release_chart_item.xml +39 -39
  189. data/spec/test-xml/objects/release_list.xml +18 -18
  190. data/spec/test-xml/objects/release_list_empty.xml +4 -4
  191. data/spec/test-xml/objects/response.xml +38 -38
  192. data/spec/test-xml/objects/tag.xml +4 -4
  193. data/spec/test-xml/objects/track.xml +34 -33
  194. data/spec/test-xml/objects/track_chart_item.xml +27 -27
  195. data/spec/test-xml/objects/user.xml +4 -4
  196. data/spec/test-xml/objects/user_payment_card.xml +5 -5
  197. metadata +15 -25
@@ -1,182 +1,182 @@
1
- require "date"
2
- require File.expand_path('../../spec_helper', __FILE__)
3
-
4
- describe "User" do
5
-
6
- before do
7
- @client = stub(Sevendigital::Client)
8
- @user_manager = mock(Sevendigital::UserManager)
9
- @user_card_manager = mock(Sevendigital::UserCardManager)
10
- @client.stub!(:user).and_return @user_manager
11
- @client.stub!(:user_payment_card).and_return @user_card_manager
12
-
13
- @user = Sevendigital::User.new(@client)
14
- end
15
-
16
- it "get_details should get user's basic details from manager" do
17
- @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
18
- fresh_user = fake_user_with_details
19
- expected_options = {:page => 2}
20
-
21
- @user_manager.should_receive(:get_details) { |token, options|
22
- token.should == @user.oauth_access_token
23
- (options.keys & expected_options.keys).should == expected_options.keys
24
- fresh_user
25
- }
26
- @user.get_details(expected_options).should == fresh_user
27
- @user.email_address.should == fresh_user.email_address
28
-
29
- end
30
-
31
- it "should not be authorised if does not have access_token" do
32
- @user.oauth_access_token = nil
33
- @user.authenticated?.should == false
34
- end
35
-
36
- it "should be authorised if does have access_token" do
37
- @user.oauth_access_token = "something"
38
- @user.authenticated?.should == true
39
- end
40
-
41
- it "should get user's locker from locker manager" do
42
- @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
43
- fake_locker = [Sevendigital::LockerRelease.new(@client)]
44
- expected_options = {:page => 2}
45
-
46
- @user_manager.should_receive(:get_locker) { |token, options|
47
- token.should == @user.oauth_access_token
48
- (options.keys & expected_options.keys).should == expected_options.keys
49
- fake_locker
50
- }
51
- locker = @user.get_locker(expected_options)
52
- locker.should == fake_locker
53
- end
54
-
55
- it "should get user's payment cards from user card manager" do
56
- @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
57
- fake_card_list = [Sevendigital::Card.new(@client)]
58
- expected_options = {:page => 2}
59
-
60
- @user_card_manager.should_receive(:get_card_list) { |token, options|
61
- token.should == @user.oauth_access_token
62
- (options.keys & expected_options.keys).should == expected_options.keys
63
- fake_card_list
64
- }
65
- cards = @user.get_cards(expected_options)
66
- cards.should == fake_card_list
67
- end
68
-
69
- it "should add payment card for user using user card manager" do
70
- @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
71
- card_number = "4444333322221111"
72
- card_type = "VISA"
73
- card_holder_name = "Mr John Simth"
74
- card_start_date = "200909"
75
- card_expiry_date = "201109"
76
- card_issue_number = "1"
77
- card_verification_code ="123"
78
- card_post_code = "EC2A 4HJ"
79
- card_country = "GB"
80
- fake_card = Sevendigital::Card.new(@client)
81
-
82
- @user_card_manager.should_receive(:add_card).with(
83
- card_number, card_type, card_holder_name, card_start_date, card_expiry_date, card_issue_number,
84
- card_verification_code, card_post_code, card_country, @user.oauth_access_token, {}).and_return(fake_card)
85
- card = @user.add_card(card_number, card_type, card_holder_name, card_start_date, card_expiry_date,
86
- card_issue_number, card_verification_code, card_post_code, card_country)
87
- card.should == fake_card
88
- end
89
-
90
- it "should select a default payment card for user using user card manager" do
91
- @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
92
- card_id = 123456
93
-
94
- @user_card_manager.should_receive(:select_card).with(
95
- card_id, @user.oauth_access_token, {}).and_return(true)
96
- @user.select_card(card_id).should == true
97
- end
98
-
99
-
100
- it "should purchase a track using user manger" do
101
- @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
102
- a_release_id = 123
103
- a_track_id = 456
104
- a_price = 1.29
105
- fake_locker = [Sevendigital::LockerRelease.new(@client)]
106
- expected_options = {:page => 2}
107
-
108
- @user_manager.should_receive(:purchase_item) { |release_id, track_id, price, token, options|
109
- token.should == @user.oauth_access_token
110
- release_id.should == a_release_id
111
- track_id.should == a_track_id
112
- price.should == a_price
113
- (options.keys & expected_options.keys).should == expected_options.keys
114
- fake_locker
115
- }
116
- purchase_locker = @user.purchase_item!(a_release_id, a_track_id, a_price, expected_options)
117
- purchase_locker.should == fake_locker
118
- end
119
-
120
- it "should purchase a basket using user manger" do
121
- @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
122
- a_basket_id = 123
123
- fake_locker = [Sevendigital::LockerRelease.new(@client)]
124
- expected_options = {:page => 2}
125
-
126
- @user_manager.should_receive(:purchase_basket) { |basket_id, token, options|
127
- token.should == @user.oauth_access_token
128
- basket_id.should == a_basket_id
129
- (options.keys & expected_options.keys).should == expected_options.keys
130
- fake_locker
131
- }
132
- purchase_locker = @user.purchase_basket!(a_basket_id, expected_options)
133
- purchase_locker.should == fake_locker
134
- end
135
-
136
- it "should get stream track url from user manager" do
137
- @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
138
- a_track_id = 456
139
- a_release_id = 123
140
- a_stream_track_url = "http://whatever"
141
- expected_options = {:page => 2}
142
-
143
- @user_manager.should_receive(:get_stream_track_url) { |release_id, track_id, token, options|
144
- token.should == @user.oauth_access_token
145
- track_id.should == a_track_id
146
- release_id.should == a_release_id
147
- (options.keys & expected_options.keys).should == expected_options.keys
148
- a_stream_track_url
149
- }
150
- @user.stream_track_url(a_release_id, a_track_id, expected_options).should == a_stream_track_url
151
- end
152
-
153
- it "should not get a stream tack url but raise Sevendigital::Error if user is not authenticated" do
154
- running {@user.get_locker}.should raise_error(Sevendigital::SevendigitalError)
155
- end
156
-
157
- it "should get an add card url from user manager" do
158
- @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
159
- a_stream_track_url = "http://whatever"
160
- a_return_url = "http://example.com"
161
- expected_options = {:page => 2}
162
-
163
- @user_manager.should_receive(:get_add_card_url) { |return_url, token, options|
164
- return_url.should == a_return_url
165
- token.should == @user.oauth_access_token
166
- (options.keys & expected_options.keys).should == expected_options.keys
167
- a_stream_track_url
168
- }
169
- @user.add_card_url(a_return_url, expected_options).should == a_stream_track_url
170
- end
171
-
172
- it "should not get a stream tack url but raise Sevendigital::Error if user is not authenticated" do
173
- running {@user.get_locker}.should raise_error(Sevendigital::SevendigitalError)
174
- end
175
-
176
- def fake_user_with_details
177
- user = Sevendigital::User.new(@client)
178
- user.email_address = "user@7digital.com"
179
- user
180
- end
181
-
1
+ require "date"
2
+ require File.expand_path('../../spec_helper', __FILE__)
3
+
4
+ describe "User" do
5
+
6
+ before do
7
+ @client = stub(Sevendigital::Client)
8
+ @user_manager = mock(Sevendigital::UserManager)
9
+ @user_card_manager = mock(Sevendigital::UserCardManager)
10
+ @client.stub!(:user).and_return @user_manager
11
+ @client.stub!(:user_payment_card).and_return @user_card_manager
12
+
13
+ @user = Sevendigital::User.new(@client)
14
+ end
15
+
16
+ it "get_details should get user's basic details from manager" do
17
+ @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
18
+ fresh_user = fake_user_with_details
19
+ expected_options = {:page => 2}
20
+
21
+ @user_manager.should_receive(:get_details) { |token, options|
22
+ token.should == @user.oauth_access_token
23
+ (options.keys & expected_options.keys).should == expected_options.keys
24
+ fresh_user
25
+ }
26
+ @user.get_details(expected_options).should == fresh_user
27
+ @user.email_address.should == fresh_user.email_address
28
+
29
+ end
30
+
31
+ it "should not be authorised if does not have access_token" do
32
+ @user.oauth_access_token = nil
33
+ @user.authenticated?.should == false
34
+ end
35
+
36
+ it "should be authorised if does have access_token" do
37
+ @user.oauth_access_token = "something"
38
+ @user.authenticated?.should == true
39
+ end
40
+
41
+ it "should get user's locker from locker manager" do
42
+ @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
43
+ fake_locker = [Sevendigital::LockerRelease.new(@client)]
44
+ expected_options = {:page => 2}
45
+
46
+ @user_manager.should_receive(:get_locker) { |token, options|
47
+ token.should == @user.oauth_access_token
48
+ (options.keys & expected_options.keys).should == expected_options.keys
49
+ fake_locker
50
+ }
51
+ locker = @user.get_locker(expected_options)
52
+ locker.should == fake_locker
53
+ end
54
+
55
+ it "should get user's payment cards from user card manager" do
56
+ @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
57
+ fake_card_list = [Sevendigital::Card.new(@client)]
58
+ expected_options = {:page => 2}
59
+
60
+ @user_card_manager.should_receive(:get_card_list) { |token, options|
61
+ token.should == @user.oauth_access_token
62
+ (options.keys & expected_options.keys).should == expected_options.keys
63
+ fake_card_list
64
+ }
65
+ cards = @user.get_cards(expected_options)
66
+ cards.should == fake_card_list
67
+ end
68
+
69
+ it "should add payment card for user using user card manager" do
70
+ @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
71
+ card_number = "4444333322221111"
72
+ card_type = "VISA"
73
+ card_holder_name = "Mr John Simth"
74
+ card_start_date = "200909"
75
+ card_expiry_date = "201109"
76
+ card_issue_number = "1"
77
+ card_verification_code ="123"
78
+ card_post_code = "EC2A 4HJ"
79
+ card_country = "GB"
80
+ fake_card = Sevendigital::Card.new(@client)
81
+
82
+ @user_card_manager.should_receive(:add_card).with(
83
+ card_number, card_type, card_holder_name, card_start_date, card_expiry_date, card_issue_number,
84
+ card_verification_code, card_post_code, card_country, @user.oauth_access_token, {}).and_return(fake_card)
85
+ card = @user.add_card(card_number, card_type, card_holder_name, card_start_date, card_expiry_date,
86
+ card_issue_number, card_verification_code, card_post_code, card_country)
87
+ card.should == fake_card
88
+ end
89
+
90
+ it "should select a default payment card for user using user card manager" do
91
+ @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
92
+ card_id = 123456
93
+
94
+ @user_card_manager.should_receive(:select_card).with(
95
+ card_id, @user.oauth_access_token, {}).and_return(true)
96
+ @user.select_card(card_id).should == true
97
+ end
98
+
99
+
100
+ it "should purchase a track using user manger" do
101
+ @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
102
+ a_release_id = 123
103
+ a_track_id = 456
104
+ a_price = 1.29
105
+ fake_locker = [Sevendigital::LockerRelease.new(@client)]
106
+ expected_options = {:page => 2}
107
+
108
+ @user_manager.should_receive(:purchase_item) { |release_id, track_id, price, token, options|
109
+ token.should == @user.oauth_access_token
110
+ release_id.should == a_release_id
111
+ track_id.should == a_track_id
112
+ price.should == a_price
113
+ (options.keys & expected_options.keys).should == expected_options.keys
114
+ fake_locker
115
+ }
116
+ purchase_locker = @user.purchase_item!(a_release_id, a_track_id, a_price, expected_options)
117
+ purchase_locker.should == fake_locker
118
+ end
119
+
120
+ it "should purchase a basket using user manger" do
121
+ @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
122
+ a_basket_id = 123
123
+ fake_locker = [Sevendigital::LockerRelease.new(@client)]
124
+ expected_options = {:page => 2}
125
+
126
+ @user_manager.should_receive(:purchase_basket) { |basket_id, token, options|
127
+ token.should == @user.oauth_access_token
128
+ basket_id.should == a_basket_id
129
+ (options.keys & expected_options.keys).should == expected_options.keys
130
+ fake_locker
131
+ }
132
+ purchase_locker = @user.purchase_basket!(a_basket_id, expected_options)
133
+ purchase_locker.should == fake_locker
134
+ end
135
+
136
+ it "should get stream track url from user manager" do
137
+ @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
138
+ a_track_id = 456
139
+ a_release_id = 123
140
+ a_stream_track_url = "http://whatever"
141
+ expected_options = {:page => 2}
142
+
143
+ @user_manager.should_receive(:get_stream_track_url) { |release_id, track_id, token, options|
144
+ token.should == @user.oauth_access_token
145
+ track_id.should == a_track_id
146
+ release_id.should == a_release_id
147
+ (options.keys & expected_options.keys).should == expected_options.keys
148
+ a_stream_track_url
149
+ }
150
+ @user.stream_track_url(a_release_id, a_track_id, expected_options).should == a_stream_track_url
151
+ end
152
+
153
+ it "should not get a stream tack url but raise Sevendigital::Error if user is not authenticated" do
154
+ running {@user.get_locker}.should raise_error(Sevendigital::SevendigitalError)
155
+ end
156
+
157
+ it "should get an add card url from user manager" do
158
+ @user.oauth_access_token = OAuth::AccessToken.new(nil, "TOKEN", "SECRET")
159
+ a_stream_track_url = "http://whatever"
160
+ a_return_url = "http://example.com"
161
+ expected_options = {:page => 2}
162
+
163
+ @user_manager.should_receive(:get_add_card_url) { |return_url, token, options|
164
+ return_url.should == a_return_url
165
+ token.should == @user.oauth_access_token
166
+ (options.keys & expected_options.keys).should == expected_options.keys
167
+ a_stream_track_url
168
+ }
169
+ @user.add_card_url(a_return_url, expected_options).should == a_stream_track_url
170
+ end
171
+
172
+ it "should not get a stream tack url but raise Sevendigital::Error if user is not authenticated" do
173
+ running {@user.get_locker}.should raise_error(Sevendigital::SevendigitalError)
174
+ end
175
+
176
+ def fake_user_with_details
177
+ user = Sevendigital::User.new(@client)
178
+ user.email_address = "user@7digital.com"
179
+ user
180
+ end
181
+
182
182
  end
@@ -1,84 +1,86 @@
1
- #$: << 'sevendigital'
2
- #$: << 'spec'
3
-
4
- =begin
5
- require 'simplecov'
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
11
- =end
12
-
13
- require 'rspec'
14
- require File.expand_path(
15
- File.join(File.dirname(__FILE__), %w[.. lib sevendigital]))
16
-
17
- Rspec.configure do |config|
18
- # == Mock Framework
19
- #
20
- # RSpec uses it's own mocking framework by default. If you prefer to
21
- # use mocha, flexmock or RR, uncomment the appropriate line:
22
- #
23
- # config.mock_with :mocha
24
- # config.mock_with :flexmock
25
- # config.mock_with :rr
26
- end
27
-
28
- alias running lambda
29
-
30
- VALID_7DIGITAL_URL = /http\:\/\/.+7digital\..+partner=[\d]+/
31
-
32
- def load_sample_method_xml(method_name)
33
- method_name = "test-xml/methods/" + method_name + ".xml"
34
- IO.read( File.join(File.dirname(__FILE__), method_name.split('/')))
35
- end
36
-
37
- def load_sample_object_xml(method_name)
38
- method_name = "test-xml/objects/" + method_name + ".xml"
39
- IO.read( File.join(File.dirname(__FILE__), method_name.split('/')))
40
- end
41
-
42
- def fake_api_response(method_name)
43
- response = Sevendigital::ApiResponse.new
44
- response.content = load_sample_method_xml(method_name)
45
- response.stub(:ok?).and_return true
46
- # Sevendigital::ApiResponseDigestor.new(nil).from_xml_string(load_sample_method_xml(method_name))
47
- response
48
- end
49
-
50
- def fake_api_error_response(code)
51
- Sevendigital::ApiResponseDigestor.new(nil).from_xml_string("<response status=\"error\"><error code=\"#{code}\"></error></response>")
52
- end
53
-
54
- def mock_client_digestor(client, digestor_class)
55
- digestor = mock(Sevendigital.const_get(camelize(digestor_class.to_s)))
56
- client.stub!(digestor_class).and_return(digestor)
57
- digestor
58
- end
59
-
60
- def camelize(str)
61
- str.split('_').map {|w| w.capitalize}.join
62
- end
63
-
64
- def stub_api_client(configuration, response_digestor=nil)
65
- @client = stub(Sevendigital::Client)
66
- @client.stub!(:configuration).and_return(configuration)
67
- @client.stub!(:oauth_consumer).and_return(OAuth::Consumer.new( configuration.oauth_consumer_key, configuration.oauth_consumer_secret))
68
- @client.stub!(:api_response_digestor).and_return(response_digestor)
69
- @client.stub!(:default_parameters).and_return({:country => 'sk'})
70
- @client.stub!(:user_agent_info).and_return("7digital")
71
- @client.stub!(:verbose?).and_return(false)
72
- @client.stub!(:very_verbose?).and_return(false)
73
- @client.stub!(:api_host_and_version).and_return(["base.api.url","version"])
74
- @client.stub!(:log).and_yield()
75
- @client
76
- end
77
-
78
- def test_configuration
79
- configuration = OpenStruct.new
80
- configuration.oauth_consumer_key = "oauth_consumer_key"
81
- configuration
82
- end
83
-
84
-
1
+ #$: << 'sevendigital'
2
+ #$: << 'spec'
3
+
4
+ =begin
5
+ require 'simplecov'
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
11
+ =end
12
+
13
+ require 'rspec'
14
+ require File.expand_path(
15
+ File.join(File.dirname(__FILE__), %w[.. lib sevendigital]))
16
+
17
+ Rspec.configure do |config|
18
+ # == Mock Framework
19
+ #
20
+ # RSpec uses it's own mocking framework by default. If you prefer to
21
+ # use mocha, flexmock or RR, uncomment the appropriate line:
22
+ #
23
+ # config.mock_with :mocha
24
+ # config.mock_with :flexmock
25
+ # config.mock_with :rr
26
+ end
27
+
28
+ alias running lambda
29
+
30
+ VALID_7DIGITAL_URL_WITH_PARTNERID = /http\:\/\/.+7digital\..+partner=[\d]+/
31
+ VALID_7DIGITAL_URL = /http\:\/\/.+7digital\..+/
32
+ VALID_7DIGITAL_IMAGE = /http\:\/\/.+/
33
+
34
+ def load_sample_method_xml(method_name)
35
+ method_name = "test-xml/methods/" + method_name + ".xml"
36
+ IO.read( File.join(File.dirname(__FILE__), method_name.split('/')))
37
+ end
38
+
39
+ def load_sample_object_xml(method_name)
40
+ method_name = "test-xml/objects/" + method_name + ".xml"
41
+ IO.read( File.join(File.dirname(__FILE__), method_name.split('/')))
42
+ end
43
+
44
+ def fake_api_response(method_name)
45
+ response = Sevendigital::ApiResponse.new
46
+ response.content = load_sample_method_xml(method_name)
47
+ response.stub(:ok?).and_return true
48
+ # Sevendigital::ApiResponseDigestor.new(nil).from_xml_string(load_sample_method_xml(method_name))
49
+ response
50
+ end
51
+
52
+ def fake_api_error_response(code)
53
+ Sevendigital::ApiResponseDigestor.new(nil).from_xml_string("<response status=\"error\"><error code=\"#{code}\"></error></response>")
54
+ end
55
+
56
+ def mock_client_digestor(client, digestor_class)
57
+ digestor = mock(Sevendigital.const_get(camelize(digestor_class.to_s)))
58
+ client.stub!(digestor_class).and_return(digestor)
59
+ digestor
60
+ end
61
+
62
+ def camelize(str)
63
+ str.split('_').map {|w| w.capitalize}.join
64
+ end
65
+
66
+ def stub_api_client(configuration, response_digestor=nil)
67
+ @client = stub(Sevendigital::Client)
68
+ @client.stub!(:configuration).and_return(configuration)
69
+ @client.stub!(:oauth_consumer).and_return(OAuth::Consumer.new( configuration.oauth_consumer_key, configuration.oauth_consumer_secret))
70
+ @client.stub!(:api_response_digestor).and_return(response_digestor)
71
+ @client.stub!(:default_parameters).and_return({:country => 'sk'})
72
+ @client.stub!(:user_agent_info).and_return("7digital")
73
+ @client.stub!(:verbose?).and_return(false)
74
+ @client.stub!(:very_verbose?).and_return(false)
75
+ @client.stub!(:api_host_and_version).and_return(["base.api.url","version"])
76
+ @client.stub!(:log).and_yield()
77
+ @client
78
+ end
79
+
80
+ def test_configuration
81
+ configuration = OpenStruct.new
82
+ configuration.oauth_consumer_key = "oauth_consumer_key"
83
+ configuration
84
+ end
85
+
86
+