activeinteractor 1.2.0 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +24 -3
- data/lib/active_interactor/interactor/worker.rb +7 -1
- data/lib/active_interactor/organizer/perform.rb +8 -9
- data/lib/active_interactor/version.rb +1 -1
- metadata +8 -128
- data/spec/active_interactor/base_spec.rb +0 -85
- data/spec/active_interactor/config_spec.rb +0 -17
- data/spec/active_interactor/context/base_spec.rb +0 -443
- data/spec/active_interactor/error_spec.rb +0 -45
- data/spec/active_interactor/interactor/perform/options_spec.rb +0 -25
- data/spec/active_interactor/interactor/worker_spec.rb +0 -189
- data/spec/active_interactor/organizer/base_spec.rb +0 -276
- data/spec/active_interactor/organizer/interactor_interface_collection_spec.rb +0 -78
- data/spec/active_interactor/organizer/interactor_interface_spec.rb +0 -235
- data/spec/active_interactor/version_spec.rb +0 -119
- data/spec/active_interactor_spec.rb +0 -23
- data/spec/integration/a_basic_interactor_spec.rb +0 -154
- data/spec/integration/a_basic_organizer_spec.rb +0 -354
- data/spec/integration/a_failing_interactor_spec.rb +0 -43
- data/spec/integration/active_record_integration_spec.rb +0 -32
- data/spec/integration/an_interactor_with_after_context_validation_callbacks_spec.rb +0 -69
- data/spec/integration/an_interactor_with_after_perform_callbacks_spec.rb +0 -31
- data/spec/integration/an_interactor_with_after_rollback_callbacks_spec.rb +0 -34
- data/spec/integration/an_interactor_with_an_existing_context_class_spec.rb +0 -50
- data/spec/integration/an_interactor_with_around_perform_callbacks_spec.rb +0 -35
- data/spec/integration/an_interactor_with_around_rollback_callbacks_spec.rb +0 -39
- data/spec/integration/an_interactor_with_before_perform_callbacks_spec.rb +0 -31
- data/spec/integration/an_interactor_with_before_rollback_callbacks_spec.rb +0 -34
- data/spec/integration/an_interactor_with_deferred_after_callbacks.rb +0 -32
- data/spec/integration/an_interactor_with_validations_on_called_spec.rb +0 -41
- data/spec/integration/an_interactor_with_validations_on_calling_spec.rb +0 -37
- data/spec/integration/an_interactor_with_validations_spec.rb +0 -95
- data/spec/integration/an_organizer_containing_organizer_with_after_callbacks_deferred_spec.rb +0 -125
- data/spec/integration/an_organizer_performing_in_parallel_spec.rb +0 -48
- data/spec/integration/an_organizer_with_after_callbacks_deferred_spec.rb +0 -154
- data/spec/integration/an_organizer_with_after_each_callbacks_spec.rb +0 -35
- data/spec/integration/an_organizer_with_all_perform_callbacks.rb +0 -112
- data/spec/integration/an_organizer_with_around_each_callbacks_spec.rb +0 -39
- data/spec/integration/an_organizer_with_before_each_callbacks_spec.rb +0 -35
- data/spec/integration/an_organizer_with_conditionally_organized_interactors_spec.rb +0 -326
- data/spec/integration/an_organizer_with_failing_nested_organizer_spec.rb +0 -47
- data/spec/integration/an_organizer_with_options_callbacks_spec.rb +0 -64
- data/spec/spec_helper.rb +0 -33
- data/spec/support/coverage.rb +0 -50
- data/spec/support/helpers/factories.rb +0 -49
- data/spec/support/shared_examples/a_class_that_extends_active_interactor_models_example.rb +0 -81
- data/spec/support/shared_examples/a_class_with_interactor_callback_methods_example.rb +0 -107
- data/spec/support/shared_examples/a_class_with_interactor_context_methods_example.rb +0 -60
- data/spec/support/shared_examples/a_class_with_interactor_methods_example.rb +0 -21
- data/spec/support/shared_examples/a_class_with_organizer_callback_methods_example.rb +0 -42
- data/spec/support/spec_helpers.rb +0 -7
- /data/lib/rails/generators/templates/{interactor_text_unit.erb → interactor_test_unit.erb} +0 -0
@@ -1,23 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe ActiveInteractor do
|
6
|
-
describe '.config' do
|
7
|
-
subject { described_class.config }
|
8
|
-
|
9
|
-
it { is_expected.to be_a ActiveInteractor::Config }
|
10
|
-
end
|
11
|
-
|
12
|
-
describe '.configure' do
|
13
|
-
it 'is expected to yield config' do
|
14
|
-
expect { |b| described_class.configure(&b) }.to yield_control
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe '.logger' do
|
19
|
-
subject { described_class.logger }
|
20
|
-
|
21
|
-
it { is_expected.to be_a Logger }
|
22
|
-
end
|
23
|
-
end
|
@@ -1,154 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe 'A basic interactor', type: :integration do
|
6
|
-
let(:interactor_class) do
|
7
|
-
build_interactor do
|
8
|
-
def perform
|
9
|
-
context.test_field = 'test'
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
include_examples 'a class with interactor methods'
|
15
|
-
include_examples 'a class with interactor callback methods'
|
16
|
-
include_examples 'a class with interactor context methods'
|
17
|
-
|
18
|
-
describe '.context_class' do
|
19
|
-
subject { interactor_class.context_class }
|
20
|
-
|
21
|
-
it { is_expected.to eq TestInteractor::Context }
|
22
|
-
it { is_expected.to be < ActiveInteractor::Context::Base }
|
23
|
-
end
|
24
|
-
|
25
|
-
describe '.perform' do
|
26
|
-
subject { interactor_class.perform }
|
27
|
-
|
28
|
-
it { is_expected.to be_a interactor_class.context_class }
|
29
|
-
it { is_expected.to be_successful }
|
30
|
-
it { is_expected.to have_attributes(test_field: 'test') }
|
31
|
-
end
|
32
|
-
|
33
|
-
describe '.perform!' do
|
34
|
-
subject { interactor_class.perform! }
|
35
|
-
|
36
|
-
it { expect { subject }.not_to raise_error }
|
37
|
-
it { is_expected.to be_a interactor_class.context_class }
|
38
|
-
it { is_expected.to be_successful }
|
39
|
-
it { is_expected.to have_attributes(test_field: 'test') }
|
40
|
-
end
|
41
|
-
|
42
|
-
context 'having #context_attributes :test_field' do
|
43
|
-
let(:interactor_class) do
|
44
|
-
build_interactor do
|
45
|
-
context_attributes :test_field
|
46
|
-
|
47
|
-
def perform
|
48
|
-
context.test_field = 'test'
|
49
|
-
context.some_other_field = 'test 2'
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
include_examples 'a class with interactor methods'
|
55
|
-
include_examples 'a class with interactor callback methods'
|
56
|
-
include_examples 'a class with interactor context methods'
|
57
|
-
|
58
|
-
describe '.perform' do
|
59
|
-
subject(:result) { interactor_class.perform }
|
60
|
-
|
61
|
-
it { is_expected.to be_a interactor_class.context_class }
|
62
|
-
it { is_expected.to be_successful }
|
63
|
-
it { is_expected.to have_attributes(test_field: 'test', some_other_field: 'test 2') }
|
64
|
-
|
65
|
-
describe '.attributes' do
|
66
|
-
subject { result.attributes }
|
67
|
-
|
68
|
-
it { is_expected.to eq(test_field: 'test') }
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
context 'having a .name "AnInteractor"' do
|
74
|
-
let(:interactor_class) { build_interactor('AnInteractor') }
|
75
|
-
|
76
|
-
context 'having a class defined named "AnInteractorContext"' do
|
77
|
-
let!(:context_class) { build_context('AnInteractorContext') }
|
78
|
-
|
79
|
-
describe '.context_class' do
|
80
|
-
subject { interactor_class.context_class }
|
81
|
-
|
82
|
-
it { is_expected.to eq AnInteractorContext }
|
83
|
-
it { is_expected.to be < ActiveInteractor::Context::Base }
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
context 'with a context class named "ATestContext"' do
|
89
|
-
let!(:context_class) { build_context('ATestContext') }
|
90
|
-
|
91
|
-
context 'with .contextualize_with :a_test_context' do
|
92
|
-
let(:interactor_class) do
|
93
|
-
build_interactor do
|
94
|
-
contextualize_with :a_test_context
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
describe '.context_class' do
|
99
|
-
subject { interactor_class.context_class }
|
100
|
-
|
101
|
-
it { is_expected.to eq ATestContext }
|
102
|
-
it { is_expected.to be < ActiveInteractor::Context::Base }
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
context 'having default context attributes {:foo => "foo"}' do
|
108
|
-
let(:interactor_class) do
|
109
|
-
build_interactor do
|
110
|
-
context_attribute :foo, default: -> { 'foo' }
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
describe '.perform' do
|
115
|
-
subject { interactor_class.perform(context_attributes) }
|
116
|
-
|
117
|
-
context 'when no context is passed' do
|
118
|
-
let(:context_attributes) { {} }
|
119
|
-
|
120
|
-
it { is_expected.to have_attributes(foo: 'foo') }
|
121
|
-
end
|
122
|
-
|
123
|
-
context 'when context {:foo => "bar"} is passed' do
|
124
|
-
let(:context_attributes) { { foo: 'bar' } }
|
125
|
-
|
126
|
-
it { is_expected.to have_attributes(foo: 'bar') }
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
context 'having default context attributes {:foo => "foo", :bar => "bar"} using the #context_attributes method' do
|
132
|
-
let(:interactor_class) do
|
133
|
-
build_interactor do
|
134
|
-
context_attributes foo: { default: -> { 'foo' } }, bar: { default: -> { 'bar' } }
|
135
|
-
end
|
136
|
-
|
137
|
-
describe '.perform' do
|
138
|
-
subject { interactor_class.perform(context_attributes) }
|
139
|
-
|
140
|
-
context 'when no context is passed' do
|
141
|
-
let(:context_attributes) { {} }
|
142
|
-
|
143
|
-
it { is_expected.to have_attributes(foo: 'foo', bar: 'bar') }
|
144
|
-
end
|
145
|
-
|
146
|
-
context 'when context {:foo => "bar"} is passed' do
|
147
|
-
let(:context_attributes) { { foo: 'bar' } }
|
148
|
-
|
149
|
-
it { is_expected.to have_attributes(foo: 'bar', bar: 'bar') }
|
150
|
-
end
|
151
|
-
end
|
152
|
-
end
|
153
|
-
end
|
154
|
-
end
|
@@ -1,354 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe 'A basic organizer', type: :integration do
|
6
|
-
let!(:test_interactor_1) do
|
7
|
-
build_interactor('TestInteractor1') do
|
8
|
-
def perform
|
9
|
-
context.test_field_1 = 'test 1'
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
let!(:test_interactor_2) do
|
15
|
-
build_interactor('TestInteractor2') do
|
16
|
-
def perform
|
17
|
-
context.test_field_2 = 'test 2'
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
let(:interactor_class) do
|
23
|
-
build_organizer do
|
24
|
-
organize TestInteractor1, TestInteractor2
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
include_examples 'a class with interactor methods'
|
29
|
-
include_examples 'a class with interactor callback methods'
|
30
|
-
include_examples 'a class with interactor context methods'
|
31
|
-
include_examples 'a class with organizer callback methods'
|
32
|
-
|
33
|
-
describe '.context_class' do
|
34
|
-
subject { interactor_class.context_class }
|
35
|
-
|
36
|
-
it { is_expected.to eq TestOrganizer::Context }
|
37
|
-
it { is_expected.to be < ActiveInteractor::Context::Base }
|
38
|
-
end
|
39
|
-
|
40
|
-
describe '.perform' do
|
41
|
-
subject { interactor_class.perform }
|
42
|
-
|
43
|
-
it { is_expected.to be_a interactor_class.context_class }
|
44
|
-
it { is_expected.to be_successful }
|
45
|
-
it { is_expected.to have_attributes(test_field_1: 'test 1', test_field_2: 'test 2') }
|
46
|
-
end
|
47
|
-
|
48
|
-
context 'when the first interactor fails' do
|
49
|
-
let!(:test_interactor_1) do
|
50
|
-
build_interactor('TestInteractor1') do
|
51
|
-
def perform
|
52
|
-
context.fail!
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
describe '.perform' do
|
58
|
-
subject { interactor_class.perform }
|
59
|
-
|
60
|
-
it { expect { subject }.not_to raise_error }
|
61
|
-
it { is_expected.to be_a interactor_class.context_class }
|
62
|
-
it { is_expected.to be_failure }
|
63
|
-
|
64
|
-
it 'is expected to receive #rollback on the first interactor' do
|
65
|
-
expect_any_instance_of(test_interactor_1).to receive(:rollback)
|
66
|
-
.and_call_original
|
67
|
-
subject
|
68
|
-
end
|
69
|
-
|
70
|
-
it 'is expected not to receive #perform! on the second interactor' do
|
71
|
-
expect_any_instance_of(test_interactor_2).not_to receive(:perform!)
|
72
|
-
subject
|
73
|
-
end
|
74
|
-
|
75
|
-
# https://github.com/aaronmallen/activeinteractor/issues/169
|
76
|
-
context 'with error message "something went wrong"' do
|
77
|
-
let!(:test_interactor_1) do
|
78
|
-
build_interactor('TestInteractor1') do
|
79
|
-
def perform
|
80
|
-
context.fail!('something went wrong')
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
it { expect { subject }.not_to raise_error }
|
86
|
-
it { is_expected.to be_a interactor_class.context_class }
|
87
|
-
it { is_expected.to be_failure }
|
88
|
-
it { expect(subject.errors.count).to eq 1 }
|
89
|
-
|
90
|
-
it 'is expected to have errors "something went wrong" on :context' do
|
91
|
-
expect(subject.errors[:context]).not_to be_empty
|
92
|
-
expect(subject.errors[:context]).to include 'something went wrong'
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
context 'when the second interactor fails' do
|
99
|
-
let!(:test_interactor_2) do
|
100
|
-
build_interactor('TestInteractor2') do
|
101
|
-
def perform
|
102
|
-
context.fail!
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
describe '.perform' do
|
108
|
-
subject { interactor_class.perform }
|
109
|
-
|
110
|
-
it { expect { subject }.not_to raise_error }
|
111
|
-
it { is_expected.to be_a interactor_class.context_class }
|
112
|
-
it { is_expected.to be_failure }
|
113
|
-
|
114
|
-
it 'is expected to receive #rollback on all interactors' do
|
115
|
-
expect_any_instance_of(test_interactor_2).to receive(:rollback)
|
116
|
-
expect_any_instance_of(test_interactor_1).to receive(:rollback)
|
117
|
-
subject
|
118
|
-
end
|
119
|
-
|
120
|
-
# https://github.com/aaronmallen/activeinteractor/issues/169
|
121
|
-
context 'with error message "something went wrong"' do
|
122
|
-
let!(:test_interactor_2) do
|
123
|
-
build_interactor('TestInteractor2') do
|
124
|
-
def perform
|
125
|
-
context.fail!('something went wrong')
|
126
|
-
end
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
it { expect { subject }.not_to raise_error }
|
131
|
-
it { is_expected.to be_a interactor_class.context_class }
|
132
|
-
it { is_expected.to be_failure }
|
133
|
-
it { expect(subject.errors.count).to eq 1 }
|
134
|
-
|
135
|
-
it 'is expected to have errors "something went wrong" on :context' do
|
136
|
-
expect(subject.errors[:context]).not_to be_empty
|
137
|
-
expect(subject.errors[:context]).to include 'something went wrong'
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
# https://github.com/aaronmallen/activeinteractor/issues/151
|
144
|
-
context 'with an interactor class having a predefined context class with attributes [:foo]' do
|
145
|
-
let!(:test_context_class) do
|
146
|
-
build_context('TestInteractor1Context') do
|
147
|
-
attributes :foo
|
148
|
-
attributes :baz
|
149
|
-
attributes :zoo
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
# rubocop:disable Metrics/AbcSize
|
154
|
-
let!(:test_interactor_1) do
|
155
|
-
build_interactor('TestInteractor1') do
|
156
|
-
def perform
|
157
|
-
context.has_foo_as_method = context.foo.present?
|
158
|
-
context.has_foo_as_element = context[:foo].present?
|
159
|
-
context.has_bar_as_method = context.bar.present?
|
160
|
-
context.has_bar_as_element = context[:bar].present?
|
161
|
-
context.baz = 'baz'
|
162
|
-
context.has_baz_as_method = context.baz.present?
|
163
|
-
context.has_baz_as_element = context[:baz].present?
|
164
|
-
context[:zoo] = 'zoo'
|
165
|
-
context.has_zoo_as_method = context.zoo.present?
|
166
|
-
context.has_zoo_as_element = context[:zoo].present?
|
167
|
-
end
|
168
|
-
end
|
169
|
-
end
|
170
|
-
# rubocop:enable Metrics/AbcSize
|
171
|
-
|
172
|
-
let(:interactor_class) do
|
173
|
-
build_organizer do
|
174
|
-
organize :test_interactor_1
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
context 'when passing a context argument { :foo => "foo", :bar => "bar" }' do
|
179
|
-
let(:context_attributes) { { foo: 'foo', bar: 'bar' } }
|
180
|
-
|
181
|
-
describe '.perform' do
|
182
|
-
subject(:result) { interactor_class.perform(context_attributes) }
|
183
|
-
|
184
|
-
it { is_expected.to have_attributes(foo: 'foo', bar: 'bar', baz: 'baz', zoo: 'zoo') }
|
185
|
-
|
186
|
-
it 'is expected to copy all attributes in the contexts to each interactor' do
|
187
|
-
expect(subject.has_foo_as_method).to be true
|
188
|
-
expect(subject.has_foo_as_element).to be true
|
189
|
-
expect(subject.has_bar_as_method).to be true
|
190
|
-
expect(subject.has_bar_as_element).to be true
|
191
|
-
expect(subject.has_baz_as_method).to be true
|
192
|
-
expect(subject.has_baz_as_element).to be true
|
193
|
-
expect(subject.has_zoo_as_method).to be true
|
194
|
-
expect(subject.has_zoo_as_element).to be true
|
195
|
-
end
|
196
|
-
|
197
|
-
describe '#attributes' do
|
198
|
-
subject { result.attributes }
|
199
|
-
|
200
|
-
it { is_expected.to be_a Hash }
|
201
|
-
it { is_expected.to be_empty }
|
202
|
-
end
|
203
|
-
end
|
204
|
-
|
205
|
-
context 'with attributes [:foo] on the organizer context class' do
|
206
|
-
let!(:interactor_class) do
|
207
|
-
build_organizer do
|
208
|
-
context_attributes :foo
|
209
|
-
organize :test_interactor_1
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
describe '.perform' do
|
214
|
-
subject(:result) { interactor_class.perform(context_attributes) }
|
215
|
-
|
216
|
-
it { is_expected.to have_attributes(foo: 'foo', bar: 'bar') }
|
217
|
-
|
218
|
-
it 'is expected to copy all attributes in the contexts to each interactor' do
|
219
|
-
expect(subject.has_foo_as_method).to be true
|
220
|
-
expect(subject.has_foo_as_element).to be true
|
221
|
-
expect(subject.has_bar_as_method).to be true
|
222
|
-
expect(subject.has_bar_as_element).to be true
|
223
|
-
end
|
224
|
-
|
225
|
-
describe '#attributes' do
|
226
|
-
subject { result.attributes }
|
227
|
-
|
228
|
-
it { is_expected.to be_a Hash }
|
229
|
-
it { is_expected.to eq(foo: 'foo') }
|
230
|
-
end
|
231
|
-
end
|
232
|
-
end
|
233
|
-
end
|
234
|
-
|
235
|
-
context 'when passing default attributes on the organizer and its interactors' do
|
236
|
-
let!(:test_organizer_context_class) do
|
237
|
-
build_context('TestOrganizerContext') do
|
238
|
-
attribute :foo
|
239
|
-
attribute :baz
|
240
|
-
attribute :zoo, default: 'zoo'
|
241
|
-
attribute :taz, default: 'taz0'
|
242
|
-
end
|
243
|
-
end
|
244
|
-
|
245
|
-
let!(:test_interactor_3_context_class) do
|
246
|
-
build_context('TestInteractor3Context') do
|
247
|
-
attribute :foo
|
248
|
-
attribute :bar, default: 'bar'
|
249
|
-
attribute :baz, default: 'baz'
|
250
|
-
attribute :zoo
|
251
|
-
attribute :taz, default: 'taz3'
|
252
|
-
end
|
253
|
-
end
|
254
|
-
|
255
|
-
let!(:test_interactor_4_context_class) do
|
256
|
-
build_context('TestInteractor4Context') do
|
257
|
-
attribute :foo
|
258
|
-
attribute :bar, default: 'bar'
|
259
|
-
attribute :baz
|
260
|
-
end
|
261
|
-
end
|
262
|
-
|
263
|
-
let!(:test_interactor_3) do
|
264
|
-
build_interactor('TestInteractor3') do
|
265
|
-
def perform
|
266
|
-
context.bar = 'bar'
|
267
|
-
context.taz_is_set_at_3 = (context.taz == 'taz')
|
268
|
-
context.baz_is_set_at_3 = (context.baz == 'baz')
|
269
|
-
context.zoo_is_set_at_3 = (context.zoo == 'zoo')
|
270
|
-
end
|
271
|
-
end
|
272
|
-
end
|
273
|
-
|
274
|
-
let!(:test_interactor_4) do
|
275
|
-
build_interactor('TestInteractor4') do
|
276
|
-
def perform
|
277
|
-
context.taz_is_set_at_4 = (context.taz == 'taz')
|
278
|
-
context.baz_is_set_at_4 = (context.baz == 'baz')
|
279
|
-
context.zoo_is_set_at_4 = (context.zoo == 'zoo')
|
280
|
-
end
|
281
|
-
end
|
282
|
-
end
|
283
|
-
|
284
|
-
let!(:interactor_class) do
|
285
|
-
build_organizer('TestOrganizer') do
|
286
|
-
organize TestInteractor3, TestInteractor4
|
287
|
-
end
|
288
|
-
end
|
289
|
-
|
290
|
-
describe '.context_class' do
|
291
|
-
describe 'TestOrganizer' do
|
292
|
-
subject { interactor_class.context_class }
|
293
|
-
|
294
|
-
it { is_expected.to eq TestOrganizerContext }
|
295
|
-
it { is_expected.to be < ActiveInteractor::Context::Base }
|
296
|
-
end
|
297
|
-
|
298
|
-
describe 'TestInteractor3' do
|
299
|
-
subject { test_interactor_3.context_class }
|
300
|
-
|
301
|
-
it { is_expected.to eq TestInteractor3Context }
|
302
|
-
it { is_expected.to be < ActiveInteractor::Context::Base }
|
303
|
-
end
|
304
|
-
|
305
|
-
describe 'TestInteractor4' do
|
306
|
-
subject { test_interactor_4.context_class }
|
307
|
-
|
308
|
-
it { is_expected.to eq TestInteractor4Context }
|
309
|
-
it { is_expected.to be < ActiveInteractor::Context::Base }
|
310
|
-
end
|
311
|
-
end
|
312
|
-
|
313
|
-
describe '.perform' do
|
314
|
-
subject(:result) { interactor_class.perform(context_attributes) }
|
315
|
-
|
316
|
-
context 'when inputs are not defined' do
|
317
|
-
let(:context_attributes) { {} }
|
318
|
-
|
319
|
-
it { is_expected.to have_attributes(foo: nil, bar: 'bar', baz: 'baz') }
|
320
|
-
end
|
321
|
-
|
322
|
-
context 'when [:foo] is defined' do
|
323
|
-
let(:context_attributes) { { foo: 'foo' } }
|
324
|
-
|
325
|
-
it { is_expected.to have_attributes(foo: 'foo', bar: 'bar', baz: 'baz') }
|
326
|
-
end
|
327
|
-
|
328
|
-
context 'when [:taz] is defined' do
|
329
|
-
let(:context_attributes) { { taz: 'taz' } }
|
330
|
-
|
331
|
-
it { is_expected.to have_attributes(taz: 'taz', taz_is_set_at_3: true, taz_is_set_at_4: true) }
|
332
|
-
end
|
333
|
-
|
334
|
-
context 'when [:bar] is nil' do
|
335
|
-
let(:context_attributes) { { bar: nil } }
|
336
|
-
|
337
|
-
it { is_expected.to have_attributes(foo: nil, bar: 'bar', baz: 'baz') }
|
338
|
-
end
|
339
|
-
|
340
|
-
context 'when [:baz] is nil' do
|
341
|
-
let(:context_attributes) { {} }
|
342
|
-
|
343
|
-
it { is_expected.to have_attributes(baz: 'baz', baz_is_set_at_3: true, baz_is_set_at_4: true) }
|
344
|
-
end
|
345
|
-
|
346
|
-
context 'when [:zoo] is nil' do
|
347
|
-
let(:context_attributes) { {} }
|
348
|
-
|
349
|
-
it { is_expected.to have_attributes(zoo: 'zoo', zoo_is_set_at_3: true, zoo_is_set_at_4: true) }
|
350
|
-
end
|
351
|
-
end
|
352
|
-
end
|
353
|
-
end
|
354
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe 'A failing interactor', type: :integration do
|
6
|
-
let(:interactor_class) do
|
7
|
-
build_interactor do
|
8
|
-
def perform
|
9
|
-
context.fail!
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
include_examples 'a class with interactor methods'
|
15
|
-
include_examples 'a class with interactor callback methods'
|
16
|
-
include_examples 'a class with interactor context methods'
|
17
|
-
|
18
|
-
describe '.context_class' do
|
19
|
-
subject { interactor_class.context_class }
|
20
|
-
|
21
|
-
it { is_expected.to eq TestInteractor::Context }
|
22
|
-
it { is_expected.to be < ActiveInteractor::Context::Base }
|
23
|
-
end
|
24
|
-
|
25
|
-
describe '.perform' do
|
26
|
-
subject { interactor_class.perform }
|
27
|
-
|
28
|
-
it { expect { subject }.not_to raise_error }
|
29
|
-
it { is_expected.to be_a interactor_class.context_class }
|
30
|
-
it { is_expected.to be_failure }
|
31
|
-
|
32
|
-
it 'is expected to receive #rollback' do
|
33
|
-
expect_any_instance_of(interactor_class).to receive(:rollback)
|
34
|
-
subject
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
describe '.perform!' do
|
39
|
-
subject { interactor_class.perform! }
|
40
|
-
|
41
|
-
it { expect { subject }.to raise_error(ActiveInteractor::Error::ContextFailure) }
|
42
|
-
end
|
43
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
begin
|
5
|
-
require 'active_interactor/rails'
|
6
|
-
require 'active_interactor/rails/orm/active_record'
|
7
|
-
|
8
|
-
RSpec.describe 'ActiveRecord integration', type: :integration do
|
9
|
-
let!(:active_record_base_mock) { build_class('ActiveRecordBaseMock') }
|
10
|
-
|
11
|
-
context 'after ActiveSupport.run_load_hooks has been received with :active_record' do
|
12
|
-
before { ActiveSupport.run_load_hooks(:active_record, active_record_base_mock) }
|
13
|
-
|
14
|
-
describe 'an ActiveRecord model class with .acts_as_context and attribute :foo' do
|
15
|
-
let(:model_class) do
|
16
|
-
build_class('ModelClass', active_record_base_mock) do
|
17
|
-
include ActiveModel::Attributes
|
18
|
-
include ActiveModel::Model
|
19
|
-
acts_as_context
|
20
|
-
attribute :foo
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
include_examples 'A class that extends ActiveInteractor::Models'
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
rescue LoadError
|
29
|
-
RSpec.describe 'ActiveRecord Integration', type: :integration do
|
30
|
-
pending 'Rails not found skipping specs...'
|
31
|
-
end
|
32
|
-
end
|
@@ -1,69 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe 'An interactor with .after_context_validation callbacks', type: :integration do
|
6
|
-
let(:interactor_class) do
|
7
|
-
build_interactor do
|
8
|
-
context_validates :test_field, presence: true
|
9
|
-
after_context_validation :downcase_test_field
|
10
|
-
|
11
|
-
private
|
12
|
-
|
13
|
-
def downcase_test_field
|
14
|
-
context.test_field = context.test_field.downcase
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
include_examples 'a class with interactor methods'
|
20
|
-
include_examples 'a class with interactor callback methods'
|
21
|
-
include_examples 'a class with interactor context methods'
|
22
|
-
|
23
|
-
describe '.perform' do
|
24
|
-
subject { interactor_class.perform(context_attributes) }
|
25
|
-
|
26
|
-
context 'with valid context attributes' do
|
27
|
-
let(:context_attributes) { { test_field: 'TEST' } }
|
28
|
-
|
29
|
-
it { is_expected.to be_a interactor_class.context_class }
|
30
|
-
it { is_expected.to be_successful }
|
31
|
-
it { is_expected.to have_attributes(test_field: 'test') }
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
context 'having a condition on #after_context_valdation' do
|
36
|
-
let(:interactor_class) do
|
37
|
-
build_interactor do
|
38
|
-
context_validates :test_field, presence: true
|
39
|
-
after_context_validation :downcase_test_field, if: -> { context.should_downcase }
|
40
|
-
|
41
|
-
private
|
42
|
-
|
43
|
-
def downcase_test_field
|
44
|
-
context.test_field = context.test_field.downcase
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
describe '.perform' do
|
50
|
-
subject { interactor_class.perform(context_attributes) }
|
51
|
-
|
52
|
-
context 'with :test_field "TEST" and :should_downcase true' do
|
53
|
-
let(:context_attributes) { { test_field: 'TEST', should_downcase: true } }
|
54
|
-
|
55
|
-
it { is_expected.to be_a interactor_class.context_class }
|
56
|
-
it { is_expected.to be_successful }
|
57
|
-
it { is_expected.to have_attributes(test_field: 'test') }
|
58
|
-
end
|
59
|
-
|
60
|
-
context 'with :test_field "TEST" and :should_downcase false' do
|
61
|
-
let(:context_attributes) { { test_field: 'TEST', should_downcase: false } }
|
62
|
-
|
63
|
-
it { is_expected.to be_a interactor_class.context_class }
|
64
|
-
it { is_expected.to be_successful }
|
65
|
-
it { is_expected.to have_attributes(test_field: 'TEST') }
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|