rest_my_case 1.10.9 → 1.11.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.
Files changed (31) hide show
  1. checksums.yaml +5 -13
  2. data/README.md +330 -2
  3. data/lib/rest_my_case/base.rb +46 -21
  4. data/lib/rest_my_case/context/base.rb +11 -0
  5. data/lib/rest_my_case/context/schema_validator/base.rb +27 -0
  6. data/lib/rest_my_case/context/schema_validator/compel.rb +36 -0
  7. data/lib/rest_my_case/context/status.rb +2 -0
  8. data/lib/rest_my_case/defense_attorney/base.rb +1 -1
  9. data/lib/rest_my_case/http_status.rb +5 -8
  10. data/lib/rest_my_case/judge/base.rb +19 -14
  11. data/lib/rest_my_case/status.rb +13 -12
  12. data/lib/rest_my_case/trial/case.rb +3 -3
  13. data/lib/rest_my_case/validator.rb +3 -8
  14. data/lib/rest_my_case/version.rb +1 -1
  15. data/lib/rest_my_case.rb +0 -4
  16. data/rest_my_case.gemspec +1 -1
  17. data/spec/rest_my_case/accusation_attorneys/base_spec.rb +1 -1
  18. data/spec/rest_my_case/accusation_attorneys/each_spec.rb +1 -1
  19. data/spec/rest_my_case/accusation_attorneys/format_spec.rb +2 -2
  20. data/spec/rest_my_case/base/context_accessor_spec.rb +29 -0
  21. data/spec/rest_my_case/base/context_reader_spec.rb +21 -0
  22. data/spec/rest_my_case/base/context_writer_spec.rb +23 -0
  23. data/spec/rest_my_case/base/dependencies_spec.rb +14 -0
  24. data/spec/rest_my_case/base/invoke!_spec.rb +140 -0
  25. data/spec/rest_my_case/base/invoke_spec.rb +29 -0
  26. data/spec/rest_my_case/{base_spec.rb → base/perform_spec.rb} +0 -226
  27. data/spec/rest_my_case/base/required_context_spec.rb +33 -0
  28. data/spec/rest_my_case/context/status_spec.rb +2 -2
  29. data/spec/rest_my_case/status_spec.rb +6 -6
  30. data/spec/support/required_context.rb +49 -0
  31. metadata +42 -24
@@ -1,28 +1,29 @@
1
+ require 'rest_my_case/context/status'
2
+
1
3
  module RestMyCase
2
4
 
3
5
  module Status
4
6
 
5
- module ClassMethods
6
- def trial_court
7
- @trial_court ||= Trial::Court.new \
8
- Judge::Base, DefenseAttorney::Base, Base, Context::Status
9
- end
10
- end
11
-
12
7
  def self.included(parent_class)
13
- parent_class.extend ClassMethods
8
+ return unless parent_class.respond_to? :trial_court
9
+
10
+ parent_class.trial_court.context_class = Context::Status
14
11
  end
15
12
 
16
13
  def status
17
14
  context.status
18
15
  end
19
16
 
20
- def failure(status, error = nil)
21
- error = { message: error } unless error.is_a?(Hash)
17
+ def failure(status, error_message = nil)
18
+ if error_message.is_a?(Hash)
19
+ error_data = error_message
20
+ else
21
+ error_data = { message: error_message }
22
+ end
22
23
 
23
- error[:status] = status
24
+ error_data[:status] = status
24
25
 
25
- error(error)
26
+ error(error_data)
26
27
  end
27
28
 
28
29
  def failure!(status, error = nil)
@@ -12,10 +12,10 @@ module RestMyCase
12
12
  :defendant_class
13
13
 
14
14
  def initialize(last_ancestor, context_class, use_case_classes, attributes)
15
- @context = build_context attributes, context_class
16
- @last_ancestor = last_ancestor
15
+ @context = build_context attributes, context_class
16
+ @last_ancestor = last_ancestor
17
17
  @defendant_class = build_defendant(last_ancestor, use_case_classes)
18
- @defendant = @defendant_class.new @context
18
+ @defendant = @defendant_class.new @context
19
19
  end
20
20
 
21
21
  def aborted
@@ -6,11 +6,6 @@ module RestMyCase
6
6
 
7
7
  attr_writer :validators
