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,34 +1,34 @@
1
- # encoding: UTF-8
2
- require 'date'
3
- require File.expand_path('../../spec_helper', __FILE__)
4
-
5
- describe "TagManager" do
6
-
7
- before do
8
-
9
- @client = stub(Sevendigital::Client)
10
- @client.stub!(:operator).and_return(mock(Sevendigital::ApiOperator))
11
- @tag_manager = Sevendigital::TagManager.new(@client)
12
-
13
- end
14
-
15
-
16
- it "get_tag_list should call tag api method and digest the tag list from response" do
17
-
18
- an_api_response = fake_api_response("tag/index")
19
- a_tag_list = [Sevendigital::Tag.new]
20
-
21
- mock_client_digestor(@client, :tag_digestor) \
22
- .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("tags") ).and_return(a_tag_list)
23
-
24
- @client.should_receive(:make_api_request) \
25
- .with(:GET, "tag", {}, {}) \
26
- .and_return(an_api_response)
27
-
28
-
29
- tags = @tag_manager.get_tag_list
30
- tags.should == a_tag_list
31
- end
32
-
33
-
34
- end
1
+ # encoding: UTF-8
2
+ require 'date'
3
+ require File.expand_path('../../spec_helper', __FILE__)
4
+
5
+ describe "TagManager" do
6
+
7
+ before do
8
+
9
+ @client = stub(Sevendigital::Client)
10
+ @client.stub!(:operator).and_return(mock(Sevendigital::ApiOperator))
11
+ @tag_manager = Sevendigital::TagManager.new(@client)
12
+
13
+ end
14
+
15
+
16
+ it "get_tag_list should call tag api method and digest the tag list from response" do
17
+
18
+ an_api_response = fake_api_response("tag/index")
19
+ a_tag_list = [Sevendigital::Tag.new]
20
+
21
+ mock_client_digestor(@client, :tag_digestor) \
22
+ .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("tags") ).and_return(a_tag_list)
23
+
24
+ @client.should_receive(:make_api_request) \
25
+ .with(:GET, "tag", {}, {}) \
26
+ .and_return(an_api_response)
27
+
28
+
29
+ tags = @tag_manager.get_tag_list
30
+ tags.should == a_tag_list
31
+ end
32
+
33
+
34
+ end
@@ -1,107 +1,111 @@
1
- # encoding: UTF-8
2
- require 'date'
3
- require File.expand_path('../../spec_helper', __FILE__)
4
-
5
- describe "TrackManager" do
6
-
7
- before do
8
-
9
- @client = stub(Sevendigital::Client)
10
- @client.stub!(:operator).and_return(mock(Sevendigital::ApiOperator))
11
- @track_manager = Sevendigital::TrackManager.new(@client)
12
-
13
- end
14
-
15
- it "get_details should call track/details api method and return digested track" do
16
- a_track_id = 123
17
- an_api_response = fake_api_response("track/details")
18
- a_track = Sevendigital::Track.new(@client)
19
-
20
- mock_client_digestor(@client, :track_digestor) \
21
- .should_receive(:from_xml_doc).with(an_api_response.item_xml("track")).and_return(a_track)
22
-
23
- @client.should_receive(:make_api_request) \
24
- .with(:GET, "track/details", {:trackId => a_track_id}, {}) \
25
- .and_return(an_api_response)
26
-
27
- @track_manager.get_details(a_track_id).should == a_track
28
-
29
- end
30
-
31
- it "get_details_from_release should get all tracks from the release and pick the relevant one" do
32
-
33
- @client.stub!(:release).and_return(mock(Sevendigital::ReleaseManager))
34
-
35
- options = []
36
- track_1 = Sevendigital::Track.new(@client)
37
- track_1.id = 1
38
- track_2 = Sevendigital::Track.new(@client)
39
- track_2.id = 2
40
- track_3 = Sevendigital::Track.new(@client)
41
- track_3.id = 3
42
- a_track_list = [track_1, track_2, track_3]
43
- a_release_id = 123456
44
-
45
- @client.release.should_receive(:get_tracks).with(a_release_id, options).and_return(a_track_list)
46
-
47
- track = @track_manager.get_details_from_release(track_2.id, a_release_id, options)
48
- track.should == track_2
49
- end
50
-
51
- it "get_chart should call track/chart api method and digest the release list from response" do
52
-
53
- an_api_response = fake_api_response("track/chart")
54
- a_chart = []
55
-
56
- mock_client_digestor(@client, :chart_item_digestor) \
57
- .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("chart")).and_return(a_chart)
58
-
59
- @client.should_receive(:make_api_request) \
60
- .with(:GET, "track/chart", {}, {}) \
61
- .and_return(an_api_response)
62
-
63
-
64
- chart = @track_manager.get_chart
65
- chart.should == a_chart
66
- end
67
-
68
- it "build_preview_url should return URL for track/preview api request" do
69
- track_id = 123456
70
- fake_preview_url = "http://7digital.com/track/preview"
71
- fake_api_request = stub(Sevendigital::ApiRequest)
72
-
73
- @client.should_receive(:create_api_request) \
74
- .with(:GET, "track/preview", {:trackId => track_id}, {}) \
75
- .and_return(fake_api_request)
76
-
77
- @client.operator.should_receive(:get_request_uri) \
78
- .with(fake_api_request) \
79
- .and_return(fake_preview_url)
80
-
81
- preview_url = @track_manager.build_preview_url(track_id)
82
-
83
- preview_url.should == fake_preview_url
84
- end
85
-
86
- it "search should call track/search api method and digest the nested track list from response" do
87
-
88
- query = "radiohead"
89
- an_api_response = fake_api_response("track/search")
90
- a_track_list = [Sevendigital::Track.new(@client)]
91
-
92
- mock_client_digestor(@client, :track_digestor) \
93
- .should_receive(:nested_list_from_xml_doc) \
94
- .with(an_api_response.item_xml("searchResults"), :searchResult, :track) \
95
- .and_return(a_track_list)
96
-
97
- @client.should_receive(:make_api_request) \
98
- .with(:GET, "track/search", {:q => query}, {}) \
99
- .and_return(an_api_response)
100
-
101
- tracks = @track_manager.search(query)
102
- tracks.should == a_track_list
103
-
104
- end
105
-
106
-
107
- end
1
+ # encoding: UTF-8
2
+ require 'date'
3
+ require File.expand_path('../../spec_helper', __FILE__)
4
+
5
+ describe "TrackManager" do
6
+
7
+ before do
8
+
9
+ @client = stub(Sevendigital::Client)
10
+ @client.stub!(:operator).and_return(mock(Sevendigital::ApiOperator))
11
+ @track_manager = Sevendigital::TrackManager.new(@client)
12
+
13
+ end
14
+
15
+ it "get_details should call track/details api method and return digested track" do
16
+ a_track_id = 123
17
+ an_api_response = fake_api_response("track/details")
18
+ a_track = Sevendigital::Track.new(@client)
19
+
20
+ mock_client_digestor(@client, :track_digestor) \
21
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("track")).and_return(a_track)
22
+
23
+ @client.should_receive(:make_api_request) \
24
+ .with(:GET, "track/details", {:trackId => a_track_id}, {}) \
25
+ .and_return(an_api_response)
26
+
27
+ @track_manager.get_details(a_track_id).should == a_track
28
+
29
+ end
30
+
31
+ it "get_details_from_release should get all tracks from the release and pick the relevant one" do
32
+
33
+ @client.stub!(:release).and_return(mock(Sevendigital::ReleaseManager))
34
+
35
+ options = []
36
+ track_1 = Sevendigital::Track.new(@client)
37
+ track_1.id = 1
38
+ track_2 = Sevendigital::Track.new(@client)
39
+ track_2.id = 2
40
+ track_3 = Sevendigital::Track.new(@client)
41
+ track_3.id = 3
42
+ a_track_list = [track_1, track_2, track_3]
43
+ a_release_id = 123456
44
+
45
+ @client.release.should_receive(:get_tracks).with(a_release_id, options).and_return(a_track_list)
46
+
47
+ track = @track_manager.get_details_from_release(track_2.id, a_release_id, options)
48
+ track.should == track_2
49
+ end
50
+
51
+ it "get_chart should call track/chart api method and digest the release list from response" do
52
+
53
+ an_api_response = fake_api_response("track/chart")
54
+ a_chart = []
55
+
56
+ mock_client_digestor(@client, :chart_item_digestor) \
57
+ .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("chart")).and_return(a_chart)
58
+
59
+ @client.should_receive(:make_api_request) \
60
+ .with(:GET, "track/chart", {}, {}) \
61
+ .and_return(an_api_response)
62
+
63
+
64
+ chart = @track_manager.get_chart
65
+ chart.should == a_chart
66
+ end
67
+
68
+ it "build_preview_url should return URL for track/preview api request" do
69
+ track_id = 123456
70
+ fake_preview_url = "http://7digital.com/track/preview"
71
+ fake_api_request = stub(Sevendigital::ApiRequest)
72
+
73
+ @client.should_receive(:create_api_request) \
74
+ .with(:GET, "clip/#{track_id}", {}, {}) \
75
+ .and_return(fake_api_request)
76
+
77
+ fake_api_request.should_receive(:api_service=).with(:previews)
78
+ fake_api_request.should_receive(:require_signature)
79
+
80
+
81
+ @client.operator.should_receive(:get_request_uri) \
82
+ .with(fake_api_request) \
83
+ .and_return(fake_preview_url)
84
+
85
+ preview_url = @track_manager.build_preview_url(track_id)
86
+
87
+ preview_url.should == fake_preview_url
88
+ end
89
+
90
+ it "search should call track/search api method and digest the nested track list from response" do
91
+
92
+ query = "radiohead"
93
+ an_api_response = fake_api_response("track/search")
94
+ a_track_list = [Sevendigital::Track.new(@client)]
95
+
96
+ mock_client_digestor(@client, :track_digestor) \
97
+ .should_receive(:nested_list_from_xml_doc) \
98
+ .with(an_api_response.item_xml("searchResults"), :searchResult, :track) \
99
+ .and_return(a_track_list)
100
+
101
+ @client.should_receive(:make_api_request) \
102
+ .with(:GET, "track/search", {:q => query}, {}) \
103
+ .and_return(an_api_response)
104
+
105
+ tracks = @track_manager.search(query)
106
+ tracks.should == a_track_list
107
+
108
+ end
109
+
110
+
111
+ end
@@ -1,79 +1,79 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
2
-
3
- describe "UserCardManager" do
4
-
5
- before do
6
- @client = stub(Sevendigital::Client)
7
- @client.stub!(:operator).and_return(mock(Sevendigital::ApiOperator))
8
- @card_manager = Sevendigital::UserCardManager.new(@client)
9
- end
10
-
11
- it "get_card_list should call user/payment/card api method and return list of cards" do
12
- a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
13
- a_card_list = [Sevendigital::Card.new(@client)]
14
- an_api_response = fake_api_response("user/payment/card/index")
15
- options = {:pagesize => 20 }
16
-
17
- mock_client_digestor(@client, :user_card_digestor) \
18
- .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("cards")).and_return(a_card_list)
19
-
20
- @client.should_receive(:make_signed_api_request) \
21
- .with(:GET, "user/payment/card", {}, options, a_token) \
22
- .and_return(an_api_response)
23
-
24
- cards = @card_manager.get_card_list(a_token, options)
25
- cards.should == a_card_list
26
- end
27
-
28
- it "add_card should call user/payment/card/add api method and return the added card" do
29
- card_number = "4444333322221111"
30
- card_type = "VISA"
31
- card_holder_name = "Mr John Simth"
32
- card_start_date = "200909"
33
- card_expiry_date = "201109"
34
- card_issue_number = "1"
35
- card_verification_code ="123"
36
- card_post_code = "EC2A 4HJ"
37
- card_country = "GB"
38
- a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
39
- a_card = Sevendigital::Card.new(@client)
40
- an_api_response = fake_api_response("user/payment/card/add")
41
- options = {:pagesize => 20 }
42
-
43
- mock_client_digestor(@client, :user_card_digestor) \
44
- .should_receive(:from_xml_doc).with(an_api_response.item_xml("card")).and_return(a_card)
45
-
46
- @client.should_receive(:make_signed_api_request) \
47
- .with(:POST, "user/payment/card/add", {
48
- :cardNumber => card_number,
49
- :cardType => card_type,
50
- :cardHolderName => card_holder_name,
51
- :cardStartDate => card_start_date,
52
- :cardExpiryDate => card_expiry_date,
53
- :cardIssueNumber => card_issue_number,
54
- :cardVerificationCode => card_verification_code,
55
- :cardPostCode => card_post_code,
56
- :cardCountry => card_country
57
- }, options, a_token) \
58
- .and_return(an_api_response)
59
-
60
- card = @card_manager.add_card(
61
- card_number, card_type, card_holder_name, card_start_date, card_expiry_date, card_issue_number,
62
- card_verification_code, card_post_code, card_country, a_token, options)
63
- card.should == a_card
64
- end
65
-
66
- it "select_card should call user/payment/card/select api method and return true if successful " do
67
- card_id = 123
68
- a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
69
- an_api_response = fake_api_response("user/payment/card/select")
70
- options = {:pagesize => 20 }
71
-
72
- @client.should_receive(:make_signed_api_request) \
73
- .with(:POST, "user/payment/card/select", {:cardId => card_id}, options, a_token) \
74
- .and_return(an_api_response)
75
-
76
- @card_manager.select_card(card_id, a_token, options).should == true
77
- end
78
-
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "UserCardManager" do
4
+
5
+ before do
6
+ @client = stub(Sevendigital::Client)
7
+ @client.stub!(:operator).and_return(mock(Sevendigital::ApiOperator))
8
+ @card_manager = Sevendigital::UserCardManager.new(@client)
9
+ end
10
+
11
+ it "get_card_list should call user/payment/card api method and return list of cards" do
12
+ a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
13
+ a_card_list = [Sevendigital::Card.new(@client)]
14
+ an_api_response = fake_api_response("user/payment/card/index")
15
+ options = {:pagesize => 20 }
16
+
17
+ mock_client_digestor(@client, :user_card_digestor) \
18
+ .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("cards")).and_return(a_card_list)
19
+
20
+ @client.should_receive(:make_signed_api_request) \
21
+ .with(:GET, "user/payment/card", {}, options, a_token) \
22
+ .and_return(an_api_response)
23
+
24
+ cards = @card_manager.get_card_list(a_token, options)
25
+ cards.should == a_card_list
26
+ end
27
+
28
+ it "add_card should call user/payment/card/add api method and return the added card" do
29
+ card_number = "4444333322221111"
30
+ card_type = "VISA"
31
+ card_holder_name = "Mr John Simth"
32
+ card_start_date = "200909"
33
+ card_expiry_date = "201109"
34
+ card_issue_number = "1"
35
+ card_verification_code ="123"
36
+ card_post_code = "EC2A 4HJ"
37
+ card_country = "GB"
38
+ a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
39
+ a_card = Sevendigital::Card.new(@client)
40
+ an_api_response = fake_api_response("user/payment/card/add")
41
+ options = {:pagesize => 20 }
42
+
43
+ mock_client_digestor(@client, :user_card_digestor) \
44
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("card")).and_return(a_card)
45
+
46
+ @client.should_receive(:make_signed_api_request) \
47
+ .with(:POST, "user/payment/card/add", {
48
+ :cardNumber => card_number,
49
+ :cardType => card_type,
50
+ :cardHolderName => card_holder_name,
51
+ :cardStartDate => card_start_date,
52
+ :cardExpiryDate => card_expiry_date,
53
+ :cardIssueNumber => card_issue_number,
54
+ :cardVerificationCode => card_verification_code,
55
+ :cardPostCode => card_post_code,
56
+ :cardCountry => card_country
57
+ }, options, a_token) \
58
+ .and_return(an_api_response)
59
+
60
+ card = @card_manager.add_card(
61
+ card_number, card_type, card_holder_name, card_start_date, card_expiry_date, card_issue_number,
62
+ card_verification_code, card_post_code, card_country, a_token, options)
63
+ card.should == a_card
64
+ end
65
+
66
+ it "select_card should call user/payment/card/select api method and return true if successful " do
67
+ card_id = 123
68
+ a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
69
+ an_api_response = fake_api_response("user/payment/card/select")
70
+ options = {:pagesize => 20 }
71
+
72
+ @client.should_receive(:make_signed_api_request) \
73
+ .with(:POST, "user/payment/card/select", {:cardId => card_id}, options, a_token) \
74
+ .and_return(an_api_response)
75
+
76
+ @card_manager.select_card(card_id, a_token, options).should == true
77
+ end
78
+
79
79
  end
