much-rails 0.0.1 → 0.2.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/Gemfile +3 -1
- data/lib/much-rails.rb +85 -0
- data/lib/much-rails/action.rb +415 -0
- data/lib/much-rails/action/base_command_result.rb +22 -0
- data/lib/much-rails/action/base_result.rb +14 -0
- data/lib/much-rails/action/base_router.rb +474 -0
- data/lib/much-rails/action/controller.rb +100 -0
- data/lib/much-rails/action/head_result.rb +18 -0
- data/lib/much-rails/action/redirect_to_result.rb +18 -0
- data/lib/much-rails/action/render_result.rb +25 -0
- data/lib/much-rails/action/router.rb +101 -0
- data/lib/much-rails/action/send_data_result.rb +18 -0
- data/lib/much-rails/action/send_file_result.rb +18 -0
- data/lib/much-rails/action/unprocessable_entity_result.rb +37 -0
- data/lib/much-rails/assets.rb +54 -0
- data/lib/much-rails/boolean.rb +7 -0
- data/lib/much-rails/call_method.rb +27 -0
- data/lib/much-rails/call_method_callbacks.rb +122 -0
- data/lib/much-rails/change_action.rb +83 -0
- data/lib/much-rails/change_action_result.rb +59 -0
- data/lib/much-rails/config.rb +55 -0
- data/lib/much-rails/date.rb +50 -0
- data/lib/much-rails/decimal.rb +7 -0
- data/lib/much-rails/destroy_action.rb +32 -0
- data/lib/much-rails/destroy_service.rb +67 -0
- data/lib/much-rails/has_slug.rb +7 -0
- data/lib/much-rails/input_value.rb +19 -0
- data/lib/much-rails/json.rb +29 -0
- data/lib/much-rails/layout.rb +142 -0
- data/lib/much-rails/layout/helper.rb +25 -0
- data/lib/much-rails/mixin.rb +7 -0
- data/lib/much-rails/not_given.rb +7 -0
- data/lib/much-rails/rails_routes.rb +29 -0
- data/lib/much-rails/railtie.rb +39 -0
- data/lib/much-rails/records.rb +5 -0
- data/lib/much-rails/records/always_destroyable.rb +30 -0
- data/lib/much-rails/records/not_destroyable.rb +30 -0
- data/lib/much-rails/records/validate_destroy.rb +92 -0
- data/lib/much-rails/result.rb +7 -0
- data/lib/much-rails/save_action.rb +32 -0
- data/lib/much-rails/save_service.rb +68 -0
- data/lib/much-rails/service.rb +18 -0
- data/lib/much-rails/service_validation_errors.rb +41 -0
- data/lib/much-rails/time.rb +28 -0
- data/lib/much-rails/version.rb +3 -1
- data/lib/much-rails/view_models.rb +3 -0
- data/lib/much-rails/view_models/breadcrumb.rb +11 -0
- data/lib/much-rails/wrap_and_call_method.rb +41 -0
- data/lib/much-rails/wrap_method.rb +45 -0
- data/much-rails.gemspec +20 -4
- data/test/helper.rb +20 -2
- data/test/support/actions/show.rb +11 -0
- data/test/support/config/routes/test.rb +3 -0
- data/test/support/factory.rb +2 -0
- data/test/support/fake_action_controller.rb +63 -0
- data/test/unit/action/base_command_result_tests.rb +43 -0
- data/test/unit/action/base_result_tests.rb +22 -0
- data/test/unit/action/base_router_tests.rb +530 -0
- data/test/unit/action/controller_tests.rb +110 -0
- data/test/unit/action/head_result_tests.rb +24 -0
- data/test/unit/action/redirect_to_result_tests.rb +24 -0
- data/test/unit/action/render_result_tests.rb +43 -0
- data/test/unit/action/router_tests.rb +252 -0
- data/test/unit/action/send_data_result_tests.rb +24 -0
- data/test/unit/action/send_file_result_tests.rb +24 -0
- data/test/unit/action/unprocessable_entity_result_tests.rb +51 -0
- data/test/unit/action_tests.rb +400 -0
- data/test/unit/assets_tests.rb +127 -0
- data/test/unit/boolean_tests.rb +17 -0
- data/test/unit/call_method_callbacks_tests.rb +176 -0
- data/test/unit/call_method_tests.rb +62 -0
- data/test/unit/change_action_result_tests.rb +113 -0
- data/test/unit/change_action_tests.rb +260 -0
- data/test/unit/config_tests.rb +68 -0
- data/test/unit/date_tests.rb +55 -0
- data/test/unit/decimal_tests.rb +17 -0
- data/test/unit/destroy_action_tests.rb +83 -0
- data/test/unit/destroy_service_tests.rb +238 -0
- data/test/unit/has_slug_tests.rb +17 -0
- data/test/unit/input_value_tests.rb +34 -0
- data/test/unit/json_tests.rb +55 -0
- data/test/unit/layout_tests.rb +155 -0
- data/test/unit/mixin_tests.rb +17 -0
- data/test/unit/much-rails_tests.rb +82 -4
- data/test/unit/not_given_tests.rb +17 -0
- data/test/unit/rails_routes_tests.rb +28 -0
- data/test/unit/records/always_destroyable_tests.rb +43 -0
- data/test/unit/records/not_destroyable_tests.rb +40 -0
- data/test/unit/records/validate_destroy_tests.rb +252 -0
- data/test/unit/result_tests.rb +17 -0
- data/test/unit/save_action_tests.rb +83 -0
- data/test/unit/save_service_tests.rb +264 -0
- data/test/unit/service_tests.rb +33 -0
- data/test/unit/service_validation_errors_tests.rb +107 -0
- data/test/unit/time_tests.rb +58 -0
- data/test/unit/view_models/breadcrumb_tests.rb +53 -0
- data/test/unit/wrap_and_call_method_tests.rb +163 -0
- data/test/unit/wrap_method_tests.rb +112 -0
- metadata +356 -7
- data/test/unit/.keep +0 -0
@@ -0,0 +1,127 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "assert"
|
4
|
+
require "much-rails/assets"
|
5
|
+
|
6
|
+
module MuchRails::Assets
|
7
|
+
class UnitTests < Assert::Context
|
8
|
+
desc "MuchRails::Assets"
|
9
|
+
subject{ unit_class }
|
10
|
+
|
11
|
+
let(:unit_class){ MuchRails::Assets }
|
12
|
+
|
13
|
+
should have_imeths :configure_for_rails
|
14
|
+
|
15
|
+
should "be Dassets" do
|
16
|
+
assert_that(unit_class).is(Dassets)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class ConfigureTests < UnitTests
|
21
|
+
desc "when configured"
|
22
|
+
|
23
|
+
setup do
|
24
|
+
subject.reset
|
25
|
+
|
26
|
+
in_development_env = Factory.boolean
|
27
|
+
Assert.stub(FakeRails.env, :development?){ in_development_env }
|
28
|
+
Assert.stub(FakeRails.env, :test?){ !in_development_env }
|
29
|
+
|
30
|
+
Assert.stub_on_call(subject, :init) do |call|
|
31
|
+
@init_call = call
|
32
|
+
end
|
33
|
+
|
34
|
+
subject.configure_for_rails(FakeRails)
|
35
|
+
end
|
36
|
+
|
37
|
+
should "configure the fingerprint cache to use a memory cache" do
|
38
|
+
assert_that(subject.config.fingerprint_cache)
|
39
|
+
.is_instance_of(subject::MemCache)
|
40
|
+
end
|
41
|
+
|
42
|
+
should "configure the content cache to use a memory cache" do
|
43
|
+
assert_that(subject.config.content_cache)
|
44
|
+
.is_instance_of(subject::MemCache)
|
45
|
+
end
|
46
|
+
|
47
|
+
should "not configure a file store" do
|
48
|
+
assert_that(subject.config.file_store.root)
|
49
|
+
.is_not_equal_to(FakeRails.root.join("public"))
|
50
|
+
end
|
51
|
+
|
52
|
+
should "configure the app's app/assets folder as a source" do
|
53
|
+
source =
|
54
|
+
subject.config.sources.detect do |source|
|
55
|
+
source.path == FakeRails.root.join("app", "assets").to_s
|
56
|
+
end
|
57
|
+
|
58
|
+
assert_that(source).is_not_nil
|
59
|
+
assert_that(source.engines["js"].size).equals(1)
|
60
|
+
assert_that(source.engines["js"].first)
|
61
|
+
.is_instance_of(subject::Erubi::Engine)
|
62
|
+
assert_that(source.engines["scss"].size).equals(2)
|
63
|
+
assert_that(source.engines["scss"].first)
|
64
|
+
.is_instance_of(subject::Erubi::Engine)
|
65
|
+
assert_that(source.engines["scss"].last)
|
66
|
+
.is_instance_of(subject::Sass::Engine)
|
67
|
+
end
|
68
|
+
|
69
|
+
should "initialize itself" do
|
70
|
+
assert_that(@init_call).is_not_nil
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
class ConfigureNotInDevelopmentOrTestEnvsTests < UnitTests
|
75
|
+
desc "when configured not in development or test environments"
|
76
|
+
|
77
|
+
setup do
|
78
|
+
subject.reset
|
79
|
+
|
80
|
+
Assert.stub_on_call(subject, :init) do |call|
|
81
|
+
@init_call = call
|
82
|
+
end
|
83
|
+
|
84
|
+
subject.configure_for_rails(FakeRails)
|
85
|
+
end
|
86
|
+
|
87
|
+
should "configure the content cache to use no cache" do
|
88
|
+
assert_that(subject.config.content_cache)
|
89
|
+
.is_instance_of(subject::NoCache)
|
90
|
+
end
|
91
|
+
|
92
|
+
should "configure a file store for the app's public folder" do
|
93
|
+
assert_that(subject.config.file_store.root)
|
94
|
+
.equals(FakeRails.root.join("public"))
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
module FakeRails
|
99
|
+
def self.env
|
100
|
+
@env ||= FakeRailsEnv.new
|
101
|
+
end
|
102
|
+
|
103
|
+
def self.root
|
104
|
+
@root ||= FakeRailsRoot.new
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
class FakeRailsEnv
|
109
|
+
def development?
|
110
|
+
false
|
111
|
+
end
|
112
|
+
|
113
|
+
def test?
|
114
|
+
false
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
class FakeRailsRoot
|
119
|
+
def initialize
|
120
|
+
@root_path = Pathname.new(Factory.path)
|
121
|
+
end
|
122
|
+
|
123
|
+
def join(*args)
|
124
|
+
@root_path.join(File.join(*args))
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "assert"
|
4
|
+
require "much-rails/boolean"
|
5
|
+
|
6
|
+
class MuchRails::Boolean
|
7
|
+
class UnitTests < Assert::Context
|
8
|
+
desc "MuchRails::Boolean"
|
9
|
+
subject{ unit_class }
|
10
|
+
|
11
|
+
let(:unit_class){ MuchRails::Boolean }
|
12
|
+
|
13
|
+
should "be MuchBoolean" do
|
14
|
+
assert_that(unit_class).is(MuchBoolean)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,176 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "assert"
|
4
|
+
require "much-rails/call_method_callbacks"
|
5
|
+
|
6
|
+
module MuchRails::CallMethodCallbacks
|
7
|
+
class UnitTests < Assert::Context
|
8
|
+
desc "MuchRails::SaveService"
|
9
|
+
subject{ unit_class }
|
10
|
+
|
11
|
+
let(:unit_class){ MuchRails::CallMethodCallbacks }
|
12
|
+
|
13
|
+
should "include MuchRails::Mixin" do
|
14
|
+
assert_that(subject).includes(MuchRails::Mixin)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class ReceiverTests < UnitTests
|
19
|
+
desc "receiver"
|
20
|
+
subject{ receiver_class }
|
21
|
+
|
22
|
+
let(:receiver_class) do
|
23
|
+
Class.new do
|
24
|
+
include MuchRails::CallMethodCallbacks
|
25
|
+
|
26
|
+
attr_reader :values
|
27
|
+
|
28
|
+
def initialize
|
29
|
+
@values = []
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
let(:proc1){ ->{} }
|
35
|
+
let(:proc2){ ->{} }
|
36
|
+
let(:proc3){ ->{} }
|
37
|
+
|
38
|
+
should have_imeths :before_call, :prepend_before_call, :after_call
|
39
|
+
should have_imeths :prepend_after_call, :around_call, :prepend_around_call
|
40
|
+
should have_imeths :call
|
41
|
+
|
42
|
+
should "be configured as expected" do
|
43
|
+
assert_that(subject).includes(MuchRails::CallMethod)
|
44
|
+
assert_that(subject).includes(MuchRails::Config)
|
45
|
+
end
|
46
|
+
|
47
|
+
should "know its attributes" do
|
48
|
+
# before_callbacks
|
49
|
+
subject.before_call(&proc1)
|
50
|
+
|
51
|
+
assert_that{ subject.before_call(&proc2) }
|
52
|
+
.changes(
|
53
|
+
"subject.much_rails_call_callbacks_config.before_callbacks.dup",
|
54
|
+
from: [proc1],
|
55
|
+
to: [proc1, proc2],
|
56
|
+
)
|
57
|
+
|
58
|
+
assert_that{ subject.prepend_before_call(&proc3) }
|
59
|
+
.changes(
|
60
|
+
"subject.much_rails_call_callbacks_config.before_callbacks.dup",
|
61
|
+
from: [proc1, proc2],
|
62
|
+
to: [proc3, proc1, proc2],
|
63
|
+
)
|
64
|
+
|
65
|
+
# after_callbacks
|
66
|
+
subject.after_call(&proc1)
|
67
|
+
|
68
|
+
assert_that{ subject.after_call(&proc2) }
|
69
|
+
.changes(
|
70
|
+
"subject.much_rails_call_callbacks_config.after_callbacks.dup",
|
71
|
+
from: [proc1],
|
72
|
+
to: [proc1, proc2],
|
73
|
+
)
|
74
|
+
|
75
|
+
assert_that{ subject.prepend_after_call(&proc3) }
|
76
|
+
.changes(
|
77
|
+
"subject.much_rails_call_callbacks_config.after_callbacks.dup",
|
78
|
+
from: [proc1, proc2],
|
79
|
+
to: [proc3, proc1, proc2],
|
80
|
+
)
|
81
|
+
|
82
|
+
# around_callbacks
|
83
|
+
subject.around_call(&proc1)
|
84
|
+
|
85
|
+
assert_that{ subject.around_call(&proc2) }
|
86
|
+
.changes(
|
87
|
+
"subject.much_rails_call_callbacks_config.around_callbacks.dup",
|
88
|
+
from: [proc1],
|
89
|
+
to: [proc1, proc2],
|
90
|
+
)
|
91
|
+
|
92
|
+
assert_that{ subject.prepend_around_call(&proc3) }
|
93
|
+
.changes(
|
94
|
+
"subject.much_rails_call_callbacks_config.around_callbacks.dup",
|
95
|
+
from: [proc1, proc2],
|
96
|
+
to: [proc3, proc1, proc2],
|
97
|
+
)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
class CallMethodTests < ReceiverTests
|
102
|
+
desc "#call"
|
103
|
+
subject{ receiver_class }
|
104
|
+
|
105
|
+
setup do
|
106
|
+
subject.before_call do
|
107
|
+
@values << "before 2"
|
108
|
+
true
|
109
|
+
end
|
110
|
+
subject.prepend_before_call do
|
111
|
+
@values << "before 1"
|
112
|
+
true
|
113
|
+
end
|
114
|
+
subject.around_call do |receiver|
|
115
|
+
@values << "start around 2"
|
116
|
+
receiver.call
|
117
|
+
@values << "end around 2"
|
118
|
+
true
|
119
|
+
end
|
120
|
+
subject.prepend_around_call do |receiver|
|
121
|
+
@values << "start around 1"
|
122
|
+
receiver.call
|
123
|
+
@values << "end around 1"
|
124
|
+
true
|
125
|
+
end
|
126
|
+
subject.after_call do
|
127
|
+
@values << "after 2"
|
128
|
+
true
|
129
|
+
end
|
130
|
+
subject.prepend_after_call do
|
131
|
+
@values << "after 1"
|
132
|
+
true
|
133
|
+
end
|
134
|
+
|
135
|
+
subject.class_eval do
|
136
|
+
def on_call
|
137
|
+
@values << "on call"
|
138
|
+
self
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
should "execute its callbacks" do
|
144
|
+
return_value = subject.call
|
145
|
+
|
146
|
+
assert_that(return_value).is_instance_of(receiver_class)
|
147
|
+
assert_that(return_value.values)
|
148
|
+
.equals([
|
149
|
+
"before 1",
|
150
|
+
"before 2",
|
151
|
+
"start around 1",
|
152
|
+
"start around 2",
|
153
|
+
"on call",
|
154
|
+
"end around 2",
|
155
|
+
"end around 1",
|
156
|
+
"after 1",
|
157
|
+
"after 2",
|
158
|
+
])
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
class MuchRailsCallCallbacksConfigTests < UnitTests
|
163
|
+
desc "unit_class::MuchRailsCallCallbacksConfig"
|
164
|
+
subject{ config_class.new }
|
165
|
+
|
166
|
+
let(:config_class){ unit_class::MuchRailsCallCallbacksConfig }
|
167
|
+
|
168
|
+
should have_accessors :before_callbacks, :after_callbacks, :around_callbacks
|
169
|
+
|
170
|
+
should "know its attribute values" do
|
171
|
+
assert_that(subject.before_callbacks).equals([])
|
172
|
+
assert_that(subject.after_callbacks).equals([])
|
173
|
+
assert_that(subject.around_callbacks).equals([])
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "assert"
|
4
|
+
require "much-rails/call_method"
|
5
|
+
|
6
|
+
module MuchRails::CallMethodTest
|
7
|
+
class UnitTests < Assert::Context
|
8
|
+
desc "MuchRails::CallMethod"
|
9
|
+
subject{ unit_class }
|
10
|
+
|
11
|
+
let(:unit_class){ MuchRails::CallMethod }
|
12
|
+
|
13
|
+
should "include MuchRails::Mixin" do
|
14
|
+
assert_that(subject).includes(MuchRails::Mixin)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class ReceiverTests < UnitTests
|
19
|
+
desc "receiver"
|
20
|
+
subject{ receiver_class }
|
21
|
+
|
22
|
+
setup do
|
23
|
+
Assert.stub_tap(subject, :new) do |new_object|
|
24
|
+
@new_class_method_called = true
|
25
|
+
|
26
|
+
Assert.stub(new_object, :on_call) do
|
27
|
+
@on_call_instance_method_called = true
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
let(:receiver_class) do
|
33
|
+
Class.new do
|
34
|
+
include MuchRails::CallMethod
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
should have_imeths :call
|
39
|
+
|
40
|
+
should "call #new and #call" do
|
41
|
+
subject.call
|
42
|
+
|
43
|
+
assert_that(@new_class_method_called).is_true
|
44
|
+
assert_that(@on_call_instance_method_called).is_true
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
class ReceiverWithOnCallNotImplemented < UnitTests
|
49
|
+
desc "with the #on_call method not implemented"
|
50
|
+
subject{ receiver_class }
|
51
|
+
|
52
|
+
let(:receiver_class) do
|
53
|
+
Class.new do
|
54
|
+
include MuchRails::CallMethod
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
should "not implement its #call method" do
|
59
|
+
assert_that(->{ subject.call }).raises(NotImplementedError)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "assert"
|
4
|
+
require "much-rails/change_action_result"
|
5
|
+
|
6
|
+
class MuchRails::ChangeActionResult
|
7
|
+
class UnitTests < Assert::Context
|
8
|
+
desc "MuchRails::ChangeActionResult"
|
9
|
+
subject{ unit_class }
|
10
|
+
|
11
|
+
let(:unit_class){ MuchRails::ChangeActionResult }
|
12
|
+
|
13
|
+
let(:value1){ "VALUE1" }
|
14
|
+
|
15
|
+
should have_imeths :success, :failure
|
16
|
+
|
17
|
+
should "know its attributes" do
|
18
|
+
result = unit_class.success(value: value1)
|
19
|
+
|
20
|
+
assert_that(result.success?).is_true
|
21
|
+
assert_that(result.failure?).is_false
|
22
|
+
assert_that(result.value).equals(value1)
|
23
|
+
|
24
|
+
result = unit_class.failure(value: value1)
|
25
|
+
|
26
|
+
assert_that(result.success?).is_false
|
27
|
+
assert_that(result.failure?).is_true
|
28
|
+
assert_that(result.value).equals(value1)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class InitTests < UnitTests
|
33
|
+
desc "when init"
|
34
|
+
subject{ unit_class.success(value: value1) }
|
35
|
+
|
36
|
+
let(:save_service_result) do
|
37
|
+
[
|
38
|
+
MuchRails::Result.success,
|
39
|
+
MuchRails::Result.failure,
|
40
|
+
].sample
|
41
|
+
end
|
42
|
+
|
43
|
+
should have_readers :service_result
|
44
|
+
|
45
|
+
should have_imeths :validation_errors, :validation_error_messages
|
46
|
+
should have_imeths :extract_validation_error
|
47
|
+
should have_imeths :any_unextracted_validation_errors?
|
48
|
+
|
49
|
+
should "know its service_result" do
|
50
|
+
service_result = subject.service_result
|
51
|
+
|
52
|
+
assert_that(service_result).is_instance_of(MuchRails::Result)
|
53
|
+
assert_that(service_result.success?).is_true
|
54
|
+
assert_that(service_result.value).equals(value1)
|
55
|
+
assert_that(service_result.validation_errors).equals({})
|
56
|
+
end
|
57
|
+
|
58
|
+
should "raise a TypeError when given a non-MuchRails::Result" do
|
59
|
+
assert_that{ unit_class.new(["INVALID TYPE", nil, -9].sample) }
|
60
|
+
.raises(TypeError)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
class ValidationMethodsTests < UnitTests
|
65
|
+
desc "validation methods"
|
66
|
+
subject do
|
67
|
+
unit_class.failure(validation_errors: {
|
68
|
+
name: ["NAME ERROR"],
|
69
|
+
other: ["OTHER ERROR"],
|
70
|
+
})
|
71
|
+
end
|
72
|
+
|
73
|
+
should "know its attributes" do
|
74
|
+
# validation_errors
|
75
|
+
assert_that(subject.validation_errors)
|
76
|
+
.equals({
|
77
|
+
name: ["NAME ERROR"],
|
78
|
+
other: ["OTHER ERROR"],
|
79
|
+
})
|
80
|
+
|
81
|
+
# validation_error_messages
|
82
|
+
assert_that(subject.validation_error_messages)
|
83
|
+
.equals([
|
84
|
+
"NAME ERROR",
|
85
|
+
"OTHER ERROR",
|
86
|
+
])
|
87
|
+
|
88
|
+
# extract_validation_error
|
89
|
+
assert_that(subject.extract_validation_error(:name))
|
90
|
+
.equals(["NAME ERROR"])
|
91
|
+
assert_that(subject.extract_validation_error(:other))
|
92
|
+
.equals(["OTHER ERROR"])
|
93
|
+
assert_that(subject.validation_errors).is_empty
|
94
|
+
|
95
|
+
# any_unextracted_validation_errors?
|
96
|
+
Assert.stub(subject, :failure?){ true }
|
97
|
+
Assert.stub(subject, :validation_errors){ { name: "NAME ERROR" } }
|
98
|
+
assert_that(subject.any_unextracted_validation_errors?).is_true
|
99
|
+
|
100
|
+
Assert.stub(subject, :failure?){ true }
|
101
|
+
Assert.stub(subject, :validation_errors){ {} }
|
102
|
+
assert_that(subject.any_unextracted_validation_errors?).is_false
|
103
|
+
|
104
|
+
Assert.stub(subject, :failure?){ false }
|
105
|
+
Assert.stub(subject, :validation_errors){ { name: "NAME ERROR" } }
|
106
|
+
assert_that(subject.any_unextracted_validation_errors?).is_false
|
107
|
+
|
108
|
+
Assert.stub(subject, :failure?){ false }
|
109
|
+
Assert.stub(subject, :validation_errors){ {} }
|
110
|
+
assert_that(subject.any_unextracted_validation_errors?).is_false
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|