rivulet-rspec 0.1.3
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 +7 -0
- data/lib/rivulet/rspec/helpers.rb +92 -0
- data/lib/rivulet/rspec/matchers.rb +15 -0
- data/lib/rivulet/rspec/version.rb +5 -0
- data/lib/rivulet-rspec.rb +3 -0
- metadata +124 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 0ef9399fd0a91d1a3a5719ec19a9534148cba3679866a862a2cad65799b3101c
|
|
4
|
+
data.tar.gz: 93ab13307b0b40118fd3b3709b1fb9bd1d317b4f1aa39a6f62abc5ea5065eb97
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: cad3519811e5da6fb3c1d80fc16b4b3101665653a821529cf9d263803036fc88359271d7d82ecfad92a3b5303c0ffa4ad753996e4f80ef3f5cde03cd88ce04da
|
|
7
|
+
data.tar.gz: fa8902655bb387b704906bbe7aa8dee9954eb04d22517d143f8c2c8a9f05e030ede1881e85e640941429600d19b1532891aee29d57a740579630504168bb1f02
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
require 'oj'
|
|
2
|
+
require 'rack'
|
|
3
|
+
require 'rack/multipart'
|
|
4
|
+
|
|
5
|
+
module Rivulet
|
|
6
|
+
module RSpec
|
|
7
|
+
module Helpers
|
|
8
|
+
def get(url, params: {}, headers: {})
|
|
9
|
+
env = Rack::MockRequest.env_for(
|
|
10
|
+
url,
|
|
11
|
+
method: 'GET',
|
|
12
|
+
params: params,
|
|
13
|
+
**env_headers(headers)
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
@response = Rack::MockResponse.new(*Rivulet.app.call(env))
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
%i[post put patch delete].each do |method_name|
|
|
20
|
+
define_method(method_name) do |url, params: {}, headers: {}, content_type: 'application/json'|
|
|
21
|
+
opts = {
|
|
22
|
+
method: method_name,
|
|
23
|
+
**env_headers(headers),
|
|
24
|
+
**build_payload(params, content_type)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
env = Rack::MockRequest.env_for(url, opts)
|
|
28
|
+
|
|
29
|
+
@response = Rack::MockResponse.new(*Rivulet.app.call(env))
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def response
|
|
34
|
+
@response
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def json_response
|
|
38
|
+
payload = Oj.strict_load(@response.body)
|
|
39
|
+
|
|
40
|
+
unless payload.is_a?(Hash)
|
|
41
|
+
raise ArgumentError, "expected a JSON object in the response body, got #{payload.class}"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
payload.deep_symbolize_keys
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
private
|
|
48
|
+
|
|
49
|
+
def env_headers(headers)
|
|
50
|
+
headers.to_h do |key, value|
|
|
51
|
+
["HTTP_#{key.to_s.upcase.tr('-', '_')}", value]
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def build_payload(params, content_type)
|
|
56
|
+
case content_type
|
|
57
|
+
when 'application/x-www-form-urlencoded'
|
|
58
|
+
{ params: params }
|
|
59
|
+
when 'multipart/form-data'
|
|
60
|
+
unless multipart_upload?(params)
|
|
61
|
+
raise ArgumentError,
|
|
62
|
+
"multipart/form-data requires Rack::Multipart::UploadedFile values in params, got plain params"
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
{ params: params }
|
|
66
|
+
when 'application/json', 'text/json'
|
|
67
|
+
{ input: Oj.dump(params, mode: :strict), 'CONTENT_TYPE' => content_type }
|
|
68
|
+
else
|
|
69
|
+
if params.is_a?(Hash)
|
|
70
|
+
raise ArgumentError,
|
|
71
|
+
"cannot encode Hash params with #{content_type}; pass a String or IO body"
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
{ input: params, 'CONTENT_TYPE' => content_type }
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Mirrors Rack::Multipart::Generator#multipart? without consuming the
|
|
79
|
+
# upload IOs, so Rack can still build the multipart body itself.
|
|
80
|
+
def multipart_upload?(value)
|
|
81
|
+
case value
|
|
82
|
+
when Array
|
|
83
|
+
value.any? { |item| multipart_upload?(item) }
|
|
84
|
+
when Hash
|
|
85
|
+
value.values.any? { |item| multipart_upload?(item) }
|
|
86
|
+
else
|
|
87
|
+
value.is_a?(Rack::Multipart::UploadedFile)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'rspec'
|
|
2
|
+
|
|
3
|
+
RSpec::Matchers.define :have_http_status do |status|
|
|
4
|
+
match do |response|
|
|
5
|
+
response.status == status
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
failure_message do
|
|
9
|
+
"expected response to have http status #{status} but got #{response.status}"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
failure_message_when_negated do
|
|
13
|
+
"expected response not to have http status #{status}"
|
|
14
|
+
end
|
|
15
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: rivulet-rspec
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.3
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Vladimir Dombrovskiy <vold@fastmail.com>
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: oj
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '0'
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '0'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: rack
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '0'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '0'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: rspec
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - ">="
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '0'
|
|
47
|
+
type: :runtime
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - ">="
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '0'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: pry
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - ">="
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '0'
|
|
61
|
+
type: :development
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - ">="
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '0'
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: rake
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - ">="
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '0'
|
|
75
|
+
type: :development
|
|
76
|
+
prerelease: false
|
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - ">="
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '0'
|
|
82
|
+
- !ruby/object:Gem::Dependency
|
|
83
|
+
name: rspec
|
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
|
85
|
+
requirements:
|
|
86
|
+
- - ">="
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
version: '0'
|
|
89
|
+
type: :development
|
|
90
|
+
prerelease: false
|
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
92
|
+
requirements:
|
|
93
|
+
- - ">="
|
|
94
|
+
- !ruby/object:Gem::Version
|
|
95
|
+
version: '0'
|
|
96
|
+
executables: []
|
|
97
|
+
extensions: []
|
|
98
|
+
extra_rdoc_files: []
|
|
99
|
+
files:
|
|
100
|
+
- lib/rivulet-rspec.rb
|
|
101
|
+
- lib/rivulet/rspec/helpers.rb
|
|
102
|
+
- lib/rivulet/rspec/matchers.rb
|
|
103
|
+
- lib/rivulet/rspec/version.rb
|
|
104
|
+
licenses:
|
|
105
|
+
- Apache-2.0
|
|
106
|
+
metadata: {}
|
|
107
|
+
rdoc_options: []
|
|
108
|
+
require_paths:
|
|
109
|
+
- lib
|
|
110
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
111
|
+
requirements:
|
|
112
|
+
- - ">="
|
|
113
|
+
- !ruby/object:Gem::Version
|
|
114
|
+
version: '3.3'
|
|
115
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
116
|
+
requirements:
|
|
117
|
+
- - ">="
|
|
118
|
+
- !ruby/object:Gem::Version
|
|
119
|
+
version: '0'
|
|
120
|
+
requirements: []
|
|
121
|
+
rubygems_version: 4.0.8
|
|
122
|
+
specification_version: 4
|
|
123
|
+
summary: Rivulet RSpec helpers
|
|
124
|
+
test_files: []
|