evil-client 1.0.0 → 1.1.0
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 +4 -4
- data/CHANGELOG.md +30 -0
- data/README.md +1 -1
- data/docs/index.md +1 -1
- data/docs/rspec.md +60 -30
- data/evil-client.gemspec +2 -2
- data/lib/evil/client.rb +5 -0
- data/lib/evil/client/builder.rb +2 -0
- data/lib/evil/client/chaining.rb +2 -0
- data/lib/evil/client/container.rb +16 -2
- data/lib/evil/client/exceptions/name_error.rb +5 -7
- data/lib/evil/client/names.rb +54 -0
- data/lib/evil/client/options.rb +27 -0
- data/lib/evil/client/resolver.rb +2 -0
- data/lib/evil/client/rspec.rb +18 -120
- data/lib/evil/client/rspec/allow_stub.rb +33 -0
- data/lib/evil/client/rspec/base_stub.rb +26 -0
- data/lib/evil/client/rspec/evil_client_schema_matching.rb +21 -0
- data/lib/evil/client/rspec/expect_stub.rb +15 -0
- data/lib/evil/client/schema.rb +3 -1
- data/lib/evil/client/schema/scope.rb +2 -5
- data/lib/evil/client/settings.rb +5 -9
- data/lib/evil/client/settings/validator.rb +1 -1
- data/spec/unit/container_spec.rb +18 -0
- data/spec/unit/exceptions/name_error_spec.rb +5 -10
- data/spec/unit/options_spec.rb +20 -0
- data/spec/unit/rspec/evil_client_shema_matching_spec.rb +37 -0
- data/spec/unit/rspec/expect_client_operation_spec.rb +143 -0
- data/spec/unit/rspec/stub_client_operation_spec.rb +168 -0
- data/spec/unit/settings_spec.rb +5 -0
- metadata +18 -6
- data/spec/unit/rspec_spec.rb +0 -342
@@ -0,0 +1,168 @@
|
|
1
|
+
RSpec.describe Evil::Client::RSpec, "#stub_client_operation" do
|
2
|
+
include described_class
|
3
|
+
before { load "spec/fixtures/test_client.rb" }
|
4
|
+
|
5
|
+
let(:client) { Test::Client.new(subdomain: "x", user: "y", token: "z") }
|
6
|
+
let(:perform) { client.crm(version: 7).users.fetch id: 5 }
|
7
|
+
|
8
|
+
context "with client class" do
|
9
|
+
let(:klass) { Test::Client }
|
10
|
+
|
11
|
+
it "stubs the call with nil" do
|
12
|
+
stub_client_operation(klass).to_return nil
|
13
|
+
|
14
|
+
expect(perform).to be_nil
|
15
|
+
end
|
16
|
+
|
17
|
+
it "stubs the call with any object" do
|
18
|
+
result = double
|
19
|
+
stub_client_operation(klass).to_return result
|
20
|
+
|
21
|
+
expect(perform).to eq result
|
22
|
+
end
|
23
|
+
|
24
|
+
it "stubs the call with the original implementation" do
|
25
|
+
stub_client_operation(klass).to_call_original
|
26
|
+
|
27
|
+
expect(perform).to eq [200, {}, []]
|
28
|
+
end
|
29
|
+
|
30
|
+
it "stubs the call with StandardError" do
|
31
|
+
stub_client_operation(klass).to_raise
|
32
|
+
|
33
|
+
expect { perform }.to raise_error StandardError
|
34
|
+
end
|
35
|
+
|
36
|
+
it "stubs the call with an exception of given type" do
|
37
|
+
stub_client_operation(klass).to_raise(TypeError)
|
38
|
+
|
39
|
+
expect { perform }.to raise_error TypeError
|
40
|
+
end
|
41
|
+
|
42
|
+
it "stubs the call with given exception" do
|
43
|
+
stub_client_operation(klass).to_raise(TypeError, "foobar")
|
44
|
+
|
45
|
+
expect { perform }.to raise_error TypeError, /foobar/
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context "with client's superclass" do
|
50
|
+
let(:klass) { Evil::Client }
|
51
|
+
|
52
|
+
it "stubs the call" do
|
53
|
+
stub_client_operation(klass).to_return
|
54
|
+
expect(perform).to be_nil
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context "without params" do
|
59
|
+
it "stubs the call" do
|
60
|
+
stub_client_operation.to_return
|
61
|
+
expect(perform).to be_nil
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context "with neither a client nor its superclass" do
|
66
|
+
let(:klass) { String }
|
67
|
+
|
68
|
+
it "don't stubs the call" do
|
69
|
+
stub_client_operation(klass).to_return
|
70
|
+
expect { perform }.to raise_error RSpec::Mocks::MockExpectationError
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context "with client class and fully qualified name" do
|
75
|
+
let(:klass) { Test::Client }
|
76
|
+
let(:name) { "crm.users.fetch" }
|
77
|
+
|
78
|
+
it "stubs the call" do
|
79
|
+
stub_client_operation(klass, name).to_return
|
80
|
+
expect(perform).to be_nil
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context "with client class and underqualified name" do
|
85
|
+
let(:klass) { Test::Client }
|
86
|
+
let(:name) { "crm.users" }
|
87
|
+
|
88
|
+
it "don't stubs the call" do
|
89
|
+
stub_client_operation(klass, name).to_return
|
90
|
+
expect { perform }.to raise_error RSpec::Mocks::MockExpectationError
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
context "with client class and partially qualified name" do
|
95
|
+
let(:klass) { Test::Client }
|
96
|
+
let(:name) { /crm\.users/ }
|
97
|
+
|
98
|
+
it "stubs the call" do
|
99
|
+
stub_client_operation(klass, name).to_return
|
100
|
+
expect(perform).to be_nil
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
context "with client class and wrongly qualified name" do
|
105
|
+
let(:klass) { Test::Client }
|
106
|
+
let(:name) { /^crm.users$/ }
|
107
|
+
|
108
|
+
it "don't stubs the call" do
|
109
|
+
stub_client_operation(klass, name).to_return
|
110
|
+
expect { perform }.to raise_error RSpec::Mocks::MockExpectationError
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
context "with client class and expected options" do
|
115
|
+
let(:klass) { Test::Client }
|
116
|
+
let(:name) { "crm.users.fetch" }
|
117
|
+
let(:opts) do
|
118
|
+
{ subdomain: "x", user: "y", token: "z", version: 7, id: 5 }
|
119
|
+
end
|
120
|
+
|
121
|
+
it "stubs the call" do
|
122
|
+
stub_client_operation(klass, name).with(opts).to_return
|
123
|
+
expect(perform).to be_nil
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
context "with client class and block expectation" do
|
128
|
+
let(:klass) { Test::Client }
|
129
|
+
let(:name) { "crm.users.fetch" }
|
130
|
+
let(:opts) do
|
131
|
+
{ subdomain: "x", user: "y", token: "z", version: 7, id: 5 }
|
132
|
+
end
|
133
|
+
|
134
|
+
it "stubs the call" do
|
135
|
+
stub_client_operation(klass, name).with { |o| o == opts }.to_return
|
136
|
+
expect(perform).to be_nil
|
137
|
+
end
|
138
|
+
|
139
|
+
it "stubs the call to any returned value" do
|
140
|
+
stub_client_operation(klass, name).with { |_o| true }.to_return 42
|
141
|
+
expect(perform).to eq 42
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
context "with client class and overexpected options" do
|
146
|
+
let(:klass) { Test::Client }
|
147
|
+
let(:name) { "crm.users.fetch" }
|
148
|
+
let(:opts) do
|
149
|
+
{ subdomain: "x", user: "y", token: "z", version: 7 }
|
150
|
+
end
|
151
|
+
|
152
|
+
it "don't stubs the call" do
|
153
|
+
stub_client_operation(klass, name).with { |o| o == opts }.to_return
|
154
|
+
expect { perform }.to raise_error RSpec::Mocks::MockExpectationError
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
context "with client class and partially expected options" do
|
159
|
+
let(:klass) { Test::Client }
|
160
|
+
let(:name) { "crm.users.fetch" }
|
161
|
+
let(:opts) { hash_including subdomain: "x" }
|
162
|
+
|
163
|
+
it "stubs the call" do
|
164
|
+
stub_client_operation(klass, name).with(opts).to_return
|
165
|
+
expect(perform).to be_nil
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
data/spec/unit/settings_spec.rb
CHANGED
@@ -175,6 +175,11 @@ RSpec.describe Evil::Client::Settings do
|
|
175
175
|
it "slices declared options from the assigned ones" do
|
176
176
|
expect(subject).to eq id: 42
|
177
177
|
end
|
178
|
+
|
179
|
+
it "responds to #slice and #except" do
|
180
|
+
expect(subject).to respond_to :slice
|
181
|
+
expect(subject).to respond_to :except
|
182
|
+
end
|
178
183
|
end
|
179
184
|
|
180
185
|
describe "#datetime" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: evil-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kozin (nepalez)
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-08-
|
12
|
+
date: 2017-08-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: dry-initializer
|
@@ -59,14 +59,14 @@ dependencies:
|
|
59
59
|
requirements:
|
60
60
|
- - "~>"
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: '
|
62
|
+
version: '2'
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
67
|
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
69
|
+
version: '2'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rake
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
@@ -210,6 +210,8 @@ files:
|
|
210
210
|
- lib/evil/client/formatter/multipart.rb
|
211
211
|
- lib/evil/client/formatter/part.rb
|
212
212
|
- lib/evil/client/formatter/text.rb
|
213
|
+
- lib/evil/client/names.rb
|
214
|
+
- lib/evil/client/options.rb
|
213
215
|
- lib/evil/client/resolver.rb
|
214
216
|
- lib/evil/client/resolver/body.rb
|
215
217
|
- lib/evil/client/resolver/format.rb
|
@@ -222,6 +224,10 @@ files:
|
|
222
224
|
- lib/evil/client/resolver/security.rb
|
223
225
|
- lib/evil/client/resolver/uri.rb
|
224
226
|
- lib/evil/client/rspec.rb
|
227
|
+
- lib/evil/client/rspec/allow_stub.rb
|
228
|
+
- lib/evil/client/rspec/base_stub.rb
|
229
|
+
- lib/evil/client/rspec/evil_client_schema_matching.rb
|
230
|
+
- lib/evil/client/rspec/expect_stub.rb
|
225
231
|
- lib/evil/client/schema.rb
|
226
232
|
- lib/evil/client/schema/operation.rb
|
227
233
|
- lib/evil/client/schema/scope.rb
|
@@ -255,6 +261,7 @@ files:
|
|
255
261
|
- spec/unit/formatter/part_spec.rb
|
256
262
|
- spec/unit/formatter/text_spec.rb
|
257
263
|
- spec/unit/formatter_spec.rb
|
264
|
+
- spec/unit/options_spec.rb
|
258
265
|
- spec/unit/resolver/body_spec.rb
|
259
266
|
- spec/unit/resolver/format_spec.rb
|
260
267
|
- spec/unit/resolver/headers_spec.rb
|
@@ -265,7 +272,9 @@ files:
|
|
265
272
|
- spec/unit/resolver/response_spec.rb
|
266
273
|
- spec/unit/resolver/security_spec.rb
|
267
274
|
- spec/unit/resolver/uri_spec.rb
|
268
|
-
- spec/unit/
|
275
|
+
- spec/unit/rspec/evil_client_shema_matching_spec.rb
|
276
|
+
- spec/unit/rspec/expect_client_operation_spec.rb
|
277
|
+
- spec/unit/rspec/stub_client_operation_spec.rb
|
269
278
|
- spec/unit/schema/operation_spec.rb
|
270
279
|
- spec/unit/schema/scope_spec.rb
|
271
280
|
- spec/unit/schema_spec.rb
|
@@ -323,6 +332,7 @@ test_files:
|
|
323
332
|
- spec/unit/formatter/part_spec.rb
|
324
333
|
- spec/unit/formatter/text_spec.rb
|
325
334
|
- spec/unit/formatter_spec.rb
|
335
|
+
- spec/unit/options_spec.rb
|
326
336
|
- spec/unit/resolver/body_spec.rb
|
327
337
|
- spec/unit/resolver/format_spec.rb
|
328
338
|
- spec/unit/resolver/headers_spec.rb
|
@@ -333,7 +343,9 @@ test_files:
|
|
333
343
|
- spec/unit/resolver/response_spec.rb
|
334
344
|
- spec/unit/resolver/security_spec.rb
|
335
345
|
- spec/unit/resolver/uri_spec.rb
|
336
|
-
- spec/unit/
|
346
|
+
- spec/unit/rspec/evil_client_shema_matching_spec.rb
|
347
|
+
- spec/unit/rspec/expect_client_operation_spec.rb
|
348
|
+
- spec/unit/rspec/stub_client_operation_spec.rb
|
337
349
|
- spec/unit/schema/operation_spec.rb
|
338
350
|
- spec/unit/schema/scope_spec.rb
|
339
351
|
- spec/unit/schema_spec.rb
|
data/spec/unit/rspec_spec.rb
DELETED
@@ -1,342 +0,0 @@
|
|
1
|
-
RSpec.describe "rspec matcher :perform_operation" do
|
2
|
-
before { load "spec/fixtures/test_client.rb" }
|
3
|
-
|
4
|
-
let(:client) { Test::Client.new(subdomain: "foo", user: "bar", token: "baz") }
|
5
|
-
let(:users) { client.crm(version: 7).users }
|
6
|
-
|
7
|
-
let(:fetch) { users.fetch id: 5 }
|
8
|
-
let(:update_7) { users.update id: 5, name: "Joe", language: "en" }
|
9
|
-
let(:update_8) { users.update id: 5, name: "Joe", language: "en", version: 8 }
|
10
|
-
|
11
|
-
let(:name) { "Test::Client.crm.users.update" }
|
12
|
-
let(:block) { proc { |version:, **| version == 7 } }
|
13
|
-
|
14
|
-
describe "base matcher" do
|
15
|
-
context "in a positive check" do
|
16
|
-
subject { expect { code }.to perform_operation(name) }
|
17
|
-
|
18
|
-
context "when operaton with expected name was performed" do
|
19
|
-
let(:code) { fetch; update_7 }
|
20
|
-
|
21
|
-
it "passes" do
|
22
|
-
expect { subject }.not_to raise_error
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
context "when operation with expected name wasn't performed" do
|
27
|
-
let(:code) { fetch }
|
28
|
-
|
29
|
-
it "fails" do
|
30
|
-
expect { subject }
|
31
|
-
.to raise_error RSpec::Expectations::ExpectationNotMetError
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
context "in a negative check" do
|
37
|
-
subject { expect { code }.not_to perform_operation(name) }
|
38
|
-
|
39
|
-
context "when operaton with expected name was performed" do
|
40
|
-
let(:code) { fetch; update_7 }
|
41
|
-
|
42
|
-
it "fails" do
|
43
|
-
expect { subject }
|
44
|
-
.to raise_error RSpec::Expectations::ExpectationNotMetError
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
context "when operation with expected name wasn't performed" do
|
49
|
-
let(:code) { fetch }
|
50
|
-
|
51
|
-
it "passes" do
|
52
|
-
expect { subject }.not_to raise_error
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
describe "block argument" do
|
59
|
-
context "in a positive check" do
|
60
|
-
subject { expect { code }.to perform_operation(name, &block) }
|
61
|
-
|
62
|
-
context "when operaton with expected name/options was performed" do
|
63
|
-
let(:code) { fetch; update_7 }
|
64
|
-
|
65
|
-
it "passes" do
|
66
|
-
expect { subject }.not_to raise_error
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
context "when options differ from expected" do
|
71
|
-
let(:code) { fetch; update_8 }
|
72
|
-
|
73
|
-
it "fails" do
|
74
|
-
expect { subject }
|
75
|
-
.to raise_error RSpec::Expectations::ExpectationNotMetError
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
context "when operation wasn't performed" do
|
80
|
-
let(:code) { fetch }
|
81
|
-
|
82
|
-
it "fails" do
|
83
|
-
expect { subject }
|
84
|
-
.to raise_error RSpec::Expectations::ExpectationNotMetError
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
context "in a negagive check" do
|
90
|
-
subject { expect { code }.not_to perform_operation(name, &block) }
|
91
|
-
|
92
|
-
context "when operaton with expected name/options was performed" do
|
93
|
-
let(:code) { fetch; update_7 }
|
94
|
-
|
95
|
-
it "fails" do
|
96
|
-
expect { subject }
|
97
|
-
.to raise_error RSpec::Expectations::ExpectationNotMetError
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
context "when options differ from expected" do
|
102
|
-
let(:code) { fetch; update_8 }
|
103
|
-
|
104
|
-
it "passes" do
|
105
|
-
expect { subject }.not_to raise_error
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
context "when operation wasn't performed" do
|
110
|
-
let(:code) { fetch }
|
111
|
-
|
112
|
-
it "passes" do
|
113
|
-
expect { subject }.not_to raise_error
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
describe "#with modifier" do
|
120
|
-
let(:opts) { { version: 7 } }
|
121
|
-
|
122
|
-
context "in a positive check" do
|
123
|
-
subject { expect { code }.to perform_operation(name).with(opts) }
|
124
|
-
|
125
|
-
context "when operaton with expected name/options was performed" do
|
126
|
-
let(:code) { fetch; update_7 }
|
127
|
-
|
128
|
-
it "passes" do
|
129
|
-
expect { subject }.not_to raise_error
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
context "when options differ from expected" do
|
134
|
-
let(:code) { fetch; update_8 }
|
135
|
-
|
136
|
-
it "fails" do
|
137
|
-
expect { subject }
|
138
|
-
.to raise_error RSpec::Expectations::ExpectationNotMetError
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
context "when operation wasn't performed" do
|
143
|
-
let(:code) { fetch }
|
144
|
-
|
145
|
-
it "fails" do
|
146
|
-
expect { subject }
|
147
|
-
.to raise_error RSpec::Expectations::ExpectationNotMetError
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
context "in a negative check" do
|
153
|
-
subject { expect { code }.not_to perform_operation(name).with(opts) }
|
154
|
-
|
155
|
-
context "when operaton with expected name/options was performed" do
|
156
|
-
let(:code) { fetch; update_7 }
|
157
|
-
|
158
|
-
it "fails" do
|
159
|
-
expect { subject }
|
160
|
-
.to raise_error RSpec::Expectations::ExpectationNotMetError
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
context "when options differ from expected" do
|
165
|
-
let(:code) { fetch; update_8 }
|
166
|
-
|
167
|
-
it "passes" do
|
168
|
-
expect { subject }.not_to raise_error
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
context "when operation wasn't performed" do
|
173
|
-
let(:code) { fetch }
|
174
|
-
|
175
|
-
it "passes" do
|
176
|
-
expect { subject }.not_to raise_error
|
177
|
-
end
|
178
|
-
end
|
179
|
-
end
|
180
|
-
end
|
181
|
-
|
182
|
-
describe "#with_exactly modifier" do
|
183
|
-
let(:opts) do
|
184
|
-
{
|
185
|
-
id: 5,
|
186
|
-
language: "en",
|
187
|
-
name: "Joe",
|
188
|
-
subdomain: "foo",
|
189
|
-
token: "baz",
|
190
|
-
user: "bar",
|
191
|
-
version: 7
|
192
|
-
}
|
193
|
-
end
|
194
|
-
|
195
|
-
context "in a positive check" do
|
196
|
-
subject { expect { code }.to perform_operation(name).with_exactly(opts) }
|
197
|
-
|
198
|
-
context "when operaton with expected name/options was performed" do
|
199
|
-
let(:code) { fetch; update_7 }
|
200
|
-
|
201
|
-
it "passes" do
|
202
|
-
expect { subject }.not_to raise_error
|
203
|
-
end
|
204
|
-
end
|
205
|
-
|
206
|
-
context "when some options differ from expected" do
|
207
|
-
let(:code) { fetch; update_8 }
|
208
|
-
|
209
|
-
it "fails" do
|
210
|
-
expect { subject }
|
211
|
-
.to raise_error RSpec::Expectations::ExpectationNotMetError
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
|
-
context "when some options are not expected" do
|
216
|
-
before { opts.delete :version }
|
217
|
-
let(:code) { fetch; update_7 }
|
218
|
-
|
219
|
-
it "fails" do
|
220
|
-
expect { subject }
|
221
|
-
.to raise_error RSpec::Expectations::ExpectationNotMetError
|
222
|
-
end
|
223
|
-
end
|
224
|
-
|
225
|
-
context "when operation wasn't performed" do
|
226
|
-
let(:code) { fetch }
|
227
|
-
|
228
|
-
it "fails" do
|
229
|
-
expect { subject }
|
230
|
-
.to raise_error RSpec::Expectations::ExpectationNotMetError
|
231
|
-
end
|
232
|
-
end
|
233
|
-
end
|
234
|
-
|
235
|
-
context "in a negative check" do
|
236
|
-
subject do
|
237
|
-
expect { code }.not_to perform_operation(name).with_exactly(opts)
|
238
|
-
end
|
239
|
-
|
240
|
-
context "when operaton with expected name/options was performed" do
|
241
|
-
let(:code) { fetch; update_7 }
|
242
|
-
|
243
|
-
it "fails" do
|
244
|
-
expect { subject }
|
245
|
-
.to raise_error RSpec::Expectations::ExpectationNotMetError
|
246
|
-
end
|
247
|
-
end
|
248
|
-
|
249
|
-
context "when some options differ from expected" do
|
250
|
-
let(:code) { fetch; update_8 }
|
251
|
-
|
252
|
-
it "passes" do
|
253
|
-
expect { subject }.not_to raise_error
|
254
|
-
end
|
255
|
-
end
|
256
|
-
|
257
|
-
context "when some options are not expected" do
|
258
|
-
before { opts.delete :version }
|
259
|
-
let(:code) { fetch; update_7 }
|
260
|
-
|
261
|
-
it "passes" do
|
262
|
-
expect { subject }.not_to raise_error
|
263
|
-
end
|
264
|
-
end
|
265
|
-
|
266
|
-
context "when operation wasn't performed" do
|
267
|
-
let(:code) { fetch }
|
268
|
-
|
269
|
-
it "passes" do
|
270
|
-
expect { subject }.not_to raise_error
|
271
|
-
end
|
272
|
-
end
|
273
|
-
end
|
274
|
-
end
|
275
|
-
|
276
|
-
describe "#without modifier" do
|
277
|
-
context "in a positive check" do
|
278
|
-
subject { expect { code }.to perform_operation(name).without(opts) }
|
279
|
-
|
280
|
-
context "when operaton without options was performed" do
|
281
|
-
let(:opts) { %i[phone] }
|
282
|
-
let(:code) { fetch; update_7 }
|
283
|
-
|
284
|
-
it "passes" do
|
285
|
-
expect { subject }.not_to raise_error
|
286
|
-
end
|
287
|
-
end
|
288
|
-
|
289
|
-
context "when operation contains a forbidden option" do
|
290
|
-
let(:opts) { %i[id] }
|
291
|
-
let(:code) { fetch; update_7 }
|
292
|
-
|
293
|
-
it "fails" do
|
294
|
-
expect { subject }
|
295
|
-
.to raise_error RSpec::Expectations::ExpectationNotMetError
|
296
|
-
end
|
297
|
-
end
|
298
|
-
|
299
|
-
context "when operation wasn't performed" do
|
300
|
-
let(:opts) { %i[phone] }
|
301
|
-
let(:code) { fetch }
|
302
|
-
|
303
|
-
it "fails" do
|
304
|
-
expect { subject }
|
305
|
-
.to raise_error RSpec::Expectations::ExpectationNotMetError
|
306
|
-
end
|
307
|
-
end
|
308
|
-
end
|
309
|
-
|
310
|
-
context "in a negative check" do
|
311
|
-
subject { expect { code }.not_to perform_operation(name).without(opts) }
|
312
|
-
|
313
|
-
context "when operaton without options was performed" do
|
314
|
-
let(:opts) { %i[phone] }
|
315
|
-
let(:code) { fetch; update_7 }
|
316
|
-
|
317
|
-
it "fails" do
|
318
|
-
expect { subject }
|
319
|
-
.to raise_error RSpec::Expectations::ExpectationNotMetError
|
320
|
-
end
|
321
|
-
end
|
322
|
-
|
323
|
-
context "when operation contains a forbidden option" do
|
324
|
-
let(:opts) { %i[id] }
|
325
|
-
let(:code) { fetch; update_7 }
|
326
|
-
|
327
|
-
it "passes" do
|
328
|
-
expect { subject }.not_to raise_error
|
329
|
-
end
|
330
|
-
end
|
331
|
-
|
332
|
-
context "when operation wasn't performed" do
|
333
|
-
let(:opts) { %i[phone] }
|
334
|
-
let(:code) { fetch }
|
335
|
-
|
336
|
-
it "passes" do
|
337
|
-
expect { subject }.not_to raise_error
|
338
|
-
end
|
339
|
-
end
|
340
|
-
end
|
341
|
-
end
|
342
|
-
end
|