webmock 1.8.6 → 3.14.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 +7 -0
  2. data/.github/workflows/CI.yml +37 -0
  3. data/.gitignore +6 -0
  4. data/CHANGELOG.md +1198 -0
  5. data/Gemfile +3 -15
  6. data/README.md +761 -305
  7. data/Rakefile +13 -40
  8. data/lib/webmock/api.rb +63 -17
  9. data/lib/webmock/callback_registry.rb +1 -1
  10. data/lib/webmock/config.rb +8 -0
  11. data/lib/webmock/cucumber.rb +2 -0
  12. data/lib/webmock/errors.rb +8 -24
  13. data/lib/webmock/http_lib_adapters/async_http_client_adapter.rb +216 -0
  14. data/lib/webmock/http_lib_adapters/curb_adapter.rb +148 -84
  15. data/lib/webmock/http_lib_adapters/em_http_request_adapter.rb +224 -4
  16. data/lib/webmock/http_lib_adapters/excon_adapter.rb +104 -34
  17. data/lib/webmock/http_lib_adapters/http_rb/client.rb +17 -0
  18. data/lib/webmock/http_lib_adapters/http_rb/request.rb +16 -0
  19. data/lib/webmock/http_lib_adapters/http_rb/response.rb +64 -0
  20. data/lib/webmock/http_lib_adapters/http_rb/streamer.rb +29 -0
  21. data/lib/webmock/http_lib_adapters/http_rb/webmock.rb +68 -0
  22. data/lib/webmock/http_lib_adapters/http_rb_adapter.rb +37 -0
  23. data/lib/webmock/http_lib_adapters/httpclient_adapter.rb +152 -86
  24. data/lib/webmock/http_lib_adapters/manticore_adapter.rb +145 -0
  25. data/lib/webmock/http_lib_adapters/net_http.rb +155 -46
  26. data/lib/webmock/http_lib_adapters/net_http_response.rb +1 -1
  27. data/lib/webmock/http_lib_adapters/patron_adapter.rb +16 -15
  28. data/lib/webmock/http_lib_adapters/typhoeus_hydra_adapter.rb +76 -82
  29. data/lib/webmock/matchers/any_arg_matcher.rb +13 -0
  30. data/lib/webmock/matchers/hash_argument_matcher.rb +21 -0
  31. data/lib/webmock/matchers/hash_excluding_matcher.rb +15 -0
  32. data/lib/webmock/matchers/hash_including_matcher.rb +4 -12
  33. data/lib/webmock/minitest.rb +29 -3
  34. data/lib/webmock/rack_response.rb +14 -7
  35. data/lib/webmock/request_body_diff.rb +64 -0
  36. data/lib/webmock/request_execution_verifier.rb +38 -17
  37. data/lib/webmock/request_pattern.rb +158 -38
  38. data/lib/webmock/request_registry.rb +3 -3
  39. data/lib/webmock/request_signature.rb +7 -3
  40. data/lib/webmock/request_signature_snippet.rb +61 -0
  41. data/lib/webmock/request_stub.rb +9 -6
  42. data/lib/webmock/response.rb +30 -15
  43. data/lib/webmock/rspec/matchers/request_pattern_matcher.rb +38 -2
  44. data/lib/webmock/rspec/matchers/webmock_matcher.rb +23 -2
  45. data/lib/webmock/rspec/matchers.rb +0 -1
  46. data/lib/webmock/rspec.rb +11 -2
  47. data/lib/webmock/stub_registry.rb +31 -10
  48. data/lib/webmock/stub_request_snippet.rb +14 -6
  49. data/lib/webmock/test_unit.rb +4 -4
  50. data/lib/webmock/util/hash_counter.rb +20 -6
  51. data/lib/webmock/util/hash_keys_stringifier.rb +5 -3
  52. data/lib/webmock/util/hash_validator.rb +17 -0
  53. data/lib/webmock/util/headers.rb +23 -2
  54. data/lib/webmock/util/json.rb +20 -7
  55. data/lib/webmock/util/query_mapper.rb +281 -0
  56. data/lib/webmock/util/uri.rb +29 -19
  57. data/lib/webmock/util/values_stringifier.rb +20 -0
  58. data/lib/webmock/util/version_checker.rb +40 -2
  59. data/lib/webmock/version.rb +1 -1
  60. data/lib/webmock/webmock.rb +56 -17
  61. data/lib/webmock.rb +56 -46
  62. data/minitest/test_helper.rb +8 -3
  63. data/minitest/test_webmock.rb +4 -1
  64. data/minitest/webmock_spec.rb +16 -6
  65. data/spec/acceptance/async_http_client/async_http_client_spec.rb +375 -0
  66. data/spec/acceptance/async_http_client/async_http_client_spec_helper.rb +73 -0
  67. data/spec/acceptance/curb/curb_spec.rb +227 -68
  68. data/spec/acceptance/curb/curb_spec_helper.rb +11 -8
  69. data/spec/acceptance/em_http_request/em_http_request_spec.rb +322 -28
  70. data/spec/acceptance/em_http_request/em_http_request_spec_helper.rb +15 -10
  71. data/spec/acceptance/excon/excon_spec.rb +66 -4
  72. data/spec/acceptance/excon/excon_spec_helper.rb +21 -7
  73. data/spec/acceptance/http_rb/http_rb_spec.rb +93 -0
  74. data/spec/acceptance/http_rb/http_rb_spec_helper.rb +54 -0
  75. data/spec/acceptance/httpclient/httpclient_spec.rb +152 -11
  76. data/spec/acceptance/httpclient/httpclient_spec_helper.rb +25 -16
  77. data/spec/acceptance/manticore/manticore_spec.rb +107 -0
  78. data/spec/acceptance/manticore/manticore_spec_helper.rb +35 -0
  79. data/spec/acceptance/net_http/net_http_shared.rb +52 -24
  80. data/spec/acceptance/net_http/net_http_spec.rb +164 -50
  81. data/spec/acceptance/net_http/net_http_spec_helper.rb +19 -10
  82. data/spec/acceptance/net_http/real_net_http_spec.rb +1 -1
  83. data/spec/acceptance/patron/patron_spec.rb +29 -40
  84. data/spec/acceptance/patron/patron_spec_helper.rb +15 -11
  85. data/spec/acceptance/shared/allowing_and_disabling_net_connect.rb +229 -58
  86. data/spec/acceptance/shared/callbacks.rb +32 -30
  87. data/spec/acceptance/shared/complex_cross_concern_behaviors.rb +20 -5
  88. data/spec/acceptance/shared/enabling_and_disabling_webmock.rb +14 -14
  89. data/spec/acceptance/shared/precedence_of_stubs.rb +6 -6
  90. data/spec/acceptance/shared/request_expectations.rb +560 -296
  91. data/spec/acceptance/shared/returning_declared_responses.rb +180 -138
  92. data/spec/acceptance/shared/stubbing_requests.rb +385 -154
  93. data/spec/acceptance/typhoeus/typhoeus_hydra_spec.rb +78 -17
  94. data/spec/acceptance/typhoeus/typhoeus_hydra_spec_helper.rb +19 -15
  95. data/spec/acceptance/webmock_shared.rb +2 -2
  96. data/spec/fixtures/test.txt +1 -0
  97. data/spec/quality_spec.rb +27 -3
  98. data/spec/spec_helper.rb +11 -20
  99. data/spec/support/failures.rb +9 -0
  100. data/spec/support/my_rack_app.rb +8 -3
  101. data/spec/support/network_connection.rb +7 -13
  102. data/spec/support/webmock_server.rb +8 -3
  103. data/spec/unit/api_spec.rb +175 -0
  104. data/spec/unit/errors_spec.rb +116 -19
  105. data/spec/unit/http_lib_adapters/http_lib_adapter_registry_spec.rb +1 -1
  106. data/spec/unit/http_lib_adapters/http_lib_adapter_spec.rb +2 -2
  107. data/spec/unit/matchers/hash_excluding_matcher_spec.rb +61 -0
  108. data/spec/unit/matchers/hash_including_matcher_spec.rb +87 -0
  109. data/spec/unit/rack_response_spec.rb +54 -16
  110. data/spec/unit/request_body_diff_spec.rb +90 -0
  111. data/spec/unit/request_execution_verifier_spec.rb +147 -39
  112. data/spec/unit/request_pattern_spec.rb +462 -198
  113. data/spec/unit/request_registry_spec.rb +29 -9
  114. data/spec/unit/request_signature_snippet_spec.rb +89 -0
  115. data/spec/unit/request_signature_spec.rb +91 -49
  116. data/spec/unit/request_stub_spec.rb +71 -70
  117. data/spec/unit/response_spec.rb +100 -81
  118. data/spec/unit/stub_registry_spec.rb +37 -20
  119. data/spec/unit/stub_request_snippet_spec.rb +51 -31
  120. data/spec/unit/util/hash_counter_spec.rb +6 -6
  121. data/spec/unit/util/hash_keys_stringifier_spec.rb +4 -4
  122. data/spec/unit/util/headers_spec.rb +4 -4
  123. data/spec/unit/util/json_spec.rb +29 -3
  124. data/spec/unit/util/query_mapper_spec.rb +157 -0
  125. data/spec/unit/util/uri_spec.rb +150 -36
  126. data/spec/unit/util/version_checker_spec.rb +15 -9
  127. data/spec/unit/webmock_spec.rb +57 -4
  128. data/test/http_request.rb +3 -3
  129. data/test/shared_test.rb +45 -13
  130. data/test/test_helper.rb +1 -1
  131. data/test/test_webmock.rb +6 -0
  132. data/webmock.gemspec +30 -11
  133. metadata +308 -199
  134. data/.rvmrc +0 -1
  135. data/.travis.yml +0 -11
  136. data/Guardfile +0 -24
  137. data/lib/webmock/http_lib_adapters/em_http_request/em_http_request_0_x.rb +0 -151
  138. data/lib/webmock/http_lib_adapters/em_http_request/em_http_request_1_x.rb +0 -210
