7digital 0.0.7 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +8 -1
- data/lib/sevendigital.rb +4 -2
- data/lib/sevendigital/api_operator.rb +92 -94
- data/lib/sevendigital/api_operator_cached.rb +55 -33
- data/lib/sevendigital/api_request.rb +50 -54
- data/lib/sevendigital/client.rb +15 -6
- data/lib/sevendigital/client_configuration.rb +0 -3
- data/lib/sevendigital/client_digestors.rb +15 -0
- data/lib/sevendigital/client_managers.rb +11 -1
- data/lib/sevendigital/digestion_tract/api_response_digestor.rb +31 -40
- data/lib/sevendigital/digestion_tract/artist_digestor.rb +16 -13
- data/lib/sevendigital/digestion_tract/basket_digestor.rb +5 -5
- data/lib/sevendigital/digestion_tract/basket_item_digestor.rb +12 -12
- data/lib/sevendigital/digestion_tract/chart_item_digestor.rb +17 -11
- data/lib/sevendigital/digestion_tract/country_digestor.rb +16 -0
- data/lib/sevendigital/digestion_tract/digestor.rb +82 -28
- data/lib/sevendigital/digestion_tract/download_url_digestor.rb +10 -7
- data/lib/sevendigital/digestion_tract/format_digestor.rb +11 -9
- data/lib/sevendigital/digestion_tract/label_digestor.rb +8 -7
- data/lib/sevendigital/digestion_tract/list_digestor.rb +24 -0
- data/lib/sevendigital/digestion_tract/list_item_digestor.rb +26 -0
- data/lib/sevendigital/digestion_tract/locker_digestor.rb +9 -5
- data/lib/sevendigital/digestion_tract/locker_release_digestor.rb +13 -7
- data/lib/sevendigital/digestion_tract/locker_track_digestor.rb +13 -9
- data/lib/sevendigital/digestion_tract/oauth_access_token_digestor.rb +7 -3
- data/lib/sevendigital/digestion_tract/oauth_request_token_digestor.rb +7 -3
- data/lib/sevendigital/digestion_tract/pager_digestor.rb +13 -9
- data/lib/sevendigital/digestion_tract/price_digestor.rb +15 -12
- data/lib/sevendigital/digestion_tract/release_digestor.rb +26 -34
- data/lib/sevendigital/digestion_tract/tag_digestor.rb +8 -7
- data/lib/sevendigital/digestion_tract/track_digestor.rb +27 -28
- data/lib/sevendigital/digestion_tract/user_card_digestor.rb +9 -8
- data/lib/sevendigital/digestion_tract/user_digestor.rb +8 -7
- data/lib/sevendigital/management/artist_manager.rb +9 -11
- data/lib/sevendigital/management/basket_manager.rb +4 -4
- data/lib/sevendigital/management/country_manager.rb +11 -0
- data/lib/sevendigital/management/list_manager.rb +18 -0
- data/lib/sevendigital/management/oauth_manager.rb +2 -2
- data/lib/sevendigital/management/release_manager.rb +9 -11
- data/lib/sevendigital/management/tag_manager.rb +1 -1
- data/lib/sevendigital/management/track_manager.rb +4 -5
- data/lib/sevendigital/management/user_card_manager.rb +2 -2
- data/lib/sevendigital/management/user_manager.rb +9 -4
- data/lib/sevendigital/model/api_response.rb +12 -4
- data/lib/sevendigital/model/artist.rb +5 -0
- data/lib/sevendigital/model/list.rb +5 -0
- data/lib/sevendigital/model/list_item.rb +9 -0
- data/lib/sevendigital/model/release.rb +2 -2
- data/lib/sevendigital/model/sevendigital_object.rb +1 -1
- data/lib/sevendigital/model/user.rb +12 -1
- data/lib/sevendigital/pager.rb +2 -6
- data/lib/sevendigital/version.rb +1 -1
- data/spec/api_operator_cached_spec.rb +14 -14
- data/spec/api_operator_spec.rb +18 -34
- data/spec/digestion_tract/api_response_digestor_spec.rb +26 -25
- data/spec/digestion_tract/artist_digestor_spec.rb +9 -9
- data/spec/digestion_tract/basket_digestor_spec.rb +2 -2
- data/spec/digestion_tract/basket_item_digestor_spec.rb +4 -4
- data/spec/digestion_tract/chart_digestor_spec.rb +4 -4
- data/spec/digestion_tract/country_digestor_spec.rb +33 -0
- data/spec/digestion_tract/digestor_spec.rb +34 -0
- data/spec/digestion_tract/download_url_digestor_spec.rb +2 -2
- data/spec/digestion_tract/format_digestor_spec.rb +2 -2
- data/spec/digestion_tract/label_digestor_spec.rb +2 -2
- data/spec/digestion_tract/list_digestor_spec.rb +32 -0
- data/spec/digestion_tract/list_item_digestor_spec.rb +80 -0
- data/spec/digestion_tract/locker_digestor_spec.rb +2 -2
- data/spec/digestion_tract/locker_release_digestor_spec.rb +5 -5
- data/spec/digestion_tract/locker_track_digestor_spec.rb +4 -4
- data/spec/digestion_tract/oauth_access_token_digestor_spec.rb +2 -2
- data/spec/digestion_tract/oauth_request_token_digestor_spec.rb +2 -2
- data/spec/digestion_tract/pager_digestor_spec.rb +3 -3
- data/spec/digestion_tract/price_digestor_spec.rb +4 -4
- data/spec/digestion_tract/release_digestor_spec.rb +19 -5
- data/spec/digestion_tract/tag_digestor_spec.rb +3 -3
- data/spec/digestion_tract/track_digestor_spec.rb +4 -4
- data/spec/digestion_tract/user_card_digestor_spec.rb +5 -5
- data/spec/digestion_tract/user_digestor_spec.rb +4 -6
- data/spec/integration/artist_spec.rb +86 -0
- data/spec/integration/country_spec.rb +18 -0
- data/spec/integration/list_spec.rb +22 -0
- data/spec/integration/purchasing_spec.rb +24 -0
- data/spec/integration/release_spec.rb +34 -0
- data/spec/integration/sevendigital_spec.yml +5 -0
- data/spec/integration/track_spec.rb +23 -0
- data/spec/integration/user_spec.rb +22 -0
- data/spec/management/artist_manager_spec.rb +32 -11
- data/spec/management/basket_manager_spec.rb +4 -4
- data/spec/management/country_manager_spec.rb +34 -0
- data/spec/management/list_manager_spec.rb +27 -0
- data/spec/management/oauth_manager_spec.rb +4 -4
- data/spec/management/release_manager_spec.rb +13 -13
- data/spec/management/tag_manager_spec.rb +1 -1
- data/spec/management/track_manager_spec.rb +4 -4
- data/spec/management/user_card_manager_spec.rb +2 -2
- data/spec/management/user_manager_spec.rb +20 -4
- data/spec/model/api_response_spec.rb +3 -3
- data/spec/model/artist_spec.rb +2 -2
- data/spec/model/sevendigital_object_spec.rb +4 -4
- data/spec/model/user_spec.rb +21 -0
- data/spec/spec_helper.rb +31 -11
- data/spec/test-xml/methods/country/resolve.xml +7 -0
- data/spec/test-xml/methods/editorial/list.xml +171 -0
- data/spec/test-xml/methods/user/details.xml +5 -0
- data/spec/test-xml/objects/artist.xml +1 -0
- data/spec/test-xml/objects/list.xml +89 -0
- data/spec/test-xml/objects/list_item_list.xml +86 -0
- data/spec/test-xml/objects/list_item_release.xml +14 -0
- data/spec/test-xml/objects/nested_release_list.xml +23 -0
- metadata +126 -273
- data/lib/sevendigital/peachy_patchy.rb +0 -9
- data/lib/sevendigital/proxy_police.rb +0 -28
- data/spec/coverage/assets/0.3.9/app.js +0 -66
- data/spec/coverage/assets/0.3.9/fancybox/blank.gif +0 -0
- data/spec/coverage/assets/0.3.9/fancybox/fancy_close.png +0 -0
- data/spec/coverage/assets/0.3.9/fancybox/fancy_loading.png +0 -0
- data/spec/coverage/assets/0.3.9/fancybox/fancy_nav_left.png +0 -0
- data/spec/coverage/assets/0.3.9/fancybox/fancy_nav_right.png +0 -0
- data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_e.png +0 -0
- data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_n.png +0 -0
- data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_ne.png +0 -0
- data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_nw.png +0 -0
- data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_s.png +0 -0
- data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_se.png +0 -0
- data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_sw.png +0 -0
- data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_w.png +0 -0
- data/spec/coverage/assets/0.3.9/fancybox/fancy_title_left.png +0 -0
- data/spec/coverage/assets/0.3.9/fancybox/fancy_title_main.png +0 -0
- data/spec/coverage/assets/0.3.9/fancybox/fancy_title_over.png +0 -0
- data/spec/coverage/assets/0.3.9/fancybox/fancy_title_right.png +0 -0
- data/spec/coverage/assets/0.3.9/fancybox/fancybox-x.png +0 -0
- data/spec/coverage/assets/0.3.9/fancybox/fancybox-y.png +0 -0
- data/spec/coverage/assets/0.3.9/fancybox/fancybox.png +0 -0
- data/spec/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.css +0 -363
- data/spec/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.pack.js +0 -44
- data/spec/coverage/assets/0.3.9/favicon.png +0 -0
- data/spec/coverage/assets/0.3.9/jquery-1.4.2.min.js +0 -155
- data/spec/coverage/assets/0.3.9/jquery.dataTables.min.js +0 -152
- data/spec/coverage/assets/0.3.9/jquery.timeago.js +0 -141
- data/spec/coverage/assets/0.3.9/jquery.url.js +0 -174
- data/spec/coverage/assets/0.3.9/loading.gif +0 -0
- data/spec/coverage/assets/0.3.9/magnify.png +0 -0
- data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/spec/coverage/assets/0.3.9/smoothness/jquery-ui-1.8.4.custom.css +0 -295
- data/spec/coverage/assets/0.3.9/stylesheet.css +0 -341
- data/spec/coverage/index.html +0 -47481
- data/spec/coverage/resultset.yml +0 -3556
- data/spec/model/coverage/assets/0.3.9/app.js +0 -66
- data/spec/model/coverage/assets/0.3.9/fancybox/blank.gif +0 -0
- data/spec/model/coverage/assets/0.3.9/fancybox/fancy_close.png +0 -0
- data/spec/model/coverage/assets/0.3.9/fancybox/fancy_loading.png +0 -0
- data/spec/model/coverage/assets/0.3.9/fancybox/fancy_nav_left.png +0 -0
- data/spec/model/coverage/assets/0.3.9/fancybox/fancy_nav_right.png +0 -0
- data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_e.png +0 -0
- data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_n.png +0 -0
- data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_ne.png +0 -0
- data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_nw.png +0 -0
- data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_s.png +0 -0
- data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_se.png +0 -0
- data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_sw.png +0 -0
- data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_w.png +0 -0
- data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_left.png +0 -0
- data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_main.png +0 -0
- data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_over.png +0 -0
- data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_right.png +0 -0
- data/spec/model/coverage/assets/0.3.9/fancybox/fancybox-x.png +0 -0
- data/spec/model/coverage/assets/0.3.9/fancybox/fancybox-y.png +0 -0
- data/spec/model/coverage/assets/0.3.9/fancybox/fancybox.png +0 -0
- data/spec/model/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.css +0 -363
- data/spec/model/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.pack.js +0 -44
- data/spec/model/coverage/assets/0.3.9/favicon.png +0 -0
- data/spec/model/coverage/assets/0.3.9/jquery-1.4.2.min.js +0 -155
- data/spec/model/coverage/assets/0.3.9/jquery.dataTables.min.js +0 -152
- data/spec/model/coverage/assets/0.3.9/jquery.timeago.js +0 -141
- data/spec/model/coverage/assets/0.3.9/jquery.url.js +0 -174
- data/spec/model/coverage/assets/0.3.9/loading.gif +0 -0
- data/spec/model/coverage/assets/0.3.9/magnify.png +0 -0
- data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/spec/model/coverage/assets/0.3.9/smoothness/jquery-ui-1.8.4.custom.css +0 -295
- data/spec/model/coverage/assets/0.3.9/stylesheet.css +0 -341
- data/spec/model/coverage/index.html +0 -8637
- data/spec/model/coverage/resultset.yml +0 -642
- data/spec/pager_spec.rb +0 -7
- data/spec/peachy_spec_helper_patch.rb +0 -7
- data/spec/proxy_police_spec.rb +0 -70
- data/spec/sevendigital_spec.rb +0 -51
- data/spec/sevendigital_spec.yml +0 -5
@@ -37,8 +37,8 @@ module Sevendigital
|
|
37
37
|
def price(options={})
|
38
38
|
begin
|
39
39
|
demand_price(options) if @api_client.configuration.lazy_load
|
40
|
-
rescue
|
41
|
-
|
40
|
+
rescue Sevendigital::SevendigitalError => error
|
41
|
+
@api_client.log(:verbose) { "Release: Error while lazyloading price - #{error.error_code} #{error.error_message}" }
|
42
42
|
raise error if !@api_client.configuration.ignorant_lazy_load
|
43
43
|
end
|
44
44
|
@price
|
@@ -25,7 +25,7 @@ class Class # :nodoc:
|
|
25
25
|
begin
|
26
26
|
send(demand_method, *options) if instance_variable_get("@#{accessor}").nil? && @api_client.configuration.lazy_load
|
27
27
|
rescue Sevendigital::SevendigitalError => error
|
28
|
-
|
28
|
+
@api_client.log(:verbose) { "Class: Error whilse lazyloading #{accessor} - #{error.error_code} #{error.error_message}" }
|
29
29
|
raise error if !@api_client.configuration.ignorant_lazy_load
|
30
30
|
end
|
31
31
|
instance_variable_get("@#{accessor}")
|
@@ -2,7 +2,11 @@ module Sevendigital
|
|
2
2
|
|
3
3
|
class User < SevendigitalObject
|
4
4
|
|
5
|
-
attr_accessor :oauth_access_token, :id, :type
|
5
|
+
attr_accessor :oauth_access_token, :id, :type
|
6
|
+
|
7
|
+
#Artist image URL (optional lazy-loaded property)
|
8
|
+
#@return [String]
|
9
|
+
sevendigital_basic_property :email_address
|
6
10
|
|
7
11
|
sevendigital_extended_property :locker
|
8
12
|
|
@@ -12,6 +16,13 @@ module Sevendigital
|
|
12
16
|
return !@oauth_access_token.nil?
|
13
17
|
end
|
14
18
|
|
19
|
+
def get_details(options={})
|
20
|
+
raise Sevendigital::SevendigitalError if !authenticated?
|
21
|
+
user_with_details = @api_client.user.get_details(@oauth_access_token, options)
|
22
|
+
copy_basic_properties_from(user_with_details)
|
23
|
+
user_with_details
|
24
|
+
end
|
25
|
+
|
15
26
|
def get_locker(options={})
|
16
27
|
raise Sevendigital::SevendigitalError if !authenticated?
|
17
28
|
@api_client.user.get_locker(@oauth_access_token, options)
|
data/lib/sevendigital/pager.rb
CHANGED
@@ -4,11 +4,9 @@ rescue LoadError
|
|
4
4
|
end
|
5
5
|
|
6
6
|
module Sevendigital
|
7
|
-
|
8
7
|
#@private
|
9
8
|
#internal class used to page array results if will_paginate is available
|
10
9
|
class Pager # :nodoc:
|
11
|
-
|
12
10
|
attr_accessor :page, :page_size, :total_items
|
13
11
|
|
14
12
|
def paginate_list(list)
|
@@ -16,9 +14,7 @@ module Sevendigital
|
|
16
14
|
paged_list = WillPaginate::Collection.create(@page, @page_size, @total_items) do |pager|
|
17
15
|
pager.replace(list)
|
18
16
|
end
|
19
|
-
|
17
|
+
paged_list
|
20
18
|
end
|
21
|
-
|
22
19
|
end
|
23
|
-
|
24
|
-
end
|
20
|
+
end
|
data/lib/sevendigital/version.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
require 'ostruct'
|
3
|
+
require 'time'
|
3
4
|
|
4
5
|
describe "ApiOperatorCached" do
|
5
6
|
|
6
7
|
before do
|
7
|
-
|
8
|
-
@client
|
9
|
-
@client.stub!(:very_verbose?).and_return(false)
|
8
|
+
conf = test_configuration
|
9
|
+
@client = stub_api_client(conf)
|
10
10
|
@cache = stub(Hash)
|
11
11
|
@cached_operator = Sevendigital::ApiOperatorCached.new(@client, @cache)
|
12
12
|
@stub_api_request = stub_api_request()
|
@@ -40,7 +40,7 @@ describe "ApiOperatorCached" do
|
|
40
40
|
@cache.stub!(:get).with("key").and_return(http_response)
|
41
41
|
@cached_operator.stub!(:response_out_of_date?).with(http_response).and_return(false)
|
42
42
|
@cached_operator.should_not_receive(:make_http_request)
|
43
|
-
@cached_operator.
|
43
|
+
@cached_operator.should_not_receive(:digest_http_response).with(http_response)
|
44
44
|
@cached_operator.call_api(@stub_api_request)
|
45
45
|
end
|
46
46
|
|
@@ -74,13 +74,14 @@ describe "ApiOperatorCached" do
|
|
74
74
|
|
75
75
|
it "should cache uncached api response if request was not signed" do
|
76
76
|
http_response = stub_http_response()
|
77
|
+
api_response = stub_api_response()
|
77
78
|
|
78
79
|
@cached_operator.stub(:create_request_uri).and_return("key")
|
79
80
|
@cache.stub!(:get).with("key").and_return(nil)
|
80
81
|
@cached_operator.stub!(:make_http_request).and_return(http_response)
|
81
|
-
@cached_operator.stub!(:digest_http_response)
|
82
|
+
@cached_operator.stub!(:digest_http_response).with(http_response).and_return(api_response)
|
82
83
|
|
83
|
-
@cache.should_receive(:set).with("key",
|
84
|
+
@cache.should_receive(:set).with("key", api_response).and_return(nil)
|
84
85
|
@cached_operator.call_api(@stub_api_request)
|
85
86
|
end
|
86
87
|
|
@@ -90,7 +91,7 @@ describe "ApiOperatorCached" do
|
|
90
91
|
max_age = 12*60*60
|
91
92
|
|
92
93
|
http_response = stub_http_response
|
93
|
-
http_response.stub!(:
|
94
|
+
http_response.stub!(:headers).and_return({
|
94
95
|
"cache-control" => "private, max-age=#{max_age}",
|
95
96
|
"Date" => yesterday.httpdate
|
96
97
|
})
|
@@ -106,7 +107,7 @@ describe "ApiOperatorCached" do
|
|
106
107
|
max_age = 48*60*60
|
107
108
|
|
108
109
|
http_response = stub_http_response
|
109
|
-
http_response.stub!(:
|
110
|
+
http_response.stub!(:headers).and_return({
|
110
111
|
"cache-control" => "private, max-age=#{max_age}",
|
111
112
|
"Date" => yesterday.httpdate
|
112
113
|
})
|
@@ -118,10 +119,10 @@ describe "ApiOperatorCached" do
|
|
118
119
|
it "response should be out of date if it is missing caching headers" do
|
119
120
|
|
120
121
|
http_response = stub_http_response
|
121
|
-
http_response.stub!(:
|
122
|
+
http_response.stub!(:headers).and_return({})
|
122
123
|
@cached_operator.response_out_of_date?(http_response, Time.now.utc).should == true
|
123
124
|
|
124
|
-
http_response.stub!(:
|
125
|
+
http_response.stub!(:headers).and_return({
|
125
126
|
"Date" => Time.now.utc.httpdate
|
126
127
|
})
|
127
128
|
@cached_operator.response_out_of_date?(http_response, Time.now.utc).should == true
|
@@ -131,7 +132,7 @@ describe "ApiOperatorCached" do
|
|
131
132
|
it "response should be out of date if no max-age has been specified" do
|
132
133
|
|
133
134
|
http_response = stub_http_response
|
134
|
-
http_response.stub!(:
|
135
|
+
http_response.stub!(:headers).and_return({"cache-control" => "no-cache", "Date" => Time.now.utc.httpdate})
|
135
136
|
@cached_operator.response_out_of_date?(http_response, Time.now.utc).should == true
|
136
137
|
|
137
138
|
end
|
@@ -139,7 +140,7 @@ describe "ApiOperatorCached" do
|
|
139
140
|
it "response should be out of date if it is missing Date header" do
|
140
141
|
|
141
142
|
http_response = stub_http_response
|
142
|
-
http_response.stub!(:
|
143
|
+
http_response.stub!(:headers).and_return({"cache-control" => "private, max-age=#{2**30}"})
|
143
144
|
@cached_operator.response_out_of_date?(http_response, Time.now.utc).should == true
|
144
145
|
|
145
146
|
end
|
@@ -150,8 +151,7 @@ describe "ApiOperatorCached" do
|
|
150
151
|
end
|
151
152
|
|
152
153
|
def stub_http_response
|
153
|
-
|
154
|
-
http_response
|
154
|
+
stub(Net::HTTP)
|
155
155
|
end
|
156
156
|
|
157
157
|
def stub_time(time)
|
data/spec/api_operator_spec.rb
CHANGED
@@ -6,11 +6,11 @@ describe "ApiOperator" do
|
|
6
6
|
|
7
7
|
before do
|
8
8
|
response_digestor = stub(Sevendigital::ApiResponseDigestor)
|
9
|
-
response_digestor.stub!(:from_http_response). and_return(
|
9
|
+
response_digestor.stub!(:from_http_response). and_return(fake_api_response)
|
10
10
|
|
11
11
|
stub_api_client(test_configuration, response_digestor)
|
12
12
|
|
13
|
-
Net::HTTP.stub!(:get_response).and_return(
|
13
|
+
Net::HTTP.stub!(:get_response).and_return(fake_http_response)
|
14
14
|
|
15
15
|
@api_operator = Sevendigital::ApiOperator.new(@client)
|
16
16
|
|
@@ -140,7 +140,7 @@ describe "ApiOperator" do
|
|
140
140
|
|
141
141
|
it "should make HTTP request and get http response" do
|
142
142
|
|
143
|
-
http_response =
|
143
|
+
http_response = fake_http_response
|
144
144
|
|
145
145
|
@stub_http_request = stub(Net::HTTP::Get)
|
146
146
|
@stub_http_client = stub(Net::HTTP)
|
@@ -157,8 +157,8 @@ describe "ApiOperator" do
|
|
157
157
|
|
158
158
|
it "should digest the HTTP response and get it out" do
|
159
159
|
|
160
|
-
http_response =
|
161
|
-
digested_response =
|
160
|
+
http_response = fake_http_response
|
161
|
+
digested_response = fake_api_response
|
162
162
|
|
163
163
|
@client.api_response_digestor.should_receive(:from_http_response).with(http_response).and_return(digested_response)
|
164
164
|
|
@@ -170,8 +170,8 @@ describe "ApiOperator" do
|
|
170
170
|
|
171
171
|
it "should call API by making an http request and digesting the response" do
|
172
172
|
|
173
|
-
http_response =
|
174
|
-
digested_response =
|
173
|
+
http_response = fake_http_response
|
174
|
+
digested_response = fake_api_response
|
175
175
|
|
176
176
|
@api_operator.should_receive(:make_http_request).and_return(http_response)
|
177
177
|
|
@@ -185,10 +185,10 @@ describe "ApiOperator" do
|
|
185
185
|
|
186
186
|
it "should throw an exception if response is not ok" do
|
187
187
|
|
188
|
-
failed_response =
|
188
|
+
failed_response = fake_api_response(false)
|
189
189
|
failed_response.stub!(:error_code).and_return(4000)
|
190
190
|
failed_response.stub!(:error_message).and_return("error")
|
191
|
-
@api_operator.should_receive(:make_http_request).and_return(
|
191
|
+
@api_operator.should_receive(:make_http_request).and_return(fake_http_response)
|
192
192
|
@client.api_response_digestor.stub!(:from_http_response).and_return(failed_response)
|
193
193
|
|
194
194
|
running { @api_operator.call_api(@stub_api_request) }.should raise_error(Sevendigital::SevendigitalError) { |error|
|
@@ -293,35 +293,19 @@ describe "ApiOperator" do
|
|
293
293
|
signed_uri.should =~ /https:\/\/base.api.url\/version\/api\/method/
|
294
294
|
end
|
295
295
|
|
296
|
-
def
|
297
|
-
|
298
|
-
|
299
|
-
|
296
|
+
def fake_http_response(code = 200, body = "response_body")
|
297
|
+
http_stub = stub('Net::HTTPResponse')
|
298
|
+
http_stub.stub!(:code => code, :body => body, :header => {})
|
299
|
+
http_stub
|
300
|
+
#Net::HTTP.new("1.1", code, body).tap {|r| puts r.inspect}
|
300
301
|
end
|
301
302
|
|
302
|
-
def fake_api_response(
|
303
|
-
|
303
|
+
def fake_api_response(is_ok = true)
|
304
|
+
r = stub(Sevendigital::ApiResponse)
|
305
|
+
r.stub(:ok?).and_return(is_ok)
|
306
|
+
r
|
304
307
|
end
|
305
308
|
|
306
|
-
def fake_digested_response(is_ok = true)
|
307
|
-
proxy = stub(Peachy::Proxy)#.new('<response status="ok"><content>test</content></response>')
|
308
|
-
proxy.stub!(:ok?).and_return(is_ok)
|
309
|
-
proxy
|
310
|
-
end
|
311
|
-
|
312
|
-
def stub_api_client(configuration, response_digestor)
|
313
|
-
@client = stub(Sevendigital::Client)
|
314
|
-
@client.stub!(:configuration).and_return(configuration)
|
315
|
-
@client.stub!(:oauth_consumer).and_return(OAuth::Consumer.new( configuration.oauth_consumer_key, configuration.oauth_consumer_secret))
|
316
|
-
@client.stub!(:api_response_digestor).and_return(response_digestor)
|
317
|
-
@client.stub!(:default_parameters).and_return({:country => 'sk'})
|
318
|
-
@client.stub!(:user_agent_info).and_return("7digital")
|
319
|
-
@client.stub!(:verbose?).and_return(false)
|
320
|
-
@client.stub!(:very_verbose?).and_return(false)
|
321
|
-
@client.stub!(:api_host_and_version).and_return(["base.api.url","version"])
|
322
|
-
|
323
|
-
end
|
324
|
-
|
325
309
|
def stub_api_request
|
326
310
|
api_request = stub(Sevendigital::ApiRequest)
|
327
311
|
|
@@ -7,14 +7,13 @@ describe "ApiResponseDigestor" do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
it "should create a response with body from http ok response" do
|
10
|
+
body = '<response status="ok"></response>'
|
10
11
|
|
11
|
-
stub_http_response =
|
12
|
-
stub_http_response.stub!(:is_a?).with(Net::HTTPSuccess).and_return(true)
|
13
|
-
stub_http_response.stub!(:body).and_return('<response status="ok"></response>')
|
14
|
-
stub_http_response.stub!(:header).and_return(nil)
|
12
|
+
stub_http_response = stub_ok_http_response(body)
|
15
13
|
|
16
14
|
response = @api_response_digestor.from_http_response(stub_http_response)
|
17
15
|
response.error_code.should == 0
|
16
|
+
response.content.should == body
|
18
17
|
end
|
19
18
|
|
20
19
|
it "should create an error response from http non-ok response" do
|
@@ -36,9 +35,7 @@ describe "ApiResponseDigestor" do
|
|
36
35
|
|
37
36
|
it "should store headers from http response" do
|
38
37
|
|
39
|
-
stub_http_response =
|
40
|
-
stub_http_response.stub!(:is_a?).with(Net::HTTPSuccess).and_return(true)
|
41
|
-
stub_http_response.stub!(:body).and_return('<response status="ok"></response>')
|
38
|
+
stub_http_response = stub_ok_http_response('<response status="ok"></response>')
|
42
39
|
stub_http_response.stub!(:header).and_return({"cache-control" => "test", "date" => "now"})
|
43
40
|
|
44
41
|
response = @api_response_digestor.from_http_response(stub_http_response)
|
@@ -48,45 +45,49 @@ describe "ApiResponseDigestor" do
|
|
48
45
|
|
49
46
|
|
50
47
|
it "should create a response with body from xml ok response" do
|
51
|
-
|
52
|
-
|
53
|
-
<response status="ok"><test>aaa</test></response>
|
54
|
-
XML
|
55
|
-
response = @api_response_digestor.from_xml(xml_response)
|
48
|
+
xml_response = stub_ok_http_response("<response status=\"ok\">body</response>")
|
49
|
+
response = @api_response_digestor.from_http_response(xml_response)
|
56
50
|
response.error_code.should == 0
|
57
|
-
response.content.test.should_not == nil
|
58
|
-
response.content.nothing.should == nil
|
59
51
|
end
|
60
52
|
|
61
53
|
|
62
54
|
it "should create a response with error details from xml error response" do
|
63
55
|
|
64
|
-
xml_response =
|
65
|
-
|
56
|
+
xml_response = stub_ok_http_response(
|
57
|
+
'<response status="error"><error code="1000"><errorMessage>expected error message</errorMessage></error></response>')
|
58
|
+
response = @api_response_digestor.from_http_response(xml_response)
|
66
59
|
response.error_code.should == 1000
|
67
60
|
response.error_message.should == 'expected error message'
|
68
61
|
end
|
69
62
|
|
70
63
|
it "should create a response with error details from invalid xml response" do
|
71
64
|
|
72
|
-
xml_response = '<wrongresponse status="ok"><test /></wrongresponse>'
|
73
|
-
response = @api_response_digestor.
|
74
|
-
response.error_code.should ==
|
65
|
+
xml_response = stub_ok_http_response('<wrongresponse status="ok"><test /></wrongresponse>')
|
66
|
+
response = @api_response_digestor.from_http_response(xml_response)
|
67
|
+
response.error_code.should == 10001
|
75
68
|
response.error_message.should == 'Invalid 7digital API response'
|
76
69
|
|
77
|
-
xml_response = '<response><test /></response>'
|
78
|
-
response = @api_response_digestor.
|
79
|
-
response.error_code.should ==
|
70
|
+
xml_response = stub_ok_http_response('<response><test /></response>')
|
71
|
+
response = @api_response_digestor.from_http_response(xml_response)
|
72
|
+
response.error_code.should == 10001
|
80
73
|
response.error_message.should == 'Invalid 7digital API response'
|
81
74
|
end
|
82
75
|
|
83
76
|
|
84
77
|
it "should create a response with error details from valid xml response with invalid status" do
|
85
78
|
|
86
|
-
xml_response = '<response status="unkown"><test></test></response>'
|
87
|
-
response = @api_response_digestor.
|
88
|
-
response.error_code.should ==
|
79
|
+
xml_response = stub_ok_http_response('<response status="unkown"><test></test></response>')
|
80
|
+
response = @api_response_digestor.from_http_response(xml_response)
|
81
|
+
response.error_code.should == 10001
|
89
82
|
response.error_message.should == 'Invalid 7digital API response'
|
83
|
+
end
|
84
|
+
|
85
|
+
def stub_ok_http_response(body)
|
86
|
+
stub_http_response = stub(Net::HTTPSuccess)
|
87
|
+
stub_http_response.stub!(:is_a?).with(Net::HTTPSuccess).and_return(true)
|
88
|
+
stub_http_response.stub!(:body).and_return(body)
|
89
|
+
stub_http_response.stub!(:header).and_return(nil)
|
90
|
+
stub_http_response
|
90
91
|
end
|
91
92
|
|
92
93
|
end
|
@@ -14,7 +14,7 @@ describe "ArtistDigestor" do
|
|
14
14
|
</release>
|
15
15
|
XML
|
16
16
|
|
17
|
-
running {@artist_digestor.
|
17
|
+
running {@artist_digestor.from_xml_string(xml_response)}.should raise_error(Sevendigital::DigestiveProblem)
|
18
18
|
|
19
19
|
end
|
20
20
|
|
@@ -26,29 +26,29 @@ XML
|
|
26
26
|
</artist>
|
27
27
|
XML
|
28
28
|
|
29
|
-
artist = @artist_digestor.
|
29
|
+
artist = @artist_digestor.from_xml_string(xml_response)
|
30
30
|
artist.id.should == 123
|
31
31
|
artist.name.should == "expected artist name"
|
32
32
|
end
|
33
33
|
|
34
|
-
|
34
|
+
it "should digest artist xml and populate all available properties" do
|
35
35
|
|
36
36
|
xml_response = load_sample_object_xml("artist")
|
37
|
-
|
38
|
-
artist = @artist_digestor.from_xml(xml_response)
|
37
|
+
artist = @artist_digestor.from_xml_string(xml_response)
|
39
38
|
artist.id.should == 123
|
40
39
|
artist.name.should == "The Expected Artist"
|
41
40
|
artist.sort_name.should == "Expected Artist, The"
|
42
41
|
artist.appears_as.should == "The E.A."
|
43
42
|
artist.image.should == "http://somewhere.com/tea.jpg"
|
44
43
|
artist.url.should == "http://7digital.com/artists/tea?partner=1"
|
45
|
-
|
44
|
+
artist.popularity.should == 0.55
|
45
|
+
end
|
46
46
|
|
47
47
|
it "should digest xml containing list of artists and return a paginated array" do
|
48
48
|
|
49
49
|
xml_response = load_sample_object_xml("artist_list")
|
50
50
|
|
51
|
-
artists = @artist_digestor.
|
51
|
+
artists = @artist_digestor.list_from_xml_string(xml_response, :artists)
|
52
52
|
artists[0].id.should == 14
|
53
53
|
artists[1].id.should == 20
|
54
54
|
artists[2].id.should == 106
|
@@ -61,7 +61,7 @@ XML
|
|
61
61
|
|
62
62
|
xml_response = load_sample_object_xml("artist_list_empty")
|
63
63
|
|
64
|
-
artists = @artist_digestor.
|
64
|
+
artists = @artist_digestor.list_from_xml_string(xml_response, :artists)
|
65
65
|
artists.size.should == 0
|
66
66
|
artists.total_entries.should == 0
|
67
67
|
|
@@ -75,7 +75,7 @@ XML
|
|
75
75
|
</release>
|
76
76
|
XML
|
77
77
|
|
78
|
-
running {@artist_digestor.
|
78
|
+
running {@artist_digestor.list_from_xml_string(xml_response)}.should raise_error(Sevendigital::DigestiveProblem)
|
79
79
|
|
80
80
|
end
|
81
81
|
|
@@ -16,14 +16,14 @@ describe "BasketDigestor" do
|
|
16
16
|
</zzz>
|
17
17
|
XML
|
18
18
|
|
19
|
-
running {@basket_digestor.
|
19
|
+
running {@basket_digestor.from_xml_string(xml_response)}.should raise_error(Sevendigital::DigestiveProblem)
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should parse from Basket xml and populate all properties" do
|
23
23
|
|
24
24
|
xml_response = load_sample_object_xml("basket")
|
25
25
|
|
26
|
-
basket = @basket_digestor.
|
26
|
+
basket = @basket_digestor.from_xml_string(xml_response)
|
27
27
|
basket.id.should == "00000000-0000-0000-0000-000000000000"
|
28
28
|
basket.basket_items.size == 1
|
29
29
|
basket.basket_items[0].id == 15284882
|