rspec-httpd 0.0.8 → 0.0.9

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: ea69f8da3ad709d768698cb52ca4e61629d25fd0259f484c5f16ab7339d80f10
4
- data.tar.gz: 72856c694342e833015a370ecbc663df0d4def98ff59d9ec2849e7ae8afdb2fa
3
+ metadata.gz: d8a74da790f8631d6274b9b21573c5f100e8c407bdbafbec1f30589a15ed8a51
4
+ data.tar.gz: 709c1999177711fdbd3d3444e6539cd41a39d6be7c90c70aca71824a88226fca
5
5
  SHA512:
6
- metadata.gz: 22bddec52820090e23b1ae6450ee6604338dfb4b68c2fbf6a5807b12112fa0a47ae8ed0b96b0416e79cf7eb32d22ddef575e02796aaf39cbf30971204821e75e
7
- data.tar.gz: e264728cecce18ac99df7cac8f1e09931e13e10db5269230c3f558b861b7a513adcc37f2a070f687b25c4f64f832b8938afc59d11e87879baa8c77b659222dd7
6
+ metadata.gz: 1355bd07032124833b0d3df6a54328800fa6c0f20606c49634d9223d74084e8afde82e8149795ab718c0075b1f8b8cdd806d81c6334a4782688886f59448db39
7
+ data.tar.gz: 2b8c8b181cce3c37be518711b628567a8cab86904299fd1d2a94e73fd132a5e977702b89ed96b348f7aa9b4438d42d5e0cc2ebe46278a5171e15f8fdbd5683dc
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.8
1
+ 0.0.9
@@ -1,6 +1,11 @@
1
1
  require "rspec/core"
2
2
  require "forwardable"
3
3
  require "logger"
4
+ require "expectation"
5
+
6
+ # rubocop:disable Metrics/AbcSize
7
+ # rubocop:disable Metrics/CyclomaticComplexity
8
+ # rubocop:disable Metrics/PerceivedComplexity
4
9
 
5
10
  module RSpec::Httpd
6
11
  end
@@ -9,7 +14,7 @@ require_relative "httpd/version"
9
14
  require_relative "httpd/server"
10
15
  require_relative "httpd/client"
11
16
  require_relative "httpd/config"
12
- require_relative "httpd/expectation"
17
+ require_relative "httpd/expectation_failed"
13
18
 
14
19
  module RSpec::Httpd
15
20
  extend self
@@ -54,6 +59,10 @@ module RSpec::Httpd
54
59
  public
55
60
 
56
61
  def expect_response(expected = nil, status: nil, client: nil)
62
+ if expected.nil? && block_given?
63
+ expected = yield
64
+ end
65
+
57
66
  client ||= http
58
67
 
59
68
  # only check status? This lets us write
@@ -69,10 +78,13 @@ module RSpec::Httpd
69
78
  # here, because it needs access to the expect() implementation.
70
79
 
71
80
  expect(client.status).to eq(status || 200)
72
- unless expected.nil?
73
- do_expect_last_request(expected: expected, client: client)
81
+ return if expected.nil?
82
+
83
+ begin
84
+ # expect! comes from the expectation gem
85
+ expect! client.result => expected
86
+ rescue ::Expectation::Matcher::Mismatch
87
+ raise ExpectationFailed.new($!, client.request)
74
88
  end
75
89
  end
76
-
77
- include RSpec::Httpd::Expectation
78
90
  end
@@ -0,0 +1,37 @@
1
+ class RSpec::Httpd::ExpectationFailed < RuntimeError
2
+ attr_reader :original_error, :request
3
+
4
+ def initialize(original_error, request)
5
+ @original_error, @request = original_error, request
6
+ end
7
+
8
+ def to_s
9
+ "#{request_info}: #{original_error}"
10
+ end
11
+
12
+ private
13
+
14
+ def request_info
15
+ request_info = "#{request.method} #{request.path}"
16
+ return request_info unless request.body
17
+
18
+ "#{request_info}#{body_info(parsed_body(body) || body)}"
19
+ end
20
+
21
+ def parsed_body(body)
22
+ JSON.parse(body)
23
+ rescue StandardError
24
+ nil
25
+ end
26
+
27
+ def body_info(body)
28
+ body = parsed_body(body) || body
29
+
30
+ case body
31
+ when Hash
32
+ body.map { |k, v| "#{k}: #{v.inspect}" }.join(", ")
33
+ else
34
+ body.inspect
35
+ end
36
+ end
37
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-httpd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Enrico Thierbach
@@ -10,6 +10,20 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2019-03-01 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: expectation
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.1.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.1.1
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: rake
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -64,7 +78,7 @@ files:
64
78
  - lib/rspec/httpd.rb
65
79
  - lib/rspec/httpd/client.rb
66
80
  - lib/rspec/httpd/config.rb
67
- - lib/rspec/httpd/expectation.rb
81
+ - lib/rspec/httpd/expectation_failed.rb
68
82
  - lib/rspec/httpd/server.rb
69
83
  - lib/rspec/httpd/version.rb
70
84
  homepage: https://github.com/radiospiel/rspec-httpd
@@ -1,40 +0,0 @@
1
- require "rspec/core"
2
- require "forwardable"
3
- require "logger"
4
-
5
- module RSpec::Httpd::Expectation
6
- def do_expect_last_request(expected:, client:)
7
- actual = client.result
8
-
9
- ctx = {
10
- request: client.request, actual: actual, expected: expected
11
- }
12
-
13
- case expected
14
- when Regexp then expect(actual).to match(expected), -> { format_failure SHOULD_MATCH_ERROR, ctx }
15
- when Hash then expect(actual).to include(expected), -> { format_failure SHOULD_INCLUDE_ERROR, ctx }
16
- else expect(actual).to eq(expected), -> { format_failure SHOULD_EQUAL_ERROR, ctx }
17
- end
18
- end
19
-
20
- SHOULD_MATCH_ERROR = "%request -- %actual should match %expected".freeze
21
- SHOULD_INCLUDE_ERROR = "%request -- %actual should include %expected".freeze
22
- SHOULD_EQUAL_ERROR = "%request -- %actual should equal %expected".freeze
23
-
24
- private
25
-
26
- def format_failure(format, ctx)
27
- format.gsub(/\%(\S+)/) do
28
- value = ctx.fetch(Regexp.last_match(1).to_sym)
29
- case value
30
- when Net::HTTPGenericRequest
31
- request = value
32
- s = "#{request.method} #{request.path}"
33
- s += " body:#{request.body.inspect}" if request.body
34
- s
35
- else
36
- value.inspect
37
- end
38
- end
39
- end
40
- end