8
8
 
9
- def trial_court
10
- @trial_court ||= Trial::Court.new \
11
- Judge::Base, DefenseAttorney::Base, Validator, Context::Base
12
- end
13
-
14
9
  def target_options
15
10
  @target_options || Helpers.super_method(self, :target_options)
16
11
  end
@@ -59,6 +54,8 @@ module RestMyCase
59
54
 
60
55
  extend ClassMethods
61
56
 
57
+ trial_court.last_ancestor = Validator
58
+
62
59
  self.silence_dependencies_abort = true
63
60
 
64
61
  extend AccusationAttorneys::HelperMethods
@@ -91,9 +88,7 @@ module RestMyCase
91
88
 
92
89
  return if Helpers.blank?(targets) || all_validations_green?(targets)
93
90
 
94
- if parent_target
95
- parent_target.errors.add(target_options[:name], :invalid)
96
- end
91
+ parent_target.errors.add(target_options[:name], :invalid) if parent_target
97
92
 
98
93
  error('unprocessable_entity')
99
94
  end
@@ -1,5 +1,5 @@
1
1
  module RestMyCase
2
2
 
3
- VERSION = '1.10.9'
3
+ VERSION = '1.11.0'
4
4
 
5
5
  end
data/lib/rest_my_case.rb CHANGED
@@ -6,11 +6,7 @@ require 'rest_my_case/errors/base'
6
6
  require 'rest_my_case/config/base'
7
7
  require 'rest_my_case/config/general'
8
8
  require 'rest_my_case/defense_attorney/base'
9
- require 'rest_my_case/context/errors/base'
10
- require 'rest_my_case/context/errors/status'
11
9
  require 'rest_my_case/context/base'
12
- require 'rest_my_case/context/status'
13
- require 'rest_my_case/context/http_status'
14
10
  require 'rest_my_case/judge/base'
15
11
  require 'rest_my_case/trial/case'
16
12
  require 'rest_my_case/trial/court'
data/rest_my_case.gemspec CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |gem|
9
9
  gem.authors = ['goncalvesjoao']
10
10
  gem.email = ['goncalves.joao@gmail.com']
11
11
  gem.summary = %q{Quick and light "The Clean Architecture" use case implementation.}
12
- gem.description = %q{Very light Ruby gem with everything you need in a "The Clean Architecture" use case scenario}
12
+ gem.description = %q{Light Ruby gem with everything you need in a "The Clean Architecture" use case scenario}
13
13
  gem.homepage = 'https://github.com/goncalvesjoao/rest_my_case'
14
14
  gem.license = 'MIT'
15
15
 
@@ -9,7 +9,7 @@ describe RestMyCase::AccusationAttorneys::Base do
9
9
  before { @instance = AccusationAttorneysTestCase1.new({ attributes: { id: '1' } }) }
10
10
 
11
11
  it 'should raise an error' do
12
- expect { @instance.validate(nil) }.to raise_error
12
+ expect { @instance.validate(nil) }.to raise_error NotImplementedError
13
13
  end
14
14
  end
15
15
  end
@@ -9,7 +9,7 @@ describe RestMyCase::AccusationAttorneys::Each do
9
9
  before { @instance = AccusationAttorneysTestCase2.new({ attributes: { id: '1' } }) }
10
10
 
11
11
  it 'should raise an error' do
12
- expect { @instance.validate_each(nil, nil, nil) }.to raise_error
12
+ expect { @instance.validate_each(nil, nil, nil) }.to raise_error NotImplementedError
13
13
  end
14
14
  end
15
15
  end
@@ -64,8 +64,8 @@ describe RestMyCase::AccusationAttorneys::Format do
64
64
 
65
65
  describe "without options" do
66
66
  it 'should raise an error' do
67
- expect { Class.new(RestMyCase::Validator) { validates_format_of :body } }.to raise_error
67
+ expect { Class.new(RestMyCase::Validator) { validates_format_of :body } }.to raise_error ArgumentError
68
68
  end
69
69
  end
70
70
 