@@ -14,9 +14,9 @@ describe WebMock::RequestRegistry do
14
14
  end
15
15
 
16
16
  it "should clean list of executed requests" do
17
- WebMock::RequestRegistry.instance.times_executed(@request_pattern).should == 1
17
+ expect(WebMock::RequestRegistry.instance.times_executed(@request_pattern)).to eq(1)
18
18
  WebMock::RequestRegistry.instance.reset!
19
- WebMock::RequestRegistry.instance.times_executed(@request_pattern).should == 0
19
+ expect(WebMock::RequestRegistry.instance.times_executed(@request_pattern)).to eq(0)
20
20
  end
21
21
 
22
22
  end
@@ -33,15 +33,34 @@ describe WebMock::RequestRegistry do
33
33
  end
34
34
 
35
35
  it "should report 0 if no request matching pattern was requested" do
36
- WebMock::RequestRegistry.instance.times_executed(WebMock::RequestPattern.new(:get, "www.example.net")).should == 0
36
+ expect(WebMock::RequestRegistry.instance.times_executed(WebMock::RequestPattern.new(:get, "www.example.net"))).to eq(0)
37
37
  end
38
38
 
39
39
  it "should report number of times matching pattern was requested" do
40
- WebMock::RequestRegistry.instance.times_executed(WebMock::RequestPattern.new(:get, "www.example.com")).should == 2
40
+ expect(WebMock::RequestRegistry.instance.times_executed(WebMock::RequestPattern.new(:get, "www.example.com"))).to eq(2)
41
41
  end
