hoodoo 1.0.2
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 +7 -0
- data/bin/hoodoo +5 -0
- data/lib/hoodoo.rb +27 -0
- data/lib/hoodoo/active.rb +32 -0
- data/lib/hoodoo/active/active_model/uuid_validator.rb +45 -0
- data/lib/hoodoo/active/active_record/base.rb +81 -0
- data/lib/hoodoo/active/active_record/creator.rb +134 -0
- data/lib/hoodoo/active/active_record/dated.rb +343 -0
- data/lib/hoodoo/active/active_record/error_mapping.rb +351 -0
- data/lib/hoodoo/active/active_record/finder.rb +606 -0
- data/lib/hoodoo/active/active_record/search_helper.rb +189 -0
- data/lib/hoodoo/active/active_record/secure.rb +431 -0
- data/lib/hoodoo/active/active_record/support.rb +106 -0
- data/lib/hoodoo/active/active_record/translated.rb +87 -0
- data/lib/hoodoo/active/active_record/uuid.rb +80 -0
- data/lib/hoodoo/active/active_record/writer.rb +321 -0
- data/lib/hoodoo/client.rb +23 -0
- data/lib/hoodoo/client/augmented_array.rb +29 -0
- data/lib/hoodoo/client/augmented_base.rb +168 -0
- data/lib/hoodoo/client/augmented_hash.rb +23 -0
- data/lib/hoodoo/client/client.rb +354 -0
- data/lib/hoodoo/client/endpoint/endpoint.rb +427 -0
- data/lib/hoodoo/client/endpoint/endpoints/amqp.rb +180 -0
- data/lib/hoodoo/client/endpoint/endpoints/auto_session.rb +194 -0
- data/lib/hoodoo/client/endpoint/endpoints/http.rb +203 -0
- data/lib/hoodoo/client/endpoint/endpoints/http_based.rb +367 -0
- data/lib/hoodoo/client/endpoint/endpoints/not_found.rb +59 -0
- data/lib/hoodoo/client/headers.rb +269 -0
- data/lib/hoodoo/communicators.rb +23 -0
- data/lib/hoodoo/communicators/fast.rb +44 -0
- data/lib/hoodoo/communicators/pool.rb +601 -0
- data/lib/hoodoo/communicators/slow.rb +84 -0
- data/lib/hoodoo/data.rb +51 -0
- data/lib/hoodoo/data/resources/caller.rb +39 -0
- data/lib/hoodoo/data/resources/errors.rb +28 -0
- data/lib/hoodoo/data/resources/log.rb +31 -0
- data/lib/hoodoo/data/resources/session.rb +26 -0
- data/lib/hoodoo/data/types/error_primitive.rb +27 -0
- data/lib/hoodoo/data/types/permissions.rb +40 -0
- data/lib/hoodoo/data/types/permissions_defaults.rb +32 -0
- data/lib/hoodoo/data/types/permissions_full.rb +28 -0
- data/lib/hoodoo/data/types/permissions_resources.rb +31 -0
- data/lib/hoodoo/discovery.rb +20 -0
- data/lib/hoodoo/errors.rb +19 -0
- data/lib/hoodoo/errors/error_descriptions.rb +229 -0
- data/lib/hoodoo/errors/errors.rb +322 -0
- data/lib/hoodoo/generator.rb +139 -0
- data/lib/hoodoo/logger.rb +23 -0
- data/lib/hoodoo/logger/fast_writer.rb +27 -0
- data/lib/hoodoo/logger/flattener_mixin.rb +36 -0
- data/lib/hoodoo/logger/logger.rb +387 -0
- data/lib/hoodoo/logger/slow_writer.rb +49 -0
- data/lib/hoodoo/logger/writer_mixin.rb +52 -0
- data/lib/hoodoo/logger/writers/file_writer.rb +45 -0
- data/lib/hoodoo/logger/writers/log_entries_dot_com_writer.rb +64 -0
- data/lib/hoodoo/logger/writers/stream_writer.rb +43 -0
- data/lib/hoodoo/middleware.rb +33 -0
- data/lib/hoodoo/presenters.rb +45 -0
- data/lib/hoodoo/presenters/base.rb +281 -0
- data/lib/hoodoo/presenters/base_dsl.rb +519 -0
- data/lib/hoodoo/presenters/common_resource_fields.rb +31 -0
- data/lib/hoodoo/presenters/embedding.rb +232 -0
- data/lib/hoodoo/presenters/types/array.rb +118 -0
- data/lib/hoodoo/presenters/types/boolean.rb +26 -0
- data/lib/hoodoo/presenters/types/date.rb +26 -0
- data/lib/hoodoo/presenters/types/date_time.rb +26 -0
- data/lib/hoodoo/presenters/types/decimal.rb +47 -0
- data/lib/hoodoo/presenters/types/enum.rb +55 -0
- data/lib/hoodoo/presenters/types/field.rb +158 -0
- data/lib/hoodoo/presenters/types/float.rb +26 -0
- data/lib/hoodoo/presenters/types/hash.rb +361 -0
- data/lib/hoodoo/presenters/types/integer.rb +26 -0
- data/lib/hoodoo/presenters/types/object.rb +117 -0
- data/lib/hoodoo/presenters/types/string.rb +53 -0
- data/lib/hoodoo/presenters/types/tags.rb +24 -0
- data/lib/hoodoo/presenters/types/text.rb +26 -0
- data/lib/hoodoo/presenters/types/uuid.rb +54 -0
- data/lib/hoodoo/services.rb +34 -0
- data/lib/hoodoo/services/discovery/discoverers/by_consul.rb +66 -0
- data/lib/hoodoo/services/discovery/discoverers/by_convention.rb +173 -0
- data/lib/hoodoo/services/discovery/discoverers/by_drb/by_drb.rb +195 -0
- data/lib/hoodoo/services/discovery/discoverers/by_drb/drb_server.rb +166 -0
- data/lib/hoodoo/services/discovery/discoverers/by_drb/drb_server_start.rb +37 -0
- data/lib/hoodoo/services/discovery/discovery.rb +186 -0
- data/lib/hoodoo/services/discovery/results/for_amqp.rb +58 -0
- data/lib/hoodoo/services/discovery/results/for_http.rb +85 -0
- data/lib/hoodoo/services/discovery/results/for_local.rb +85 -0
- data/lib/hoodoo/services/discovery/results/for_remote.rb +57 -0
- data/lib/hoodoo/services/middleware/amqp_log_message.rb +186 -0
- data/lib/hoodoo/services/middleware/amqp_log_writer.rb +119 -0
- data/lib/hoodoo/services/middleware/endpoints/inter_resource_local.rb +130 -0
- data/lib/hoodoo/services/middleware/endpoints/inter_resource_remote.rb +202 -0
- data/lib/hoodoo/services/middleware/exception_reporting/base_reporter.rb +105 -0
- data/lib/hoodoo/services/middleware/exception_reporting/exception_reporting.rb +115 -0
- data/lib/hoodoo/services/middleware/exception_reporting/reporters/airbrake_reporter.rb +64 -0
- data/lib/hoodoo/services/middleware/exception_reporting/reporters/raygun_reporter.rb +63 -0
- data/lib/hoodoo/services/middleware/interaction.rb +127 -0
- data/lib/hoodoo/services/middleware/middleware.rb +2705 -0
- data/lib/hoodoo/services/middleware/rack_monkey_patch.rb +73 -0
- data/lib/hoodoo/services/services/context.rb +153 -0
- data/lib/hoodoo/services/services/implementation.rb +132 -0
- data/lib/hoodoo/services/services/interface.rb +934 -0
- data/lib/hoodoo/services/services/permissions.rb +250 -0
- data/lib/hoodoo/services/services/request.rb +189 -0
- data/lib/hoodoo/services/services/response.rb +316 -0
- data/lib/hoodoo/services/services/service.rb +141 -0
- data/lib/hoodoo/services/services/session.rb +729 -0
- data/lib/hoodoo/utilities.rb +12 -0
- data/lib/hoodoo/utilities/string_inquirer.rb +54 -0
- data/lib/hoodoo/utilities/utilities.rb +380 -0
- data/lib/hoodoo/utilities/uuid.rb +44 -0
- data/lib/hoodoo/version.rb +17 -0
- data/spec/active/active_record/base_spec.rb +57 -0
- data/spec/active/active_record/creator_spec.rb +88 -0
- data/spec/active/active_record/dated_spec.rb +248 -0
- data/spec/active/active_record/error_mapping_spec.rb +360 -0
- data/spec/active/active_record/finder_spec.rb +744 -0
- data/spec/active/active_record/search_helper_spec.rb +384 -0
- data/spec/active/active_record/secure_spec.rb +435 -0
- data/spec/active/active_record/support_spec.rb +225 -0
- data/spec/active/active_record/translated_spec.rb +19 -0
- data/spec/active/active_record/uuid_spec.rb +72 -0
- data/spec/active/active_record/writer_spec.rb +272 -0
- data/spec/alchemy/alchemy-amq.rb +33 -0
- data/spec/client/augmented_array_spec.rb +15 -0
- data/spec/client/augmented_base_spec.rb +50 -0
- data/spec/client/augmented_hash_spec.rb +15 -0
- data/spec/client/client_spec.rb +955 -0
- data/spec/client/endpoint/endpoint_spec.rb +70 -0
- data/spec/client/endpoint/endpoints/amqp_spec.rb +16 -0
- data/spec/client/endpoint/endpoints/auto_session_spec.rb +9 -0
- data/spec/client/endpoint/endpoints/http_based_spec.rb +9 -0
- data/spec/client/endpoint/endpoints/http_spec.rb +103 -0
- data/spec/client/endpoint/endpoints/not_found_spec.rb +35 -0
- data/spec/client/headers_spec.rb +172 -0
- data/spec/communicators/fast_spec.rb +9 -0
- data/spec/communicators/pool_spec.rb +339 -0
- data/spec/communicators/slow_spec.rb +15 -0
- data/spec/data/resources/caller_spec.rb +156 -0
- data/spec/data/resources/errors_spec.rb +22 -0
- data/spec/data/resources/log_spec.rb +20 -0
- data/spec/data/resources/session_spec.rb +15 -0
- data/spec/data/types/error_primitive_spec.rb +15 -0
- data/spec/data/types/permissions_defaults_spec.rb +25 -0
- data/spec/data/types/permissions_full_spec.rb +44 -0
- data/spec/data/types/permissions_resources_spec.rb +34 -0
- data/spec/data/types/permissions_spec.rb +37 -0
- data/spec/errors/error_descriptions_spec.rb +98 -0
- data/spec/errors/errors_spec.rb +346 -0
- data/spec/integration/service_actions_spec.rb +112 -0
- data/spec/logger/fast_writer_spec.rb +18 -0
- data/spec/logger/logger_spec.rb +259 -0
- data/spec/logger/slow_writer_spec.rb +144 -0
- data/spec/logger/writers/file_writer_spec.rb +37 -0
- data/spec/logger/writers/log_entries_dot_com_writer_spec.rb +29 -0
- data/spec/logger/writers/stream_writer_spec.rb +38 -0
- data/spec/presenters/base_dsl_spec.rb +111 -0
- data/spec/presenters/base_spec.rb +871 -0
- data/spec/presenters/common_resource_fields_spec.rb +30 -0
- data/spec/presenters/embedding_spec.rb +87 -0
- data/spec/presenters/types/array_spec.rb +249 -0
- data/spec/presenters/types/boolean_spec.rb +51 -0
- data/spec/presenters/types/date_spec.rb +57 -0
- data/spec/presenters/types/date_time_spec.rb +59 -0
- data/spec/presenters/types/decimal_spec.rb +58 -0
- data/spec/presenters/types/enum_spec.rb +71 -0
- data/spec/presenters/types/field_spec.rb +77 -0
- data/spec/presenters/types/float_spec.rb +50 -0
- data/spec/presenters/types/hash_spec.rb +1069 -0
- data/spec/presenters/types/integer_spec.rb +50 -0
- data/spec/presenters/types/object_spec.rb +177 -0
- data/spec/presenters/types/string_spec.rb +65 -0
- data/spec/presenters/types/tags_spec.rb +56 -0
- data/spec/presenters/types/text_spec.rb +50 -0
- data/spec/presenters/types/uuid_spec.rb +46 -0
- data/spec/presenters/walk_spec.rb +198 -0
- data/spec/services/discovery/discoverers/by_consul_spec.rb +29 -0
- data/spec/services/discovery/discoverers/by_convention_spec.rb +67 -0
- data/spec/services/discovery/discoverers/by_drb/by_drb_spec.rb +80 -0
- data/spec/services/discovery/discoverers/by_drb/drb_server_spec.rb +205 -0
- data/spec/services/discovery/discovery_spec.rb +73 -0
- data/spec/services/discovery/results/for_amqp_spec.rb +17 -0
- data/spec/services/discovery/results/for_http_spec.rb +37 -0
- data/spec/services/discovery/results/for_local_spec.rb +21 -0
- data/spec/services/discovery/results/for_remote_spec.rb +15 -0
- data/spec/services/middleware/amqp_log_message_spec.rb +60 -0
- data/spec/services/middleware/amqp_log_writer_spec.rb +95 -0
- data/spec/services/middleware/endpoints/inter_resource_local_spec.rb +9 -0
- data/spec/services/middleware/endpoints/inter_resource_remote_spec.rb +9 -0
- data/spec/services/middleware/exception_reporting/base_reporter_spec.rb +16 -0
- data/spec/services/middleware/exception_reporting/exception_reporting_spec.rb +92 -0
- data/spec/services/middleware/exception_reporting/reporters/airbrake_reporter_spec.rb +24 -0
- data/spec/services/middleware/exception_reporting/reporters/raygun_reporter_spec.rb +23 -0
- data/spec/services/middleware/middleware_cors_spec.rb +93 -0
- data/spec/services/middleware/middleware_create_update_spec.rb +489 -0
- data/spec/services/middleware/middleware_dated_at_spec.rb +186 -0
- data/spec/services/middleware/middleware_exotic_communication_spec.rb +560 -0
- data/spec/services/middleware/middleware_logging_spec.rb +356 -0
- data/spec/services/middleware/middleware_multi_local_spec.rb +1094 -0
- data/spec/services/middleware/middleware_multi_remote_spec.rb +1440 -0
- data/spec/services/middleware/middleware_permissions_spec.rb +1014 -0
- data/spec/services/middleware/middleware_public_spec.rb +238 -0
- data/spec/services/middleware/middleware_spec.rb +1569 -0
- data/spec/services/middleware/string_inquirer_spec.rb +30 -0
- data/spec/services/services/application_spec.rb +74 -0
- data/spec/services/services/context_spec.rb +48 -0
- data/spec/services/services/implementation_spec.rb +45 -0
- data/spec/services/services/interface_spec.rb +262 -0
- data/spec/services/services/permissions_spec.rb +249 -0
- data/spec/services/services/request_spec.rb +95 -0
- data/spec/services/services/response_spec.rb +250 -0
- data/spec/services/services/session_spec.rb +432 -0
- data/spec/spec_helper.rb +298 -0
- data/spec/utilities/utilities_spec.rb +537 -0
- data/spec/utilities/uuid_spec.rb +20 -0
- metadata +615 -0
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hoodoo::Presenters::Integer do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@inst = Hoodoo::Presenters::Integer.new('one',:required => false)
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '#validate' do
|
10
|
+
it 'should return [] when valid integer' do
|
11
|
+
expect(@inst.validate(12).errors).to eq([])
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should return correct error when data is not a integer' do
|
15
|
+
errors = @inst.validate('adskncasc')
|
16
|
+
|
17
|
+
err = [ {'code'=>"generic.invalid_integer", 'message'=>"Field `one` is an invalid integer", 'reference'=>"one"}]
|
18
|
+
expect(errors.errors).to eq(err)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should not return error when not required and absent' do
|
22
|
+
expect(@inst.validate(nil).errors).to eq([])
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should return error when required and absent' do
|
26
|
+
@inst.required = true
|
27
|
+
expect(@inst.validate(nil).errors).to eq([
|
28
|
+
{'code'=>"generic.required_field_missing", 'message'=>"Field `one` is required", 'reference'=>"one"}
|
29
|
+
])
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should return correct error with non integer types' do
|
33
|
+
err = [ {'code'=>"generic.invalid_integer", 'message'=>"Field `one` is an invalid integer", 'reference'=>"one"}]
|
34
|
+
|
35
|
+
expect(@inst.validate('asckn').errors).to eq(err)
|
36
|
+
expect(@inst.validate(34534.234).errors).to eq(err)
|
37
|
+
expect(@inst.validate(true).errors).to eq(err)
|
38
|
+
expect(@inst.validate({}).errors).to eq(err)
|
39
|
+
expect(@inst.validate([]).errors).to eq(err)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should return correct error with path' do
|
43
|
+
errors = @inst.validate('scdacs','ordinary')
|
44
|
+
expect(errors.errors).to eq([
|
45
|
+
{'code'=>"generic.invalid_integer", 'message'=>"Field `ordinary.one` is an invalid integer", 'reference'=>"ordinary.one"}
|
46
|
+
])
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -0,0 +1,177 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hoodoo::Presenters::Object do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@inst = Hoodoo::Presenters::Object.new('one',:required => false)
|
7
|
+
|
8
|
+
class TestPresenterObject < Hoodoo::Presenters::Base
|
9
|
+
|
10
|
+
schema do
|
11
|
+
# Intentional mix of strings and symbols in default object
|
12
|
+
object :a_default_object, :default => { :an_integer => 42, 'some_text' => 'hello' } do
|
13
|
+
integer :an_integer
|
14
|
+
text :some_text
|
15
|
+
end
|
16
|
+
object :an_object_with_entry_defaults do
|
17
|
+
integer :an_integer, :default => 42
|
18
|
+
text :some_text
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#validate' do
|
26
|
+
it 'should return [] when valid object' do
|
27
|
+
expect(@inst.validate({}).errors).to eq([])
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should return correct error when data is not an object' do
|
31
|
+
errors = @inst.validate(2347234)
|
32
|
+
|
33
|
+
err = [{'code'=>"generic.invalid_object", 'message'=>"Field `one` is an invalid object", 'reference'=>"one"}]
|
34
|
+
expect(errors.errors).to eq(err)
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should not return error when not required and absent' do
|
38
|
+
expect(@inst.validate(nil).errors).to eq([])
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should return error when required and absent' do
|
42
|
+
@inst.required = true
|
43
|
+
expect(@inst.validate(nil).errors).to eq([
|
44
|
+
{'code'=>"generic.required_field_missing", 'message'=>"Field `one` is required", 'reference'=>"one"}
|
45
|
+
])
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should return correct error with non object types' do
|
49
|
+
err = [{'code'=>"generic.invalid_object", 'message'=>"Field `one` is an invalid object", 'reference'=>"one"}]
|
50
|
+
|
51
|
+
expect(@inst.validate('asckn').errors).to eq(err)
|
52
|
+
expect(@inst.validate(34534).errors).to eq(err)
|
53
|
+
expect(@inst.validate(2123.23).errors).to eq(err)
|
54
|
+
expect(@inst.validate(true).errors).to eq(err)
|
55
|
+
expect(@inst.validate([]).errors).to eq(err)
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'should return correct error with path' do
|
59
|
+
errors = @inst.validate('scdacs','ordinary')
|
60
|
+
expect(errors.errors).to eq([
|
61
|
+
{'code'=>"generic.invalid_object", 'message'=>"Field `ordinary.one` is an invalid object", 'reference'=>"ordinary.one"}
|
62
|
+
])
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
describe '#render' do
|
68
|
+
it 'renders correctly with whole-object default (1)' do
|
69
|
+
data = nil
|
70
|
+
|
71
|
+
expect(TestPresenterObject.render(data)).to eq({
|
72
|
+
'a_default_object' => {
|
73
|
+
'an_integer' => 42,
|
74
|
+
'some_text' => 'hello'
|
75
|
+
}
|
76
|
+
})
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'renders correctly with whole-object default (2)' do
|
80
|
+
data = {}
|
81
|
+
|
82
|
+
expect(TestPresenterObject.render(data)).to eq({
|
83
|
+
'a_default_object' => {
|
84
|
+
'an_integer' => 42,
|
85
|
+
'some_text' => 'hello'
|
86
|
+
}
|
87
|
+
})
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'must not override a provided object, even if nil' do
|
91
|
+
data = { 'a_default_object' => nil }
|
92
|
+
expect(TestPresenterObject.render(data)).to eq(data)
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'must not override a provided object, even if "empty"' do
|
96
|
+
data = { 'a_default_object' => {} }
|
97
|
+
expect(TestPresenterObject.render(data)).to eq(data)
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'provides default values for fields, where provided (1)' do
|
101
|
+
data = {
|
102
|
+
'a_default_object' => {
|
103
|
+
'an_integer' => 20
|
104
|
+
},
|
105
|
+
'an_object_with_entry_defaults' => {
|
106
|
+
'some_text' => 'hello'
|
107
|
+
}
|
108
|
+
}
|
109
|
+
|
110
|
+
expect(TestPresenterObject.render(data)).to eq({
|
111
|
+
'a_default_object' => {
|
112
|
+
'an_integer' => 20
|
113
|
+
},
|
114
|
+
'an_object_with_entry_defaults' => {
|
115
|
+
'an_integer' => 42,
|
116
|
+
'some_text' => 'hello'
|
117
|
+
}
|
118
|
+
})
|
119
|
+
end
|
120
|
+
|
121
|
+
it 'must not overwrite explicit object nil with object-with-field-defaults' do
|
122
|
+
data = {
|
123
|
+
'a_default_object' => {
|
124
|
+
'an_integer' => 20
|
125
|
+
},
|
126
|
+
'an_object_with_entry_defaults' => nil
|
127
|
+
}
|
128
|
+
|
129
|
+
expect(TestPresenterObject.render(data)).to eq(data)
|
130
|
+
end
|
131
|
+
|
132
|
+
it 'adds fields with defaults to empty objects' do
|
133
|
+
data = {
|
134
|
+
'a_default_object' => {
|
135
|
+
'an_integer' => 59
|
136
|
+
},
|
137
|
+
'an_object_with_entry_defaults' => {}
|
138
|
+
}
|
139
|
+
|
140
|
+
expect(TestPresenterObject.render(data)).to eq({
|
141
|
+
'a_default_object' => {
|
142
|
+
'an_integer' => 59
|
143
|
+
},
|
144
|
+
'an_object_with_entry_defaults' => {
|
145
|
+
'an_integer' => 42
|
146
|
+
}
|
147
|
+
})
|
148
|
+
end
|
149
|
+
|
150
|
+
it 'must not overwrite explicit field nil with field defaults' do
|
151
|
+
data = {
|
152
|
+
'a_default_object' => {
|
153
|
+
'an_integer' => 20
|
154
|
+
},
|
155
|
+
'an_object_with_entry_defaults' => {
|
156
|
+
'an_integer' => nil
|
157
|
+
}
|
158
|
+
}
|
159
|
+
|
160
|
+
expect(TestPresenterObject.render(data)).to eq(data)
|
161
|
+
end
|
162
|
+
|
163
|
+
it 'must not overwrite explicit field value with field defaults' do
|
164
|
+
data = {
|
165
|
+
'a_default_object' => {
|
166
|
+
'an_integer' => 20
|
167
|
+
},
|
168
|
+
'an_object_with_entry_defaults' => {
|
169
|
+
'an_integer' => 21
|
170
|
+
}
|
171
|
+
}
|
172
|
+
|
173
|
+
expect(TestPresenterObject.render(data)).to eq(data)
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hoodoo::Presenters::String do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@inst = Hoodoo::Presenters::String.new('one',:required => false, :length => 10)
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '#initialize' do
|
10
|
+
it 'should raise an error if length is not defined' do
|
11
|
+
expect {
|
12
|
+
Hoodoo::Presenters::String.new('one',:required => false)
|
13
|
+
}.to raise_error(ArgumentError)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#validate' do
|
18
|
+
it 'should return [] when valid string' do
|
19
|
+
expect(@inst.validate('ascinas').errors).to eq([])
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should return correct error when data is not a string' do
|
23
|
+
errors = @inst.validate(23424)
|
24
|
+
|
25
|
+
err = [ {'code'=>"generic.invalid_string", 'message'=>"Field `one` is an invalid string", 'reference'=>"one"}]
|
26
|
+
expect(errors.errors).to eq(err)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should not return error when not required and absent' do
|
30
|
+
expect(@inst.validate(nil).errors).to eq([])
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should return error when required and absent' do
|
34
|
+
@inst.required = true
|
35
|
+
expect(@inst.validate(nil).errors).to eq([
|
36
|
+
{'code'=>"generic.required_field_missing", 'message'=>"Field `one` is required", 'reference'=>"one"}
|
37
|
+
])
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'should return correct error with non string types' do
|
41
|
+
err = [ {'code'=>"generic.invalid_string", 'message'=>"Field `one` is an invalid string", 'reference'=>"one"}]
|
42
|
+
|
43
|
+
expect(@inst.validate(34534).errors).to eq(err)
|
44
|
+
expect(@inst.validate(234234.44).errors).to eq(err)
|
45
|
+
expect(@inst.validate(true).errors).to eq(err)
|
46
|
+
expect(@inst.validate({}).errors).to eq(err)
|
47
|
+
expect(@inst.validate([]).errors).to eq(err)
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'should return correct error with path' do
|
51
|
+
errors = @inst.validate(234234,'ordinary')
|
52
|
+
expect(errors.errors).to eq([
|
53
|
+
{'code'=>"generic.invalid_string", 'message'=>"Field `ordinary.one` is an invalid string", 'reference'=>"ordinary.one"}
|
54
|
+
])
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'should return correct error when length is exceeded' do
|
58
|
+
errors = @inst.validate('12345678901')
|
59
|
+
expect(errors.errors).to eq([
|
60
|
+
{'code'=>"generic.invalid_string", 'message'=>"Field `one` is longer than maximum length `10`", 'reference'=>"one"}
|
61
|
+
])
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hoodoo::Presenters::Tags do
|
4
|
+
|
5
|
+
# This is just a copy of the Hoodoo::Presenters::Text tests, which is in
|
6
|
+
# turn a copy of Hoodoo::Presenters::String with minor changes (at the
|
7
|
+
# time of writing). The intent is to provide coverage for potential changes
|
8
|
+
# to the tag implementation in future, even though right now it's just a
|
9
|
+
# direct inheritance from Text with no changes.
|
10
|
+
|
11
|
+
before do
|
12
|
+
@inst = Hoodoo::Presenters::Tags.new('one',:required => false)
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#validate' do
|
16
|
+
it 'should return no errors when valid string' do
|
17
|
+
expect(@inst.validate('ascinas').errors).to eq([])
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should return correct error when data is not a string' do
|
21
|
+
errors = @inst.validate(23424)
|
22
|
+
|
23
|
+
err = [ {'code'=>"generic.invalid_string", 'message'=>"Field `one` is an invalid string", 'reference'=>"one"}]
|
24
|
+
expect(errors.errors).to eq(err)
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should not return error when not required and absent' do
|
28
|
+
expect(@inst.validate(nil).errors).to eq([])
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should return error when required and absent' do
|
32
|
+
@inst.required = true
|
33
|
+
expect(@inst.validate(nil).errors).to eq([
|
34
|
+
{'code'=>"generic.required_field_missing", 'message'=>"Field `one` is required", 'reference'=>"one"}
|
35
|
+
])
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should return correct error with non string types' do
|
39
|
+
err = [ {'code'=>"generic.invalid_string", 'message'=>"Field `one` is an invalid string", 'reference'=>"one"}]
|
40
|
+
|
41
|
+
expect(@inst.validate(34534).errors).to eq(err)
|
42
|
+
expect(@inst.validate(234234.44).errors).to eq(err)
|
43
|
+
expect(@inst.validate(true).errors).to eq(err)
|
44
|
+
expect(@inst.validate({}).errors).to eq(err)
|
45
|
+
expect(@inst.validate([]).errors).to eq(err)
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should return correct error with path' do
|
49
|
+
errors = @inst.validate(234234,'ordinary')
|
50
|
+
expect(errors.errors).to eq([
|
51
|
+
{'code'=>"generic.invalid_string", 'message'=>"Field `ordinary.one` is an invalid string", 'reference'=>"ordinary.one"}
|
52
|
+
])
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hoodoo::Presenters::Text do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@inst = Hoodoo::Presenters::Text.new('one',:required => false)
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '#validate' do
|
10
|
+
it 'should return no errors when valid string' do
|
11
|
+
expect(@inst.validate('ascinas').errors).to eq([])
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should return correct error when data is not a string' do
|
15
|
+
errors = @inst.validate(23424)
|
16
|
+
|
17
|
+
err = [ {'code'=>"generic.invalid_string", 'message'=>"Field `one` is an invalid string", 'reference'=>"one"}]
|
18
|
+
expect(errors.errors).to eq(err)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should not return error when not required and absent' do
|
22
|
+
expect(@inst.validate(nil).errors).to eq([])
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should return error when required and absent' do
|
26
|
+
@inst.required = true
|
27
|
+
expect(@inst.validate(nil).errors).to eq([
|
28
|
+
{'code'=>"generic.required_field_missing", 'message'=>"Field `one` is required", 'reference'=>"one"}
|
29
|
+
])
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should return correct error with non string types' do
|
33
|
+
err = [ {'code'=>"generic.invalid_string", 'message'=>"Field `one` is an invalid string", 'reference'=>"one"}]
|
34
|
+
|
35
|
+
expect(@inst.validate(34534).errors).to eq(err)
|
36
|
+
expect(@inst.validate(234234.44).errors).to eq(err)
|
37
|
+
expect(@inst.validate(true).errors).to eq(err)
|
38
|
+
expect(@inst.validate({}).errors).to eq(err)
|
39
|
+
expect(@inst.validate([]).errors).to eq(err)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should return correct error with path' do
|
43
|
+
errors = @inst.validate(234234,'ordinary')
|
44
|
+
expect(errors.errors).to eq([
|
45
|
+
{'code'=>"generic.invalid_string", 'message'=>"Field `ordinary.one` is an invalid string", 'reference'=>"ordinary.one"}
|
46
|
+
])
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hoodoo::Presenters::UUID do
|
4
|
+
|
5
|
+
describe '#validate' do
|
6
|
+
it 'should return no errors when valid UUID' do
|
7
|
+
expect(Hoodoo::Presenters::UUID.new('one').validate(Hoodoo::UUID.generate()).errors).to eq([])
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should return correct error when data is not a UUID-like string (1)' do
|
11
|
+
errors = Hoodoo::Presenters::UUID.new('one').validate('1234')
|
12
|
+
|
13
|
+
err = [ {'code'=>"generic.invalid_uuid", 'message'=>"Field `one` is an invalid UUID", 'reference'=>"one"}]
|
14
|
+
expect(errors.errors).to eq(err)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should return correct error when data is not a UUID-like string (2)' do
|
18
|
+
errors = Hoodoo::Presenters::UUID.new('one').validate('01234567890123456789012345678901z')
|
19
|
+
|
20
|
+
err = [ {'code'=>"generic.invalid_uuid", 'message'=>"Field `one` is an invalid UUID", 'reference'=>"one"}]
|
21
|
+
expect(errors.errors).to eq(err)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should return correct error when data is not a UUID-like string (3)' do
|
25
|
+
errors = Hoodoo::Presenters::UUID.new('one').validate('3ba258c0-4ce3-0132-9862-28373700b71c')
|
26
|
+
|
27
|
+
err = [ {'code'=>"generic.invalid_uuid", 'message'=>"Field `one` is an invalid UUID", 'reference'=>"one"}]
|
28
|
+
expect(errors.errors).to eq(err)
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should return correct error when data is not even a string (1)' do
|
32
|
+
errors = Hoodoo::Presenters::UUID.new('one').validate(1234)
|
33
|
+
|
34
|
+
err = [ {'code'=>"generic.invalid_uuid", 'message'=>"Field `one` is an invalid UUID", 'reference'=>"one"}]
|
35
|
+
expect(errors.errors).to eq(err)
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should return correct error when data is not even a string (2)' do
|
39
|
+
errors = Hoodoo::Presenters::UUID.new('one').validate(Hoodoo::UUID.generate().to_sym)
|
40
|
+
|
41
|
+
err = [ {'code'=>"generic.invalid_uuid", 'message'=>"Field `one` is an invalid UUID", 'reference'=>"one"}]
|
42
|
+
expect(errors.errors).to eq(err)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|