ucb_confluence 0.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.
@@ -0,0 +1,3 @@
1
+ module Confluence
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,18 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+
4
+ describe Confluence::Config do
5
+ before(:all) do
6
+ @config_yml = "#{Confluence.root()}/config/config.yml"
7
+ end
8
+
9
+
10
+ it "should load its configuration" do
11
+ config = Confluence::Config.new(@config_yml)
12
+ config[:server_url].should match(/http/)
13
+ config[:ldap_url].should match(/ldap/)
14
+ config[:username].should_not be_nil
15
+ config[:password].should_not be_nil
16
+ config[:user_default_password].should_not be_nil
17
+ end
18
+ end
@@ -0,0 +1,21 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+
4
+ describe Confluence do
5
+ before(:all) do
6
+ Confluence.config = Confluence::Config.new("#{Confluence.root()}/config/config.yml")
7
+ end
8
+
9
+
10
+ it "should initialize" do
11
+ Confluence.conn.should be_a(Confluence::Conn)
12
+ end
13
+
14
+ it "should set ROOT" do
15
+ File.expand_path(File.dirname(__FILE__) + '/../../').should == Confluence.root()
16
+ end
17
+
18
+ it "should configure logging" do
19
+ Confluence.logger.should_not be_nil
20
+ end
21
+ end
@@ -0,0 +1,9 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+
4
+ describe Confluence::Conn do
5
+ it "should connect to confluence" do
6
+ config = Confluence::Config.new("#{Confluence.root()}/config/config.yml")
7
+ Confluence::Conn.new(config).should be_a(Confluence::Conn)
8
+ end
9
+ end
@@ -0,0 +1,45 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+
4
+ describe Confluence::Group do
5
+ before(:all) do
6
+ Confluence.config = Confluence::Config.new("#{Confluence.root()}/config/config.yml")
7
+ Confluence::Group.delete("atestgroup") if Confluence::Group.all.include?("atestgroup")
8
+ end
9
+
10
+
11
+ it "should get all groups" do
12
+ Confluence::Group.all.should_not be_empty
13
+ end
14
+
15
+ context "create()" do
16
+ it "should create a group" do
17
+ Confluence::Group.all.should_not include("atestgroup")
18
+ Confluence::Group.create("atestgroup").should be_true
19
+ Confluence::Group.all.should include("atestgroup")
20
+ Confluence::Group.delete("atestgroup")
21
+ Confluence::Group.all.should_not include("atestgroup")
22
+ end
23
+
24
+ it "should not create a group if the group already exists" do
25
+ Confluence::Group.create("atestgroup")
26
+ Confluence::Group.all.should include("atestgroup")
27
+ Confluence::Group.create("atestgroup").should be_false
28
+ Confluence::Group.delete("atestgroup")
29
+ end
30
+ end
31
+
32
+ context "delete()" do
33
+ it "should delete a group" do
34
+ Confluence::Group.create("atestgroup")
35
+ Confluence::Group.all.should include("atestgroup")
36
+ Confluence::Group.delete("atestgroup").should be_true
37
+ Confluence::Group.all.should_not include("atestgroup")
38
+ end
39
+
40
+ it "should not delete a group if the group does not exist" do
41
+ Confluence::Group.all.should_not include("atestgroup")
42
+ Confluence::Group.delete("atestgroup").should be_false
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,51 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+
4
+ describe Confluence::Jobs::DisableExpiredUsers do
5
+ before(:all) do
6
+ Confluence.config = Confluence::Config.new("#{Confluence.root()}/config/config.yml")
7
+ end
8
+
9
+ before(:each) do
10
+ @job = Confluence::Jobs::DisableExpiredUsers.new
11
+
12
+ user = Confluence::User.find_by_name("n1")
13
+ user.delete() if user
14
+
15
+ @user = Confluence::User.new({:name => "n1", :fullname => "fn1", :email => "e@b.e"})
16
+ end
17
+
18
+ after(:each) do
19
+ @user.delete()
20
+ end
21
+
22
+
23
+ context "#disable_expired_users()" do
24
+ it "should disable users no longer in LDAP" do
25
+ @user.save()
26
+ @job.stub!(:confluence_user_names).and_return([@user.name])
27
+ @job.stub!(:find_in_confluence).and_return(@user)
28
+ @job.stub!(:find_in_ldap).and_return(nil)
29
+
30
+ @user.disabled?.should be_false
31
+ @job.disable_expired_users()
32
+ @user.disabled?.should be_true
33
+ @user.groups.should be_empty
34
+ end
35
+
36
+ it "should disable user's LDAP considers expired" do
37
+ ldap_user = mock("user1", {:ldap_uid => "n1", :first_name => "f1",
38
+ :last_name => "l1", :email => "e1"})
39
+ @user.save()
40
+ @job.stub!(:confluence_user_names).and_return([@user.name])
41
+ @job.stub!(:find_in_confluence).and_return(@user)
42
+ @job.stub!(:find_in_ldap).and_return(ldap_user)
43
+ @job.stub!(:eligible_for_confluence?).and_return(false)
44
+
45
+ @user.disabled?.should be_false
46
+ @job.disable_expired_users()
47
+ @user.disabled?.should be_true
48
+ @user.groups.should be_empty
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,77 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+
4
+ describe Confluence::Jobs::IstLdapSync do
5
+ before(:all) do
6
+ Confluence.config = Confluence::Config.new("#{Confluence.root()}/config/config.yml")
7
+ end
8
+
9
+ before(:each) do
10
+ @job = Confluence::Jobs::IstLdapSync.new
11
+
12
+ user = Confluence::User.find_by_name("n1")
13
+ user.delete() if user
14
+
15
+ @user = Confluence::User.new({:name => "n1", :fullname => "fn1", :email => "e@b.e"})
16
+ end
17
+
18
+ after(:each) do
19
+ @user.delete()
20
+ end
21
+
22
+
23
+ context "#sync_ist_from_ldap()" do
24
+ it "should add IST users found in LDAP to Confluence" do
25
+ ldap_user = mock("user1", {:uid => "n1", :first_name => "f1",
26
+ :last_name => "l1", :email => "e1"})
27
+ @job.stub!(:ist_people).and_return([ldap_user])
28
+ @job.stub!(:eligible_for_confluence?).and_return(true)
29
+ @job.stub!(:find_or_new_user).and_return(@user)
30
+
31
+ Confluence::User.exists?(@user.name).should be_false
32
+ @job.sync_ist_from_ldap()
33
+ @user = Confluence::User.find_by_name(@user.name)
34
+ @user.groups.should have(2).records
35
+ @user.groups.should include(Confluence::User::DEFAULT_GROUP)
36
+ @user.groups.should include(Confluence::Jobs::IstLdapSync::IST_GROUP)
37
+ end
38
+
39
+ it "should give new IST users found in LDAP membership to the IST_GROUP" do
40
+ ldap_user = mock("user1", {:uid => "n1", :first_name => "f1",
41
+ :last_name => "l1", :email => "e1"})
42
+ @job.stub!(:ist_people).and_return([ldap_user])
43
+ @job.stub!(:eligible_for_confluence?).and_return(true)
44
+ @job.stub!(:find_or_new_user).and_return(@user)
45
+
46
+
47
+ @user.save()
48
+ Confluence::User.exists?(@user.name).should be_true
49
+ @user.groups.should have(1).record
50
+ @user.groups.should include(Confluence::User::DEFAULT_GROUP)
51
+
52
+ @job.sync_ist_from_ldap()
53
+ @user.groups.should have(2).records
54
+ @user.groups.should include(Confluence::User::DEFAULT_GROUP)
55
+ @user.groups.should include(Confluence::Jobs::IstLdapSync::IST_GROUP)
56
+ end
57
+ end
58
+
59
+
60
+ context "#sync_ist_from_confluence()" do
61
+ it "should remove users from IST group" do
62
+ ldap_user = mock("user1", {:uid => "n1", :first_name => "f1",
63
+ :last_name => "l1", :email => "e1"})
64
+ @user.save()
65
+ @job.stub!(:confluence_user_names).and_return([@user.name])
66
+ @job.stub!(:find_in_confluence).and_return(@user)
67
+ @job.stub!(:find_in_ldap).and_return(ldap_user)
68
+ @job.stub!(:eligible_for_confluence?).and_return(true)
69
+ @job.stub!(:in_ist?).and_return(false)
70
+
71
+ @user.disabled?.should be_false
72
+ @job.sync_ist_from_confluence()
73
+ @user.groups.should have(1).record
74
+ @user.groups.should_not include(Confluence::Jobs::IstLdapSync::IST_GROUP)
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,221 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+
4
+ describe Confluence::User do
5
+ before(:all) do
6
+ Confluence.config = Confluence::Config.new("#{Confluence.root()}/config/config.yml")
7
+
8
+ @user = Confluence::User.new({
9
+ :name => "111111",
10
+ :fullname => "Test Dude",
11
+ :email => "test_dude@berkeley.edu"
12
+ })
13
+ @user.save
14
+
15
+ @group = "test-group"
16
+ Confluence::Group.create(@group)
17
+ end
18
+
19
+ after(:all) do
20
+ @user.delete()
21
+ Confluence::Group.delete(@group)
22
+ end
23
+
24
+ it "should find all users" do
25
+ Confluence::User.all_names.should_not be_empty
26
+ end
27
+
28
+ it "should initialize a user" do
29
+ attrs = {:name => 'n', :fullname => 'fn', :email => 'e'}
30
+ u = Confluence::User.new(attrs)
31
+ u.name.should == 'n'
32
+ u.fullname.should == 'fn'
33
+ u.email.should == 'e'
34
+
35
+ attrs = {'name' => 'n', 'fullname' => 'fn', 'email' => 'e'}
36
+ u = Confluence::User.new(attrs)
37
+ u.name.should == 'n'
38
+ u.fullname.should == 'fn'
39
+ u.email.should == 'e'
40
+ end
41
+
42
+ it "should find_by_name" do
43
+ user = Confluence::User.find_by_name(@user.name)
44
+ user.should be_a(Confluence::User)
45
+ user.name.should == @user.name
46
+ user.email.should == @user.email
47
+ user.fullname.should == @user.fullname
48
+ end
49
+
50
+ it "should format when sent to_s" do
51
+ user = Confluence::User.new(@user)
52
+ user.to_s.should == "name=#{@user[:name]}, fullname=#{@user[:fullname]}, email=#{@user[:email]}"
53
+ end
54
+
55
+ it "should allow attributes to be access with Hash interface" do
56
+ name = "111111"
57
+ fullname = "Test Dude"
58
+ email = "test_dude@berkeley.edu"
59
+ @user[:name].should == name
60
+ @user[:fullname].should == fullname
61
+ @user[:email].should == email
62
+
63
+ @user["name"].should == name
64
+ @user["fullname"].should == fullname
65
+ @user["email"].should == email
66
+
67
+ @user[:bad_att].should == nil
68
+ end
69
+
70
+ it "should save a user's attributes" do
71
+ # Confluence::User.find_by_name("name").delete
72
+ Confluence::User.exists?("name").should_not be_true
73
+ # New User
74
+ user = Confluence::User.new({:name => "name", :email => "email", :fullname => "fullname"})
75
+ user.should be_new_record
76
+
77
+ user.save
78
+ user.should_not be_new_record
79
+ user = Confluence::User.find_by_name(user.name)
80
+ user.should_not be_new_record
81
+ user.email.should == "email"
82
+ user.name.should == "name"
83
+ user.fullname.should == "fullname"
84
+
85
+ # Update attributes
86
+ user.email = "emailx"
87
+ user.fullname = "fullnamex"
88
+ user.save
89
+
90
+ user = Confluence::User.find_by_name(user.name)
91
+ user.email.should == "emailx"
92
+ user.name.should == "name"
93
+ user.fullname.should == "fullnamex"
94
+ user.delete
95
+ end
96
+ end
97
+
98
+
99
+ describe Confluence::User, "class methods" do
100
+ before(:all) do
101
+ Confluence.config = Confluence::Config.new("#{Confluence.root()}/config/config.yml")
102
+
103
+ @user1 = Confluence::User.new({
104
+ :name => "1",
105
+ :fullname => "Test Dude",
106
+ :email => "test_dude@berkeley.edu"
107
+ })
108
+ @user1.save()
109
+
110
+ @user2 = Confluence::User.new({
111
+ :name => "2",
112
+ :fullname => "Test Dude (ACCOUNT DISABLED)",
113
+ :email => "test_dude@berkeley.edu"
114
+ })
115
+ @user2.save()
116
+ end
117
+
118
+ after(:all)do
119
+ u = Confluence::User.find_by_name("1")
120
+ u.delete() if u
121
+
122
+ u = Confluence::User.find_by_name("2")
123
+ u.delete() if u
124
+ end
125
+
126
+ context "expired()" do
127
+ it "should return all users that have disabled accounts" do
128
+ expired_names = Confluence::User.expired.map { |u| u.name }
129
+ expired_names.should_not include(@user1.name)
130
+ expired_names.should include(@user2.name)
131
+ end
132
+ end
133
+
134
+ context "active()" do
135
+ it "should return all users that have enabled accounts" do
136
+ active_names = Confluence::User.active.map { |u| u.name }
137
+ active_names.should include(@user1.name)
138
+ active_names.should_not include(@user2.name)
139
+ end
140
+ end
141
+
142
+ end
143
+
144
+
145
+
146
+ describe Confluence::User, "ldap integration" do
147
+ before(:all) do
148
+ Confluence.config = Confluence::Config.new("#{Confluence.root()}/config/config.yml")
149
+
150
+ @ldap_user = "322586"
151
+ u = Confluence::User.find_by_name(@ldap_user)
152
+ u.delete if u
153
+ end
154
+
155
+ after(:all)do
156
+ u = Confluence::User.find_by_name(@ldap_user)
157
+ u.delete() if u
158
+ end
159
+
160
+ it "should find_or_create_from_ldap" do
161
+ Confluence::User.find_by_name(@ldap_user).should be_nil
162
+ Confluence::User.find_or_create_from_ldap(@ldap_user)
163
+ user = Confluence::User.find_by_name(@ldap_user)
164
+ user.should_not be_nil
165
+ UCB::LDAP::Person.should_not_receive(:find_by_uid)
166
+ Confluence::User.find_or_create_from_ldap(@ldap_user).should_not be_nil
167
+ end
168
+
169
+ it "should raise error if find_or_create_from_ldap can't find user in ldap" do
170
+ lambda { Confluence::User.find_or_create_from_ldap("q") }.should raise_error
171
+ end
172
+ end
173
+
174
+
175
+ describe Confluence::User, "group management" do
176
+ before(:all) do
177
+ Confluence.config = Confluence::Config.new("#{Confluence.root()}/config/config.yml")
178
+
179
+ @user = Confluence::User.new({
180
+ :name => "111111",
181
+ :fullname => "Test Dude",
182
+ :email => "test_dude@berkeley.edu"
183
+ })
184
+ @user.save
185
+
186
+ @group = "test-group"
187
+ Confluence::Group.create(@group)
188
+ end
189
+
190
+ after(:all) do
191
+ @user.delete
192
+ Confluence::Group.delete(@group)
193
+ end
194
+
195
+ it "should return a user's groups" do
196
+ @user.should have(1).groups
197
+ end
198
+
199
+ it "should add a user to a group" do
200
+ @user.groups.should_not include(@group)
201
+ @user.join_group(@group).should be_true
202
+ @user.groups.should include(@group)
203
+ @user.leave_group(@group)
204
+ end
205
+
206
+ it "should gracefully handle bad groups names for join_group" do
207
+ @user.join_group("badgroup").should be_false
208
+ end
209
+
210
+ context "leave_group()" do
211
+ it "should be false if user is not in the group" do
212
+ @user.leave_group("badgroup").should be_false
213
+ end
214
+
215
+ it "should be true if user is in the group" do
216
+ @user.join_group(@group)
217
+ @user.leave_group(@group).should be_true
218
+ @user.groups.should_not include(@group)
219
+ end
220
+ end
221
+ end