42
42
 
43
43
  it "should report number of times all matching pattern were requested" do
44
- WebMock::RequestRegistry.instance.times_executed(WebMock::RequestPattern.new(:get, /.*example.*/)).should == 3
44
+ expect(WebMock::RequestRegistry.instance.times_executed(WebMock::RequestPattern.new(:get, /.*example.*/))).to eq(3)
45
+ end
46
+
47
+ describe "multithreading" do
48
+ let(:request_pattern) { WebMock::RequestPattern.new(:get, "www.example.com") }
49
+
50
+ # Reproduce a multithreading issue that causes a RuntimeError:
51
+ # can't add a new key into hash during iteration.
52
+ it "works normally iterating on the requested signature hash while another thread is setting it" do
53
+ thread_injected = false
54
+ allow(request_pattern).to receive(:matches?).and_wrap_original do |m, *args|
55
+ unless thread_injected
56
+ thread_injected = true
57
+ Thread.new { WebMock::RequestRegistry.instance.requested_signatures.put(:abc) }.join(0.1)
58
+ end
59
+ m.call(*args)
60
+ end
61
+ expect(WebMock::RequestRegistry.instance.times_executed(request_pattern)).to eq(2)
62
+ sleep 0.1 while !WebMock::RequestRegistry.instance.requested_signatures.hash.key?(:abc)
63
+ end
45
64
  end
46
65
  end
47
66
 
@@ -49,8 +68,8 @@ describe WebMock::RequestRegistry do
49
68
  it "should return hash of unique request signatures with accumulated number" do
50
69
  WebMock::RequestRegistry.instance.requested_signatures.put(WebMock::RequestSignature.new(:get, "www.example.com"))
51
70
  WebMock::RequestRegistry.instance.requested_signatures.put(WebMock::RequestSignature.new(:get, "www.example.com"))
52
- WebMock::RequestRegistry.instance.requested_signatures.
53
- get(WebMock::RequestSignature.new(:get, "www.example.com")).should == 2
71
+ expect(WebMock::RequestRegistry.instance.requested_signatures.
72
+ get(WebMock::RequestSignature.new(:get, "www.example.com"))).to eq(2)
54
73
  end
55
74
  end
56
75
 
@@ -63,12 +82,13 @@ describe WebMock::RequestRegistry do
63
82
  ].each do |s|
64
83
  WebMock::RequestRegistry.instance.requested_signatures.put(s)
65
84
  end
66
- WebMock::RequestRegistry.instance.to_s.should ==
85
+ expect(WebMock::RequestRegistry.instance.to_s).to eq(
67
86
  "GET http://www.example.com/ was made 2 times\nPUT http://www.example.org/ was made 1 time\n"
87
+ )
68
88
  end
69
89
 
70
90
  it "should output info if no requests were executed" do
71
- WebMock::RequestRegistry.instance.to_s.should == "No requests were made."
91
+ expect(WebMock::RequestRegistry.instance.to_s).to eq("No requests were made.")
72
92
  end
73
93
  end
74
94
 
