rspec-httpd 0.0.8 → 0.0.9

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: 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