ad-framework 0.1.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.
- data/.gitignore +6 -0
- data/Gemfile +12 -0
- data/README.markdown +36 -0
- data/Rakefile +19 -0
- data/ad-framework.gemspec +25 -0
- data/doc/open_ldap_server.markdown +17 -0
- data/extras/adtest.schema +304 -0
- data/extras/slapd.conf +10 -0
- data/lib/ad-framework.rb +53 -0
- data/lib/ad-framework/attribute.rb +35 -0
- data/lib/ad-framework/attribute_type.rb +133 -0
- data/lib/ad-framework/auxiliary_class.rb +24 -0
- data/lib/ad-framework/config.rb +72 -0
- data/lib/ad-framework/config/attribute_definition.rb +18 -0
- data/lib/ad-framework/config/mapping.rb +26 -0
- data/lib/ad-framework/exceptions.rb +17 -0
- data/lib/ad-framework/fields.rb +44 -0
- data/lib/ad-framework/patterns/callbacks.rb +47 -0
- data/lib/ad-framework/patterns/has_schema.rb +127 -0
- data/lib/ad-framework/patterns/persistence.rb +67 -0
- data/lib/ad-framework/patterns/searchable.rb +117 -0
- data/lib/ad-framework/patterns/validations.rb +50 -0
- data/lib/ad-framework/schema.rb +118 -0
- data/lib/ad-framework/structural_class.rb +61 -0
- data/lib/ad-framework/utilities/entry_builder.rb +77 -0
- data/lib/ad-framework/utilities/transaction.rb +32 -0
- data/lib/ad-framework/utilities/validator.rb +26 -0
- data/lib/ad-framework/version.rb +5 -0
- data/test/helper.rb +71 -0
- data/test/integration/defined_array_test.rb +49 -0
- data/test/integration/defined_integer_test.rb +48 -0
- data/test/integration/defined_string_test.rb +48 -0
- data/test/integration/defined_top_test.rb +101 -0
- data/test/integration/defined_user_test.rb +140 -0
- data/test/irb.rb +2 -0
- data/test/support/factory.rb +67 -0
- data/test/support/ldap.yml +6 -0
- data/test/support/schema/attribute_types.rb +67 -0
- data/test/support/schema/attributes.rb +10 -0
- data/test/support/schema/auxiliary_classes.rb +12 -0
- data/test/support/schema/structural_classes.rb +46 -0
- data/test/support/seed.rb +28 -0
- data/test/support/state.rb +29 -0
- data/test/unit/ad-framework/attribute_test.rb +84 -0
- data/test/unit/ad-framework/attribute_type/class_methods_test.rb +146 -0
- data/test/unit/ad-framework/attribute_type_test.rb +114 -0
- data/test/unit/ad-framework/auxiliary_class_test.rb +39 -0
- data/test/unit/ad-framework/config/attribute_definition_test.rb +26 -0
- data/test/unit/ad-framework/config/mapping_test.rb +41 -0
- data/test/unit/ad-framework/config_test.rb +121 -0
- data/test/unit/ad-framework/fields_test.rb +44 -0
- data/test/unit/ad-framework/patterns/callbacks_test.rb +90 -0
- data/test/unit/ad-framework/patterns/has_schema/class_methods_test.rb +214 -0
- data/test/unit/ad-framework/patterns/has_schema_test.rb +96 -0
- data/test/unit/ad-framework/patterns/persistence_test.rb +126 -0
- data/test/unit/ad-framework/patterns/searchable_test.rb +201 -0
- data/test/unit/ad-framework/patterns/validations_test.rb +113 -0
- data/test/unit/ad-framework/schema_test.rb +268 -0
- data/test/unit/ad-framework/structural_class_test.rb +64 -0
- data/test/unit/ad-framework/utilities/entry_builder_test.rb +107 -0
- data/test/unit/ad-framework/utilities/transaction_test.rb +50 -0
- data/test/unit/ad-framework/utilities/validator_test.rb +46 -0
- data/test/unit/ad-framework_test.rb +116 -0
- metadata +225 -0
@@ -0,0 +1,113 @@
|
|
1
|
+
require 'assert'
|
2
|
+
|
3
|
+
module AD::Framework::Patterns::Validations
|
4
|
+
|
5
|
+
class BaseTest < Assert::Context
|
6
|
+
desc "the validations pattern"
|
7
|
+
setup do
|
8
|
+
@structural_class = Factory.structural_class do
|
9
|
+
ldap_name "validationsTestObject"
|
10
|
+
attributes :name, :system_flags
|
11
|
+
must_set :name, :system_flags
|
12
|
+
end
|
13
|
+
@instance = @structural_class.new({ :name => "test", :system_flags => 1 })
|
14
|
+
@mock_connection = mock()
|
15
|
+
@instance.stubs(:connection).returns(@mock_connection)
|
16
|
+
end
|
17
|
+
subject{ @instance }
|
18
|
+
|
19
|
+
should have_accessors :errors
|
20
|
+
should have_instance_methods :valid?, :create, :update
|
21
|
+
|
22
|
+
should "default errors to a new hash" do
|
23
|
+
assert_equal({}, subject.errors)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class WithErrorsTest < BaseTest
|
28
|
+
desc "with errors"
|
29
|
+
setup do
|
30
|
+
@instance.attributes = { :name => nil, :system_flags => nil }
|
31
|
+
@instance.valid?
|
32
|
+
end
|
33
|
+
|
34
|
+
should "have added errors for the attributes to th errors hash" do
|
35
|
+
assert_not_empty subject.errors
|
36
|
+
subject.schema.attributes.each do |attribute_name|
|
37
|
+
assert_includes attribute_name.to_s, subject.errors.keys
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class WithNoErrorsTest < BaseTest
|
43
|
+
desc "with no errors"
|
44
|
+
setup do
|
45
|
+
@instance.valid?
|
46
|
+
end
|
47
|
+
|
48
|
+
should "have no key/values in the errors hash" do
|
49
|
+
assert_empty subject.errors
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
class CreateInvalidTest < WithErrorsTest
|
54
|
+
desc "create method"
|
55
|
+
setup do
|
56
|
+
@instance.expects(:valid?)
|
57
|
+
end
|
58
|
+
|
59
|
+
should "check if the entry is valid and return if it added it" do
|
60
|
+
result = nil
|
61
|
+
assert_nothing_raised{ result = subject.create }
|
62
|
+
assert_equal false, result
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
class UpdateInvalidTest < WithErrorsTest
|
67
|
+
desc "update method"
|
68
|
+
setup do
|
69
|
+
@instance.expects(:valid?)
|
70
|
+
end
|
71
|
+
|
72
|
+
should "check if the entry is valid and return if it updated it" do
|
73
|
+
result = nil
|
74
|
+
assert_nothing_raised{ result = subject.update }
|
75
|
+
assert_equal false, result
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
class CreateValidTest < WithNoErrorsTest
|
80
|
+
desc "create method"
|
81
|
+
setup do
|
82
|
+
@mock_connection.expects(:add).with({
|
83
|
+
:dn => @instance.dn,
|
84
|
+
:attributes => @instance.fields
|
85
|
+
})
|
86
|
+
@instance.expects(:reload)
|
87
|
+
end
|
88
|
+
|
89
|
+
should "check if the entry is valid and return if it added it" do
|
90
|
+
result = nil
|
91
|
+
assert_nothing_raised{ result = subject.create }
|
92
|
+
assert_equal true, result
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
class UpdateValidTest < WithNoErrorsTest
|
97
|
+
desc "create method"
|
98
|
+
setup do
|
99
|
+
@mock_connection.expects(:open).yields(@mock_connection)
|
100
|
+
@instance.fields.changes.each do |name, value|
|
101
|
+
@mock_connection.expects(:replace_attribute).with(@instance.dn, name, value)
|
102
|
+
end
|
103
|
+
@instance.expects(:reload)
|
104
|
+
end
|
105
|
+
|
106
|
+
should "check if the entry is valid and return if it added it" do
|
107
|
+
result = nil
|
108
|
+
assert_nothing_raised{ result = subject.update }
|
109
|
+
assert_equal true, result
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
@@ -0,0 +1,268 @@
|
|
1
|
+
require 'assert'
|
2
|
+
|
3
|
+
class AD::Framework::Schema
|
4
|
+
|
5
|
+
class BaseTest < Assert::Context
|
6
|
+
desc "AD::Framework::Schema"
|
7
|
+
setup do
|
8
|
+
State.preserve
|
9
|
+
@structural_class = Factory.structural_class do
|
10
|
+
attributes :name
|
11
|
+
must_set :name
|
12
|
+
before_create :something_amazing
|
13
|
+
end
|
14
|
+
@schema = AD::Framework::Schema.new(@structural_class)
|
15
|
+
end
|
16
|
+
subject{ @schema }
|
17
|
+
|
18
|
+
should have_accessors :ldap_name, :rdn, :attributes, :auxiliary_classes, :klass
|
19
|
+
should have_accessors :structural_classes, :mandatory, :callbacks
|
20
|
+
should have_instance_methods :treebase, :treebase=, :add_attributes, :add_read_attributes
|
21
|
+
should have_instance_methods :add_write_attributes, :add_auxiliary_class
|
22
|
+
|
23
|
+
should "default the rdn to :name" do
|
24
|
+
assert_equal :name, subject.rdn
|
25
|
+
end
|
26
|
+
should "default auxiliary classes to a new array" do
|
27
|
+
assert_instance_of Array, subject.auxiliary_classes
|
28
|
+
assert_empty subject.auxiliary_classes
|
29
|
+
end
|
30
|
+
should "default structural classes to a new array" do
|
31
|
+
assert_instance_of Array, subject.structural_classes
|
32
|
+
end
|
33
|
+
should "default attributes to a new set" do
|
34
|
+
assert_instance_of Set, subject.attributes
|
35
|
+
assert_empty subject.attributes
|
36
|
+
end
|
37
|
+
should "default mandatory to a new set" do
|
38
|
+
assert_instance_of Set, subject.mandatory
|
39
|
+
assert_empty subject.mandatory
|
40
|
+
end
|
41
|
+
should "default callbacks to a new hash" do
|
42
|
+
assert_instance_of Hash, subject.callbacks
|
43
|
+
end
|
44
|
+
|
45
|
+
teardown do
|
46
|
+
State.restore
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
class LdapNameWithPrefixTest < BaseTest
|
51
|
+
desc "ldap_name method with an ldap prefix set"
|
52
|
+
setup do
|
53
|
+
@ldap_prefix = "something-"
|
54
|
+
@ldap_name = "amazing"
|
55
|
+
AD::Framework.config.ldap_prefix = @ldap_prefix
|
56
|
+
@schema.ldap_name = @ldap_name
|
57
|
+
end
|
58
|
+
|
59
|
+
should "use the ldap_prefix with ldap_name" do
|
60
|
+
assert_equal [ @ldap_prefix, @ldap_name ].join, subject.ldap_name
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
class LdapNameWithoutPrefixTest < LdapNameWithPrefixTest
|
65
|
+
desc "ldap_name method without ldap prefix set"
|
66
|
+
setup do
|
67
|
+
AD::Framework.config.ldap_prefix = nil
|
68
|
+
end
|
69
|
+
|
70
|
+
should "just be the ldap name" do
|
71
|
+
assert_equal @ldap_name, subject.ldap_name
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
class ObjectClassesTest < BaseTest
|
76
|
+
desc "object_classes method"
|
77
|
+
setup do
|
78
|
+
@structural_classes = [ "structural" ]
|
79
|
+
@auxiliary_classes = [ "auxiliary" ]
|
80
|
+
@schema.structural_classes = @structural_classes
|
81
|
+
@schema.auxiliary_classes = @auxiliary_classes
|
82
|
+
end
|
83
|
+
|
84
|
+
should "return all its object classes in the correct order" do
|
85
|
+
expected = [
|
86
|
+
subject.structural_classes,
|
87
|
+
subject.klass,
|
88
|
+
subject.auxiliary_classes
|
89
|
+
].flatten
|
90
|
+
assert_equal expected, subject.object_classes
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
class WithASuperclassSchemaTest < BaseTest
|
95
|
+
desc "with a superclass schema"
|
96
|
+
setup do
|
97
|
+
@child_class = Class.new(@structural_class)
|
98
|
+
@schema = AD::Framework::Schema.new(@child_class)
|
99
|
+
end
|
100
|
+
subject{ @schema }
|
101
|
+
|
102
|
+
should "default attributes to it's parent schema's attributes" do
|
103
|
+
assert_equal @structural_class.schema.attributes, subject.attributes
|
104
|
+
end
|
105
|
+
should "default structural classes to an array with its parent" do
|
106
|
+
assert_instance_of Array, subject.structural_classes
|
107
|
+
@structural_class.schema.structural_classes.each do |object_class|
|
108
|
+
assert_includes object_class, subject.structural_classes
|
109
|
+
end
|
110
|
+
assert_includes @structural_class, subject.structural_classes
|
111
|
+
end
|
112
|
+
should "default mandatory to it's parents" do
|
113
|
+
assert_equal @structural_class.schema.mandatory, subject.mandatory
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
class TreebaseTest < BaseTest
|
118
|
+
desc "treebase method"
|
119
|
+
setup do
|
120
|
+
@schema.treebase = nil
|
121
|
+
end
|
122
|
+
|
123
|
+
should "default the treebase to what is configured" do
|
124
|
+
assert_equal AD::Framework.config.treebase, subject.treebase
|
125
|
+
end
|
126
|
+
|
127
|
+
teardown do
|
128
|
+
@schema.treebase = nil
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
class WithPartialTreebaseTest < TreebaseTest
|
133
|
+
desc "with a partial treebase set"
|
134
|
+
setup do
|
135
|
+
@treebase = "CN=Incomplete"
|
136
|
+
@schema.treebase = @treebase
|
137
|
+
end
|
138
|
+
|
139
|
+
should "contact the treebase with what is configured, if it is not included" do
|
140
|
+
expected = [ @treebase, AD::Framework.config.treebase ].compact.join(", ")
|
141
|
+
assert_equal expected, subject.treebase
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
class WithFullTreebaseTest < TreebaseTest
|
146
|
+
desc "with a full treebase set"
|
147
|
+
setup do
|
148
|
+
@treebase = [ "CN=Complete", AD::Framework.config.treebase ].compact.join(", ")
|
149
|
+
@schema.treebase = @treebase
|
150
|
+
end
|
151
|
+
|
152
|
+
should "return the full treebase" do
|
153
|
+
assert_equal @treebase, subject.treebase
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
class AttributesMethodTest < BaseTest
|
158
|
+
desc "adding attribute methods"
|
159
|
+
setup do
|
160
|
+
@schema.attributes.clear
|
161
|
+
end
|
162
|
+
|
163
|
+
teardown do
|
164
|
+
@schema.attributes.clear
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
class AddAttributesTest < AttributesMethodTest
|
169
|
+
desc "with the add_attributes method"
|
170
|
+
setup do
|
171
|
+
@attribute_names = [ :name, :display_name, :system_flags ]
|
172
|
+
@schema.expects(:add_read_attributes).with(@attribute_names)
|
173
|
+
@schema.expects(:add_write_attributes).with(@attribute_names)
|
174
|
+
end
|
175
|
+
|
176
|
+
should "call add read and write attributes" do
|
177
|
+
assert_nothing_raised{ subject.add_attributes(@attribute_names) }
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
class AddReadAttributesTest < AttributesMethodTest
|
182
|
+
desc "with the add_read_attributes method"
|
183
|
+
setup do
|
184
|
+
@attribute_names = [ :display_name ]
|
185
|
+
@schema.add_read_attributes(@attribute_names)
|
186
|
+
@instance = @structural_class.new
|
187
|
+
end
|
188
|
+
|
189
|
+
should "define the reader and then be stored" do
|
190
|
+
assert_respond_to :display_name_attribute_type, @instance
|
191
|
+
assert_respond_to :display_name, @instance
|
192
|
+
assert_includes :display_name, subject.attributes
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
class AddWriteAttributesTest < AttributesMethodTest
|
197
|
+
desc "with the add_write_attributes method"
|
198
|
+
setup do
|
199
|
+
@attribute_names = [ :description ]
|
200
|
+
@schema.add_read_attributes(@attribute_names)
|
201
|
+
@instance = @structural_class.new
|
202
|
+
end
|
203
|
+
|
204
|
+
should "define the reader and then be stored" do
|
205
|
+
assert_respond_to :description_attribute_type, @instance
|
206
|
+
assert_respond_to :description, @instance
|
207
|
+
assert_includes :description, subject.attributes
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
class AddAuxiliaryClassesTest < BaseTest
|
212
|
+
desc "adding auxiliary classes"
|
213
|
+
setup do
|
214
|
+
@schema.auxiliary_classes.clear
|
215
|
+
@auxiliary_class = Factory.auxiliary_class do
|
216
|
+
attributes :sam_account_name
|
217
|
+
must_set :sam_account_name
|
218
|
+
after_destroy :fix_it_all
|
219
|
+
end
|
220
|
+
@schema.add_auxiliary_class(@auxiliary_class)
|
221
|
+
end
|
222
|
+
|
223
|
+
should "merge the auxiliary classes attributes and store it" do
|
224
|
+
assert_includes @auxiliary_class, subject.auxiliary_classes
|
225
|
+
@auxiliary_class.schema.attributes.each do |name|
|
226
|
+
assert_includes name, subject.attributes
|
227
|
+
end
|
228
|
+
@auxiliary_class.schema.mandatory.each do |name|
|
229
|
+
assert_includes name, subject.mandatory
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
teardown do
|
234
|
+
@schema.auxiliary_classes.clear
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
class AddMandatoryTest < BaseTest
|
239
|
+
desc "adding mandatory attributes"
|
240
|
+
setup do
|
241
|
+
@attribute_names = [ :display_name ]
|
242
|
+
@schema.add_mandatory(@attribute_names)
|
243
|
+
end
|
244
|
+
|
245
|
+
should "store the attribute in the mandatory set" do
|
246
|
+
@attribute_names.each do |attribute_name|
|
247
|
+
assert_includes attribute_name, subject.mandatory
|
248
|
+
end
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
class AddCallbackTest < BaseTest
|
253
|
+
desc "adding a callback"
|
254
|
+
setup do
|
255
|
+
@timing = :before
|
256
|
+
@action = :create
|
257
|
+
@method_name = "something_amazing"
|
258
|
+
@schema.add_callback(@timing, @action, @method_name)
|
259
|
+
end
|
260
|
+
|
261
|
+
should "store the callback in the callbacks hash" do
|
262
|
+
assert_instance_of Hash, subject.callbacks[@action]
|
263
|
+
assert_instance_of Array, subject.callbacks[@action][@timing]
|
264
|
+
assert_includes @method_name, subject.callbacks[@action][@timing]
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'assert'
|
2
|
+
|
3
|
+
class AD::Framework::StructuralClass
|
4
|
+
|
5
|
+
class BaseTest < Assert::Context
|
6
|
+
desc "AD::Framework::StructuralClass"
|
7
|
+
setup do
|
8
|
+
@structural_class = AD::Framework::StructuralClass
|
9
|
+
@instance = @structural_class.new
|
10
|
+
end
|
11
|
+
subject{ @instance }
|
12
|
+
|
13
|
+
should have_accessors :meta_class, :fields
|
14
|
+
should have_instance_methods :connection, :treebase, :treebase=
|
15
|
+
should have_class_methods :connection
|
16
|
+
|
17
|
+
should have_instance_methods :schema
|
18
|
+
should have_class_methods :schema
|
19
|
+
|
20
|
+
should have_instance_methods :reload
|
21
|
+
should have_class_methods :find, :first, :all
|
22
|
+
|
23
|
+
should have_instance_methods :create, :update, :save, :destroy
|
24
|
+
should have_class_methods :create
|
25
|
+
|
26
|
+
should have_instance_methods :errors, :valid?
|
27
|
+
|
28
|
+
should "set fields to an instance of AD::Framework::Fields" do
|
29
|
+
assert_instance_of AD::Framework::Fields, subject.fields
|
30
|
+
end
|
31
|
+
should "return the framework's connection with a call to #connection" do
|
32
|
+
assert_equal AD::Framework.connection, subject.class.connection
|
33
|
+
assert_equal subject.class.connection, subject.connection
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class InheritedTest < Assert::Context
|
38
|
+
desc "a structural class"
|
39
|
+
setup do
|
40
|
+
@treebase = "CN=somewhere"
|
41
|
+
@structural_class = Factory.structural_class do
|
42
|
+
ldap_name "something"
|
43
|
+
rdn :name
|
44
|
+
attributes :name
|
45
|
+
end
|
46
|
+
@instance = @structural_class.new({ :treebase => @treebase })
|
47
|
+
end
|
48
|
+
subject{ @instance }
|
49
|
+
|
50
|
+
should "have set it's treebase" do
|
51
|
+
expected = [ @treebase, AD::Framework.config.treebase ].join(", ")
|
52
|
+
assert_equal expected, subject.treebase
|
53
|
+
end
|
54
|
+
should "have a custom inspect" do
|
55
|
+
expected = "#<#{subject.class} "
|
56
|
+
attrs = subject.attributes.collect{|k, v| "#{k}: #{v.inspect}" }
|
57
|
+
attrs << "treebase: #{subject.treebase.inspect}"
|
58
|
+
expected += attrs.sort.join(", ")
|
59
|
+
expected += ">"
|
60
|
+
assert_equal expected, subject.inspect
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'assert'
|
2
|
+
|
3
|
+
class AD::Framework::Utilities::EntryBuilder
|
4
|
+
|
5
|
+
class BaseTest < Assert::Context
|
6
|
+
desc "AD::Framework::Utilities::EntryBuilder"
|
7
|
+
setup do
|
8
|
+
State.preserve
|
9
|
+
@structural_class = Factory.structural_class do
|
10
|
+
ldap_name "somethingAmazing"
|
11
|
+
attributes :name
|
12
|
+
end
|
13
|
+
AD::Framework.register_structural_class(@structural_class)
|
14
|
+
@ldap_entry = { "objectclass" => [ @structural_class.ldap_name ] }
|
15
|
+
@entry_builder = AD::Framework::Utilities::EntryBuilder.new(@ldap_entry)
|
16
|
+
end
|
17
|
+
subject{ @entry_builder }
|
18
|
+
|
19
|
+
should have_accessors :ldap_entry, :entry, :fields
|
20
|
+
should have_instance_methods :reload, :build
|
21
|
+
|
22
|
+
should "have build a fields object from the ldap entry" do
|
23
|
+
assert_instance_of AD::Framework::Fields, subject.fields
|
24
|
+
end
|
25
|
+
|
26
|
+
teardown do
|
27
|
+
State.restore
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class BuildTest < BaseTest
|
32
|
+
desc "entry builder building a new entry"
|
33
|
+
subject{ @entry_builder.entry }
|
34
|
+
|
35
|
+
should "be a kind of the class in its object class" do
|
36
|
+
assert_instance_of @structural_class, subject
|
37
|
+
end
|
38
|
+
should "have set the fields on the entry to its" do
|
39
|
+
assert_equal @entry_builder.fields, subject.fields
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
class ReloadTest < BaseTest
|
44
|
+
desc "entry builder reloading an entry"
|
45
|
+
setup do
|
46
|
+
@entry = @entry_builder.entry
|
47
|
+
@entry.fields["something"] = "amazing"
|
48
|
+
@entry.name = "something new"
|
49
|
+
@entry_builder = AD::Framework::Utilities::EntryBuilder.new(@ldap_entry, {
|
50
|
+
:reload => @entry
|
51
|
+
})
|
52
|
+
end
|
53
|
+
subject{ @entry }
|
54
|
+
|
55
|
+
should "have reset it's fields" do
|
56
|
+
assert_not_equal "amazing", subject.fields["something"]
|
57
|
+
assert_nil subject.fields["something"]
|
58
|
+
end
|
59
|
+
should "have reset it's attributes" do
|
60
|
+
assert_not_equal "something new", subject.name
|
61
|
+
assert_nil subject.name
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
class WithLinkedAuxiliaryClassesTest < BaseTest
|
66
|
+
desc "entry builder building a new entry with linked aux classes"
|
67
|
+
setup do
|
68
|
+
@auxiliary_class = Factory.auxiliary_class do
|
69
|
+
ldap_name "displayIt"
|
70
|
+
attributes :display_name
|
71
|
+
end
|
72
|
+
AD::Framework.register_auxiliary_class(@auxiliary_class)
|
73
|
+
@ldap_entry = {
|
74
|
+
"objectclass" => [ @auxiliary_class.ldap_name, @structural_class.ldap_name ]
|
75
|
+
}
|
76
|
+
@entry_builder = AD::Framework::Utilities::EntryBuilder.new(@ldap_entry)
|
77
|
+
end
|
78
|
+
subject{ @entry_builder.entry }
|
79
|
+
|
80
|
+
should "be a kind of the class in its object class" do
|
81
|
+
assert_instance_of @structural_class, subject
|
82
|
+
end
|
83
|
+
should "have set the fields on the entry to its" do
|
84
|
+
assert_equal @entry_builder.fields, subject.fields
|
85
|
+
end
|
86
|
+
should "have add the auxiliary class to the entry" do
|
87
|
+
assert_includes @auxiliary_class, subject.schema.auxiliary_classes
|
88
|
+
assert_includes :display_name, subject.schema.attributes
|
89
|
+
assert_respond_to :display_name, subject
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
class UndefinedObjectClassTest < Assert::Context
|
94
|
+
desc "AD::Framework::Utilities::EntryBuilder"
|
95
|
+
setup do
|
96
|
+
@ldap_entry = { "objectclass" => [ "notdefinedatall" ] }
|
97
|
+
end
|
98
|
+
subject{ @ldap_entry }
|
99
|
+
|
100
|
+
should "raise an object class not defined exception" do
|
101
|
+
assert_raises(AD::Framework::ObjectClassNotDefined) do
|
102
|
+
AD::Framework::Utilities::EntryBuilder.new(@ldap_entry)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|