@@ -0,0 +1,89 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe WebMock::RequestSignatureSnippet do
4
+ it("is real"){expect{subject}.not_to(raise_error)}
5
+
6
+ subject { WebMock::RequestSignatureSnippet.new(request_signature) }
7
+
8
+ let(:uri) { "http://example.com" }
9
+ let(:method) { "GET" }
10
+
11
+ let(:request_signature) { WebMock::RequestSignature.new(method, uri) }
12
+ let(:request_signature_body) { {"key" => "different value"}.to_json }
13
+
14
+ let(:request_pattern) {
15
+ WebMock::RequestPattern.new(
16
+ method, uri, {body: request_signature_body}
17
+ )
18
+ }
19
+
20
+ before :each do
21
+ request_signature.headers = {"Content-Type" => "application/json"}
22
+ request_signature.body = request_signature_body
23
+ end
24
+
25
+ describe "#stubbing_instructions" do
26
+ context "with stubbing instructions turned off" do
27
+ before :each do
28
+ WebMock.hide_stubbing_instructions!
29
+ end
30
+
31
+ it "returns nil" do
32
+ expect(subject.stubbing_instructions).to be nil
33
+ end
34
+
35
+ after :each do
36
+ WebMock.show_stubbing_instructions!
37
+ end
38
+ end
39
+
40
+ context "with stubbing instructions turned on" do
41
+ it "returns a stub snippet" do
42
+ expect(subject.stubbing_instructions).to include(
43
+ "You can stub this request with the following snippet:"
44
+ )
45
+ end
46
+ end
47
+ end
48
+
49
+ describe "#request_stubs" do
50
+ before :each do
51
+ WebMock.stub_request(:get, "https://www.example.com").with(body: {"a" => "b"})
52
+ end
53
+
54
+ context "when showing the body diff is turned off" do
55
+ before :each do
56
+ WebMock.hide_body_diff!
57
+ end
58
+
59
+ it "returns does not show the body diff" do
60
+ result = subject.request_stubs
61
+ result.sub!("registered request stubs:\n\n", "")
62
+ expect(result).to eq(
63
+ "stub_request(:get, \"https://www.example.com/\").\n with(\n body: {\"a\"=>\"b\"})"
64
+ )
65
+ end
66
+
67
+ after :each do
68
+ WebMock.show_body_diff!
69
+ end
70
+ end
71
+
72
+ context "when showing the body diff is turned on" do
73
+ it "shows the body diff" do
74
+ result = subject.request_stubs
75
+ result.sub!("registered request stubs:\n\n", "")
76
+ expect(result).to eq(
77
+ "stub_request(:get, \"https://www.example.com/\").\n with(\n body: {\"a\"=>\"b\"})\n\nBody diff:\n [[\"-\", \"key\", \"different value\"], [\"+\", \"a\", \"b\"]]\n"
78
+ )
79
+ end
80
+ end
81
+
82
+ context "with no request stubs" do
83
+ it "returns nil" do
84
+ WebMock.reset!
85
+ expect(subject.request_stubs).to be nil
86
+ end
87
+ end
88
+ end
89
+ end
@@ -4,110 +4,152 @@ describe WebMock::RequestSignature do
4
4
 
5
5
  describe "initialization" do
6
6
 
7
- it "should have assigned normalized uri" do
8
- WebMock::Util::URI.should_receive(:normalize_uri).and_return("www.example.kom")
7
+ it "assign the uri to be the normalized uri" do
8
+ expect(WebMock::Util::URI).to receive(:normalize_uri).and_return("www.example.kom")
9
9
  signature = WebMock::RequestSignature.new(:get, "www.example.com")
10
- signature.uri.should == "www.example.kom"
10
+ expect(signature.uri).to eq("www.example.kom")
11
11
  end
12
12
 
13
- it "should have assigned uri without normalization if uri is URI" do
14
- WebMock::Util::URI.should_not_receive(:normalize_uri)
13
+ it "assigns the uri without normalization if uri is already a URI" do
14
+ expect(WebMock::Util::URI).not_to receive(:normalize_uri)
15
15
  uri = Addressable::URI.parse("www.example.com")
16
16
  signature = WebMock::RequestSignature.new(:get, uri)
17
- signature.uri.should == uri
17
+ expect(signature.uri).to eq(uri)
18
18
  end
19
19
 
20
- it "should have assigned normalized headers" do
21
- WebMock::Util::Headers.should_receive(:normalize_headers).with('A' => 'a').and_return('B' => 'b')
22
- WebMock::RequestSignature.new(:get, "www.example.com", :headers => {'A' => 'a'}).headers.should == {'B' => 'b'}
20
+ it "assigns normalized headers" do
21
+ expect(WebMock::Util::Headers).to receive(:normalize_headers).with('A' => 'a').and_return('B' => 'b')
22
+ expect(
23
+ WebMock::RequestSignature.new(:get, "www.example.com", headers: {'A' => 'a'}).headers
24
+ ).to eq({'B' => 'b'})
23
25
  end
24
26
 
25
- it "should have assigned body" do
26
- WebMock::RequestSignature.new(:get, "www.example.com", :body => "abc").body.should == "abc"
27
+ it "assign the body" do
28
+ expect(WebMock::RequestSignature.new(:get, "www.example.com", body: "abc").body).to eq("abc")
27
29
  end
28
30
 
31
+ it "symbolizes the method" do
32
+ expect(WebMock::RequestSignature.new('get', "www.example.com", body: "abc").method).to eq(:get)
33
+ end
29
34
  end
30
35
 
31
- it "should report string describing itself" do
32
- WebMock::RequestSignature.new(:get, "www.example.com",
33
- :body => "abc", :headers => {'A' => 'a', 'B' => 'b'}).to_s.should ==
34
- "GET http://www.example.com/ with body 'abc' with headers {'A'=>'a', 'B'=>'b'}"
36
+ describe "#to_s" do
37
+ it "describes itself" do
38
+ expect(WebMock::RequestSignature.new(:get, "www.example.com",
39
+ body: "abc", headers: {'A' => 'a', 'B' => 'b'}).to_s).to eq(
40
+ "GET http://www.example.com/ with body 'abc' with headers {'A'=>'a', 'B'=>'b'}"
41
+ )
42
+ end
35
43
  end
