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,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hoodoo::Communicators::Slow do
|
4
|
+
it 'complains if #communicate is called directly' do
|
5
|
+
expect {
|
6
|
+
Hoodoo::Communicators::Slow.new.communicate( {} )
|
7
|
+
}.to raise_error( RuntimeError )
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'does not complain if #dropped is called directly' do
|
11
|
+
expect {
|
12
|
+
Hoodoo::Communicators::Slow.new.dropped( 1 )
|
13
|
+
}.to_not raise_error()
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,156 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hoodoo::Data::Resources::Caller do
|
4
|
+
it 'should match schema expectations' do
|
5
|
+
schema = described_class.get_schema()
|
6
|
+
|
7
|
+
expect(schema.is_internationalised?()).to eq(true)
|
8
|
+
|
9
|
+
expect(schema.properties.count).to eq(5)
|
10
|
+
|
11
|
+
expect(schema.properties['authentication_secret']).to be_a(Hoodoo::Presenters::Text)
|
12
|
+
expect(schema.properties['name']).to be_a(Hoodoo::Presenters::Text)
|
13
|
+
expect(schema.properties['identity']).to be_a(Hoodoo::Presenters::Hash)
|
14
|
+
expect(schema.properties['permissions']).to be_a(Hoodoo::Presenters::Object)
|
15
|
+
expect(schema.properties['permissions'].properties['resources']).to be_a(Hoodoo::Presenters::Hash)
|
16
|
+
expect(schema.properties['identity']).to be_a(Hoodoo::Presenters::Hash)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should allow arbitrary identity values' do
|
20
|
+
result = described_class.validate(
|
21
|
+
{
|
22
|
+
"identity" => {
|
23
|
+
"array" => [],
|
24
|
+
"integer" => 1,
|
25
|
+
"string" => "thisisastring",
|
26
|
+
"object" => { "key" => "value" }
|
27
|
+
},
|
28
|
+
"permissions" => {
|
29
|
+
"resources" => {}
|
30
|
+
},
|
31
|
+
"scoping" => {}
|
32
|
+
},
|
33
|
+
false
|
34
|
+
)
|
35
|
+
|
36
|
+
expect(result.errors).to eq([])
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'should allow arbitrary scoping values' do
|
40
|
+
result = described_class.validate(
|
41
|
+
{
|
42
|
+
"identity" => {},
|
43
|
+
"permissions" => {
|
44
|
+
"resources" => {}
|
45
|
+
},
|
46
|
+
"scoping" => {
|
47
|
+
"array" => [],
|
48
|
+
"integer" => 1,
|
49
|
+
"string" => "thisisastring",
|
50
|
+
"object" => { "key" => "value" }
|
51
|
+
}
|
52
|
+
},
|
53
|
+
false
|
54
|
+
)
|
55
|
+
|
56
|
+
expect(result.errors).to eq([])
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'should be renderable with all data' do
|
60
|
+
id = Hoodoo::UUID.generate
|
61
|
+
created_at = Time.now
|
62
|
+
json = described_class.render(
|
63
|
+
{
|
64
|
+
"name" => "Test Caller",
|
65
|
+
"identity" => {
|
66
|
+
"array" => [],
|
67
|
+
"integer" => 1,
|
68
|
+
"string" => "thisisastring",
|
69
|
+
"object" => { "key" => "value" }
|
70
|
+
},
|
71
|
+
"permissions" => {
|
72
|
+
"resources" => {
|
73
|
+
"Caller" => {
|
74
|
+
"else" => "allow"
|
75
|
+
},
|
76
|
+
"Member" => {
|
77
|
+
"actions" => {
|
78
|
+
"list" => "allow"
|
79
|
+
},
|
80
|
+
"else" => "deny"
|
81
|
+
}
|
82
|
+
}
|
83
|
+
},
|
84
|
+
"scoping" => {
|
85
|
+
"array" => [],
|
86
|
+
"integer" => 1,
|
87
|
+
"string" => "thisisastring",
|
88
|
+
"object" => { "key" => "value" }
|
89
|
+
}
|
90
|
+
},
|
91
|
+
id,
|
92
|
+
created_at
|
93
|
+
)
|
94
|
+
|
95
|
+
expect(json).to eq(
|
96
|
+
{
|
97
|
+
'id' => id,
|
98
|
+
'created_at' => created_at.utc.iso8601,
|
99
|
+
'kind' => 'Caller',
|
100
|
+
"name" => "Test Caller",
|
101
|
+
"identity" => {
|
102
|
+
"array" => [],
|
103
|
+
"integer" => 1,
|
104
|
+
"string" => "thisisastring",
|
105
|
+
"object" => { "key" => "value" }
|
106
|
+
},
|
107
|
+
"permissions" => {
|
108
|
+
"resources" => {
|
109
|
+
"Caller" => {
|
110
|
+
"else" => "allow"
|
111
|
+
},
|
112
|
+
"Member" => {
|
113
|
+
"actions" => {
|
114
|
+
"list" => "allow"
|
115
|
+
},
|
116
|
+
"else" => "deny"
|
117
|
+
}
|
118
|
+
}
|
119
|
+
},
|
120
|
+
"scoping" => {
|
121
|
+
"array" => [],
|
122
|
+
"integer" => 1,
|
123
|
+
"string" => "thisisastring",
|
124
|
+
"object" => { "key" => "value" }
|
125
|
+
},
|
126
|
+
"language" => "en-nz"
|
127
|
+
}
|
128
|
+
)
|
129
|
+
end
|
130
|
+
|
131
|
+
it 'should be renderable with minimal data' do
|
132
|
+
id = Hoodoo::UUID.generate
|
133
|
+
created_at = Time.now
|
134
|
+
json = described_class.render(
|
135
|
+
{
|
136
|
+
"identity" => {},
|
137
|
+
"permissions" => { "resources" => {} },
|
138
|
+
"scoping" => {}
|
139
|
+
},
|
140
|
+
id,
|
141
|
+
created_at
|
142
|
+
)
|
143
|
+
|
144
|
+
expect(json).to eq(
|
145
|
+
{
|
146
|
+
'id' => id,
|
147
|
+
'created_at' => created_at.utc.iso8601,
|
148
|
+
'kind' => 'Caller',
|
149
|
+
"identity" => {},
|
150
|
+
"permissions" => { "resources" => {} },
|
151
|
+
"scoping" => {},
|
152
|
+
"language" => "en-nz"
|
153
|
+
}
|
154
|
+
)
|
155
|
+
end
|
156
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hoodoo::Data::Resources::Errors do
|
4
|
+
it 'should match schema expectations' do
|
5
|
+
schema = described_class.get_schema()
|
6
|
+
|
7
|
+
expect(schema.is_internationalised?()).to eq(false)
|
8
|
+
|
9
|
+
expect(schema.properties.count).to eq(2)
|
10
|
+
|
11
|
+
expect(schema.properties['interaction_id']).to be_a(Hoodoo::Presenters::UUID)
|
12
|
+
expect(schema.properties['interaction_id'].required).to eq(false)
|
13
|
+
|
14
|
+
expect(schema.properties['errors']).to be_a(Hoodoo::Presenters::Array)
|
15
|
+
expect(schema.properties['errors'].required).to eq(true)
|
16
|
+
|
17
|
+
expect(schema.properties['errors'].properties.count).to eq(3)
|
18
|
+
expect(schema.properties['errors'].properties['code']).to be_a(Hoodoo::Presenters::Text)
|
19
|
+
expect(schema.properties['errors'].properties['message']).to be_a(Hoodoo::Presenters::Text)
|
20
|
+
expect(schema.properties['errors'].properties['reference']).to be_a(Hoodoo::Presenters::Text)
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hoodoo::Data::Resources::Log do
|
4
|
+
it 'should match schema expectations' do
|
5
|
+
schema = described_class.get_schema()
|
6
|
+
|
7
|
+
expect(schema.is_internationalised?()).to eq(false)
|
8
|
+
expect(schema.properties.count).to eq(5)
|
9
|
+
|
10
|
+
expect(schema.properties['level']).to be_a(Hoodoo::Presenters::Text)
|
11
|
+
expect(schema.properties['level'].required).to eq(true)
|
12
|
+
expect(schema.properties['component']).to be_a(Hoodoo::Presenters::Text)
|
13
|
+
expect(schema.properties['component'].required).to eq(true)
|
14
|
+
expect(schema.properties['code']).to be_a(Hoodoo::Presenters::Text)
|
15
|
+
expect(schema.properties['code'].required).to eq(true)
|
16
|
+
|
17
|
+
expect(schema.properties['interaction_id']).to be_a(Hoodoo::Presenters::UUID)
|
18
|
+
expect(schema.properties['data']).to be_a(Hoodoo::Presenters::Hash)
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hoodoo::Data::Resources::Session do
|
4
|
+
it 'should match schema expectations' do
|
5
|
+
schema = described_class.get_schema()
|
6
|
+
|
7
|
+
expect(schema.is_internationalised?()).to eq(false)
|
8
|
+
|
9
|
+
expect(schema.properties.count).to eq(2)
|
10
|
+
|
11
|
+
expect(schema.properties['caller_id']).to be_a(Hoodoo::Presenters::UUID)
|
12
|
+
expect(schema.properties['caller_id'].resource).to eq(:Caller)
|
13
|
+
expect(schema.properties['expires_at']).to be_a(Hoodoo::Presenters::DateTime)
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hoodoo::Data::Types::ErrorPrimitive do
|
4
|
+
it 'should match schema expectations' do
|
5
|
+
schema = described_class.get_schema()
|
6
|
+
|
7
|
+
expect(schema.is_internationalised?()).to eq(false)
|
8
|
+
|
9
|
+
expect(schema.properties.count).to eq(3)
|
10
|
+
|
11
|
+
expect(schema.properties['code']).to be_a(Hoodoo::Presenters::Text)
|
12
|
+
expect(schema.properties['message']).to be_a(Hoodoo::Presenters::Text)
|
13
|
+
expect(schema.properties['reference']).to be_a(Hoodoo::Presenters::Text)
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hoodoo::Data::Types::PermissionsDefaults do
|
4
|
+
it 'should match schema expectations' do
|
5
|
+
|
6
|
+
# List of permitted policies
|
7
|
+
policies = ['allow', 'deny', 'ask']
|
8
|
+
|
9
|
+
schema = described_class.get_schema()
|
10
|
+
|
11
|
+
expect(schema.is_internationalised?()).to eq(false)
|
12
|
+
|
13
|
+
expect(schema.properties.count).to eq(1)
|
14
|
+
|
15
|
+
# Resources hash
|
16
|
+
|
17
|
+
expect(schema.properties['default']).to be_a(Hoodoo::Presenters::Object)
|
18
|
+
expect(schema.properties['default'].default).to eq({'else'=>'deny'})
|
19
|
+
expect(schema.properties['default'].properties.count).to eq(2)
|
20
|
+
|
21
|
+
expect(schema.properties['default'].properties['actions']).to be_a(Hoodoo::Presenters::Object)
|
22
|
+
expect(schema.properties['default'].properties['else']).to be_a(Hoodoo::Presenters::Enum)
|
23
|
+
expect(schema.properties['default'].properties['else'].from).to match_array(policies)
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hoodoo::Data::Types::PermissionsFull do
|
4
|
+
it 'should match schema expectations' do
|
5
|
+
|
6
|
+
schema = described_class.get_schema()
|
7
|
+
|
8
|
+
expect(schema.is_internationalised?()).to eq(false)
|
9
|
+
|
10
|
+
expect(schema.properties.count).to eq(2)
|
11
|
+
|
12
|
+
# Resources hash
|
13
|
+
expect(schema.properties['resources']).to be_a(Hoodoo::Presenters::Hash)
|
14
|
+
expect(schema.properties['resources'].properties.count).to eq(2)
|
15
|
+
|
16
|
+
# Default hash
|
17
|
+
expect(schema.properties['default']).to be_a(Hoodoo::Presenters::Object)
|
18
|
+
expect(schema.properties['default'].properties.count).to eq(2)
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should accept a valid hash' do
|
23
|
+
|
24
|
+
errors = described_class.validate({
|
25
|
+
'resources' => {
|
26
|
+
'member' => {
|
27
|
+
'actions' => {
|
28
|
+
'list' => 'allow',
|
29
|
+
'show' => 'ask'
|
30
|
+
},
|
31
|
+
'else' => 'deny'
|
32
|
+
}
|
33
|
+
},
|
34
|
+
'default' => {
|
35
|
+
'actions' => {
|
36
|
+
'show' => 'allow'
|
37
|
+
},
|
38
|
+
'else' => 'deny'
|
39
|
+
}
|
40
|
+
})
|
41
|
+
expect(errors.has_errors?).to be_falsey
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hoodoo::Data::Types::PermissionsResources do
|
4
|
+
it 'should match schema expectations' do
|
5
|
+
|
6
|
+
schema = described_class.get_schema()
|
7
|
+
|
8
|
+
expect(schema.is_internationalised?()).to eq(false)
|
9
|
+
|
10
|
+
expect(schema.properties.count).to eq(1)
|
11
|
+
|
12
|
+
# Resources hash
|
13
|
+
expect(schema.properties['resources']).to be_a(Hoodoo::Presenters::Hash)
|
14
|
+
expect(schema.properties['resources'].properties.count).to eq(2)
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should accept a valid hash' do
|
19
|
+
|
20
|
+
errors = described_class.validate({
|
21
|
+
'resources' => {
|
22
|
+
'member' => {
|
23
|
+
'actions' => {
|
24
|
+
'list' => 'allow',
|
25
|
+
'show' => 'ask'
|
26
|
+
},
|
27
|
+
'else' => 'deny'
|
28
|
+
}
|
29
|
+
}
|
30
|
+
})
|
31
|
+
expect(errors.has_errors?).to be_falsey
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hoodoo::Data::Types::Permissions do
|
4
|
+
it 'should match schema expectations' do
|
5
|
+
|
6
|
+
# List of permitted policies
|
7
|
+
policies = ['allow', 'deny', 'ask']
|
8
|
+
|
9
|
+
schema = described_class.get_schema()
|
10
|
+
|
11
|
+
expect(schema.is_internationalised?()).to eq(false)
|
12
|
+
|
13
|
+
expect(schema.properties.count).to eq(2)
|
14
|
+
|
15
|
+
# Resources hash
|
16
|
+
|
17
|
+
expect(schema.properties['actions']).to be_a(Hoodoo::Presenters::Object)
|
18
|
+
expect(schema.properties['actions'].properties.count).to eq(5)
|
19
|
+
|
20
|
+
expect(schema.properties['actions'].properties['show']).to be_a(Hoodoo::Presenters::Enum)
|
21
|
+
expect(schema.properties['actions'].properties['list']).to be_a(Hoodoo::Presenters::Enum)
|
22
|
+
expect(schema.properties['actions'].properties['create']).to be_a(Hoodoo::Presenters::Enum)
|
23
|
+
expect(schema.properties['actions'].properties['update']).to be_a(Hoodoo::Presenters::Enum)
|
24
|
+
expect(schema.properties['actions'].properties['delete']).to be_a(Hoodoo::Presenters::Enum)
|
25
|
+
|
26
|
+
|
27
|
+
expect(schema.properties['actions'].properties['show'].from).to match_array(policies)
|
28
|
+
expect(schema.properties['actions'].properties['list'].from).to match_array(policies)
|
29
|
+
expect(schema.properties['actions'].properties['create'].from).to match_array(policies)
|
30
|
+
expect(schema.properties['actions'].properties['update'].from).to match_array(policies)
|
31
|
+
expect(schema.properties['actions'].properties['delete'].from).to match_array(policies)
|
32
|
+
|
33
|
+
# Else enum
|
34
|
+
expect(schema.properties['else']).to be_a(Hoodoo::Presenters::Enum)
|
35
|
+
expect(schema.properties['else'].from).to match_array(policies)
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hoodoo::ErrorDescriptions do
|
4
|
+
|
5
|
+
# Test that DSL exceptions are raised as expected
|
6
|
+
|
7
|
+
context 'incorrect definitions' do
|
8
|
+
it 'should complain about missing message' do
|
9
|
+
expect {
|
10
|
+
Hoodoo::ErrorDescriptions.new( :test_domain ) do
|
11
|
+
error 'http_123', 'status' => 123
|
12
|
+
end
|
13
|
+
}.to raise_error(RuntimeError, "Error description options hash missing required key 'message'")
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should complain about missing status' do
|
17
|
+
expect {
|
18
|
+
Hoodoo::ErrorDescriptions.new( :test_domain ) do
|
19
|
+
error 'http_123', 'message' => 'hello world'
|
20
|
+
end
|
21
|
+
}.to raise_error(RuntimeError, "Error description options hash missing required key 'status'")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Test that a correctly called DSL leads to the Right Things happening when
|
26
|
+
# called from the constructor.
|
27
|
+
|
28
|
+
context 'correct definitions' do
|
29
|
+
describe '#describe' do
|
30
|
+
it 'should report correct custom definitions' do
|
31
|
+
desc = Hoodoo::ErrorDescriptions.new( :test_domain ) do
|
32
|
+
error 'http_234_no_references', 'status' => 234, :message => '234 message'
|
33
|
+
error 'http_345_has_reference', :status => 345, 'message' => '345 message', 'reference' => [ :ref1 ]
|
34
|
+
error 'http_456_has_references', 'status' => 456, 'message' => '456 message', :reference => [ :ref2, :ref3, :ref4 ]
|
35
|
+
end
|
36
|
+
|
37
|
+
expect(desc.describe('test_domain.http_234_no_references')).to eq('status' => 234, 'message' => '234 message')
|
38
|
+
expect(desc.describe('test_domain.http_345_has_reference')).to eq('status' => 345, 'message' => '345 message', 'reference' => [ 'ref1' ])
|
39
|
+
expect(desc.describe('test_domain.http_456_has_references')).to eq('status' => 456, 'message' => '456 message', 'reference' => [ 'ref2', 'ref3', 'ref4' ])
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Test that a correctly called DSL leads to the Right Things happening when
|
45
|
+
# called from outside the constructor.
|
46
|
+
|
47
|
+
context 'correct definitions' do
|
48
|
+
before do
|
49
|
+
@desc = Hoodoo::ErrorDescriptions.new
|
50
|
+
@desc.errors_for( :test_domain ) do
|
51
|
+
error 'http_345_no_references', 'status' => 345, 'message' => '345 message'
|
52
|
+
error 'http_456_has_reference', 'status' => 456, 'message' => '456 message', 'reference' => [ :ref1 ]
|
53
|
+
error 'http_567_has_references', 'status' => 567, 'message' => '567 message', 'reference' => [ :ref2, :ref3, :ref4 ]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# * Check errors are defined as expected by examining schema
|
58
|
+
# * Check HTTP code & default messages
|
59
|
+
# * Check HTTP code & custom messages
|
60
|
+
# * Test exceptions for missing reference and references
|
61
|
+
# * Test adding a reference, or many references, with commans
|
62
|
+
# * Test adding extra reference data (appears at end)
|
63
|
+
|
64
|
+
describe '#describe' do
|
65
|
+
it 'should describe some default definitions' do
|
66
|
+
expect(@desc.describe('platform.malformed')).to_not be_nil
|
67
|
+
expect(@desc.describe('generic.malformed')).to_not be_nil
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'should report correct custom definitions' do
|
71
|
+
expect(@desc.describe('test_domain.http_345_no_references')).to eq('status' => 345, 'message' => '345 message')
|
72
|
+
expect(@desc.describe('test_domain.http_456_has_reference')).to eq('status' => 456, 'message' => '456 message', 'reference' => [ 'ref1' ])
|
73
|
+
expect(@desc.describe('test_domain.http_567_has_references')).to eq('status' => 567, 'message' => '567 message', 'reference' => [ 'ref2', 'ref3', 'ref4' ])
|
74
|
+
expect(@desc.describe('test_domain.invalid')).to be_nil
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe '#recognised?' do
|
79
|
+
it 'should recognise default definitions' do
|
80
|
+
expect(@desc.recognised?('platform.malformed')).to eq(true)
|
81
|
+
expect(@desc.recognised?('generic.malformed')).to eq(true)
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'should recognise custom definitions' do
|
85
|
+
expect(@desc.recognised?('test_domain.http_345_no_references')).to eq(true)
|
86
|
+
expect(@desc.recognised?('test_domain.http_456_has_reference')).to eq(true)
|
87
|
+
expect(@desc.recognised?('test_domain.http_567_has_references')).to eq(true)
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'should not recognise invalid definitions' do
|
91
|
+
expect(@desc.recognised?('platform.invalid')).to eq(false)
|
92
|
+
expect(@desc.recognised?('generic.invalid')).to eq(false)
|
93
|
+
expect(@desc.recognised?('test_domain.invalid')).to eq(false)
|
94
|
+
expect(@desc.recognised?('invalid.malformed')).to eq(false)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|