@@ -1,219 +1,219 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
2
-
3
- describe "UserManager" do
4
-
5
- before do
6
-
7
- @an_email = "email"
8
- @a_password = "password"
9
- @a_request_token = fake_request_token
10
- @an_access_token = fake_access_token
11
-
12
- @client = stub(Sevendigital::Client)
13
-
14
- @oauth_manager = mock(Sevendigital::OAuthManager)
15
- @oauth_manager.stub!(:get_request_token).and_return(@a_request_token)
16
- @oauth_manager.stub!(:authorise_request_token).and_return(true)
17
- @oauth_manager.stub!(:get_access_token).and_return(@an_access_token)
18
-
19
- @client.stub!(:operator).and_return(mock(Sevendigital::ApiOperator))
20
- @client.stub!(:oauth).and_return(@oauth_manager )
21
- @user_manager = Sevendigital::UserManager.new(@client)
22
- end
23
-
24
- it "get_details should call user/details api method and return user's email" do
25
- an_api_response = fake_api_response("user/details")
26
- a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
27
- fake_user = [Sevendigital::User.new(@client)]
28
- options = {:sort => "random"}
29
-
30
- mock_client_digestor(@client, :user_digestor) \
31
- .should_receive(:from_xml_doc).with(an_api_response.item_xml("user")).and_return(fake_user)
32
-
33
- @client.should_receive(:make_signed_api_request) \
34
- .with(:GET, "user/details", {}, options, a_token) \
35
- .and_return(an_api_response)
36
-
37
- @user_manager.get_details(a_token, options).should == fake_user
38
- end
39
-
40
- it "should log in user using an existing access token" do
41
- an_access_token = OAuth::AccessToken.new("aaa", "bbb", nil)
42
- @user = @user_manager.login(an_access_token)
43
- @user.authenticated?.should == true
44
- end
45
-
46
- it "should not log in user using an request token but raise an exception" do
47
- a_request_token = OAuth::RequestToken.new("aaa", "bbb", nil)
48
- running {@user = @user_manager.login(a_request_token)}.should raise_exception Sevendigital::SevendigitalError
49
- @user.nil?.should == true
50
- end
51
-
52
- it "sign_up should call user/signUp api method and return signed up and authenticated user" do
53
- an_api_response = fake_api_response("user/signup")
54
- fake_user = Sevendigital::User.new(@client)
55
- options = {:country => "XX"}
56
-
57
- mock_client_digestor(@client, :user_digestor) \
58
- .should_receive(:from_xml_doc).with(an_api_response.item_xml("user")).and_return(fake_user)
59
-
60
- @client.should_receive(:make_signed_api_request) \
61
- .with(:POST, "user/signUp", {:emailAddress => @an_email, :password => @a_password}, options) \
62
- .and_return(an_api_response)
63
-
64
- user = @user_manager.sign_up(@an_email, @a_password, options)
65
- user.should == fake_user
66
- user.authenticated?.should == true
67
- end
68
-
69
- it "authenticate should return an authenticated user if supplied with valid login details" do
70
- user = @user_manager.authenticate("email", "password")
71
- user.kind_of?(Sevendigital::User).should == true
72
- user.authenticated?.should == true
73
- end
74
-
75
- it "authenticate should return nil if user does not authenticate" do
76
- @oauth_manager.stub!(:authorise_request_token).and_return(false)
77
- user = @user_manager.authenticate("email", "password")
78
- user.nil?.should == true
79
- end
80
-
81
- it "authenticate should get a request token" do
82
- @client.oauth.should_receive(:get_request_token).and_return(nil)
83
- @user_manager.authenticate("email", "password")
84
- end
85
-
86
- it "authenticate should attempt to authorise request token" do
87
- @client.oauth.should_receive(:authorise_request_token) \
88
- .with(@an_email, @a_password, @a_request_token) \
89
- .and_return(true)
90
- @user_manager.authenticate(@an_email, @a_password)
91
- end
92
-
93
- it "authenticate should retrieve access_token for authenticated user" do
94
- @client.oauth.should_receive(:get_access_token) \
95
- .with(@a_request_token) \
96
- .and_return(@an_access_token)
97
- user = @user_manager.authenticate(@an_email, @a_password)
98
- user.oauth_access_token.should == @an_access_token
99
- end
100
-
101
- def fake_request_token
102
- token = stub(OAuth::RequestToken)
103
- token.stub(:token).and_return("key")
104
- token
105
- end
106
-
107
- def fake_access_token
108
- token = stub(OAuth::RequestToken)
109
- token.stub(:token).and_return("key")
110
- token
111
- end
112
-
113
- it "get_locker should call user/locker api method and return digested locker" do
114
- an_api_response = fake_api_response("user/locker")
115
- a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
116
- fake_locker = [Sevendigital::LockerRelease.new(@client)]
117
- options = {:sort => "random"}
118
-
119
- mock_client_digestor(@client, :locker_digestor) \
120
- .should_receive(:from_xml_doc).with(an_api_response.item_xml("locker")).and_return(fake_locker)
121
-
122
- @client.should_receive(:make_signed_api_request) \
123
- .with(:GET, "user/locker", {}, options, a_token) \
124
- .and_return(an_api_response)
125
-
126
- @user_manager.get_locker(a_token, options).should == fake_locker
127
-
128
- end
129
-
130
- it "purchase should call user/purchase/item api method and return digested locker items" do
131
- an_api_response = fake_api_response("user/purchase/item")
132
- a_track_id = 123456
133
- a_release_id = 56879
134
- a_price = 0.99
135
- a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
136
- fake_locker = [Sevendigital::LockerRelease.new(@client)]
137
-
138
- mock_client_digestor(@client, :locker_digestor) \
139
- .should_receive(:from_xml_doc).with(an_api_response.item_xml("purchase")).and_return(fake_locker)
140
-
141
- @client.should_receive(:make_signed_api_request) \
142
- .with(:GET, "user/purchase/item", \
143
- {:trackId => a_track_id, :releaseId => a_release_id, :price => a_price}, \
144
- {}, a_token) \
145
- .and_return(an_api_response)
146
-
147
- @user_manager.purchase(a_release_id, a_track_id, a_price, a_token).should == fake_locker
148
-
149
- end
150
-
151
- it "purchase_basket should call user/purchase/basket api method and return digested locker items" do
152
- an_api_response = fake_api_response("user/purchase/basket")
153
- a_basket_id = 123456
154
- a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
155
- fake_locker = [Sevendigital::LockerRelease.new(@client)]
156
-
157
- mock_client_digestor(@client, :locker_digestor) \
158
- .should_receive(:from_xml_doc).with(an_api_response.item_xml("purchase")).and_return(fake_locker)
159
-
160
- @client.should_receive(:make_signed_api_request) \
161
- .with(:GET, "user/purchase/basket", \
162
- {:basketId => a_basket_id}, \
163
- {}, a_token) \
164
- .and_return(an_api_response)
165
-
166
- @user_manager.purchase_basket(a_basket_id, a_token).should == fake_locker
167
-
168
- end
169
-
170
-
171
- it "should get stream track URI" do
172
- a_stream_track_uri = "http://media.com/streamtrack"
173
- a_track_id = 123456
174
- a_release_id = 78910
175
- a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
176
- an_api_request = stub(Sevendigital::ApiRequest)
177
-
178
- @client.should_receive(:create_api_request) \
179
- .with(:GET, "user/streamtrack", {:trackId => a_track_id, :releaseId => a_release_id}, {}) \
180
- .and_return(an_api_request)
181
-
182
- an_api_request.should_receive(:api_service=).with(:media)
183
- an_api_request.should_receive(:require_signature)
184
- an_api_request.should_not_receive(:require_secure_connection)
185
- an_api_request.should_receive(:token=).with(a_token)
186
-
187
- @client.operator.should_receive(:get_request_uri) \
188
- .with(an_api_request) \
189
- .and_return(a_stream_track_uri)
190
-
191
- @user_manager.get_stream_track_url(a_release_id, a_track_id, a_token).should == a_stream_track_uri
192
-
193
- end
194
-
195
- it "should get add card URI" do
196
- an_add_card_uri = "http://account.com/addcard"
197
- a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
198
- a_return_url = "http://example.com/"
199
- an_api_request = stub(Sevendigital::ApiRequest)
200
-
201
- @client.should_receive(:create_api_request) \
202
- .with(:GET, "payment/addcard", {:returnUrl => a_return_url}, {}) \
203
- .and_return(an_api_request)
204
-
205
- an_api_request.should_receive(:api_service=).with(:account)
206
- an_api_request.should_receive(:require_signature)
207
- an_api_request.should_receive(:require_secure_connection)
208
- an_api_request.should_receive(:token=).with(a_token)
209
-
210
- @client.operator.should_receive(:get_request_uri) \
211
- .with(an_api_request) \
212
- .and_return(an_add_card_uri)
213
-
214
- @user_manager.get_add_card_url(a_return_url, a_token).should == an_add_card_uri
215
-
216
- end
217
-
218
-
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "UserManager" do
4
+
5
+ before do
6
+
7
+ @an_email = "email"
8
+ @a_password = "password"
9
+ @a_request_token = fake_request_token
10
+ @an_access_token = fake_access_token
11
+
12
+ @client = stub(Sevendigital::Client)
13
+
14
+ @oauth_manager = mock(Sevendigital::OAuthManager)
15
+ @oauth_manager.stub!(:get_request_token).and_return(@a_request_token)
16
+ @oauth_manager.stub!(:authorise_request_token).and_return(true)
17
+ @oauth_manager.stub!(:get_access_token).and_return(@an_access_token)
18
+
19
+ @client.stub!(:operator).and_return(mock(Sevendigital::ApiOperator))
20
+ @client.stub!(:oauth).and_return(@oauth_manager )
21
+ @user_manager = Sevendigital::UserManager.new(@client)
22
+ end
23
+
24
+ it "get_details should call user/details api method and return user's email" do
25
+ an_api_response = fake_api_response("user/details")
26
+ a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
27
+ fake_user = [Sevendigital::User.new(@client)]
28
+ options = {:sort => "random"}
29
+
30
+ mock_client_digestor(@client, :user_digestor) \
31
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("user")).and_return(fake_user)
32
+
33
+ @client.should_receive(:make_signed_api_request) \
34
+ .with(:GET, "user/details", {}, options, a_token) \
35
+ .and_return(an_api_response)
36
+
37
+ @user_manager.get_details(a_token, options).should == fake_user
38
+ end
39
+
40
+ it "should log in user using an existing access token" do
41
+ an_access_token = OAuth::AccessToken.new("aaa", "bbb", nil)
42
+ @user = @user_manager.login(an_access_token)
43
+ @user.authenticated?.should == true
44
+ end
45
+
46
+ it "should not log in user using an request token but raise an exception" do
47
+ a_request_token = OAuth::RequestToken.new("aaa", "bbb", nil)
48
+ running {@user = @user_manager.login(a_request_token)}.should raise_exception Sevendigital::SevendigitalError
49
+ @user.nil?.should == true
50
+ end
51
+
52
+ it "sign_up should call user/signUp api method and return signed up and authenticated user" do
53
+ an_api_response = fake_api_response("user/signup")
54
+ fake_user = Sevendigital::User.new(@client)
55
+ options = {:country => "XX"}
56
+
57
+ mock_client_digestor(@client, :user_digestor) \
58
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("user")).and_return(fake_user)
59
+
60
+ @client.should_receive(:make_signed_api_request) \
61
+ .with(:POST, "user/signUp", {:emailAddress => @an_email, :password => @a_password}, options) \
62
+ .and_return(an_api_response)
63
+
64
+ user = @user_manager.sign_up(@an_email, @a_password, options)
65
+ user.should == fake_user
66
+ user.authenticated?.should == true
67
+ end
68
+
69
+ it "authenticate should return an authenticated user if supplied with valid login details" do
70
+ user = @user_manager.authenticate("email", "password")
71
+ user.kind_of?(Sevendigital::User).should == true
72
+ user.authenticated?.should == true
73
+ end
74
+
75
+ it "authenticate should return nil if user does not authenticate" do
76
+ @oauth_manager.stub!(:authorise_request_token).and_return(false)
77
+ user = @user_manager.authenticate("email", "password")
78
+ user.nil?.should == true
79
+ end
80
+
81
+ it "authenticate should get a request token" do
82
+ @client.oauth.should_receive(:get_request_token).and_return(nil)
83
+ @user_manager.authenticate("email", "password")
84
+ end
85
+
86
+ it "authenticate should attempt to authorise request token" do
87
+ @client.oauth.should_receive(:authorise_request_token) \
88
+ .with(@an_email, @a_password, @a_request_token) \
89
+ .and_return(true)
90
+ @user_manager.authenticate(@an_email, @a_password)
91
+ end
92
+
93
+ it "authenticate should retrieve access_token for authenticated user" do
94
+ @client.oauth.should_receive(:get_access_token) \
95
+ .with(@a_request_token) \
96
+ .and_return(@an_access_token)
97
+ user = @user_manager.authenticate(@an_email, @a_password)
98
+ user.oauth_access_token.should == @an_access_token
99
+ end
100
+
101
+ def fake_request_token
102
+ token = stub(OAuth::RequestToken)
103
+ token.stub(:token).and_return("key")
104
+ token
105
+ end
106
+
107
+ def fake_access_token
108
+ token = stub(OAuth::RequestToken)
109
+ token.stub(:token).and_return("key")
110
+ token
111
+ end
112
+
113
+ it "get_locker should call user/locker api method and return digested locker" do
114
+ an_api_response = fake_api_response("user/locker")
115
+ a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
116
+ fake_locker = [Sevendigital::LockerRelease.new(@client)]
117
+ options = {:sort => "random"}
118
+
119
+ mock_client_digestor(@client, :locker_digestor) \
120
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("locker")).and_return(fake_locker)
121
+
122
+ @client.should_receive(:make_signed_api_request) \
123
+ .with(:GET, "user/locker", {}, options, a_token) \
124
+ .and_return(an_api_response)
125
+
126
+ @user_manager.get_locker(a_token, options).should == fake_locker
127
+
128
+ end
129
+
130
+ it "purchase should call user/purchase/item api method and return digested locker items" do
131
+ an_api_response = fake_api_response("user/purchase/item")
132
+ a_track_id = 123456
133
+ a_release_id = 56879
134
+ a_price = 0.99
135
+ a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
136
+ fake_locker = [Sevendigital::LockerRelease.new(@client)]
137
+
138
+ mock_client_digestor(@client, :locker_digestor) \
139
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("purchase")).and_return(fake_locker)
140
+
141
+ @client.should_receive(:make_signed_api_request) \
142
+ .with(:GET, "user/purchase/item", \
143
+ {:trackId => a_track_id, :releaseId => a_release_id, :price => a_price}, \
144
+ {}, a_token) \
145
+ .and_return(an_api_response)
146
+
147
+ @user_manager.purchase(a_release_id, a_track_id, a_price, a_token).should == fake_locker
148
+
149
+ end
150
+
151
+ it "purchase_basket should call user/purchase/basket api method and return digested locker items" do
152
+ an_api_response = fake_api_response("user/purchase/basket")
153
+ a_basket_id = 123456
154
+ a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
155
+ fake_locker = [Sevendigital::LockerRelease.new(@client)]
156
+
157
+ mock_client_digestor(@client, :locker_digestor) \
158
+ .should_receive(:from_xml_doc).with(an_api_response.item_xml("purchase")).and_return(fake_locker)
159
+
160
+ @client.should_receive(:make_signed_api_request) \
161
+ .with(:GET, "user/purchase/basket", \
162
+ {:basketId => a_basket_id}, \
163
+ {}, a_token) \
164
+ .and_return(an_api_response)
165
+
166
+ @user_manager.purchase_basket(a_basket_id, a_token).should == fake_locker
167
+
168
+ end
169
+
170
+
171
+ it "should get stream track URI" do
172
+ a_stream_track_uri = "http://media.com/streamtrack"
173
+ a_track_id = 123456
174
+ a_release_id = 78910
175
+ a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
176
+ an_api_request = stub(Sevendigital::ApiRequest)
177
+
178
+ @client.should_receive(:create_api_request) \
179
+ .with(:GET, "user/streamtrack", {:trackId => a_track_id, :releaseId => a_release_id}, {}) \
180
+ .and_return(an_api_request)
181
+
182
+ an_api_request.should_receive(:api_service=).with(:media)
183
+ an_api_request.should_receive(:require_signature)
184
+ an_api_request.should_not_receive(:require_secure_connection)
185
+ an_api_request.should_receive(:token=).with(a_token)
186
+
187
+ @client.operator.should_receive(:get_request_uri) \
188
+ .with(an_api_request) \
189
+ .and_return(a_stream_track_uri)
190
+
191
+ @user_manager.get_stream_track_url(a_release_id, a_track_id, a_token).should == a_stream_track_uri
192
+
193
+ end
194
+
195
+ it "should get add card URI" do
196
+ an_add_card_uri = "http://account.com/addcard"
197
+ a_token = OAuth::AccessToken.new(nil, "token", "token_secret")
198
+ a_return_url = "http://example.com/"
199
+ an_api_request = stub(Sevendigital::ApiRequest)
200
+
201
+ @client.should_receive(:create_api_request) \
202
+ .with(:GET, "payment/addcard", {:returnUrl => a_return_url}, {}) \
203
+ .and_return(an_api_request)
204
+
205
+ an_api_request.should_receive(:api_service=).with(:account)
206
+ an_api_request.should_receive(:require_signature)
207
+ an_api_request.should_receive(:require_secure_connection)
208
+ an_api_request.should_receive(:token=).with(a_token)
209
+
210
+ @client.operator.should_receive(:get_request_uri) \
211
+ .with(an_api_request) \
212
+ .and_return(an_add_card_uri)
213
+
214
+ @user_manager.get_add_card_url(a_return_url, a_token).should == an_add_card_uri
215
+
216
+ end
217
+
218
+
219
219
  end