tshield 0.11.4.0 → 0.11.5.0

Sign up to get free protection for your applications and to get access to all the features.
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