71
- end
71
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe RestMyCase::Base do
4
+
5
+ describe ".context_accessor" do
6
+
7
+ let(:context) { RestMyCase::Context::Base.new(id: 1, comment: 'my comment', session: -1) }
8
+ let(:use_case) { RestMyCaseBase::CreatePostWithComments.new(context) }
9
+
10
+ it "Should create getters targeting to context" do
11
+ expect(use_case.respond_to?(:comment)).to be true
12
+ end
13
+
14
+ it "Should create setters targeting to context" do
15
+ expect(use_case.respond_to?(:comment=)).to be true
16
+ end
17
+
18
+ it "Getter should delegate to context" do
19
+ expect(use_case.comment).to eq 'my comment'
20
+ end
21
+
22
+ it "Setter should delegate to context" do
23
+ use_case.comment = 'your comment'
24
+ expect(use_case.context.comment).to eq 'your comment'
25
+ end
26
+
27
+ end
28
+
29
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe RestMyCase::Base do
4
+
5
+ describe ".context_reader" do
6
+
7
+ let(:context) { RestMyCase::Context::Base.new(id: 1, comment: 'my comment', session: -1) }
8
+ let(:use_case) { RestMyCaseBase::CreatePostWithComments.new(context) }
9
+
10
+ it "Should create getters targeting to context" do
11
+ expect(use_case.respond_to?(:session)).to be true
12
+ expect(use_case.respond_to?(:session=)).to be false
13
+ end
14
+
15
+ it "Getter should delegate to context" do
16
+ expect(use_case.session).to eq -1
17
+ end
18
+
19
+ end
20
+
21
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe RestMyCase::Base do
4
+
5
+ describe ".context_writer" do
6
+
7
+ let(:context) { RestMyCase::Context::Base.new }
8
+ let(:use_case) { RestMyCaseBase::CreatePostWithComments.new(context) }
9
+
10
+ it "Should create setters targeting to context" do
11
+ expect(use_case.respond_to?(:id)).to be false
12
+ expect(use_case.respond_to?(:id=)).to be true
13
+ end
14
+
15
+ it "Setter should delegate to context" do
16
+ use_case.id = 2
17
+
18
+ expect(use_case.context.id).to eq 2
19
+ end
20
+
21
+ end
22
+
23
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe RestMyCase::Base do
4
+
5
+ describe ".dependencies" do
6
+
7
+ it "should only list the class's dependencies" do
8
+ expect(RestMyCaseBase::CreatePostWithComments.dependencies).to \
9
+ eq [RestMyCaseBase::BuildComments, RestMyCaseBase::CreateComments]
10
+ end
11
+
12
+ end
13
+
14
+ end
@@ -0,0 +1,140 @@
1
+ require 'spec_helper'
2
+
3
+ describe RestMyCase::Base do
4
+
5
+ describe "#invoke!" do
6
+
7
+ context "when the invokees don't abort" do
8
+
9
+ class Perform::ScreammingInvoker < Perform::UseCaseWrapper
10
+ def perform
11
+ super
12
+ invoke! Perform::BuildPost, Perform::Validations, Perform::SavePost
13
+ end
14
+ end
15
+
16
+ it "should invoke other use cases with the invoker's context and actually alter it" do
17
+ @context = Perform::ScreammingInvoker.perform
18
+
19
+ expect(@context.setup).to eq [
20
+ "Perform::Logger",
21
+ "Perform::ScreammingInvoker",
22
+ "Perform::Logger",
23
+ "Perform::BuildPost",
24
+ "Perform::Logger",
25
+ "Perform::ValidateName",
26
+ "Perform::Logger",
27
+ "Perform::ValidateBody",
28
+ "Perform::Logger",
29
+ "Perform::Validations",
30
+ "Perform::Logger",
31
+ "Perform::SavePost"
32
+ ]
33
+ expect(@context.perform).to eq [
34
+ "Perform::Logger",
35
+ "Perform::ScreammingInvoker",
36
+ "Perform::Logger",
37
+ "Perform::BuildPost",
38
+ "Perform::Logger",
39
+ "Perform::ValidateName",
40
+ "Perform::Logger",
41
+ "Perform::ValidateBody",
42
+ "Perform::Logger",
43
+ "Perform::Validations",
44
+ "Perform::Logger",
45
+ "Perform::SavePost"
46
+ ]
47
+ expect(@context.rollback).to eq []
48
+ expect(@context.final).to eq [
49
+ "Perform::Logger",
50
+ "Perform::BuildPost",
51
+ "Perform::Logger",
52
+ "Perform::ValidateName",
53
+ "Perform::Logger",
54
+ "Perform::ValidateBody",
55
+ "Perform::Logger",
56
+ "Perform::Validations",
57
+ "Perform::Logger",
58
+ "Perform::SavePost",
59
+ "Perform::Logger",
60
+ "Perform::ScreammingInvoker"
61
+ ]
62
+ end
63
+
64
+ end
65
+
66
+ context "when the invokees abort" do
67
+
68
+ class Perform::Validations2 < Perform::UseCaseWrapper
69
+ def perform
70
+ super
71
+
72
+ invoke! Perform::ValidateName, Perform::ValidateBody
73
+
74
+ context.should_not_be_true = true
75
+ end
76
+ end
77
+
78
+ class Perform::CreatePost2 < Perform::UseCaseWrapper
79
+ depends Perform::BuildPost, Perform::Validations2, Perform::SavePost
80
+ end
81
+
82
+ before do
83
+ @context = Perform::CreatePost2.perform \
84
+ error: ['Perform::ValidateName_perform', 'Perform::ValidateBody_perform']
85
+ end
86
+
87
+ it "invoker should abort the process it his invokees have also aborted" do
88
+ expect(@context.setup).to eq [
89
+ "Perform::Logger",
90
+ "Perform::BuildPost",
91
+ "Perform::Logger",
92
+ "Perform::Validations2",
93
+ "Perform::Logger",
94
+ "Perform::SavePost",
95
+ "Perform::Logger",
96
+ "Perform::CreatePost2",
97
+ "Perform::Logger",
98
+ "Perform::ValidateName",
99
+ "Perform::Logger",
100
+ "Perform::ValidateBody"
101
+ ]
102
+ expect(@context.perform).to eq [
103
+ "Perform::Logger",
104
+ "Perform::BuildPost",
105
+ "Perform::Logger",
106
+ "Perform::Validations2",
107
+ "Perform::Logger",
108
+ "Perform::ValidateName"
109
+ ]
110
+ expect(@context.rollback).to eq [
111
+ "Perform::ValidateName",
112
+ "Perform::Logger",
113
+ "Perform::Validations2",
114
+ "Perform::Logger",
115
+ "Perform::BuildPost",
116
+ "Perform::Logger"
117
+ ]
118
+ expect(@context.final).to eq [
119
+ "Perform::Logger",
120
+ "Perform::ValidateName",
121
+ "Perform::Logger",
122
+ "Perform::ValidateBody",
123
+ "Perform::Logger",
124
+ "Perform::BuildPost",
125
+ "Perform::Logger",
126
+ "Perform::Validations2",
127
+ "Perform::Logger",
128
+ "Perform::SavePost",
129
+ "Perform::Logger",
130
+ "Perform::CreatePost2"
131
+ ]
132
+
133
+ expect(@context.should_not_be_true).to be_falsey
134
+ end
135
+
136
+ end
137
+
138
+ end
139
+
140
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe RestMyCase::Base do
4
+
5
+ describe "#invoke" do
6
+
7
+ class Perform::Invoker < Perform::UseCaseWrapper
8
+ def perform
9
+ super
10
+ invoke Perform::BuildPost, Perform::Validations, Perform::SavePost
11
+
12
+ context.should_be_true = true
13
+ end
14
+ end
15
+
16
+ it "should invoke other use cases with the invoker's cloned context and they can't alter the invoker's context" do
17
+ context = Perform::Invoker.perform
18
+
19
+ expect(context.setup.length).to be 2
20
+ expect(context.perform.length).to be 2
21
+ expect(context.rollback.length).to be 0
22
+ expect(context.final.length).to be 2
23
+
24
+ expect(context.should_be_true).to be true
25
+ end
26
+
27
+ end
28
+
29
+ end
@@ -2,73 +2,6 @@ require 'spec_helper'
2
2
 
