vacuum 2.2.0 → 3.4.0

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.
@@ -1,69 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'minitest/autorun'
4
- require 'vcr'
5
- require_relative '../lib/vacuum'
6
-
7
- ENV['AWS_ACCESS_KEY_ID'] ||= 'key'
8
- ENV['AWS_SECRET_ACCESS_KEY'] ||= 'secret'
9
-
10
- VCR.configure do |c|
11
- c.hook_into :excon
12
- c.cassette_library_dir = 'test/cassettes'
13
- c.default_cassette_options = {
14
- match_requests_on: [VCR.request_matchers.uri_without_param(
15
- 'AWSAccessKeyId', 'AssociateTag', 'Signature', 'Timestamp', 'Version'
16
- )],
17
- record: :new_episodes
18
- }
19
- end
20
-
21
- class TestIntegration < Minitest::Test
22
- include Vacuum
23
-
24
- def setup
25
- VCR.insert_cassette('vacuum')
26
- end
27
-
28
- def teardown
29
- VCR.eject_cassette
30
- end
31
-
32
- def test_happy_path
33
- req = Vacuum.new
34
- req.associate_tag = 'foo'
35
- params = { 'SearchIndex' => 'All', 'Keywords' => 'vacuum' }
36
- res = req.item_search(query: params)
37
- assert res.dig('ItemSearchResponse', 'Items', 'Item')
38
- end
39
-
40
- def test_encoding_issues
41
- params = { 'SearchIndex' => 'All', 'Keywords' => 'google' }
42
- titles = locales.flat_map do |locale|
43
- req = Vacuum.new(locale)
44
- req.associate_tag = 'foo'
45
- res = req.item_search(query: params)
46
- items = res.dig('ItemSearchResponse', 'Items', 'Item') || []
47
- items.map { |item| item['ItemAttributes']['Title'] }
48
- end
49
- encodings = titles.map { |t| t.encoding.name }.uniq
50
-
51
- # Newer JRuby now appears to return both US-ASCII and UTF-8, depending on
52
- # whether the string has non-ASCII characters. MRI will only return latter.
53
- assert(encodings.any? { |encoding| encoding == 'UTF-8' })
54
- end
55
-
56
- def test_unauthorized_errors
57
- req = Vacuum.new
58
- req.associate_tag = 'foo'
59
- params = { 'SearchIndex' => 'All', 'Keywords' => 'amazon' }
60
- res = req.item_search(query: params)
61
- assert_equal 'InvalidClientTokenId', res.dig('ItemSearchErrorResponse', 'Error', 'Code')
62
- end
63
-
64
- private
65
-
66
- def locales
67
- Request::HOSTS.keys
68
- end
69
- end
@@ -1,106 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'minitest/autorun'
4
- require_relative '../lib/vacuum'
5
-
6
- class TestVacuum < Minitest::Test
7
- include Vacuum
8
-
9
- def setup
10
- @req = Request.new
11
- end
12
-
13
- def teardown
14
- Excon.stubs.clear
15
- end
16
-
17
- def test_requires_valid_locale
18
- assert_raises(Request::BadLocale) { Request.new('foo') }
19
- end
20
-
21
- def test_defaults_to_us_endpoint
22
- assert_equal 'http://webservices.amazon.com/onca/xml', @req.aws_endpoint
23
- end
24
-
25
- def test_defaults_to_latest_api_version
26
- assert_equal Request::LATEST_VERSION, @req.version
27
- end
28
-
29
- def test_accepts_uk_as_locale
30
- Request.new('UK')
31
- end
32
-
33
- def test_accepts_mx_as_locale
34
- Request.new('MX')
35
- end
36
-
37
- def test_fetches_parsable_response
38
- Excon.stub({}, body: '<foo/>')
39
- res = @req.item_lookup({}, mock: true)
40
- refute_empty res.parse
41
- end
42
-
43
- def test_alternative_query_syntax
44
- Excon.stub({}, body: '<foo/>')
45
- res = @req.item_lookup(query: {}, mock: true)
46
- refute_empty res.parse
47
- end
48
-
49
- def test_force_encodes_body
50
- res = Object.new
51
- def res.body
52
- (+'').force_encoding(Encoding::ASCII_8BIT)
53
- end
54
- assert_equal 'UTF-8', Response.new(res).body.encoding.name
55
- end
56
-
57
- def test_sets_custom_parser_on_class_level
58
- original_parser = Response.parser
59
- Excon.stub({}, body: '<foo/>')
60
- parser = MiniTest::Mock.new
61
- parser.expect(:parse, '123', ['<foo/>'])
62
- Response.parser = parser
63
- res = @req.item_lookup(query: {}, mock: true)
64
- assert_equal '123', res.parse
65
- Response.parser = original_parser # clean up
66
- end
67
-
68
- def test_sets_custom_parser_on_instance_level
69
- Excon.stub({}, body: '<foo/>')
70
- res = @req.item_lookup(query: {}, mock: true)
71
- parser = MiniTest::Mock.new
72
- parser.expect(:parse, '123', ['<foo/>'])
73
- res.parser = parser
74
- assert_equal '123', res.parse
75
- end
76
-
77
- def test_casts_to_hash
78
- Excon.stub({}, body: '<foo/>')
79
- parser = MiniTest::Mock.new
80
- res = @req.item_lookup(query: {}, mock: true)
81
- assert_kind_of Hash, res.to_h
82
- res.parser = parser
83
- assert_kind_of Hash, res.to_h
84
- end
85
-
86
- def test_digs
87
- Excon.stub({}, body: '<foo><bar>baz</bar></foo>')
88
- parser = MiniTest::Mock.new
89
- res = @req.item_lookup(query: {}, mock: true)
90
- assert_equal 'baz', res.dig('foo', 'bar')
91
- res.parser = parser
92
- assert_equal 'baz', res.dig('foo', 'bar')
93
- end
94
-
95
- def test_handles_authorisation_errors
96
- Excon.stub({}, status: 400)
97
- res = @req.item_lookup(query: {}, mock: true)
98
- assert_equal 400, res.status
99
- assert_raises Excon::Error::BadRequest do
100
- @req.item_lookup(query: {}, expects: 200, mock: true)
101
- end
102
- Excon.stub({}, status: 403)
103
- res = @req.item_lookup(query: {}, mock: true)
104
- assert_equal 403, res.status
105
- end
106
- end