36
44
 
37
- describe "hash" do
38
- it "should report same hash for two signatures with the same values" do
45
+ describe "#hash" do
46
+ it "reporst same hash for two signatures with the same values" do
39
47
  signature1 = WebMock::RequestSignature.new(:get, "www.example.com",
40
- :body => "abc", :headers => {'A' => 'a', 'B' => 'b'})
48
+ body: "abc", headers: {'A' => 'a', 'B' => 'b'})
41
49
  signature2 = WebMock::RequestSignature.new(:get, "www.example.com",
42
- :body => "abc", :headers => {'A' => 'a', 'B' => 'b'})
43
- signature1.hash.should == signature2.hash
50
+ body: "abc", headers: {'A' => 'a', 'B' => 'b'})
51
+ expect(signature1.hash).to eq(signature2.hash)
44
52
  end
45
53
 
46
- it "should report different hash for two signatures with different method" do
54
+ it "reports different hash for two signatures with different method" do
47
55
  signature1 = WebMock::RequestSignature.new(:get, "www.example.com")
48
56
  signature2 = WebMock::RequestSignature.new(:put, "www.example.com")
49
- signature1.hash.should_not == signature2.hash
57
+ expect(signature1.hash).not_to eq(signature2.hash)
50
58
  end
51
59
 
52
- it "should report different hash for two signatures with different uri" do
60
+ it "reports different hash for two signatures with different uri" do
53
61
  signature1 = WebMock::RequestSignature.new(:get, "www.example.com")
54
62
  signature2 = WebMock::RequestSignature.new(:get, "www.example.org")
55
- signature1.hash.should_not == signature2.hash
63
+ expect(signature1.hash).not_to eq(signature2.hash)
56
64
  end
57
65
 
58
- it "should report different hash for two signatures with different body" do
59
- signature1 = WebMock::RequestSignature.new(:get, "www.example.com", :body => "abc")
60
- signature2 = WebMock::RequestSignature.new(:get, "www.example.com", :body => "def")
61
- signature1.hash.should_not == signature2.hash
66
+ it "reports different hash for two signatures with different body" do
67
+ signature1 = WebMock::RequestSignature.new(:get, "www.example.com", body: "abc")
68
+ signature2 = WebMock::RequestSignature.new(:get, "www.example.com", body: "def")
69
+ expect(signature1.hash).not_to eq(signature2.hash)
62
70
  end
63
71
 
64
- it "should report different hash for two signatures with different headers" do
72
+ it "reports different hash for two signatures with different headers" do
65
73
  signature1 = WebMock::RequestSignature.new(:get, "www.example.com",
66
- :headers => {'A' => 'a'})
74
+ headers: {'A' => 'a'})
67
75
  signature2 = WebMock::RequestSignature.new(:get, "www.example.com",
68
- :headers => {'A' => 'A'})
69
- signature1.hash.should_not == signature2.hash
76
+ headers: {'A' => 'A'})
77
+ expect(signature1.hash).not_to eq(signature2.hash)
70
78
  end
71
79
  end
72
80
 
73
-
74
81
  [:==, :eql?].each do |method|
75
82
  describe method do
76
- it "should be true for two signatures with the same values" do
83
+ it "is true for two signatures with the same values" do
77
84
  signature1 = WebMock::RequestSignature.new(:get, "www.example.com",
78
- :body => "abc", :headers => {'A' => 'a', 'B' => 'b'})
85
+ body: "abc", headers: {'A' => 'a', 'B' => 'b'})
79
86
  signature2 = WebMock::RequestSignature.new(:get, "www.example.com",
80
- :body => "abc", :headers => {'A' => 'a', 'B' => 'b'})
87
+ body: "abc", headers: {'A' => 'a', 'B' => 'b'})
81
88
 
82
- signature1.send(method, signature2).should be_true
89
+ expect(signature1.send(method, signature2)).to be_truthy
83
90
  end
84
91
 
85
- it "should be false for two signatures with different method" do
92
+ it "is false for two signatures with different method" do
86
93
  signature1 = WebMock::RequestSignature.new(:get, "www.example.com")
87
94
  signature2 = WebMock::RequestSignature.new(:put, "www.example.com")
88
- signature1.send(method, signature2).should be_false
95
+ expect(signature1.send(method, signature2)).to be_falsey
89
96
  end
90
97
 
91
- it "should be false for two signatures with different uri" do
98
+ it "is false for two signatures with different uri" do
92
99
  signature1 = WebMock::RequestSignature.new(:get, "www.example.com")
93
100
  signature2 = WebMock::RequestSignature.new(:get, "www.example.org")
94
- signature1.send(method, signature2).should be_false
101
+ expect(signature1.send(method, signature2)).to be_falsey
95
102
  end
96
103
 
