webmock 3.0.1 → 3.20.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (138) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +558 -2
  3. data/README.md +200 -42
  4. data/lib/webmock/api.rb +14 -0
  5. data/lib/webmock/assertion_failure.rb +2 -0
  6. data/lib/webmock/callback_registry.rb +2 -0
  7. data/lib/webmock/config.rb +2 -0
  8. data/lib/webmock/cucumber.rb +2 -0
  9. data/lib/webmock/deprecation.rb +2 -0
  10. data/lib/webmock/errors.rb +2 -0
  11. data/lib/webmock/http_lib_adapters/async_http_client_adapter.rb +223 -0
  12. data/lib/webmock/http_lib_adapters/curb_adapter.rb +21 -5
  13. data/lib/webmock/http_lib_adapters/em_http_request_adapter.rb +20 -9
  14. data/lib/webmock/http_lib_adapters/excon_adapter.rb +7 -2
  15. data/lib/webmock/http_lib_adapters/http_lib_adapter.rb +2 -0
  16. data/lib/webmock/http_lib_adapters/http_lib_adapter_registry.rb +2 -0
  17. data/lib/webmock/http_lib_adapters/http_rb/client.rb +4 -1
  18. data/lib/webmock/http_lib_adapters/http_rb/request.rb +19 -1
  19. data/lib/webmock/http_lib_adapters/http_rb/response.rb +29 -3
  20. data/lib/webmock/http_lib_adapters/http_rb/streamer.rb +11 -3
  21. data/lib/webmock/http_lib_adapters/http_rb/webmock.rb +9 -3
  22. data/lib/webmock/http_lib_adapters/http_rb_adapter.rb +2 -0
  23. data/lib/webmock/http_lib_adapters/httpclient_adapter.rb +30 -9
  24. data/lib/webmock/http_lib_adapters/manticore_adapter.rb +35 -15
  25. data/lib/webmock/http_lib_adapters/net_http.rb +38 -89
  26. data/lib/webmock/http_lib_adapters/net_http_response.rb +3 -1
  27. data/lib/webmock/http_lib_adapters/patron_adapter.rb +6 -4
  28. data/lib/webmock/http_lib_adapters/typhoeus_hydra_adapter.rb +18 -2
  29. data/lib/webmock/matchers/any_arg_matcher.rb +15 -0
  30. data/lib/webmock/matchers/hash_argument_matcher.rb +23 -0
  31. data/lib/webmock/matchers/hash_excluding_matcher.rb +17 -0
  32. data/lib/webmock/matchers/hash_including_matcher.rb +6 -23
  33. data/lib/webmock/minitest.rb +2 -0
  34. data/lib/webmock/rack_response.rb +3 -1
  35. data/lib/webmock/request_body_diff.rb +3 -1
  36. data/lib/webmock/request_execution_verifier.rb +4 -3
  37. data/lib/webmock/request_pattern.rb +132 -52
  38. data/lib/webmock/request_registry.rb +3 -1
  39. data/lib/webmock/request_signature.rb +5 -3
  40. data/lib/webmock/request_signature_snippet.rb +6 -4
  41. data/lib/webmock/request_stub.rb +34 -0
  42. data/lib/webmock/response.rb +22 -14
  43. data/lib/webmock/responses_sequence.rb +2 -0
  44. data/lib/webmock/rspec/matchers/request_pattern_matcher.rb +2 -0
  45. data/lib/webmock/rspec/matchers/webmock_matcher.rb +2 -0
  46. data/lib/webmock/rspec/matchers.rb +2 -0
  47. data/lib/webmock/rspec.rb +12 -3
  48. data/lib/webmock/stub_registry.rb +28 -11
  49. data/lib/webmock/stub_request_snippet.rb +12 -6
  50. data/lib/webmock/test_unit.rb +3 -3
  51. data/lib/webmock/util/hash_counter.rb +15 -9
  52. data/lib/webmock/util/hash_keys_stringifier.rb +2 -0
  53. data/lib/webmock/util/hash_validator.rb +2 -0
  54. data/lib/webmock/util/headers.rb +39 -11
  55. data/lib/webmock/util/json.rb +3 -2
  56. data/lib/webmock/util/query_mapper.rb +11 -7
  57. data/lib/webmock/util/uri.rb +13 -11
  58. data/lib/webmock/util/values_stringifier.rb +22 -0
  59. data/lib/webmock/util/version_checker.rb +7 -5
  60. data/lib/webmock/version.rb +3 -1
  61. data/lib/webmock/webmock.rb +22 -3
  62. data/lib/webmock.rb +55 -48
  63. metadata +106 -175
  64. data/.gemtest +0 -0
  65. data/.gitignore +0 -34
  66. data/.rspec-tm +0 -2
  67. data/.travis.yml +0 -20
  68. data/Gemfile +0 -9
  69. data/Rakefile +0 -30
  70. data/minitest/test_helper.rb +0 -34
  71. data/minitest/test_webmock.rb +0 -9
  72. data/minitest/webmock_spec.rb +0 -60
  73. data/spec/acceptance/curb/curb_spec.rb +0 -466
  74. data/spec/acceptance/curb/curb_spec_helper.rb +0 -147
  75. data/spec/acceptance/em_http_request/em_http_request_spec.rb +0 -406
  76. data/spec/acceptance/em_http_request/em_http_request_spec_helper.rb +0 -77
  77. data/spec/acceptance/excon/excon_spec.rb +0 -75
  78. data/spec/acceptance/excon/excon_spec_helper.rb +0 -50
  79. data/spec/acceptance/http_rb/http_rb_spec.rb +0 -73
  80. data/spec/acceptance/http_rb/http_rb_spec_helper.rb +0 -51
  81. data/spec/acceptance/httpclient/httpclient_spec.rb +0 -210
  82. data/spec/acceptance/httpclient/httpclient_spec_helper.rb +0 -57
  83. data/spec/acceptance/manticore/manticore_spec.rb +0 -56
  84. data/spec/acceptance/manticore/manticore_spec_helper.rb +0 -35
  85. data/spec/acceptance/net_http/net_http_shared.rb +0 -153
  86. data/spec/acceptance/net_http/net_http_spec.rb +0 -317
  87. data/spec/acceptance/net_http/net_http_spec_helper.rb +0 -64
  88. data/spec/acceptance/net_http/real_net_http_spec.rb +0 -20
  89. data/spec/acceptance/patron/patron_spec.rb +0 -118
  90. data/spec/acceptance/patron/patron_spec_helper.rb +0 -54
  91. data/spec/acceptance/shared/allowing_and_disabling_net_connect.rb +0 -313
  92. data/spec/acceptance/shared/callbacks.rb +0 -147
  93. data/spec/acceptance/shared/complex_cross_concern_behaviors.rb +0 -36
  94. data/spec/acceptance/shared/enabling_and_disabling_webmock.rb +0 -95
  95. data/spec/acceptance/shared/precedence_of_stubs.rb +0 -15
  96. data/spec/acceptance/shared/request_expectations.rb +0 -916
  97. data/spec/acceptance/shared/returning_declared_responses.rb +0 -388
  98. data/spec/acceptance/shared/stubbing_requests.rb +0 -583
  99. data/spec/acceptance/typhoeus/typhoeus_hydra_spec.rb +0 -135
  100. data/spec/acceptance/typhoeus/typhoeus_hydra_spec_helper.rb +0 -60
  101. data/spec/acceptance/webmock_shared.rb +0 -41
  102. data/spec/fixtures/test.txt +0 -1
  103. data/spec/quality_spec.rb +0 -84
  104. data/spec/spec_helper.rb +0 -48
  105. data/spec/support/example_curl_output.txt +0 -22
  106. data/spec/support/failures.rb +0 -9
  107. data/spec/support/my_rack_app.rb +0 -53
  108. data/spec/support/network_connection.rb +0 -19
  109. data/spec/support/webmock_server.rb +0 -69
  110. data/spec/unit/api_spec.rb +0 -75
  111. data/spec/unit/errors_spec.rb +0 -129
  112. data/spec/unit/http_lib_adapters/http_lib_adapter_registry_spec.rb +0 -17
  113. data/spec/unit/http_lib_adapters/http_lib_adapter_spec.rb +0 -12
  114. data/spec/unit/matchers/hash_including_matcher_spec.rb +0 -87
  115. data/spec/unit/rack_response_spec.rb +0 -112
  116. data/spec/unit/request_body_diff_spec.rb +0 -90
  117. data/spec/unit/request_execution_verifier_spec.rb +0 -208
  118. data/spec/unit/request_pattern_spec.rb +0 -590
  119. data/spec/unit/request_registry_spec.rb +0 -95
  120. data/spec/unit/request_signature_snippet_spec.rb +0 -89
  121. data/spec/unit/request_signature_spec.rb +0 -155
  122. data/spec/unit/request_stub_spec.rb +0 -199
  123. data/spec/unit/response_spec.rb +0 -282
  124. data/spec/unit/stub_registry_spec.rb +0 -103
  125. data/spec/unit/stub_request_snippet_spec.rb +0 -95
  126. data/spec/unit/util/hash_counter_spec.rb +0 -39
  127. data/spec/unit/util/hash_keys_stringifier_spec.rb +0 -27
  128. data/spec/unit/util/headers_spec.rb +0 -28
  129. data/spec/unit/util/json_spec.rb +0 -33
  130. data/spec/unit/util/query_mapper_spec.rb +0 -144
  131. data/spec/unit/util/uri_spec.rb +0 -299
  132. data/spec/unit/util/version_checker_spec.rb +0 -65
  133. data/spec/unit/webmock_spec.rb +0 -11
  134. data/test/http_request.rb +0 -24
  135. data/test/shared_test.rb +0 -95
  136. data/test/test_helper.rb +0 -23
  137. data/test/test_webmock.rb +0 -6
  138. data/webmock.gemspec +0 -46
