endpoint-flux2 1.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.github/FUNDING.yml +3 -0
- data/.github/workflows/gem-push.yml +42 -0
- data/.gitignore +36 -0
- data/CONTRIBUTING.md +18 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +49 -0
- data/README.md +634 -0
- data/Rakefile +1 -0
- data/_config.yml +1 -0
- data/circle.yml +14 -0
- data/endpoint_flux.gemspec +20 -0
- data/lib/endpoint_flux.rb +22 -0
- data/lib/endpoint_flux/class_loader.rb +58 -0
- data/lib/endpoint_flux/config.rb +85 -0
- data/lib/endpoint_flux/config/interceptor.rb +23 -0
- data/lib/endpoint_flux/config/middleware.rb +38 -0
- data/lib/endpoint_flux/config/rescue_from.rb +28 -0
- data/lib/endpoint_flux/endpoint.rb +81 -0
- data/lib/endpoint_flux/exceptions.rb +10 -0
- data/lib/endpoint_flux/exceptions/base.rb +21 -0
- data/lib/endpoint_flux/exceptions/forbidden.rb +12 -0
- data/lib/endpoint_flux/exceptions/not_found.rb +12 -0
- data/lib/endpoint_flux/exceptions/service_unavailable.rb +12 -0
- data/lib/endpoint_flux/exceptions/unauthorized.rb +12 -0
- data/lib/endpoint_flux/exceptions/validation.rb +13 -0
- data/lib/endpoint_flux/middlewares.rb +8 -0
- data/lib/endpoint_flux/middlewares/authenticator/skip.rb +11 -0
- data/lib/endpoint_flux/middlewares/authorizator/skip.rb +11 -0
- data/lib/endpoint_flux/middlewares/decorator/add_status.rb +12 -0
- data/lib/endpoint_flux/middlewares/decorator/skip.rb +11 -0
- data/lib/endpoint_flux/middlewares/policy/skip.rb +11 -0
- data/lib/endpoint_flux/middlewares/validator/empty.rb +12 -0
- data/lib/endpoint_flux/rails/concerns/endpoint_controller.rb +43 -0
- data/lib/endpoint_flux/railtie.rb +14 -0
- data/lib/endpoint_flux/request.rb +17 -0
- data/lib/endpoint_flux/response.rb +30 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/endpoint_flux/decorators/articles/base.rb +12 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/endpoint_flux/decorators/boards/base.rb +12 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/endpoint_flux/decorators/boards/show.rb +22 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/endpoint_flux/decorators/tasks/base.rb +12 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/endpoint_flux/endpoints/articles/create.rb +27 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/endpoint_flux/endpoints/articles/destroy.rb +23 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/endpoint_flux/endpoints/articles/index.rb +26 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/endpoint_flux/endpoints/boards/create.rb +24 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/endpoint_flux/endpoints/boards/index.rb +21 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/endpoint_flux/endpoints/boards/show.rb +23 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/endpoint_flux/endpoints/tasks/create.rb +27 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/endpoint_flux/endpoints/tasks/destroy.rb +23 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/endpoint_flux/endpoints/tasks/index.rb +25 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/endpoint_flux/endpoints/tasks/update.rb +28 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/endpoint_flux/middlewares/decorator/paginate.rb +19 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/endpoint_flux/middlewares/decorator/representable.rb +24 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/endpoint_flux/middlewares/validator/inline.rb +17 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/endpoint_flux/validations/base.rb +21 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/endpoint_flux/validations/concern/error.rb +7 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/endpoint_flux/validations/predicates/base.rb +12 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/endpoint_flux/validations/predicates/bool.rb +20 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/endpoint_flux/validations/predicates/dates.rb +34 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/endpoint_flux/validations/predicates/decimal.rb +24 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/endpoint_flux/validations/predicates/email.rb +18 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/endpoint_flux/validations/predicates/password.rb +29 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/generators/initializers/endpoint_flux.rb +41 -0
- data/lib/endpoint_flux/tasks/endpoint_flux/init.rake +12 -0
- data/lib/endpoint_flux/version.rb +3 -0
- data/spec/lib/class_loader_spec.rb +31 -0
- data/spec/lib/config/default_middlewares_spec.rb +21 -0
- data/spec/lib/config/endpoints_namespace_spec.rb +13 -0
- data/spec/lib/config/flow_spec.rb +8 -0
- data/spec/lib/config/interceptor_spec.rb +34 -0
- data/spec/lib/config/middleware_spec.rb +62 -0
- data/spec/lib/config/rescue_from_spec.rb +45 -0
- data/spec/lib/endpoint/flow_spec.rb +43 -0
- data/spec/lib/endpoint/middlewares_spec.rb +110 -0
- data/spec/lib/endpoint/perform_spec.rb +61 -0
- data/spec/lib/endpoint/rescue_from_spec.rb +61 -0
- data/spec/lib/endpoint_flux/rails/concerns/endpoint_controller_spec.rb +158 -0
- data/spec/lib/endpoint_flux/request_spec.rb +44 -0
- data/spec/lib/exceptions/forbidden_spec.rb +12 -0
- data/spec/lib/exceptions/not_found_spec.rb +12 -0
- data/spec/lib/exceptions/service_unavailable_spec.rb +12 -0
- data/spec/lib/exceptions/unauthorized_spec.rb +12 -0
- data/spec/lib/exceptions/validation_spec.rb +14 -0
- data/spec/lib/middlewares/authenticator/skip_spec.rb +5 -0
- data/spec/lib/middlewares/authorizator/skip_spec.rb +5 -0
- data/spec/lib/middlewares/decorator/add_status_spec.rb +17 -0
- data/spec/lib/middlewares/decorator/skip_spec.rb +5 -0
- data/spec/lib/middlewares/policy/skip_spec.rb +5 -0
- data/spec/lib/middlewares/shared_examples.rb +19 -0
- data/spec/lib/middlewares/validator/empty_spec.rb +15 -0
- data/spec/lib/response_spec.rb +131 -0
- data/spec/spec_helper.rb +56 -0
- metadata +203 -0
@@ -0,0 +1,158 @@
|
|
1
|
+
module ActiveSupport
|
2
|
+
module Concern; end
|
3
|
+
end
|
4
|
+
|
5
|
+
module Endpoints
|
6
|
+
module Test; end
|
7
|
+
end
|
8
|
+
|
9
|
+
class String
|
10
|
+
def camelize(uppercase_first_letter = true)
|
11
|
+
string = self
|
12
|
+
if uppercase_first_letter
|
13
|
+
string = string.sub(/^[a-z\d]*/) { |match| match.capitalize }
|
14
|
+
else
|
15
|
+
string = string.sub(/^(?:(?=\b|[A-Z_])|\w)/) { |match| match.downcase }
|
16
|
+
end
|
17
|
+
string.gsub(/(?:_|(\/))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" }.gsub("/", "::")
|
18
|
+
end
|
19
|
+
|
20
|
+
def constantize(camel_cased_word =nil)
|
21
|
+
camel_cased_word ||= self
|
22
|
+
names = camel_cased_word.split("::".freeze)
|
23
|
+
|
24
|
+
# Trigger a built-in NameError exception including the ill-formed constant in the message.
|
25
|
+
Object.const_get(camel_cased_word) if names.empty?
|
26
|
+
|
27
|
+
# Remove the first blank element in case of '::ClassName' notation.
|
28
|
+
names.shift if names.size > 1 && names.first.empty?
|
29
|
+
|
30
|
+
names.inject(Object) do |constant, name|
|
31
|
+
if constant == Object
|
32
|
+
constant.const_get(name)
|
33
|
+
else
|
34
|
+
candidate = constant.const_get(name)
|
35
|
+
next candidate if constant.const_defined?(name, false)
|
36
|
+
next candidate unless Object.const_defined?(name)
|
37
|
+
|
38
|
+
# Go down the ancestors to check if it is owned directly. The check
|
39
|
+
# stops when we reach Object or the end of ancestors tree.
|
40
|
+
constant = constant.ancestors.inject(constant) do |const, ancestor|
|
41
|
+
break const if ancestor == Object
|
42
|
+
break ancestor if ancestor.const_defined?(name, false)
|
43
|
+
const
|
44
|
+
end
|
45
|
+
|
46
|
+
# owner is in Object, so raise
|
47
|
+
constant.const_get(name, false)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
require 'spec_helper'
|
54
|
+
require 'endpoint_flux/rails/concerns/endpoint_controller'
|
55
|
+
require 'ostruct'
|
56
|
+
|
57
|
+
class RemoteIpDummyClass
|
58
|
+
include EndpointFlux::Rails::Concerns::EndpointController
|
59
|
+
|
60
|
+
def headers
|
61
|
+
{}
|
62
|
+
end
|
63
|
+
|
64
|
+
def request
|
65
|
+
OpenStruct.new(
|
66
|
+
headers: { 'authorization' => 'authorization header' },
|
67
|
+
remote_ip: '172.18.0.1',
|
68
|
+
env: { 'HTTP_X_FORWARDED_FOR' => '172.18.0.2' }
|
69
|
+
)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
class LocalIpDummyClass
|
74
|
+
include EndpointFlux::Rails::Concerns::EndpointController
|
75
|
+
|
76
|
+
def headers
|
77
|
+
{}
|
78
|
+
end
|
79
|
+
|
80
|
+
def request
|
81
|
+
OpenStruct.new(
|
82
|
+
headers: { 'authorization' => 'authorization header' },
|
83
|
+
remote_ip: '127.0.0.1',
|
84
|
+
env: { 'HTTP_X_FORWARDED_FOR' => '172.18.0.2' }
|
85
|
+
)
|
86
|
+
end
|
87
|
+
|
88
|
+
def params; end
|
89
|
+
|
90
|
+
end
|
91
|
+
|
92
|
+
RSpec.describe EndpointFlux::Rails::Concerns::EndpointController do
|
93
|
+
describe '#request_object' do
|
94
|
+
before do
|
95
|
+
allow(subject).to receive(:endpoint_params).and_return({})
|
96
|
+
end
|
97
|
+
|
98
|
+
context 'remote ip' do
|
99
|
+
subject { RemoteIpDummyClass.new }
|
100
|
+
|
101
|
+
it 'sets property as remote_ip' do
|
102
|
+
expect(
|
103
|
+
::EndpointFlux::Request
|
104
|
+
).to receive(:new).with(headers: { 'Authorization' => 'authorization header' },
|
105
|
+
params: subject.endpoint_params,
|
106
|
+
remote_ip: subject.request.remote_ip)
|
107
|
+
|
108
|
+
subject.request_object
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
context 'local ip' do
|
113
|
+
subject { LocalIpDummyClass.new }
|
114
|
+
|
115
|
+
it 'sets property as HTTP_X_FORWARDED_FOR' do
|
116
|
+
expect(
|
117
|
+
::EndpointFlux::Request
|
118
|
+
).to receive(:new).with(headers: { 'Authorization' => 'authorization header' },
|
119
|
+
params: subject.endpoint_params,
|
120
|
+
remote_ip: subject.request.env['HTTP_X_FORWARDED_FOR'])
|
121
|
+
|
122
|
+
subject.request_object
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
127
|
+
|
128
|
+
describe '#endpoint_params' do
|
129
|
+
before do
|
130
|
+
allow(subject).to receive_message_chain(:params, :permit!, :except, :to_h, :deep_symbolize_keys)
|
131
|
+
.and_return({test: 'test'})
|
132
|
+
end
|
133
|
+
|
134
|
+
context 'request' do
|
135
|
+
subject { LocalIpDummyClass.new }
|
136
|
+
|
137
|
+
it 'permits and excepts params' do
|
138
|
+
expect(subject.endpoint_params).to match({test: 'test'})
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
end
|
143
|
+
|
144
|
+
describe '#endpoint_for' do
|
145
|
+
context 'with namespace' do
|
146
|
+
subject { LocalIpDummyClass.new }
|
147
|
+
it 'return namespace' do
|
148
|
+
expect(subject.endpoint_for('test')).to eq(Endpoints::Test)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
|
154
|
+
describe '#present' do
|
155
|
+
|
156
|
+
end
|
157
|
+
|
158
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe EndpointFlux::Request do
|
4
|
+
it { should respond_to :headers }
|
5
|
+
it { should respond_to :remote_ip }
|
6
|
+
it { should respond_to :params }
|
7
|
+
it { should respond_to :namespace }
|
8
|
+
it { should respond_to :endpoint }
|
9
|
+
it { should respond_to :scope }
|
10
|
+
|
11
|
+
describe '#initialize' do
|
12
|
+
context 'when all params specified' do
|
13
|
+
let(:params) { { param: :val } }
|
14
|
+
let(:headers) { { header: :val } }
|
15
|
+
let(:remote_ip) { '127.0.0.1' }
|
16
|
+
let(:namespace) { 'namespace' }
|
17
|
+
|
18
|
+
it 'should set args' do
|
19
|
+
request = EndpointFlux::Request.new(
|
20
|
+
params: params,
|
21
|
+
headers: headers,
|
22
|
+
remote_ip: remote_ip,
|
23
|
+
namespace: namespace
|
24
|
+
)
|
25
|
+
|
26
|
+
expect(request.params).to eq params
|
27
|
+
expect(request.headers).to eq headers
|
28
|
+
expect(request.remote_ip).to eq remote_ip
|
29
|
+
expect(request.namespace).to eq namespace
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'when params missed' do
|
33
|
+
it 'should set default values' do
|
34
|
+
request = EndpointFlux::Request.new
|
35
|
+
|
36
|
+
expect(request.params).to be_empty
|
37
|
+
expect(request.headers).to be_empty
|
38
|
+
expect(request.remote_ip).to eq ''
|
39
|
+
expect(request.namespace).to be_nil
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe EndpointFlux::Exceptions::Validation do
|
4
|
+
describe '#to_hash' do
|
5
|
+
let(:messages) { {name: 'not valid'} }
|
6
|
+
it 'returns correct hash' do
|
7
|
+
expect(EndpointFlux::Exceptions::Validation.new(messages).to_hash).to eq(
|
8
|
+
status: 422,
|
9
|
+
message: 'validation errors',
|
10
|
+
errors: messages
|
11
|
+
)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
RSpec.describe EndpointFlux::Middlewares::Decorator::AddStatus do
|
2
|
+
describe '#perform' do
|
3
|
+
let(:params) { { some: 'value' } }
|
4
|
+
let(:body) { { status: 200 } }
|
5
|
+
let(:request) { EndpointFlux::Request.new(headers: {}, params: params) }
|
6
|
+
let(:response) { EndpointFlux::Response.new(headers: {}, body: body) }
|
7
|
+
|
8
|
+
it 'returns response with status in body' do
|
9
|
+
middleware_request, middleware_response = subject.perform(request, response, {})
|
10
|
+
|
11
|
+
expect(middleware_request.headers).to eq({})
|
12
|
+
expect(middleware_request.params).to eq(params)
|
13
|
+
expect(middleware_response.headers).to eq({})
|
14
|
+
expect(middleware_response.body).to eq(body)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.shared_context 'perform does not change the params', shared_context: :metadata do
|
4
|
+
describe '#perform' do
|
5
|
+
let(:params) { { some: 'value' } }
|
6
|
+
let(:headers) { { 'Authorization' => 'valid' } }
|
7
|
+
let(:request) { EndpointFlux::Request.new(headers: headers, params: params) }
|
8
|
+
let(:response) { EndpointFlux::Response.new(headers: {}, body: {}) }
|
9
|
+
|
10
|
+
it 'returns not changed params' do
|
11
|
+
middleware_request, middleware_response = subject.perform(request, response, {})
|
12
|
+
|
13
|
+
expect(middleware_request.params).to eq(params)
|
14
|
+
expect(middleware_request.headers).to eq(headers)
|
15
|
+
expect(middleware_response.headers).to eq({})
|
16
|
+
expect(middleware_response.body).to eq({})
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
RSpec.describe EndpointFlux::Middlewares::Validator::Empty do
|
2
|
+
describe '#perform' do
|
3
|
+
let(:params) { { some: 'value' } }
|
4
|
+
let(:request) { EndpointFlux::Request.new(headers: {}, params: params) }
|
5
|
+
let(:response) { EndpointFlux::Response.new }
|
6
|
+
|
7
|
+
it 'returns empty params' do
|
8
|
+
middleware_request, middleware_response = subject.perform(request, response, {})
|
9
|
+
|
10
|
+
expect(middleware_request.params).to eq({})
|
11
|
+
expect(middleware_response.headers).to eq({})
|
12
|
+
expect(middleware_response.body).to eq({})
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,131 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe EndpointFlux::Response do
|
4
|
+
subject { EndpointFlux::Response.new(params) }
|
5
|
+
let(:empty_subject) { EndpointFlux::Response.new() }
|
6
|
+
|
7
|
+
describe '#success?' do
|
8
|
+
context 'when valid params given' do
|
9
|
+
Array(200..209).each do |status|
|
10
|
+
let(:params) { { headers: {}, body: {status: status} } }
|
11
|
+
it "returns true for status #{status}" do
|
12
|
+
expect(subject.success?).to be_truthy
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'when wrong params given' do
|
18
|
+
let(:status) { 400 }
|
19
|
+
let(:params) { { headers: {}, body: {status: status} } }
|
20
|
+
it 'returns false for not a success status' do
|
21
|
+
expect(subject.success?).to be_falsey
|
22
|
+
end
|
23
|
+
|
24
|
+
describe 'when Response initialized without params' do
|
25
|
+
it 'returns false for not a success status' do
|
26
|
+
expect(empty_subject.success?).to be_falsey
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '#invalid?' do
|
33
|
+
let(:params) { { headers: {}, body: {status: status} } }
|
34
|
+
context 'when valid params given' do
|
35
|
+
let(:status) { 422 }
|
36
|
+
|
37
|
+
it 'returns true for status 422' do
|
38
|
+
expect(subject.invalid?).to be_truthy
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context 'when wrong params given' do
|
43
|
+
let(:status) { 400 }
|
44
|
+
|
45
|
+
it 'returns false for not an invalid status' do
|
46
|
+
expect(subject.invalid?).to be_falsey
|
47
|
+
end
|
48
|
+
|
49
|
+
describe 'when Response initialized without params' do
|
50
|
+
it 'returns false for not an invalid status' do
|
51
|
+
expect(empty_subject.invalid?).to be_falsey
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe '#forbidden?' do
|
58
|
+
let(:params) { { headers: {}, body: {status: status} } }
|
59
|
+
context 'when valid params given' do
|
60
|
+
let(:status) { 403 }
|
61
|
+
|
62
|
+
it 'returns true for status 403' do
|
63
|
+
expect(subject.forbidden?).to be_truthy
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
context 'when wrong params given' do
|
68
|
+
let(:status) { 400 }
|
69
|
+
|
70
|
+
it 'returns false for not a forbidden status' do
|
71
|
+
expect(subject.forbidden?).to be_falsey
|
72
|
+
end
|
73
|
+
|
74
|
+
describe 'when Response initialized without params' do
|
75
|
+
it 'returns false for not a forbidden status' do
|
76
|
+
expect(empty_subject.forbidden?).to be_falsey
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe '#unauthorized?' do
|
83
|
+
let(:params) { { headers: {}, body: {status: status} } }
|
84
|
+
context 'when valid params given' do
|
85
|
+
let(:status) { 401 }
|
86
|
+
|
87
|
+
it 'returns true for status 401' do
|
88
|
+
expect(subject.unauthorized?).to be_truthy
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context 'when wrong params given' do
|
93
|
+
let(:status) { 400 }
|
94
|
+
|
95
|
+
it 'returns false for not a unauthorized status' do
|
96
|
+
expect(subject.unauthorized?).to be_falsey
|
97
|
+
end
|
98
|
+
|
99
|
+
describe 'when Response initialized without params' do
|
100
|
+
it 'returns false for not a unauthorized status' do
|
101
|
+
expect(empty_subject.unauthorized?).to be_falsey
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
describe '#unauthorized?' do
|
108
|
+
let(:params) { { headers: {}, body: {status: status} } }
|
109
|
+
context 'when valid params given' do
|
110
|
+
let(:status) { 404 }
|
111
|
+
|
112
|
+
it 'returns true for status 404' do
|
113
|
+
expect(subject.not_found?).to be_truthy
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
context 'when wrong params given' do
|
118
|
+
let(:status) { 400 }
|
119
|
+
|
120
|
+
it 'returns false for not a not_found status' do
|
121
|
+
expect(subject.not_found?).to be_falsey
|
122
|
+
end
|
123
|
+
|
124
|
+
describe 'when Response initialized without params' do
|
125
|
+
it 'returns false for not a not_found status' do
|
126
|
+
expect(empty_subject.not_found?).to be_falsey
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|