97
- it "should be false for two signatures with different body" do
98
- signature1 = WebMock::RequestSignature.new(:get, "www.example.com", :body => "abc")
99
- signature2 = WebMock::RequestSignature.new(:get, "www.example.com", :body => "def")
100
- signature1.send(method, signature2).should be_false
104
+ it "is false for two signatures with different body" do
105
+ signature1 = WebMock::RequestSignature.new(:get, "www.example.com", body: "abc")
106
+ signature2 = WebMock::RequestSignature.new(:get, "www.example.com", body: "def")
107
+ expect(signature1.send(method, signature2)).to be_falsey
101
108
  end
102
109
 
103
- it "should be false for two signatures with different headers" do
110
+ it "is false for two signatures with different headers" do
104
111
  signature1 = WebMock::RequestSignature.new(:get, "www.example.com",
105
- :headers => {'A' => 'a'})
112
+ headers: {'A' => 'a'})
106
113
  signature2 = WebMock::RequestSignature.new(:get, "www.example.com",
107
- :headers => {'A' => 'A'})
108
- signature1.send(method, signature2).should be_false
114
+ headers: {'A' => 'A'})
115
+ expect(signature1.send(method, signature2)).to be_falsey
109
116
  end
110
117
  end
111
118
  end
112
119
 
120
+ subject { WebMock::RequestSignature.new(:get, "www.example.com") }
121
+
122
+ describe "#url_encoded?" do
123
+ it "returns true if the headers are urlencoded" do
124
+ subject.headers = { "Content-Type" => "application/x-www-form-urlencoded" }
125
+ expect(subject.url_encoded?).to be true
126
+ end
127
+
128
+ it "returns false if the headers are NOT urlencoded" do
129
+ subject.headers = { "Content-Type" => "application/made-up-format" }
130
+ expect(subject.url_encoded?).to be false
131
+ end
132
+
133
+ it "returns false when no headers are set" do
134
+ subject.headers = nil
135
+ expect(subject.url_encoded?).to be false
136
+ end
137
+ end
138
+
139
+ describe "#json_headers?" do
140
+ it "returns true if the headers are json" do
141
+ subject.headers = { "Content-Type" => "application/json" }
142
+ expect(subject.json_headers?).to be true
143
+ end
144
+
145
+ it "returns false if the headers are NOT json" do
146
+ subject.headers = { "Content-Type" => "application/made-up-format" }
147
+ expect(subject.json_headers?).to be false
148
+ end
149
+
150
+ it "returns false when no headers are set" do
151
+ subject.headers = nil
152
+ expect(subject.json_headers?).to be false
153
+ end
154
+ end
113
155
  end
@@ -7,29 +7,30 @@ describe WebMock::RequestStub do
7
7
  end
8
8
 
9
9
  it "should have request pattern with method and uri" do
10
- @request_stub.request_pattern.to_s.should == "GET http://www.example.com/"
10
+ expect(@request_stub.request_pattern.to_s).to eq("GET http://www.example.com/")
11
11
  end
12
12
 
13
13
  it "should have response" do
14
- @request_stub.response.should be_a(WebMock::Response)
14
+ expect(@request_stub.response).to be_a(WebMock::Response)
15
15
  end
16
16
 
17
17
  describe "with" do
18
18
 
19
19
  it "should assign body to request pattern" do
20
- @request_stub.with(:body => "abc")
21
- @request_stub.request_pattern.to_s.should == WebMock::RequestPattern.new(:get, "www.example.com", :body => "abc").to_s
20
+ @request_stub.with(body: "abc")
21
+ expect(@request_stub.request_pattern.to_s).to eq(WebMock::RequestPattern.new(:get, "www.example.com", body: "abc").to_s)
22
22
  end
23
23
 
24
24
  it "should assign normalized headers to request pattern" do
25
- @request_stub.with(:headers => {'A' => 'a'})
26
- @request_stub.request_pattern.to_s.should ==
27
- WebMock::RequestPattern.new(:get, "www.example.com", :headers => {'A' => 'a'}).to_s
25
+ @request_stub.with(headers: {'A' => 'a'})
26
+ expect(@request_stub.request_pattern.to_s).to eq(
27
+ WebMock::RequestPattern.new(:get, "www.example.com", headers: {'A' => 'a'}).to_s
28
+ )
28
29
  end
29
30
 
30
31
  it "should assign given block to request profile" do
31
32
  @request_stub.with { |req| req.body == "abc" }
32
- @request_stub.request_pattern.matches?(WebMock::RequestSignature.new(:get, "www.example.com", :body => "abc")).should be_true
33
+ expect(@request_stub.request_pattern.matches?(WebMock::RequestSignature.new(:get, "www.example.com", body: "abc"))).to be_truthy
33
34
  end
34
35
 
35
36
  end
@@ -37,49 +38,49 @@ describe WebMock::RequestStub do
37
38
  describe "to_return" do
38
39
 
39
40
  it "should assign response with provided options" do
40
- @request_stub.to_return(:body => "abc", :status => 500)
41
- @request_stub.response.body.should == "abc"
42
- @request_stub.response.status.should == [500, ""]
41
+ @request_stub.to_return(body: "abc", status: 500)
42
+ expect(@request_stub.response.body).to eq("abc")
43
+ expect(@request_stub.response.status).to eq([500, ""])
43
44
  end