@@ -1,129 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "errors" do
4
- describe WebMock::NetConnectNotAllowedError do
5
- describe "message" do
6
- it "should have message with request signature and snippet" do
7
- allow(WebMock::RequestStub).to receive(:from_request_signature).and_return(request_stub)
8
- allow(WebMock::StubRequestSnippet).to receive(:new).
9
- with(request_stub).and_return(stub_result)
10
-
11
- expected = \
12
- "Real HTTP connections are disabled. Unregistered request: #{request_signature}" \
13
- "\n\nYou can stub this request with the following snippet:" \
14
- "\n\n#{stub_result}" \
15
- "\n\n============================================================"
16
- expect(WebMock::NetConnectNotAllowedError.new(request_signature).message).to eq(expected)
17
- end
18
-
19
- it "should have message with registered stubs if available" do
20
- allow(WebMock::StubRegistry.instance).to receive(:request_stubs).and_return([request_stub])
21
- allow(WebMock::RequestStub).to receive(:from_request_signature).and_return(request_stub)
22
- allow(WebMock::StubRequestSnippet).to receive(:new).
23
- with(request_stub).and_return(stub_result)
24
- allow_any_instance_of(WebMock::RequestBodyDiff).to receive(:body_diff).and_return({})
25
-
26
- expected = \
27
- "Real HTTP connections are disabled. Unregistered request: #{request_signature}" \
28
- "\n\nYou can stub this request with the following snippet:" \
29
- "\n\n#{stub_result}" \
30
- "\n\nregistered request stubs:" \
31
- "\n\n#{stub_result}" \
32
- "\n\n============================================================"
33
- expect(WebMock::NetConnectNotAllowedError.new(request_signature).message).to eq(expected)
34
- end
35
-
36
- it "should not be caught by a rescue block without arguments" do
37
- allow(WebMock::RequestStub).to receive(:from_request_signature).and_return(request_stub)
38
- allow(WebMock::StubRequestSnippet).to receive(:new).
39
- with(request_stub).and_return(stub_result)
40
-
41
- exception = WebMock::NetConnectNotAllowedError.new(request_signature)
42
-
43
- expect do
44
- begin
45
- raise exception
46
- rescue
47
- raise "exception should not be caught"
48
- end
49
- end.to raise_exception exception
50
- end
51
-
52
- it "should print body diff if available" do
53
- allow(WebMock::StubRegistry.instance).to receive(:request_stubs).and_return([request_stub])
54
- allow(WebMock::RequestStub).to receive(:from_request_signature).and_return(request_stub)
55
- allow(WebMock::StubRequestSnippet).to receive(:new).
56
- with(request_stub).and_return(stub_result)
57
- allow_any_instance_of(WebMock::RequestBodyDiff).to receive(:body_diff).and_return(body_diff)
58
- expected = \
59
- "Real HTTP connections are disabled. Unregistered request: #{request_signature}" \
60
- "\n\nYou can stub this request with the following snippet:" \
61
- "\n\n#{stub_result}" \
62
- "\n\nregistered request stubs:" \
63
- "\n\n#{stub_result}" \
64
- "\n\nBody diff:\n [[\"+\", \"test\", \"test2\"], [\"-\", \"test3\"], [\"~\", \"test5\", \"test6\"]]" \
65
- "\n\n\n============================================================"
66
- expect(WebMock::NetConnectNotAllowedError.new(request_signature).message).to eq(expected)
67
- end
68
-
69
- context "WebMock.show_body_diff? is false" do
70
- before do
71
- WebMock.hide_body_diff!
72
- end
73
- it "should not show body diff" do
74
- allow(WebMock::StubRegistry.instance).to receive(:request_stubs).and_return([request_stub])
75
- allow(WebMock::RequestStub).to receive(:from_request_signature).and_return(request_stub)
76
- allow(WebMock::StubRequestSnippet).to receive(:new).
77
- with(request_stub).and_return(stub_result)
78
- expect_any_instance_of(WebMock::RequestBodyDiff).to_not receive(:body_diff)
79
- expected = \
80
- "Real HTTP connections are disabled. Unregistered request: #{request_signature}" \
81
- "\n\nYou can stub this request with the following snippet:" \
82
- "\n\n#{stub_result}" \
83
- "\n\nregistered request stubs:" \
84
- "\n\n#{stub_result}" \
85
- "\n\n============================================================"
86
- expect(WebMock::NetConnectNotAllowedError.new(request_signature).message).to eq(expected)
87
- end
88
- end
89
-
90
- context "WebMock.show_stubbing_instructions? is false" do
91
- before do
92
- WebMock.hide_stubbing_instructions!
93
- end
94
-
95
- it "should have message with request signature and snippet" do
96
- allow(WebMock::RequestStub).to receive(:from_request_signature).and_return(request_stub)
97
- allow(WebMock::StubRequestSnippet).to receive(:new).
98
- with(request_stub).and_return(stub_result)
99
-
100
- expected = \
101
- "Real HTTP connections are disabled. Unregistered request: #{request_signature}" \
102
- "\n\n============================================================"
103
- expect(WebMock::NetConnectNotAllowedError.new(request_signature).message).to eq(expected)
104
- end
105
-
106
- it "should have message with registered stubs if available" do
107
- allow(WebMock::StubRegistry.instance).to receive(:request_stubs).and_return([request_stub])
108
- allow(WebMock::RequestStub).to receive(:from_request_signature).and_return(request_stub)
109
- allow(WebMock::StubRequestSnippet).to receive(:new).
110
- with(request_stub).and_return(stub_result)
111
- allow(request_stub).to receive(:request_pattern).and_return(body_pattern)
112
-
113
- expected = \
114
- "Real HTTP connections are disabled. Unregistered request: #{request_signature}" \
115
- "\n\nregistered request stubs:" \
116
- "\n\n#{stub_result}" \
117
- "\n\n============================================================"
118
- expect(WebMock::NetConnectNotAllowedError.new(request_signature).message).to eq(expected)
119
- end
120
- end
121
- end
122
-
123
- let(:request_signature) { double(:request_signature, to_s: rand(10**20).to_s) }
124
- let(:stub_result) { double(:stub_result, to_s: rand(10**20).to_s) }
125
- let(:request_stub) { double(:request_stub) }
126
- let(:body_pattern) { double(:body_pattern, body_pattern: nil)}
127
- let(:body_diff) { [["+", "test", "test2"], ["-", "test3"], ["~", "test5", "test6"]] }
128
- end
129
- end
@@ -1,17 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe WebMock::HttpLibAdapterRegistry do
4
- describe "each_adapter" do
5
- it "should yield block over each adapter" do
6
- class MyAdapter < WebMock::HttpLibAdapter; end
7
- WebMock::HttpLibAdapterRegistry.instance.register(:my_lib, MyAdapter)
8
- adapters = []
9
- WebMock::HttpLibAdapterRegistry.instance.each_adapter {|n,a|
10
- adapters << [n, a]
11
- }
12
- expect(adapters).to include([:my_lib, MyAdapter])
13
- WebMock::HttpLibAdapterRegistry.instance.
14
- http_lib_adapters.delete(:my_lib)
15
- end
16
- end
17
- end
@@ -1,12 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe WebMock::HttpLibAdapter do
4
- describe "adapter_for" do
5
- it "should add adapter to adapter registry" do
6
- class MyAdapter < WebMock::HttpLibAdapter; end
7
- expect(WebMock::HttpLibAdapterRegistry.instance).
8
- to receive(:register).with(:my_lib, MyAdapter)
9
- MyAdapter.adapter_for(:my_lib)
10
- end
11
- end
12
- end
@@ -1,87 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module WebMock
4
- module Matchers
5
-
6
- describe HashIncludingMatcher do
7
-
8
- it "stringifies the given hash keys" do
9
- expect(HashIncludingMatcher.new(a: 1, b: 2)).to eq("a" => 1, "b" => 2)
10
- end
11
-
12
- it "sorts elements in the hash" do
13
- expect(HashIncludingMatcher.new(b: 2, a: 1)).to eq("a" => 1, "b" => 2)
14
- end
15
-
16
- it "describes itself properly" do
17
- expect(HashIncludingMatcher.new(a: 1).inspect).to eq "hash_including({\"a\"=>1})"
18
- end
19
-
20
- describe "success" do
21
- it "matches the same hash" do
22
- expect(HashIncludingMatcher.new("a" => 1, "b" => 2)).to eq("a" => 1, "b" => 2)
23
- end
24
-
25
- it "matches a hash with extra stuff" do
26
- expect(HashIncludingMatcher.new(a: 1)).to eq("a" => 1, "b" => 2)
27
- end
28
-
29
- describe "when matching anythingized keys" do
30
- let(:anything) { WebMock::Matchers::AnyArgMatcher.new(nil) }
31
-
32
- it "matches an int against anything()" do
33
- expect(HashIncludingMatcher.new(a: anything, b: 2)).to eq({'a' => 1, 'b' => 2})
34
- end
35
-
36
- it "matches a string against anything()" do
37
- expect(HashIncludingMatcher.new(a: anything, b: 2)).to eq({'a' => "1", 'b' => 2})
38
- end
39
-
40
- it "matches if the key is present" do
41
- expect(HashIncludingMatcher.new(a: anything)).to eq({'a' => 1, 'b' => 2})
42
- end
43
-
44
- it "matches if more keys are present" do
45
- expect(HashIncludingMatcher.new(a: anything, b: anything)).to eq({'a' => 1, 'b' => 2, 'c' => 3})
46
- end
47
-
48
- it "matches if passed many keys and many key/value pairs" do
49
- expect(HashIncludingMatcher.new(a: anything, b: anything, c: 3, e: 5)).to eq({'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5})
50
- end
51
- end
52
-
53
- describe "when matching an empty hash" do
54
- it "matches against any hash" do
55
- expect(HashIncludingMatcher.new({})).to eq({a: 1, b: 2, c: 3})
56
- end
57
- end
58
- end
59
-
60
- describe "failing" do
61
- it "does not match a non-hash" do
62
- expect(HashIncludingMatcher.new(a: 1)).not_to eq 1
63
- end
64
-
65
- it "does not match a hash with a missing key" do
66
- expect(HashIncludingMatcher.new(a: 1)).not_to eq('b' => 2)
67
- end
68
-
69
- it "does not match an empty hash with a given key" do
70
- expect(HashIncludingMatcher.new(a: 1)).not_to eq({})
71
- end
72
-
73
- it "does not match a hash with a missing key when one pair is matching" do
74
- expect(HashIncludingMatcher.new(a: 1, b: 2)).not_to eq('b' => 2)
75
- end
76
-
77
- it "does not match a hash with an incorrect value" do
78
- expect(HashIncludingMatcher.new(a: 1, b: 2)).not_to eq('a' => 1, 'b' => 3)
79
- end
80
-
81
- it "does not match when values are nil but keys are different" do
82
- expect(HashIncludingMatcher.new(a: nil)).not_to eq('b' => nil)
83
- end
84
- end
85
- end
86
- end
87
- end
@@ -1,112 +0,0 @@
1
- # encoding: utf-8
2
- require 'spec_helper'
3
-
4
- describe WebMock::RackResponse do
5
- before :each do
6
- @rack_response = WebMock::RackResponse.new(MyRackApp)
7
- end
8
-
9
- it "should hook up to a rack appliance" do
10
- request = WebMock::RequestSignature.new(:get, 'www.example.com')
11
- response = @rack_response.evaluate(request)
12
-
13
- expect(response.status.first).to eq(200)
14
- expect(response.body).to include('This is my root!')
15
- end
16
-
17
- it "should set the reason phrase based on the status code" do
18
- request = WebMock::RequestSignature.new(:get, 'www.example.com')
19
- response = @rack_response.evaluate(request)
20
- expect(response.status).to eq([200, "OK"])
21
-
22
- request = WebMock::RequestSignature.new(:get, 'www.example.com/error')
23
- response = @rack_response.evaluate(request)
24
- expect(response.status).to eq([500, "Internal Server Error"])
25
- end
26
-
27
- it "should behave correctly when the rack response is not a simple array of strings" do
28
- request = WebMock::RequestSignature.new(:get, 'www.example.com/non_array_response')
29
- response = @rack_response.evaluate(request)
30
-
31
- expect(response.status.first).to eq(200)
32
- expect(response.body).to include('This is not in an array!')
33
- end
34
-
35
- it "should shouldn't blow up when hitting a locked resource twice" do
36
- @locked_rack_response = WebMock::RackResponse.new(MyLockedRackApp)
37
- request = WebMock::RequestSignature.new(:get, 'www.example.com/locked')
38
- @locked_rack_response.evaluate(request)
39
- response2 = @locked_rack_response.evaluate(request)
40
-
41
- expect(response2.body).to include('Single threaded response.')
42
- expect(response2.status.first).to eq(200)
43
- end
44
-
45
- it "should send along params" do
46
- request = WebMock::RequestSignature.new(:get, 'www.example.com/greet?name=Johnny')
47
-
48
- response = @rack_response.evaluate(request)
49
-
50
- expect(response.status.first).to eq(200)
51
- expect(response.body).to include('Hello, Johnny')
52
- end
53
-
54
- it "should send along POST params" do
55
- request = WebMock::RequestSignature.new(:post, 'www.example.com/greet',
56
- body: 'name=Jimmy'
57
- )
58
-
59
- response = @rack_response.evaluate(request)
60
- expect(response.body).to include('Good to meet you, Jimmy!')
61
- end
62
-
63
- it "should send params with proper content length if params have non-ascii symbols" do
64
- request = WebMock::RequestSignature.new(:post, 'www.example.com/greet',
65
- body: 'name=Олег'
66
- )
67
-
68
- response = @rack_response.evaluate(request)
69
- expect(response.body).to include('Good to meet you, Олег!')
70
- end
71
-
72
- describe 'rack error output' do
73
- before :each do
74
- @original_stderr = $stderr
75
- $stderr = StringIO.new
76
- end
77
-
78
- after :each do
79
- $stderr = @original_stderr
80
- end
81
-
82
- it 'should behave correctly when an app uses rack.errors' do
83
- request = WebMock::RequestSignature.new(:get, 'www.example.com/error')
84
-
85
- expect { @rack_response.evaluate(request) }.to_not raise_error
86
- expect($stderr.length).to_not eq 0
87
- end
88
- end
89
-
90
- describe 'basic auth request' do
91
- before :each do
92
- @rack_response_with_basic_auth = WebMock::RackResponse.new(
93
- Rack::Auth::Basic.new(MyRackApp) do |username, password|
94
- username == 'username' && password == 'password'
95
- end
96
- )
97
- end
98
- it 'should be failure when wrong credentials' do
99
- request = WebMock::RequestSignature.new(:get, 'foo:bar@www.example.com')
100
- response = @rack_response_with_basic_auth.evaluate(request)
101
- expect(response.status.first).to eq(401)
102
- expect(response.body).not_to include('This is my root!')
103
- end
104
-
105
- it 'should be success when valid credentials' do
106
- request = WebMock::RequestSignature.new(:get, 'username:password@www.example.com')
107
- response = @rack_response_with_basic_auth.evaluate(request)
108
- expect(response.status.first).to eq(200)
109
- expect(response.body).to include('This is my root!')
110
- end
111
- end
112
- end
@@ -1,90 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe WebMock::RequestBodyDiff do
4
- subject { WebMock::RequestBodyDiff.new(request_signature, request_stub) }
5
-
6
- let(:uri) { "http://example.com" }
7
- let(:method) { "GET" }
8
-
9
- let(:request_stub) { WebMock::RequestStub.new(method, uri) }
10
- let(:request_signature) { WebMock::RequestSignature.new(method, uri) }
11
-
12
- let(:request_stub_body) { { "key" => "value"} }
13
- let(:request_signature_body) { {"key" => "different value"}.to_json }
14
-
15
- let(:request_pattern) {
16
- WebMock::RequestPattern.new(
17
- method, uri, {body: request_stub_body}
18
- )
19
- }
20
-
21
- before :each do
22
- request_stub.request_pattern = request_pattern
23
- request_signature.headers = {"Content-Type" => "application/json"}
24
- request_signature.body = request_signature_body
25
- end
26
-
27
- describe "#body_diff" do
28
- context "request signature is unparseable json" do
29
- let(:request_signature_body) { "youcan'tparsethis!" }
30
-
31
- it "returns an empty hash" do
32
- expect(subject.body_diff).to eq({})
33
- end
34
- end
35
-
36
- context "request stub body as unparseable json" do
37
- let(:request_stub_body) { "youcan'tparsethis!" }
38
-
39
- it "returns an empty hash" do
40
- expect(subject.body_diff).to eq({})
41
- end
42
- end
43
-
44
- context "request stub body pattern is hash" do
45
- let(:request_stub_body) { { "key" => "value"} }
46
-
47
- it "generates a diff" do
48
- expect(subject.body_diff).to eq(
49
- [["~", "key", "different value", "value"]]
50
- )
51
- end
52
- end
53
-
54
- context "request signature doesn't have json headers" do
55
- before :each do
56
- request_signature.headers = {"Content-Type" => "application/xml"}
57
- end
58
-
59
- it "returns an empty hash" do
60
- expect(subject.body_diff).to eq({})
61
- end
62
- end
63
-
64
- context "request stub body pattern is a string" do
65
- let(:request_stub_body) { { "key" => "value"}.to_json }
66
-
67
- it "generates a diff" do
68
- expect(subject.body_diff).to eq(
69
- [["~", "key", "different value", "value"]]
70
- )
71
- end
72
- end
73
-
74
- context "stub request has no request pattern" do
75
- let(:request_signature_body) { nil }
76
-
77
- it "returns an empty hash" do
78
- expect(subject.body_diff).to eq({})
79
- end
80
- end
81
-
82
- context "stub request has no body pattern" do
83
- let(:request_stub_body) { nil }
84
-
85
- it "returns an empty hash" do
86
- expect(subject.body_diff).to eq({})
87
- end
88
- end
89
- end
90
- end
@@ -1,208 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe WebMock::RequestExecutionVerifier do
4
- before(:each) do
5
- @verifier = WebMock::RequestExecutionVerifier.new
6
- @request_pattern = double(WebMock::RequestPattern, to_s: "www.example.com")
7
- @verifier.request_pattern = @request_pattern
8
- allow(WebMock::RequestRegistry.instance).to receive(:to_s).and_return("executed requests")
9
- @executed_requests_info = "\n\nThe following requests were made:\n\nexecuted requests\n" + "="*60
10
- end
11
-
12
- describe "description" do
13
-
14
- it "reports the description" do
15
- @verifier.expected_times_executed = 2
16
- expect(@verifier.description).to eq "request www.example.com 2 times"
17
- end
18
-
19
- it "reports description correctly when expectation is 1 time" do
20
- @verifier.expected_times_executed = 1
21
- expect(@verifier.description).to eq "request www.example.com 1 time"
22
- end
23
-
24
- context "at_least_times_executed is set" do
25
- it "reports description correctly when expectation at least 2 times" do
26
- @verifier.at_least_times_executed = 2
27
- expect(@verifier.description).to eq "request www.example.com at least 2 times"
28
- end
29
-
30
- it "reports description correctly when expectation is at least 3 times" do
31
- @verifier.at_least_times_executed = 3
32
- expect(@verifier.description).to eq "request www.example.com at least 3 times"
33
- end
34
- end
35
-
36
- context "at_most_times_executed is set" do
37
- it "reports description correctly when expectation is at most 2 times" do
38
- @verifier.at_most_times_executed = 2
39
- expect(@verifier.description).to eq "request www.example.com at most 2 times"
40
- end
41
-
42
- it "reports description correctly when expectation is at most 1 time" do
43
- @verifier.at_most_times_executed = 1
44
- expect(@verifier.description).to eq "request www.example.com at most 1 time"
45
- end
46
- end
47
-
48
- end
49
-
50
- describe "failure message" do
51
-
52
- it "reports the failure message" do
53
- @verifier.times_executed = 0
54
- @verifier.expected_times_executed = 2
55
- expected_text = "The request www.example.com was expected to execute 2 times but it executed 0 times"
56
- expected_text << @executed_requests_info
57
- expect(@verifier.failure_message).to eq(expected_text)
58
- end
59
-
60
- it "reports failure message correctly when executed times is one" do
61
- @verifier.times_executed = 1
62
- @verifier.expected_times_executed = 1
63
- expected_text = "The request www.example.com was expected to execute 1 time but it executed 1 time"
64
- expected_text << @executed_requests_info
65
- expect(@verifier.failure_message).to eq(expected_text)
66
- end
67
-
68
- context "at_least_times_executed is set" do
69
- it "reports failure message correctly when executed times is one" do
70
- @verifier.times_executed = 1
71
- @verifier.at_least_times_executed = 2
72
- expected_text = "The request www.example.com was expected to execute at least 2 times but it executed 1 time"
73
- expected_text << @executed_requests_info
74
- expect(@verifier.failure_message).to eq(expected_text)
75
- end
76
-
77
- it "reports failure message correctly when executed times is two" do
78
- @verifier.times_executed = 2
79
- @verifier.at_least_times_executed = 3
80
- expected_text = "The request www.example.com was expected to execute at least 3 times but it executed 2 times"
81
- expected_text << @executed_requests_info
82
- expect(@verifier.failure_message).to eq(expected_text)
83
- end
84
- end
85
-
86
- context "at_most_times_executed is set" do
87
- it "reports failure message correctly when executed times is three" do
88
- @verifier.times_executed = 3
89
- @verifier.at_most_times_executed = 2
90
- expected_text = "The request www.example.com was expected to execute at most 2 times but it executed 3 times"
91
- expected_text << @executed_requests_info
92
- expect(@verifier.failure_message).to eq(expected_text)
93
- end
94
-
95
- it "reports failure message correctly when executed times is two" do
96
- @verifier.times_executed = 2
97
- @verifier.at_most_times_executed = 1
98
- expected_text = "The request www.example.com was expected to execute at most 1 time but it executed 2 times"
99
- expected_text << @executed_requests_info
100
- expect(@verifier.failure_message).to eq(expected_text)
101
- end
102
- end
103
- end
104
-
105
- describe "negative failure message" do
106
-
107
- it "reports failure message if it executed number of times specified" do
108
- @verifier.times_executed = 2
109
- @verifier.expected_times_executed = 2
110
- expected_text = "The request www.example.com was not expected to execute 2 times but it executed 2 times"
111
- expected_text << @executed_requests_info
112
- expect(@verifier.failure_message_when_negated).to eq(expected_text)
113
- end
114
-
115
- it "reports failure message when not expected request but it executed" do
116
- @verifier.times_executed = 1
117
- expected_text = "The request www.example.com was not expected to execute but it executed 1 time"
118
- expected_text << @executed_requests_info
119
- expect(@verifier.failure_message_when_negated).to eq(expected_text)
120
- end
121
-
122
- context "at_least_times_executed is set" do
123
- it "reports failure message correctly when executed times is one" do
124
- @verifier.times_executed = 3
125
- @verifier.at_least_times_executed = 2
126
- expected_text = "The request www.example.com was not expected to execute at least 2 times but it executed 3 times"
127
- expected_text << @executed_requests_info
128
- expect(@verifier.failure_message_when_negated).to eq(expected_text)
129
- end
130
-
131
- it "reports failure message correctly when executed times is two" do
132
- @verifier.times_executed = 2
133
- @verifier.at_least_times_executed = 2
134
- expected_text = "The request www.example.com was not expected to execute at least 2 times but it executed 2 times"
135
- expected_text << @executed_requests_info
136
- expect(@verifier.failure_message_when_negated).to eq(expected_text)
137
- end
138
- end
139
-
140
- context "at_most_times_executed is set" do
141
- it "reports failure message correctly when executed times is three" do
142
- @verifier.times_executed = 2
143
- @verifier.at_most_times_executed = 3
144
- expected_text = "The request www.example.com was not expected to execute at most 3 times but it executed 2 times"
145
- expected_text << @executed_requests_info
146
- expect(@verifier.failure_message_when_negated).to eq(expected_text)
147
- end
148
-
149
- it "reports failure message correctly when executed times is one" do
150
- @verifier.times_executed = 1
151
- @verifier.at_most_times_executed = 2
152
- expected_text = "The request www.example.com was not expected to execute at most 2 times but it executed 1 time"
153
- expected_text << @executed_requests_info
154
- expect(@verifier.failure_message_when_negated).to eq(expected_text)
155
- end
156
- end
157
-
158
- end
159
-
160
- describe "matches?" do
161
-
162
- it "succeeds if request was executed expected number of times" do
163
- expect(WebMock::RequestRegistry.instance).
164
- to receive(:times_executed).with(@request_pattern).and_return(10)
165
- @verifier.expected_times_executed = 10
166
- expect(@verifier.matches?).to be_truthy
167
- end
168
-
169
- it "fails if request was not executed expected number of times" do
170
- expect(WebMock::RequestRegistry.instance).
171
- to receive(:times_executed).with(@request_pattern).and_return(10)
172
- @verifier.expected_times_executed = 5
173
- expect(@verifier.matches?).to be_falsey
174
- end
175
-
176
- end
177
-
178
- describe "does_not_match?" do
179
-
180
- it "fails if request executed expected number of times" do
181
- expect(WebMock::RequestRegistry.instance).
182
- to receive(:times_executed).with(@request_pattern).and_return(10)
183
- @verifier.expected_times_executed = 10
184
- expect(@verifier.does_not_match?).to be_falsey
185
- end
186
-
187
- it "succeeds if request was not executed at all and expected number of times was not set" do
188
- expect(WebMock::RequestRegistry.instance).
189
- to receive(:times_executed).with(@request_pattern).and_return(0)
190
- expect(@verifier.does_not_match?).to be_truthy
191
- end
192
-
193
- it "fails if request was executed and expected number of times was not set" do
194
- expect(WebMock::RequestRegistry.instance).
195
- to receive(:times_executed).with(@request_pattern).and_return(1)
196
- expect(@verifier.does_not_match?).to be_falsey
197
- end
198
-
199
- it "succeeds if request was not executed expected number of times" do
200
- expect(WebMock::RequestRegistry.instance).
201
- to receive(:times_executed).with(@request_pattern).and_return(10)
202
- @verifier.expected_times_executed = 5
203
- expect(@verifier.does_not_match?).to be_truthy
204
- end
205
-
206
- end
207
-
208
- end