tshield 0.11.4.0 → 0.11.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: afd27837ea8b2aca8d06eea8726227d469761c386747df55befa5e0f27b01063
4
- data.tar.gz: 5cf7e45011c49c97d27cdb71ad44c806aac90d3d7fd33c95163599293cf47c92
3
+ metadata.gz: 7581fed92c9b0af76120edc8d9a4b9eff62e1f37c8eafa6a33a5712e918382d6
4
+ data.tar.gz: '018a8ca426a9af1bc6e374461e6f4748673cecf24358b332fd6c30a5ec433028'
5
5
  SHA512:
6
- metadata.gz: c029918be75df5ad240b64f96bf96538ec2f8625c13c8129622ed97ffc9d767dd7d32c719327c17d42e6aab159451dbe4100f59b0963f9ae304eadf3ad061c38
7
- data.tar.gz: 56bb5d05bf3fce5d0b1cd18dbf814a45eb9335e5458f9d2df501fa7fce101ab3bb92507343150403b33dd598d26366e5a824a95c28bb0dc902628a9b5af313ef
6
+ metadata.gz: 8afb34fe21d6e9d8813c46c42e2c8d64908d9f72badd51bd11e1c92ea4b37b23e159cc03f2ad85932cceda146446db351f32b3167f5a52200df5af8df7cbaf59
7
+ data.tar.gz: 5bf25b51e864b9f4b89a05158e5532582f86f21ceca0e24e2dafce2c2eb37235867686ecd8514ee6cecc061f4dd3247d83113f11f24eca25b89e9027103a1519
@@ -81,6 +81,9 @@ module TShield
81
81
  add_headers(headers, path)
82
82
 
83
83
  api_response ||= TShield::RequestVCR.new(path, options).response
84
+ api_response.headers.reject! do |key, _v|
85
+ configuration.get_excluded_headers(domain(path)).include?(key)
86
+ end
84
87
  end
85
88
 
86
89
  logger.info(
@@ -90,7 +93,7 @@ module TShield
90
93
  )
91
94
 
92
95
  status api_response.status
93
- headers api_response.headers.reject { |k, _v| configuration.get_excluded_headers(domain(path)).include?(k) }
96
+ headers api_response.headers
94
97
  body api_response.body
95
98
  end
96
99
 
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TShield
4
+ module Matching
5
+ # Filters used in request matching
6
+ module Filters
7
+ def find_stub(stubs)
8
+ result = filter_stubs(stubs[@options[:session]] || {})
9
+ return result if result
10
+
11
+ filter_stubs(stubs[DEFAULT_SESSION] || {}) unless @options[:session] == DEFAULT_SESSION
12
+ end
13
+
14
+ def filter_by_method(stubs)
15
+ stubs.select { |stub| stub['method'] == @options[:method] }
16
+ end
17
+
18
+ def filter_by_headers(stubs)
19
+ stubs.select { |stub| Filters.include_headers(stub['headers'], @options[:headers]) }
20
+ end
21
+
22
+ def filter_by_query(stubs)
23
+ stubs.select { |stub| Filters.include_query(stub['query'], @options[:raw_query] || '') }
24
+ end
25
+
26
+ def filter_stubs(stubs)
27
+ result = filter_by_query(filter_by_headers(filter_by_method(stubs[@path] || [])))
28
+ result[0]['response'] unless result.empty?
29
+ end
30
+
31
+ def self.include_headers(stub_headers, request_headers)
32
+ request_headers ||= {}
33
+ stub_headers ||= {}
34
+ result = stub_headers.reject { |key, value| request_headers[key.to_rack_name] == value }
35
+ result.empty? || stub_headers.empty?
36
+ end
37
+
38
+ def self.include_query(stub_query, raw_query)
39
+ request_query = Filters.build_query_hash(raw_query)
40
+ stub_query ||= {}
41
+ result = stub_query.reject { |key, value| request_query[key] == value.to_s }
42
+ result.empty? || stub_query.empty?
43
+ end
44
+
45
+ def self.build_query_hash(raw_query)
46
+ params = {}
47
+ raw_query.split('&').each do |query|
48
+ key, value = query.split('=')
49
+ params[key] = value
50
+ end
51
+
52
+ params
53
+ end
54
+ end
55
+ end
56
+ end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'tshield/matching/filters'
3
4
  require 'tshield/request'
4
5
 
5
6
  DEFAULT_SESSION = 'no-session'
@@ -7,6 +8,8 @@ DEFAULT_SESSION = 'no-session'
7
8
  module TShield
8
9
  # Class to check request matching
9
10
  class RequestMatching
11
+ include TShield::Matching::Filters
12
+
10
13
  attr_reader :matched
11
14
 
12
15
  def initialize(path, options = {})