44
45
 
45
46
  it "should assign responses with provided options" do
46
- @request_stub.to_return([{:body => "abc"}, {:body => "def"}])
47
- [@request_stub.response.body, @request_stub.response.body].should == ["abc", "def"]
47
+ @request_stub.to_return([{body: "abc"}, {body: "def"}])
48
+ expect([@request_stub.response.body, @request_stub.response.body]).to eq(["abc", "def"])
48
49
  end
49
50
 
50
51
  end
51
52
 
52
53
  describe "then" do
53
54
  it "should return stub without any modifications, acting as syntactic sugar" do
54
- @request_stub.then.should == @request_stub
55
+ expect(@request_stub.then).to eq(@request_stub)
55
56
  end
56
57
  end
57
58
 
58
59
  describe "response" do
59
60
 
60
61
  it "should return responses in a sequence passed as array" do
61
- @request_stub.to_return([{:body => "abc"}, {:body => "def"}])
62
- @request_stub.response.body.should == "abc"
63
- @request_stub.response.body.should == "def"
62
+ @request_stub.to_return([{body: "abc"}, {body: "def"}])
63
+ expect(@request_stub.response.body).to eq("abc")
64
+ expect(@request_stub.response.body).to eq("def")
64
65
  end
65
66
 
66
67
  it "should repeat returning last response" do
67
- @request_stub.to_return([{:body => "abc"}, {:body => "def"}])
68
+ @request_stub.to_return([{body: "abc"}, {body: "def"}])
68
69
  @request_stub.response
69
70
  @request_stub.response
70
- @request_stub.response.body.should == "def"
71
+ expect(@request_stub.response.body).to eq("def")
71
72
  end
72
73
 
73
74
  it "should return responses in a sequence passed as comma separated params" do
74
- @request_stub.to_return({:body => "abc"}, {:body => "def"})
75
- @request_stub.response.body.should == "abc"
76
- @request_stub.response.body.should == "def"
75
+ @request_stub.to_return({body: "abc"}, {body: "def"})
76
+ expect(@request_stub.response.body).to eq("abc")
77
+ expect(@request_stub.response.body).to eq("def")
77
78
  end
78
79
 
79
80
  it "should return responses declared in multiple to_return declarations" do
80
- @request_stub.to_return({:body => "abc"}).to_return({:body => "def"})
81
- @request_stub.response.body.should == "abc"
82
- @request_stub.response.body.should == "def"
81
+ @request_stub.to_return({body: "abc"}).to_return({body: "def"})
82
+ expect(@request_stub.response.body).to eq("abc")
83
+ expect(@request_stub.response.body).to eq("def")
83
84
  end
84
85
 
85
86
  end
@@ -88,37 +89,37 @@ describe WebMock::RequestStub do
88
89
 
89
90
  it "should assign response with exception to be thrown" do
90
91
  @request_stub.to_raise(ArgumentError)
91
- lambda {
92
+ expect {
92
93
  @request_stub.response.raise_error_if_any
93
- }.should raise_error(ArgumentError, "Exception from WebMock")
94
+ }.to raise_error(ArgumentError, "Exception from WebMock")
94
95
  end
95
96
 
96
97
  it "should assign sequence of responses with response with exception to be thrown" do
97
- @request_stub.to_return(:body => "abc").then.to_raise(ArgumentError)
98
- @request_stub.response.body.should == "abc"
99
- lambda {
98
+ @request_stub.to_return(body: "abc").then.to_raise(ArgumentError)
99
+ expect(@request_stub.response.body).to eq("abc")
100
+ expect {
100
101
  @request_stub.response.raise_error_if_any
101
- }.should raise_error(ArgumentError, "Exception from WebMock")
102
+ }.to raise_error(ArgumentError, "Exception from WebMock")
102
103
  end
103
104
 
104
105
  it "should assign a list responses to be thrown in a sequence" do
105
106
  @request_stub.to_raise(ArgumentError, IndexError)
106
- lambda {
107
+ expect {
107
108
  @request_stub.response.raise_error_if_any
108
- }.should raise_error(ArgumentError, "Exception from WebMock")
109
- lambda {
109
+ }.to raise_error(ArgumentError, "Exception from WebMock")
110
+ expect {
110
111
  @request_stub.response.raise_error_if_any
111
- }.should raise_error(IndexError, "Exception from WebMock")
112
+ }.to raise_error(IndexError, "Exception from WebMock")
112
113
  end
113
114
 
114
115
  it "should raise exceptions declared in multiple to_raise declarations" do
115
116
  @request_stub.to_raise(ArgumentError).then.to_raise(IndexError)
116
- lambda {
117
+ expect {
117
118
  @request_stub.response.raise_error_if_any
118
- }.should raise_error(ArgumentError, "Exception from WebMock")
119
- lambda {
119
+ }.to raise_error(ArgumentError, "Exception from WebMock")
120
+ expect {
120
121
  @request_stub.response.raise_error_if_any
121
- }.should raise_error(IndexError, "Exception from WebMock")
122
+ }.to raise_error(IndexError, "Exception from WebMock")
122
123
  end
123
124
 
124
125
  end
@@ -127,20 +128,20 @@ describe WebMock::RequestStub do
127
128
 