3
3
  describe RestMyCase::Base do
4
4
 
5
- describe ".dependencies" do
6
-
7
- it "should only list the class's dependencies" do
8
- expect(RestMyCaseBase::CreatePostWithComments.dependencies).to \
9
- eq [RestMyCaseBase::BuildComments, RestMyCaseBase::CreateComments]
10
- end
11
-
12
- end
13
-
14
- describe ".context_accessor" do
15
-
16
- let(:context) { RestMyCase::Context::Base.new(id: 1, comment: 'my comment', session: -1) }
17
- let(:use_case) { RestMyCaseBase::CreatePostWithComments.new(context) }
18
-
19
- it "Should create getters targeting to context" do
20
- expect(use_case.respond_to?(:comment)).to be true
21
- end
22
-
23
- it "Should create setters targeting to context" do
24
- expect(use_case.respond_to?(:comment=)).to be true
25
- end
26
-
27
- it "Getter should delegate to context" do
28
- expect(use_case.comment).to eq 'my comment'
29
- end
30
-
31
- it "Setter should delegate to context" do
32
- use_case.comment = 'your comment'
33
- expect(use_case.context.comment).to eq 'your comment'
34
- end
35
-
36
- end
37
-
38
- describe ".context_writer" do
39
-
40
- let(:context) { RestMyCase::Context::Base.new }
41
- let(:use_case) { RestMyCaseBase::CreatePostWithComments.new(context) }
42
-
43
- it "Should create setters targeting to context" do
44
- expect(use_case.respond_to?(:id)).to be false
45
- expect(use_case.respond_to?(:id=)).to be true
46
- end
47
-
48
- it "Setter should delegate to context" do
49
- use_case.id = 2
50
-
51
- expect(use_case.context.id).to eq 2
52
- end
53
-
54
- end
55
-
56
- describe ".context_reader" do
57
-
58
- let(:context) { RestMyCase::Context::Base.new(id: 1, comment: 'my comment', session: -1) }
59
- let(:use_case) { RestMyCaseBase::CreatePostWithComments.new(context) }
60
-
61
- it "Should create getters targeting to context" do
62
- expect(use_case.respond_to?(:session)).to be true
63
- expect(use_case.respond_to?(:session=)).to be false
64
- end
65
-
66
- it "Getter should delegate to context" do
67
- expect(use_case.session).to eq -1
68
- end
69
-
70
- end
71
-
72
5
  describe ".perform" do
