dm-ldap-adapter 0.4.3-java

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.
@@ -0,0 +1,179 @@
1
+ $LOAD_PATH << File.dirname(__FILE__)
2
+ require 'spec_helper'
3
+
4
+ describe DataMapper::Adapters::LdapAdapter do
5
+
6
+ before do
7
+ DataMapper.repository(:ldap) do
8
+ User.all(:login.like => "b%").destroy!
9
+ Group.all(:name.like => "test_%").destroy!
10
+
11
+ #First we create some items.
12
+ user1 = User.create(:login => "black", :name => 'Black', :age => 0)
13
+ user2 = User.create(:login => "brown", :name => 'Brown', :age => 25)
14
+ user3 = User.create(:login => "blue", :name => 'Blue', :age => nil)
15
+
16
+ group1 = Group.create(:name => "test_root_group")
17
+ group2 = Group.create(:name => "test_admin_group")
18
+
19
+ #Then we retrive the items we created earlier and use them for tests.
20
+ @user1 = User.get!(user1.id)
21
+ @user2 = User.get!(user2.id)
22
+ @user3 = User.get!(user3.id)
23
+
24
+ @group1 = Group.get!(group1.id)
25
+ @group2 = Group.get!(group2.id)
26
+ end
27
+ end
28
+
29
+ after(:all) do
30
+ DataMapper.repository(:ldap) do
31
+ User.all(:login.like => "b%").destroy!
32
+ Group.all(:name.like => "test_%").destroy!
33
+ end
34
+ end
35
+
36
+ it 'should have valid testing data' do
37
+ @user1.should be_a_kind_of(User)
38
+ @user2.should be_a_kind_of(User)
39
+ @user3.should be_a_kind_of(User)
40
+ @group1.should be_a_kind_of(Group)
41
+ @group2.should be_a_kind_of(Group)
42
+ end
43
+
44
+ it 'should successfully save an object' do
45
+ DataMapper.repository(:ldap) do
46
+ @group1.new?.should be_false
47
+ end
48
+ end
49
+
50
+ it 'should be able to get the object' do
51
+ DataMapper.repository(:ldap) do
52
+ Group.get(@group1.id).should == @group1
53
+ end
54
+ end
55
+
56
+ it 'should be able to get all the objects' do
57
+ DataMapper.repository(:ldap) do
58
+ Group.all(:name.like => "test_%").should == [@group1, @group2]
59
+ end
60
+ end
61
+
62
+ it 'should be able to have a user' do
63
+ DataMapper.repository(:ldap) do
64
+ begin
65
+ gu = GroupUser.new(:user_id => @user1.id, :group_id => @group1.id)
66
+ # the next load prevent strange errors
67
+ @user1 = User.get!(@user1.id)
68
+ @user1.groups << @group1
69
+ @user1.save
70
+ User.get(@user1.id).groups.should == [@group1]
71
+ rescue => e
72
+ puts e
73
+ puts e.backtrace.join "\n\t"
74
+ raise e
75
+ end
76
+ end
77
+ end
78
+
79
+ it 'should be able to delete a user' do
80
+ DataMapper.repository(:ldap) do
81
+ # the next load prevent strange errors
82
+ @user1 = User.get!(@user1.id)
83
+ @user1.groups << @group1
84
+ @user1.save
85
+ @user1.groups.delete(@group1)
86
+ @user1.save
87
+ User.get(@user1.id).groups.should == []
88
+ @user1.groups << @group1
89
+ @user1.groups << @group2
90
+ @user1.save
91
+ @user1.groups.delete(@group1)
92
+ @user1.save
93
+ User.get(@user1.id).groups.should == [@group2]
94
+ end
95
+ end
96
+
97
+ it 'should be able to have users and remove them again' do
98
+ DataMapper.repository(:ldap) do
99
+ # the next load prevent strange errors
100
+ @user1 = User.get!(@user1.id)
101
+ @user1.groups << @group1
102
+ @user1.save
103
+ User.get(@user1.id).groups.should == [@group1]
104
+ @user1.groups << @group2
105
+ @user1.save
106
+ User.get(@user1.id)
107
+ @user1.groups.sort{|g1, g2| g1.id <=> g2.id}.should == [@group1, @group2]
108
+ @user1.groups.delete(@group1)
109
+ @user1.save
110
+ User.get(@user1.id).groups.should == [@group2]
111
+ @user1.groups.delete(@group2)
112
+ @user1.save
113
+ User.get(@user1.id).groups.should == []
114
+ end
115
+ end
116
+
117
+ it 'should be able to have two users' do
118
+ DataMapper.repository(:ldap) do
119
+ # the next load prevent strange errors
120
+ @user1 = User.get!(@user1.id)
121
+ @user1.groups << @group1
122
+ @user1.groups << @group2
123
+ @user1.save
124
+ User.get(@user1.id).groups.sort{|g1, g2| g1.id <=> g2.id}.should == [@group1, @group2]
125
+ @user2.groups << @group1
126
+ @user2.save
127
+ end
128
+ DataMapper.repository(:ldap) do
129
+ User.get(@user2.id).groups.should == [@group1]
130
+ User.get(@user1.id).groups.sort{|g1, g2| g1.id <=> g2.id}.should == [@group1, @group2]
131
+ end
132
+ end
133
+
134
+ it 'should raise an not found error' do
135
+ lambda do
136
+ User.get!(4711)
137
+ end.should raise_error(DataMapper::ObjectNotFoundError)
138
+ end
139
+
140
+ it 'should be able to have two users in one group' do
141
+ DataMapper.repository(:ldap) do
142
+ @user1 = User.get!(@user1.id)
143
+ @user1.groups << @group1
144
+ @user1.groups << @group2
145
+ @user1.groups.sort{|g1, g2| g1.id <=> g2.id}.should == [@group1, @group2]
146
+ @user2.groups << @group1
147
+ end
148
+ DataMapper.repository(:ldap) do
149
+ User.get(@user1.id).groups.sort{|g1, g2| g1.id <=> g2.id}.should == [@group1, @group2]
150
+ User.get(@user2.id).groups.should == [@group1]
151
+ end
152
+ end
153
+
154
+ it 'should be able to delete a user from a group' do
155
+ DataMapper.repository(:ldap) do
156
+ size_before = GroupUser.all.size
157
+
158
+ @user1.groups << @group1
159
+ GroupUser.all.size.should == size_before+1
160
+
161
+ @user1.groups << @group2
162
+ GroupUser.all.size.should == size_before+2
163
+
164
+ @user2.groups << @group1
165
+ GroupUser.all.size.should == size_before+3
166
+ end
167
+ DataMapper.repository(:ldap) do
168
+ @user1 = User.get!(@user1.id)
169
+ @user1.groups.delete(@group1)
170
+ User.get(@user1.id).groups.should == [@group2]
171
+ User.get(@user2.id).groups.should == [@group1]
172
+ @user2 = User.get!(@user2.id)
173
+ @user2.groups.delete(@group1)
174
+ User.get(@user1.id).groups.should == [@group2]
175
+ User.get(@user2.id).groups.should == []
176
+ end
177
+ end
178
+
179
+ end
@@ -0,0 +1,32 @@
1
+ $LOAD_PATH << File.dirname(__FILE__)
2
+ require 'spec_helper'
3
+
4
+ describe DataMapper.repository(:ldap).adapter do
5
+
6
+ describe 'user authentication' do
7
+
8
+ before do
9
+ DataMapper.repository(:ldap) do
10
+ User.all.destroy!
11
+ @user = User.new(:login => "beige", :name => 'Beige')
12
+ @user.password = "asd123"
13
+ @user.save
14
+ end
15
+ end
16
+
17
+ it 'should successfully authenticate' do
18
+ DataMapper.repository(:ldap) do
19
+ @user.authenticate("asd123").should be_true
20
+ @user.password = "asd"
21
+ @user.save
22
+ @user.authenticate("asd").should be_true
23
+ end
24
+ end
25
+
26
+ it 'should not authenticate' do
27
+ DataMapper.repository(:ldap) do
28
+ @user.authenticate("asdasd").should be_false
29
+ end
30
+ end
31
+ end
32
+ end
data/spec/contact.rb ADDED
@@ -0,0 +1,58 @@
1
+ class Contact
2
+ include DataMapper::Resource
3
+
4
+ def self.auto_upgrade!(args = nil)
5
+ DataMapper.logger.warn("Skipping #{self.name}.auto_upgrade!")
6
+ end
7
+
8
+ def self.default_repository_name
9
+ :ldap
10
+ end
11
+
12
+ def self.repository_name
13
+ :ldap
14
+ end
15
+
16
+ property :id, Serial, :field => 'uid'
17
+ property :cn, String, :required => true
18
+ property :salutation, String, :lazy => [:view]
19
+ property :title, String, :lazy => [:view]
20
+ property :givenname, String
21
+ property :sn, String, :required => true
22
+ property :o, String
23
+ property :postaladdress, String, :lazy => [:view]
24
+ property :postalcode, String, :lazy => [:view]
25
+ property :l, String
26
+ property :st, String, :lazy => [:view]
27
+ property :c, String, :lazy => [:view]
28
+ property :telephonenumber, String
29
+ property :facsimiletelephonenumber, String, :lazy => [:view]
30
+ property :pager, String, :lazy => [:view]
31
+ property :jpegphoto, LdapArray, :lazy => true
32
+ property :mobile, String, :lazy => [:view]
33
+ property :anniversary, String, :lazy => [:view]
34
+ property :mail, LdapArray
35
+ property :labeleduri, LdapArray, :lazy => [:view]
36
+ property :marker, LdapArray, :lazy => [:view]
37
+ property :description, LdapArray, :lazy => [:view]
38
+
39
+ dn_prefix do |u|
40
+ "uid=#{u.id}"
41
+ end
42
+
43
+ ldap_properties do |u|
44
+ properties = { :objectclass => ['inetOrgPerson']}#, "posixAccount", "shadowAccount"]}#'contactPerson'] }
45
+ properties
46
+ end
47
+
48
+ treebase 'ou=people'
49
+
50
+ before :save, :fix_object
51
+
52
+ private
53
+
54
+ def fix_object
55
+ self.cn = "#{self.givenname} #{self.sn}".strip
56
+ end
57
+
58
+ end
@@ -0,0 +1,239 @@
1
+ $LOAD_PATH << File.dirname(__FILE__)
2
+ require 'spec_helper'
3
+ require 'ldap/transactions'
4
+
5
+ describe DataMapper::Adapters::LdapAdapter do
6
+
7
+ before(:each) do
8
+ DataMapper.repository(:ldap) do
9
+ User.all.destroy!
10
+ @user1 = User.create(:login => "black", :name => 'Black', :age => 0)
11
+ @user2 = User.create(:login => "brown", :name => 'Brown', :age => 25)
12
+ @user3 = User.create(:login => "blue", :name => 'Blue', :age => nil)
13
+ end
14
+ end
15
+
16
+ it 'should create an uid' do
17
+ class User
18
+ # put the assert here
19
+ dn_prefix { |user| user.id.should_not == nil; "uid=#{user.login}"}
20
+ end
21
+
22
+ DataMapper.repository(:ldap) do
23
+ id = @user1.id
24
+ @user1.destroy
25
+ @user1 = User.create(:login => "black", :name => 'Black', :age => 0)
26
+ @user1.id.should_not == id
27
+ end
28
+ end
29
+
30
+ it 'should successfully save an object' do
31
+ DataMapper.repository(:ldap) do
32
+ @user1.new?.should be_false
33
+ User.first(:login => @user1.login).new?.should be_false
34
+ end
35
+ end
36
+
37
+ it 'should be able to use multiline attributes' do
38
+ DataMapper.repository(:ldap) do
39
+ @user1.name = "many\nlines\nin\none\property"
40
+ @user1.save
41
+ User.get(@user1.id).name.should == "many\nlines\nin\none\property"
42
+ end
43
+ end
44
+
45
+ it 'should raise an error when trying to create an entity with already used key' do
46
+ DataMapper.repository(:ldap) do
47
+ #p User.first(:login => "black")
48
+ lambda { User.create(:login => "black", :name => 'Black', :age => 0) }.should raise_error
49
+ #p User.all
50
+ end
51
+ end
52
+
53
+ it 'should be able to get all the objects' do
54
+ DataMapper.repository(:ldap) do
55
+ User.all(:login.like => "b%").should == [@user1, @user2, @user3]
56
+ end
57
+ end
58
+
59
+ it 'should be able to search with empty result' do
60
+ DataMapper.repository(:ldap) do
61
+ User.all(:name => "blablublo").should == []
62
+ end
63
+ end
64
+
65
+ it 'should be able to search for objects with equal value' do
66
+ DataMapper.repository(:ldap) do
67
+ User.all(:name => "Brown").should == [@user2]
68
+ User.all(:age => 25).should == [@user2]
69
+ end
70
+ end
71
+
72
+ it 'should be able to search for objects included in an array of values' do
73
+ DataMapper.repository(:ldap) do
74
+ User.all(:age => [ 25, 50, 75, 100 ]).should == [@user2]
75
+ end
76
+ end
77
+
78
+ #it 'should be able to search for objects included in a range of values' do
79
+ # User.all(:age => 25..100).should == [@user2]
80
+ #end
81
+
82
+ it 'should be able to search for objects with nil value' do
83
+ DataMapper.repository(:ldap) do
84
+ User.all(:age => nil, :name.like => "B%").should == [@user3]
85
+ end
86
+ end
87
+
88
+ it 'should be able to search for objects with not equal value' do
89
+ DataMapper.repository(:ldap) do
90
+ User.all(:age.not => 25, :name.like => "B%").should == [@user1, @user3]
91
+ end
92
+ end
93
+
94
+ it 'should be able to search for objects not included in an array of values' do
95
+ DataMapper.repository(:ldap) do
96
+ User.all(:age.not => [ 25, 50, 75, 100 ], :name.like => "B%").should == [@user1, @user3]
97
+ end
98
+ end
99
+
100
+ it 'should be able to search for objects with not equal value' do
101
+ DataMapper.repository(:ldap) do
102
+ User.all(:age.not => nil, :name.like => "B%").should == [@user1, @user2]
103
+ end
104
+ end
105
+
106
+ it 'should search objects with or conditions' do
107
+ DataMapper.repository(:ldap) do
108
+ User.all(:age.not => nil, :conditions => ["name='Black' or name='Blue'"]).should == [@user1]
109
+ User.all(:age.not => nil, :conditions => ["name='Black' or name='Brown'"]).should == [@user1, @user2]
110
+ User.all(:age => nil, :conditions => ["name='Black' or name='Brown'"]).should == []
111
+ User.all(:age => nil, :conditions => ["name='Black' or name='Brown' or name='Blue'"]).should == [@user3]
112
+ User.all(:conditions => ["name='Black' or name='Brown' or name='Blue'"]).should == [@user1, @user2, @user3]
113
+ User.all(:conditions => ["name='Black'"]).should == [@user1]
114
+ User.all(:conditions => ["name like 'Bl%'"]).should == [@user1, @user3]
115
+ User.all(:conditions => ["name like 'B%'"]).should == [@user1, @user2, @user3]
116
+ User.all(:conditions => ["name like 'X%X_X'"]).should == []
117
+ User.all(:conditions => ["name like 'Bla%' or name like 'Br%'"]).should == [@user1, @user2]
118
+ end
119
+ end
120
+
121
+
122
+ # it 'should be able to search for objects not included in a range of values' do
123
+ # User.all(:age.not => 25..100).should == [@user1, @user3]
124
+ # end
125
+
126
+ # it 'should be able to search for objects with not nil value' do
127
+ # User.all(:age.not => 25, :name.like => "B%").should == [@user1, @user2]
128
+ # end
129
+
130
+ it 'should be able to search for objects that match value' do
131
+ DataMapper.repository(:ldap) do
132
+ User.all(:name.like => 'Bl%').should == [@user1, @user3]
133
+ end
134
+ end
135
+
136
+ #it 'should be able to search for objects with value greater than' do
137
+ # User.all(:age.gt => 0).should == [@user2]
138
+ #end
139
+
140
+ #it 'should be able to search for objects with value greater than or equal to' do
141
+ # User.all(:age.gte => 0).should == [@user1, @user2]
142
+ #end
143
+
144
+ #it 'should be able to search for objects with value less than' do
145
+ # User.all(:age.lt => 1).should == [@user1]
146
+ #end
147
+
148
+ #it 'should be able to search for objects with value less than or equal to' do
149
+ # User.all(:age.lte => 0).should == [@user1]
150
+ #end
151
+
152
+ it 'should be able to update an object' do
153
+ DataMapper.repository(:ldap) do
154
+ @user1 = User.get(@user1.id)
155
+ @user1.age = 10
156
+ @user1.save
157
+ User.get(@user1.id).age.should == 10
158
+ @user1.age = 70
159
+ @user1.save
160
+ User.get(@user1.id).age.should == 70
161
+ end
162
+ end
163
+
164
+ it 'should be able to update an object with nil' do
165
+ DataMapper.repository(:ldap) do
166
+ begin
167
+ @user1 = User.get(@user1.id)
168
+ @user1.age = nil
169
+ @user1.save
170
+ User.get(@user1.id).age.should be_nil
171
+ @user1.age = 70
172
+ @user1.save
173
+ User.get(@user1.id).age.should == 70
174
+ rescue => e
175
+ puts e
176
+ puts e.backtrace.join "\n\t"
177
+ raise e
178
+ end
179
+ end
180
+ end
181
+
182
+ it 'should be able to destroy an object' do
183
+ DataMapper.repository(:ldap) do
184
+ size = User.all.size
185
+ @user1.destroy
186
+ User.all.size.should == size - 1
187
+ end
188
+ end
189
+
190
+ it 'should work with transactions' do
191
+ DataMapper.repository(:ldap) do
192
+ begin
193
+ User.transaction do
194
+ user = User.get(@user3.id)
195
+ user.name = "B new"
196
+ user.save
197
+ User.get(@user3.id).name.should == 'B new'
198
+ end
199
+ rescue => e
200
+ puts e
201
+ puts e.backtrace.join "\n\t"
202
+ raise e
203
+ end
204
+ end
205
+ end
206
+
207
+ if DataMapper.repository(:ldap).adapter.respond_to? :open_ldap_connection
208
+
209
+ it 'should use one connection for several actions' do
210
+ DataMapper.repository(:ldap) do
211
+ DataMapper.repository.adapter.open_ldap_connection do
212
+ hash = DataMapper.repository.adapter.instance_variable_get(:@ldap_connection).current.hash
213
+ User.all
214
+ DataMapper.repository.adapter.instance_variable_get(:@ldap_connection).current.hash.should == hash
215
+ user = User.get(@user3.id)
216
+ DataMapper.repository.adapter.instance_variable_get(:@ldap_connection).current.hash.should == hash
217
+ user.name = "another name"
218
+ user.save
219
+ DataMapper.repository.adapter.instance_variable_get(:@ldap_connection).current.hash.should == hash
220
+ end
221
+ DataMapper.repository.adapter.instance_variable_get(:@ldap_connection).current.hash.should_not == hash
222
+ end
223
+ end
224
+
225
+ it 'should use new connection for each action' do
226
+ DataMapper.repository(:ldap) do
227
+ hash = DataMapper.repository.adapter.instance_variable_get(:@ldap_connection).current.hash
228
+ User.all
229
+
230
+ DataMapper.repository.adapter.instance_variable_get(:@ldap_connection).current.hash.should_not == hash
231
+ user = User.get(@user3.id)
232
+ DataMapper.repository.adapter.instance_variable_get(:@ldap_connection).current.hash.should_not == hash
233
+ user.name = "yet another name"
234
+ user.save
235
+ DataMapper.repository.adapter.instance_variable_get(:@ldap_connection).current.hash.should_not == hash
236
+ end
237
+ end
238
+ end
239
+ end