128
129
  it "should assign response with timeout" do
129
130
  @request_stub.to_timeout
130
- @request_stub.response.should_timeout.should be_true
131
+ expect(@request_stub.response.should_timeout).to be_truthy
131
132
  end
132
133
 
133
134
  it "should assign sequence of responses with response with timeout" do
134
- @request_stub.to_return(:body => "abc").then.to_timeout
135
- @request_stub.response.body.should == "abc"
136
- @request_stub.response.should_timeout.should be_true
135
+ @request_stub.to_return(body: "abc").then.to_timeout
136
+ expect(@request_stub.response.body).to eq("abc")
137
+ expect(@request_stub.response.should_timeout).to be_truthy
137
138
  end
138
139
 
139
140
  it "should allow multiple timeouts to be declared" do
140
- @request_stub.to_timeout.then.to_timeout.then.to_return(:body => "abc")
141
- @request_stub.response.should_timeout.should be_true
142
- @request_stub.response.should_timeout.should be_true
143
- @request_stub.response.body.should == "abc"
141
+ @request_stub.to_timeout.then.to_timeout.then.to_return(body: "abc")
142
+ expect(@request_stub.response.should_timeout).to be_truthy
143
+ expect(@request_stub.response.should_timeout).to be_truthy
144
+ expect(@request_stub.response.body).to eq("abc")
144
145
  end
145
146
 
146
147
  end
@@ -149,48 +150,48 @@ describe WebMock::RequestStub do
149
150
  describe "times" do
150
151
 
151
152
  it "should give error if declared before any response declaration is declared" do
152
- lambda {
153
+ expect {
153
154
  @request_stub.times(3)
154
- }.should raise_error("Invalid WebMock stub declaration. times(N) can be declared only after response declaration.")
155
+ }.to raise_error("Invalid WebMock stub declaration. times(N) can be declared only after response declaration.")
155
156
  end
156
157
 
157
158
  it "should repeat returning last declared response declared number of times" do
158
- @request_stub.to_return({:body => "abc"}).times(2).then.to_return({:body => "def"})
159
- @request_stub.response.body.should == "abc"
160
- @request_stub.response.body.should == "abc"
161
- @request_stub.response.body.should == "def"
159
+ @request_stub.to_return({body: "abc"}).times(2).then.to_return({body: "def"})
160
+ expect(@request_stub.response.body).to eq("abc")
161
+ expect(@request_stub.response.body).to eq("abc")
162
+ expect(@request_stub.response.body).to eq("def")
162
163
  end
163
164
 
164
165
  it "should repeat raising last declared exception declared number of times" do
165
- @request_stub.to_return({:body => "abc"}).times(2).then.to_return({:body => "def"})
166
- @request_stub.response.body.should == "abc"
167
- @request_stub.response.body.should == "abc"
168
- @request_stub.response.body.should == "def"
166
+ @request_stub.to_return({body: "abc"}).times(2).then.to_return({body: "def"})
167
+ expect(@request_stub.response.body).to eq("abc")
168
+ expect(@request_stub.response.body).to eq("abc")
169
+ expect(@request_stub.response.body).to eq("def")
169
170
  end
170
171
 
171
172
  it "should repeat returning last declared sequence of responses declared number of times" do
172
- @request_stub.to_return({:body => "abc"}, {:body => "def"}).times(2).then.to_return({:body => "ghj"})
173
- @request_stub.response.body.should == "abc"
174
- @request_stub.response.body.should == "def"
175
- @request_stub.response.body.should == "abc"
176
- @request_stub.response.body.should == "def"
177
- @request_stub.response.body.should == "ghj"
173
+ @request_stub.to_return({body: "abc"}, {body: "def"}).times(2).then.to_return({body: "ghj"})
174
+ expect(@request_stub.response.body).to eq("abc")
175
+ expect(@request_stub.response.body).to eq("def")
176
+ expect(@request_stub.response.body).to eq("abc")
177
+ expect(@request_stub.response.body).to eq("def")
178
+ expect(@request_stub.response.body).to eq("ghj")
178
179
  end
179
180
 
180
181
  it "should return self" do
181
- @request_stub.to_return({:body => "abc"}).times(1).should == @request_stub
182
+ expect(@request_stub.to_return({body: "abc"}).times(1)).to eq(@request_stub)
182
183
  end
183
184
 
184
185
  it "should raise error if argument is not integer" do
185
- lambda {
186
- @request_stub.to_return({:body => "abc"}).times("not number")
187
- }.should raise_error("times(N) accepts integers >= 1 only")
186
+ expect {
187
+ @request_stub.to_return({body: "abc"}).times("not number")
188
+ }.to raise_error("times(N) accepts integers >= 1 only")
188
189
  end
189
190
 
190
191
  it "should raise error if argument is < 1" do
191
- lambda {
192
- @request_stub.to_return({:body => "abc"}).times(0)
193
- }.should raise_error("times(N) accepts integers >= 1 only")
192
+ expect {
193
+ @request_stub.to_return({body: "abc"}).times(0)
194
+ }.to raise_error("times(N) accepts integers >= 1 only")
194
195
  end
195
196
 
196
197
  end