activeldap 1.0.9 → 1.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/CHANGES +648 -567
- data/README +53 -48
- data/Rakefile +25 -53
- data/TODO +2 -0
- data/data/locale/en/LC_MESSAGES/active-ldap.mo +0 -0
- data/data/locale/ja/LC_MESSAGES/active-ldap.mo +0 -0
- data/examples/al-admin/app/controllers/application_controller.rb +1 -1
- data/examples/al-admin/app/views/_entry/_attributes_information.html.erb +7 -1
- data/examples/al-admin/app/views/users/_attributes_update_form.html.erb +13 -1
- data/examples/al-admin/config/environment.rb +2 -3
- data/lib/active_ldap.rb +103 -98
- data/lib/active_ldap/association/belongs_to_many.rb +7 -7
- data/lib/active_ldap/association/has_many.rb +4 -4
- data/lib/active_ldap/associations.rb +29 -5
- data/lib/active_ldap/attributes.rb +5 -1
- data/lib/active_ldap/base.rb +17 -13
- data/lib/active_ldap/configuration.rb +3 -4
- data/lib/active_ldap/connection.rb +3 -3
- data/lib/active_ldap/get_text/parser.rb +4 -2
- data/lib/active_ldap/helper.rb +59 -0
- data/lib/active_ldap/operations.rb +15 -10
- data/lib/active_ldap/xml.rb +22 -30
- data/po/en/active-ldap.po +221 -154
- data/po/ja/active-ldap.po +237 -178
- data/test-unit/History.txt +26 -0
- data/test-unit/Manifest.txt +1 -1
- data/test-unit/README.txt +1 -0
- data/test-unit/Rakefile +6 -1
- data/test-unit/lib/test/unit/autorunner.rb +6 -0
- data/test-unit/lib/test/unit/testcase.rb +101 -36
- data/test-unit/test/{test_testcase.rb → test-testcase.rb} +30 -1
- data/test-unit/test/test_assertions.rb +1 -1
- data/test/al-test-utils.rb +3 -1
- data/test/test_associations.rb +75 -6
- data/test/test_base.rb +45 -3
- metadata +75 -45
- data/examples/al-admin/config/initializers/gettext.rb +0 -15
data/test-unit/History.txt
CHANGED
@@ -1,3 +1,29 @@
|
|
1
|
+
=== 2.0.3 / 2009-07-17
|
2
|
+
|
3
|
+
* 6 major enhancements
|
4
|
+
* add assert_predicate.
|
5
|
+
* add assert_not_predicate.
|
6
|
+
* [#24210] assert_kind_of supports an array of classes or modules.
|
7
|
+
[Daniel Berger]
|
8
|
+
* assert_instance_of supports an array of classes or modules.
|
9
|
+
* add --default-priority option.
|
10
|
+
* [#26627] add --order option. [Daniel Berger]
|
11
|
+
|
12
|
+
* 4 minor enhancements
|
13
|
+
* use yellow foreground + black background for error.
|
14
|
+
* don't show diff for long string.
|
15
|
+
* accept "*term-color" TERM environment as colorizable terminal.
|
16
|
+
(e.g. Apple's Terminal)
|
17
|
+
* [#26268] add a workaround for test-spec's after_all. [Angelo Lakra]
|
18
|
+
|
19
|
+
* 1 bug fix
|
20
|
+
* [#23586] re-support ruby 1.9.1. [Diego Pettenò]
|
21
|
+
|
22
|
+
* Thanks
|
23
|
+
* Diego Pettenò
|
24
|
+
* Daniel Berger
|
25
|
+
* Angelo Lakra
|
26
|
+
|
1
27
|
=== 2.0.2 / 2008-12-21
|
2
28
|
|
3
29
|
* 2 major enhancements
|
data/test-unit/Manifest.txt
CHANGED
@@ -66,10 +66,10 @@ test/test-notification.rb
|
|
66
66
|
test/test-omission.rb
|
67
67
|
test/test-pending.rb
|
68
68
|
test/test-priority.rb
|
69
|
+
test/test-testcase.rb
|
69
70
|
test/test_assertions.rb
|
70
71
|
test/test_error.rb
|
71
72
|
test/test_failure.rb
|
72
|
-
test/test_testcase.rb
|
73
73
|
test/test_testresult.rb
|
74
74
|
test/test_testsuite.rb
|
75
75
|
test/testunit-test-util.rb
|
data/test-unit/README.txt
CHANGED
data/test-unit/Rakefile
CHANGED
@@ -1,12 +1,17 @@
|
|
1
1
|
# -*- ruby -*-
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
|
+
gem 'rdoc'
|
4
5
|
require 'hoe'
|
5
6
|
require './lib/test/unit/version.rb'
|
6
7
|
|
8
|
+
ENV["NODOT"] = "yes"
|
9
|
+
|
7
10
|
version = Test::Unit::VERSION
|
8
11
|
ENV["VERSION"] = version
|
9
|
-
Hoe.
|
12
|
+
Hoe.spec('test-unit') do |p|
|
13
|
+
Hoe::Test::SUPPORTED_TEST_FRAMEWORKS[:testunit2] = "test/run-test.rb"
|
14
|
+
p.version = version
|
10
15
|
p.developer('Kouhei Sutou', 'kou@cozmixng.org')
|
11
16
|
p.developer('Ryan Davis', 'ryand-ruby@zenspider.com')
|
12
17
|
|
@@ -227,6 +227,12 @@ module Test
|
|
227
227
|
load_config(file)
|
228
228
|
end
|
229
229
|
|
230
|
+
o.on("--order=ORDER", TestCase::AVAILABLE_ORDERS,
|
231
|
+
"Run tests in a test case in ORDER order.",
|
232
|
+
"(#{keyword_display(TestCase::AVAILABLE_ORDERS)})") do |order|
|
233
|
+
TestCase.test_order = order
|
234
|
+
end
|
235
|
+
|
230
236
|
ADDITIONAL_OPTIONS.each do |option_builder|
|
231
237
|
option_builder.call(self, o)
|
232
238
|
end
|
@@ -1,7 +1,9 @@
|
|
1
1
|
#--
|
2
2
|
#
|
3
3
|
# Author:: Nathaniel Talbott.
|
4
|
-
# Copyright::
|
4
|
+
# Copyright::
|
5
|
+
# * Copyright (c) 2000-2003 Nathaniel Talbott. All rights reserved.
|
6
|
+
# * Copyright (c) 2008-2009 Kouhei Sutou <tt><kou@clear-code.com></tt>
|
5
7
|
# License:: Ruby license.
|
6
8
|
|
7
9
|
require 'test/unit/attribute'
|
@@ -60,14 +62,14 @@ module Test
|
|
60
62
|
# end
|
61
63
|
#
|
62
64
|
# Here is a call order:
|
63
|
-
#
|
64
|
-
#
|
65
|
-
#
|
66
|
-
#
|
67
|
-
#
|
68
|
-
#
|
69
|
-
#
|
70
|
-
#
|
65
|
+
# * startup
|
66
|
+
# * setup
|
67
|
+
# * test_my_method1
|
68
|
+
# * teardown
|
69
|
+
# * setup
|
70
|
+
# * test_my_method2
|
71
|
+
# * teardown
|
72
|
+
# * shutdown
|
71
73
|
class TestCase
|
72
74
|
include Attribute
|
73
75
|
include Fixture
|
@@ -81,24 +83,29 @@ module Test
|
|
81
83
|
include Assertions
|
82
84
|
include Util::BacktraceFilter
|
83
85
|
|
84
|
-
STARTED = name + "::STARTED"
|
85
|
-
FINISHED = name + "::FINISHED"
|
86
|
+
STARTED = name + "::STARTED" # :nodoc:
|
87
|
+
FINISHED = name + "::FINISHED" # :nodoc:
|
86
88
|
|
87
|
-
DESCENDANTS = []
|
89
|
+
DESCENDANTS = [] # :nodoc:
|
90
|
+
AVAILABLE_ORDERS = [:alphabetic, :random, :defined] # :nodoc:
|
88
91
|
|
89
92
|
class << self
|
90
|
-
def inherited(sub_class)
|
93
|
+
def inherited(sub_class) # :nodoc:
|
91
94
|
DESCENDANTS << sub_class
|
92
95
|
end
|
93
96
|
|
97
|
+
@@added_methods = []
|
98
|
+
def method_added(name) # :nodoc:
|
99
|
+
super
|
100
|
+
@@added_methods << name.to_s
|
101
|
+
end
|
102
|
+
|
94
103
|
# Rolls up all of the test* methods in the fixture into
|
95
104
|
# one suite, creating a new instance of the fixture for
|
96
105
|
# each method.
|
97
106
|
def suite
|
98
|
-
method_names = public_instance_methods(true).collect {|name| name.to_s}
|
99
|
-
tests = method_names.delete_if {|method_name| method_name !~ /^test./}
|
100
107
|
suite = TestSuite.new(name, self)
|
101
|
-
|
108
|
+
collect_test_names.each do |test|
|
102
109
|
catch(:invalid_test) do
|
103
110
|
suite << new(test)
|
104
111
|
end
|
@@ -137,11 +144,11 @@ module Test
|
|
137
144
|
# end
|
138
145
|
#
|
139
146
|
# Here is a call order:
|
140
|
-
#
|
141
|
-
#
|
142
|
-
#
|
143
|
-
#
|
144
|
-
#
|
147
|
+
# * startup
|
148
|
+
# * setup
|
149
|
+
# * test_my_class1 (or test_my_class2)
|
150
|
+
# * setup
|
151
|
+
# * test_my_class2 (or test_my_class1)
|
145
152
|
#
|
146
153
|
# Note that you should not assume test order. Tests
|
147
154
|
# should be worked in any order.
|
@@ -173,16 +180,74 @@ module Test
|
|
173
180
|
# end
|
174
181
|
#
|
175
182
|
# Here is a call order:
|
176
|
-
#
|
177
|
-
#
|
178
|
-
#
|
179
|
-
#
|
180
|
-
#
|
183
|
+
# * test_my_class1 (or test_my_class2)
|
184
|
+
# * teardown
|
185
|
+
# * test_my_class2 (or test_my_class1)
|
186
|
+
# * teardown
|
187
|
+
# * shutdown
|
181
188
|
#
|
182
189
|
# Note that you should not assume test order. Tests
|
183
190
|
# should be worked in any order.
|
184
191
|
def shutdown
|
185
192
|
end
|
193
|
+
|
194
|
+
@@test_order = AVAILABLE_ORDERS.first
|
195
|
+
|
196
|
+
# Returns the current test order. This returns
|
197
|
+
# +:alphabetic+ by default.
|
198
|
+
def test_order
|
199
|
+
@@test_order
|
200
|
+
end
|
201
|
+
|
202
|
+
# Sets the current test order.
|
203
|
+
#
|
204
|
+
# Here are the available _order_:
|
205
|
+
# [:alphabetic]
|
206
|
+
# Default. Tests are sorted in alphabetic order.
|
207
|
+
# [:random]
|
208
|
+
# Tests are sorted in random order.
|
209
|
+
# [:defined]
|
210
|
+
# Tests are sorted in defined order.
|
211
|
+
def test_order=(order)
|
212
|
+
@@test_order = order
|
213
|
+
end
|
214
|
+
|
215
|
+
# :stopdoc:
|
216
|
+
private
|
217
|
+
def collect_test_names
|
218
|
+
method_names = public_instance_methods(true).collect do |name|
|
219
|
+
name.to_s
|
220
|
+
end
|
221
|
+
test_names = method_names.find_all do |method_name|
|
222
|
+
method_name =~ /^test./
|
223
|
+
end
|
224
|
+
send("sort_test_names_in_#{test_order}_order", test_names)
|
225
|
+
end
|
226
|
+
|
227
|
+
def sort_test_names_in_alphabetic_order(test_names)
|
228
|
+
test_names.sort
|
229
|
+
end
|
230
|
+
|
231
|
+
def sort_test_names_in_random_order(test_names)
|
232
|
+
test_names.sort_by {rand(test_names.size)}
|
233
|
+
end
|
234
|
+
|
235
|
+
def sort_test_names_in_defined_order(test_names)
|
236
|
+
test_names.sort do |test1, test2|
|
237
|
+
test1_defined_order = @@added_methods.index(test1)
|
238
|
+
test2_defined_order = @@added_methods.index(test2)
|
239
|
+
if test1_defined_order and test2_defined_order
|
240
|
+
test1_defined_order <=> test2_defined_order
|
241
|
+
elsif test1_defined_order
|
242
|
+
1
|
243
|
+
elsif test2_defined_order
|
244
|
+
-1
|
245
|
+
else
|
246
|
+
test1 <=> test2
|
247
|
+
end
|
248
|
+
end
|
249
|
+
end
|
250
|
+
# :startdoc:
|
186
251
|
end
|
187
252
|
|
188
253
|
attr_reader :method_name
|
@@ -225,7 +290,7 @@ module Test
|
|
225
290
|
result.add_run
|
226
291
|
yield(FINISHED, name)
|
227
292
|
ensure
|
228
|
-
@_result = nil
|
293
|
+
# @_result = nil # For test-spec's after_all :<
|
229
294
|
end
|
230
295
|
end
|
231
296
|
|
@@ -255,10 +320,10 @@ module Test
|
|
255
320
|
# end
|
256
321
|
#
|
257
322
|
# Here is a call order:
|
258
|
-
#
|
259
|
-
#
|
260
|
-
#
|
261
|
-
#
|
323
|
+
# * setup
|
324
|
+
# * my_setup1
|
325
|
+
# * my_setup2
|
326
|
+
# * test_my_class
|
262
327
|
def setup
|
263
328
|
end
|
264
329
|
|
@@ -288,13 +353,13 @@ module Test
|
|
288
353
|
# end
|
289
354
|
#
|
290
355
|
# Here is a call order:
|
291
|
-
#
|
292
|
-
#
|
293
|
-
#
|
294
|
-
#
|
356
|
+
# * test_my_class
|
357
|
+
# * my_teardown2
|
358
|
+
# * my_teardown1
|
359
|
+
# * teardown
|
295
360
|
def teardown
|
296
361
|
end
|
297
|
-
|
362
|
+
|
298
363
|
def default_test
|
299
364
|
flunk("No tests were specified")
|
300
365
|
end
|
@@ -6,7 +6,7 @@ require 'test/unit'
|
|
6
6
|
|
7
7
|
module Test
|
8
8
|
module Unit
|
9
|
-
class
|
9
|
+
class TestTestCase < TestCase
|
10
10
|
def test_creation
|
11
11
|
tc = Class.new(TestCase) do
|
12
12
|
def test_with_arguments(arg1, arg2)
|
@@ -468,11 +468,40 @@ module Test
|
|
468
468
|
end
|
469
469
|
end
|
470
470
|
|
471
|
+
def test_defined_order
|
472
|
+
keep_test_order do
|
473
|
+
test_case = Class.new(Test::Unit::TestCase) do
|
474
|
+
def test_z
|
475
|
+
end
|
476
|
+
|
477
|
+
def test_1
|
478
|
+
end
|
479
|
+
|
480
|
+
def test_a
|
481
|
+
end
|
482
|
+
end
|
483
|
+
|
484
|
+
assert_equal(["test_1", "test_a", "test_z"],
|
485
|
+
test_case.suite.tests.collect {|test| test.method_name})
|
486
|
+
|
487
|
+
test_case.test_order = :defined
|
488
|
+
assert_equal(["test_z", "test_1", "test_a"],
|
489
|
+
test_case.suite.tests.collect {|test| test.method_name})
|
490
|
+
end
|
491
|
+
end
|
492
|
+
|
471
493
|
private
|
472
494
|
def check(message, passed)
|
473
495
|
add_assertion
|
474
496
|
raise AssertionFailedError.new(message) unless passed
|
475
497
|
end
|
498
|
+
|
499
|
+
def keep_test_order
|
500
|
+
order = TestCase.test_order
|
501
|
+
yield
|
502
|
+
ensure
|
503
|
+
TestCase.test_order = order
|
504
|
+
end
|
476
505
|
end
|
477
506
|
end
|
478
507
|
end
|
@@ -428,7 +428,7 @@ EOM
|
|
428
428
|
|
429
429
|
different_error_class = Class.new(StandardError)
|
430
430
|
message = <<-EOM
|
431
|
-
<\#<Class:
|
431
|
+
<\#<Class:[xa-f\\d]+>\\("Error"\\)> exception expected but was
|
432
432
|
Class: <RuntimeError>
|
433
433
|
Message: <"Error">
|
434
434
|
EOM
|
data/test/al-test-utils.rb
CHANGED
@@ -58,7 +58,9 @@ module AlTestUtils
|
|
58
58
|
unless File.exist?(@config_file)
|
59
59
|
raise "config file for testing doesn't exist: #{@config_file}"
|
60
60
|
end
|
61
|
-
|
61
|
+
erb = ERB.new(File.read(@config_file))
|
62
|
+
erb.filename = @config_file
|
63
|
+
config = YAML.load(erb.result)
|
62
64
|
_adapter = adapter
|
63
65
|
config.each do |key, value|
|
64
66
|
value[:adapter] = _adapter if _adapter
|
data/test/test_associations.rb
CHANGED
@@ -4,6 +4,59 @@ class TestAssociations < Test::Unit::TestCase
|
|
4
4
|
include AlTestUtils
|
5
5
|
|
6
6
|
priority :must
|
7
|
+
def test_has_many_delete_required_attribute
|
8
|
+
make_temporary_group do |group|
|
9
|
+
make_temporary_user do |user,|
|
10
|
+
user.primary_group = group
|
11
|
+
assert_raise(ActiveLdap::RequiredAttributeMissed) do
|
12
|
+
group.primary_members.delete(user)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
priority :normal
|
19
|
+
def test_to_xml
|
20
|
+
make_temporary_user do |user,|
|
21
|
+
make_temporary_group do |group1|
|
22
|
+
make_temporary_group do |group2|
|
23
|
+
user.groups = [group1, group2]
|
24
|
+
assert_equal(<<-EOX, user.groups.to_xml(:root => "groups"))
|
25
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
26
|
+
<groups type="array">
|
27
|
+
<group>
|
28
|
+
<dn>#{group1.dn}</dn>
|
29
|
+
<cns type="array">
|
30
|
+
<cn>#{group1.cn}</cn>
|
31
|
+
</cns>
|
32
|
+
<gidNumber>#{group1.gid_number}</gidNumber>
|
33
|
+
<memberUids type="array">
|
34
|
+
<memberUid>#{user.cn}</memberUid>
|
35
|
+
</memberUids>
|
36
|
+
<objectClasses type="array">
|
37
|
+
<objectClass>posixGroup</objectClass>
|
38
|
+
</objectClasses>
|
39
|
+
</group>
|
40
|
+
<group>
|
41
|
+
<dn>#{group2.dn}</dn>
|
42
|
+
<cns type="array">
|
43
|
+
<cn>#{group2.cn}</cn>
|
44
|
+
</cns>
|
45
|
+
<gidNumber>#{group2.gid_number}</gidNumber>
|
46
|
+
<memberUids type="array">
|
47
|
+
<memberUid>#{user.cn}</memberUid>
|
48
|
+
</memberUids>
|
49
|
+
<objectClasses type="array">
|
50
|
+
<objectClass>posixGroup</objectClass>
|
51
|
+
</objectClasses>
|
52
|
+
</group>
|
53
|
+
</groups>
|
54
|
+
EOX
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
7
60
|
def test_belongs_to_with_invalid_dn_attribute_value
|
8
61
|
make_temporary_user do |user,|
|
9
62
|
make_temporary_group do |group|
|
@@ -16,12 +69,28 @@ class TestAssociations < Test::Unit::TestCase
|
|
16
69
|
end
|
17
70
|
end
|
18
71
|
|
19
|
-
|
72
|
+
def test_belongs_to_foreign_key_before_1_1_0
|
73
|
+
ActiveSupport::Deprecation.silence do
|
74
|
+
@group_class.belongs_to :related_users, :many => "seeAlso",
|
75
|
+
:foreign_key => "dn"
|
76
|
+
end
|
77
|
+
@group_class.set_associated_class(:related_users, @user_class)
|
78
|
+
make_temporary_user do |user,|
|
79
|
+
make_temporary_group do |group|
|
80
|
+
user.see_also = group.dn
|
81
|
+
user.save!
|
82
|
+
|
83
|
+
group = @group_class.find(group.id)
|
84
|
+
assert_equal([user.dn], group.related_users.collect(&:dn))
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
20
89
|
def test_has_many_wrap_with_nonexistent_entry
|
21
90
|
@user_class.has_many :references, :wrap => "seeAlso", :primary_key => "dn"
|
22
91
|
@user_class.set_associated_class(:references, @group_class)
|
23
92
|
@group_class.belongs_to :related_users, :many => "seeAlso",
|
24
|
-
:
|
93
|
+
:primary_key => "dn"
|
25
94
|
@group_class.set_associated_class(:related_users, @user_class)
|
26
95
|
make_temporary_user do |user,|
|
27
96
|
make_temporary_group do |group1|
|
@@ -49,7 +118,7 @@ class TestAssociations < Test::Unit::TestCase
|
|
49
118
|
@user_class.has_many :references, :wrap => "seeAlso", :primary_key => "dn"
|
50
119
|
@user_class.set_associated_class(:references, @group_class)
|
51
120
|
@group_class.belongs_to :related_users, :many => "seeAlso",
|
52
|
-
:
|
121
|
+
:primary_key => "dn"
|
53
122
|
@group_class.set_associated_class(:related_users, @user_class)
|
54
123
|
make_temporary_user do |user,|
|
55
124
|
make_temporary_group do |group1|
|
@@ -87,7 +156,7 @@ class TestAssociations < Test::Unit::TestCase
|
|
87
156
|
@user_class.has_many :references, :wrap => "seeAlso", :primary_key => "dn"
|
88
157
|
@user_class.set_associated_class(:references, @group_class)
|
89
158
|
@group_class.belongs_to :related_users, :many => "seeAlso",
|
90
|
-
:
|
159
|
+
:primary_key => "dn"
|
91
160
|
@group_class.set_associated_class(:related_users, @user_class)
|
92
161
|
make_temporary_group do |group|
|
93
162
|
make_temporary_user do |user1,|
|
@@ -125,7 +194,7 @@ class TestAssociations < Test::Unit::TestCase
|
|
125
194
|
end
|
126
195
|
|
127
196
|
def test_belongs_to_many_with_dn_key
|
128
|
-
@user_class.belongs_to :dn_groups, :many => "memberUid", :
|
197
|
+
@user_class.belongs_to :dn_groups, :many => "memberUid", :primary_key => "dn"
|
129
198
|
@user_class.set_associated_class(:dn_groups, @group_class)
|
130
199
|
@group_class.has_many :dn_members, :wrap => "memberUid", :primary_key => "dn"
|
131
200
|
@group_class.set_associated_class(:dn_members, @user_class)
|
@@ -292,8 +361,8 @@ class TestAssociations < Test::Unit::TestCase
|
|
292
361
|
group_class.has_many :members, :class => @user_class, :wrap => "memberUid",
|
293
362
|
:extend => mod
|
294
363
|
group_class.has_many :primary_members, :class => @user_class,
|
295
|
-
:foreign_key => "gidNumber",
|
296
364
|
:primary_key => "gidNumber",
|
365
|
+
:foreign_key => "gidNumber",
|
297
366
|
:extend => mod
|
298
367
|
end
|
299
368
|
end
|