73
6
 
74
7
  context "When something that doesn't responds to #to_hash is passed down" do
@@ -305,163 +238,4 @@ describe RestMyCase::Base do
305
238
 
306
239
  end
307
240
 
308
- describe "#invoke" do
309
-
310
- class Perform::Invoker < Perform::UseCaseWrapper
311
- def perform
312
- super
313
- invoke Perform::BuildPost, Perform::Validations, Perform::SavePost
314
-
315
- context.should_be_true = true
316
- end
317
- end
318
-
319
- it "should invoke other use cases with the invoker's cloned context and they can't alter the invoker's context" do
320
- context = Perform::Invoker.perform
321
-
322
- expect(context.setup.length).to be 2
323
- expect(context.perform.length).to be 2
324
- expect(context.rollback.length).to be 0
325
- expect(context.final.length).to be 2
326
-
327
- expect(context.should_be_true).to be true
328
- end
329
-
330
- end
331
-
332
- describe "#invoke!" do
333
-
334
- context "when the invokees don't abort" do
335
-
336
- class Perform::ScreammingInvoker < Perform::UseCaseWrapper
337
- def perform
338
- super
339
- invoke! Perform::BuildPost, Perform::Validations, Perform::SavePost
340
- end
341
- end
342
-
343
- it "should invoke other use cases with the invoker's context and actually alter it" do
344
- @context = Perform::ScreammingInvoker.perform
345
-
346
- expect(@context.setup).to eq [
347
- "Perform::Logger",
348
- "Perform::ScreammingInvoker",
349
- "Perform::Logger",
350
- "Perform::BuildPost",
351
- "Perform::Logger",
352
- "Perform::ValidateName",
353
- "Perform::Logger",
354
- "Perform::ValidateBody",
355
- "Perform::Logger",
356
- "Perform::Validations",
357
- "Perform::Logger",
358
- "Perform::SavePost"
359
- ]
360
- expect(@context.perform).to eq [
361
- "Perform::Logger",
362
- "Perform::ScreammingInvoker",
363
- "Perform::Logger",
364
- "Perform::BuildPost",
365
- "Perform::Logger",
366
- "Perform::ValidateName",
367
- "Perform::Logger",
368
- "Perform::ValidateBody",
369
- "Perform::Logger",
370
- "Perform::Validations",
371
- "Perform::Logger",
372
- "Perform::SavePost"
373
- ]
374
- expect(@context.rollback).to eq []
375
- expect(@context.final).to eq [
376
- "Perform::Logger",
377
- "Perform::BuildPost",
378
- "Perform::Logger",
379
- "Perform::ValidateName",
380
- "Perform::Logger",
381
- "Perform::ValidateBody",
382
- "Perform::Logger",
383
- "Perform::Validations",
384
- "Perform::Logger",
385
- "Perform::SavePost",
386
- "Perform::Logger",
387
- "Perform::ScreammingInvoker"
388
- ]
389
- end
390
-
391
- end
392
-
393
- context "when the invokees abort" do
394
-
395
- class Perform::Validations2 < Perform::UseCaseWrapper
396
- def perform
397
- super
398
-
399
- invoke! Perform::ValidateName, Perform::ValidateBody
400
-
401
- context.should_not_be_true = true
402
- end
403
- end
404
-
405
- class Perform::CreatePost2 < Perform::UseCaseWrapper
406
- depends Perform::BuildPost, Perform::Validations2, Perform::SavePost
407
- end
408
-
409
- before do
410
- @context = Perform::CreatePost2.perform \
411
- error: ['Perform::ValidateName_perform', 'Perform::ValidateBody_perform']
412
- end
413
-
414
- it "invoker should abort the process it his invokees have also aborted" do
415
- expect(@context.setup).to eq [
416
- "Perform::Logger",
417
- "Perform::BuildPost",
418
- "Perform::Logger",
419
- "Perform::Validations2",
420
- "Perform::Logger",
421
- "Perform::SavePost",
422
- "Perform::Logger",
423
- "Perform::CreatePost2",
424
- "Perform::Logger",
425
- "Perform::ValidateName",
426
- "Perform::Logger",
427
- "Perform::ValidateBody"
428
- ]
429
- expect(@context.perform).to eq [
430
- "Perform::Logger",
431
- "Perform::BuildPost",
432
- "Perform::Logger",
433
- "Perform::Validations2",
434
- "Perform::Logger",
435
- "Perform::ValidateName"
436
- ]
437
- expect(@context.rollback).to eq [
438
- "Perform::ValidateName",
439
- "Perform::Logger",
440
- "Perform::Validations2",
441
- "Perform::Logger",
442
- "Perform::BuildPost",
443
- "Perform::Logger"
444
- ]
445
- expect(@context.final).to eq [
446
- "Perform::Logger",
447
- "Perform::ValidateName",
448
- "Perform::Logger",
449
- "Perform::ValidateBody",
450
- "Perform::Logger",
451
- "Perform::BuildPost",
452
- "Perform::Logger",
453
- "Perform::Validations2",
454
- "Perform::Logger",
455
- "Perform::SavePost",
456
- "Perform::Logger",
457
- "Perform::CreatePost2"
458
- ]
459
-
460
- expect(@context.should_not_be_true).to be_falsey
461
- end
462
-
463
- end
464
-
465
- end
466
-
467
241
  end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe RestMyCase::Base do
4
+
5
+ describe ".required_context" do
6
+
7
+ context "When #setup odly populates the required field" do
8
+ before { @context = RequiredContext::Users::GetCurrentUser.perform }
9
+
10
+ it "context should be ok" do
11
+ expect(@context.ok?).to be true
12
+ end
13
+ end
14
+
15
+ context "When dependencies also have a required_context" do
16
+ before { @context = RequiredContext::Posts::Update.perform }
17
+
18
+ it "context should NOT be ok" do
19
+ expect(@context.ok?).to be false
20
+ end
21
+
22
+ it "context errors should include 3 context_errors" do
23
+ expect(@context.errors.length).to be 3
24
+ expect(@context.errors[0][:context_errors][:id]).to be_truthy
25
+ expect(@context.errors[1][:context_errors][:post]).to be_truthy
26
+ expect(@context.errors[1][:context_errors][:post_attributes]).to be_truthy
27
+ expect(@context.errors[2][:context_errors][:post]).to be_truthy
28
+ end
29
+ end
30
+
31
+ end
32
+
33
+ end