@@ -21,41 +24,14 @@ module TShield
21
24
  end
22
25
 
23
26
  def match_request
24
- @matched = find_stub
27
+ @matched = find_stub(self.class.stubs)
25
28
  return unless matched
26
29
 
27
- TShield::Response.new(matched['body'],
30
+ TShield::Response.new(self.class.read_body(matched['body']),
28
31
  matched['headers'],
29
32
  matched['status'])
30
33
  end
31
34
 
32
- private
33
-
34
- def find_stub
35
- stubs = self.class.stubs
36
- result = filter_stubs(stubs[@options[:session]] || {})
37
- return result if result
38
-
39
- filter_stubs(stubs[DEFAULT_SESSION] || {}) unless @options[:session] == DEFAULT_SESSION
40
- end
41
-
42
- def filter_by_method(stubs)
43
- stubs.select { |stub| stub['method'] == @options[:method] }
44
- end
45
-
46
- def filter_by_headers(stubs)
47
- stubs.select { |stub| self.class.include_headers(stub['headers'], @options[:headers]) }
48
- end
49
-
50
- def filter_by_query(stubs)
51
- stubs.select { |stub| self.class.include_query(stub['query'], @options[:raw_query] || '') }
52
- end
53
-
54
- def filter_stubs(stubs)
55
- result = filter_by_query(filter_by_headers(filter_by_method(stubs[@path] || [])))
56
- result[0]['response'] unless result.empty?
57
- end
58
-
59
35
  class << self
60
36
  attr_reader :stubs
61
37
 
@@ -98,28 +74,10 @@ module TShield
98
74
  stubs[session_name][item['path']] << item
99
75
  end
100
76
 
101
- def include_headers(stub_headers, request_headers)
102
- request_headers ||= {}
103
- stub_headers ||= {}
104
- result = stub_headers.reject { |key, value| request_headers[key.to_rack_name] == value }
105
- result.empty? || stub_headers.empty?
106
- end
107
-
108
- def include_query(stub_query, raw_query)
109
- request_query = build_query_hash(raw_query)
110
- stub_query ||= {}
111
- result = stub_query.reject { |key, value| request_query[key] == value.to_s }
112
- result.empty? || stub_query.empty?
113
- end
114
-
115
- def build_query_hash(raw_query)
116
- params = {}
117
- raw_query.split('&').each do |query|
118
- key, value = query.split('=')
119
- params[key] = value
120
- end
77
+ def read_body(content)
78
+ return content.to_json if content.is_a? Hash
121
79
 
122
- params
80
+ content
123
81
  end
124
82
  end
125
83
  end
@@ -5,7 +5,7 @@ module TShield
5
5
  class Version
6
6
  MAJOR = 0
7
7
  MINOR = 11
8
- PATCH = 4
8
+ PATCH = 5
9
9
  PRE = 0
10
10
 
11
11
  class << self
@@ -19,6 +19,19 @@
19
19
  "body": "body content"
20
20
  }
21
21
  },
22
+ {
23
+ "method": "GET",
24
+ "path": "/matching/example.json",
25
+ "response": {
26
+ "status": 200,
27
+ "headers": {
28
+ "Content-Type": "application/json"
29
+ },
30
+ "body": {
31
+ "json": "content"
32
+ }
33
+ }
34
+ },
22
35
  {
23
36
  "method": "POST",
24
37
  "path": "/matching/example",
@@ -102,6 +102,18 @@ describe TShield::RequestMatching do
102
102
  expect(@response.status).to eql(201)
103
103
  end
104
104
  end
105
+ context 'on match by path and returns json' do
106
+ before :each do
107
+ @request_matching = TShield::RequestMatching
108
+ .new('/matching/example.json', method: 'GET')
109
+ end
110
+ it 'should return response object' do
111
+ @response = @request_matching.match_request
112
+ expect(@response.body).to eql('{"json":"content"}')
113
+ expect(@response.headers).to eql('Content-Type' => 'application/json')
114
+ expect(@response.status).to eql(200)
115
+ end
116
+ end
105
117
  context 'on match by path and method and query' do
106
118
  before :each do
107
119
  @request_matching = TShield::RequestMatching
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tshield
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.4.0
4
+ version: 0.11.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Diego Rubin
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-09-01 00:00:00.000000000 Z
12
+ date: 2019-09-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: byebug
@@ -354,6 +354,7 @@ files:
354
354
  - lib/tshield/counter.rb
355
355
  - lib/tshield/extensions/string_extensions.rb
356
356
  - lib/tshield/logger.rb
357
+ - lib/tshield/matching/filters.rb
357
358
  - lib/tshield/options.rb
358
359
  - lib/tshield/request.rb
359
360
  - lib/tshield/request_matching.rb