... | ... |
@@ -167,15 +167,18 @@ sub delete_user { |
167 | 167 |
# Delete user |
168 | 168 |
my $dbi = $self->app->dbi; |
169 | 169 |
my $error; |
170 |
+ my $count; |
|
170 | 171 |
eval { |
171 | 172 |
$dbi->connector->txn(sub { |
172 |
- eval { $self->_delete_db_user($user) }; |
|
173 |
+ eval { $count = $self->_delete_db_user($user) }; |
|
173 | 174 |
croak $error = $@ if $@; |
174 | 175 |
eval {$self->_delete_user_dir($user) }; |
175 | 176 |
croak $error = $@ if $@; |
176 | 177 |
}); |
177 | 178 |
}; |
178 | 179 |
croak $error if $@; |
180 |
+ |
|
181 |
+ return $count; |
|
179 | 182 |
} |
180 | 183 |
|
181 | 184 |
sub original_project { |
... | ... |
@@ -505,7 +508,9 @@ sub _delete_db_user { |
505 | 508 |
my ($self, $user) = @_; |
506 | 509 |
|
507 | 510 |
# Delete database user |
508 |
- $self->app->dbi->model('user')->delete(id => $user); |
|
511 |
+ my $count = $self->app->dbi->model('user')->delete(id => $user); |
|
512 |
+ |
|
513 |
+ return $count; |
|
509 | 514 |
} |
510 | 515 |
|
511 | 516 |
sub _delete_user_dir { |
... | ... |
@@ -11,8 +11,6 @@ |
11 | 11 |
my $rule = [ |
12 | 12 |
user => [ |
13 | 13 |
['not_blank' => 'User name is empty.'], |
14 |
- [{'regex' => qr/^[a-zA-Z0-9_]+$/} => 'User name contains invalid character.'], |
|
15 |
- [{'length' => {max => 20}} => 'User name is too long.'] |
|
16 | 14 |
] |
17 | 15 |
]; |
18 | 16 |
my $vresult = $validator->validate($params, $rule); |
... | ... |
@@ -24,14 +22,21 @@ |
24 | 22 |
my $user = $params->{user}; |
25 | 23 |
|
26 | 24 |
# Delete user |
27 |
- eval { app->manager->delete_user($user) }; |
|
25 |
+ my $count; |
|
26 |
+ eval { $count = app->manager->delete_user($user) }; |
|
28 | 27 |
if ($@) { |
29 |
- app->log->error($@); |
|
28 |
+ app->log->error("/_admin/users?op=delete: $@"); |
|
29 |
+ $errors = ['Internal Error']; |
|
30 |
+ } |
|
31 |
+ elsif ($count == 0) { |
|
32 |
+ app->log->error("/_admin/users?op=delete: User $user not exists"); |
|
30 | 33 |
$errors = ['Internal Error']; |
31 | 34 |
} |
32 | 35 |
else { |
33 |
- $self->flash(message => "User $user is deleted"); |
|
36 |
+ $self->flash(message => "User $user is deleted."); |
|
34 | 37 |
$self->redirect_to('current'); |
38 |
+ $self->finish_rendering; |
|
39 |
+ return; |
|
35 | 40 |
} |
36 | 41 |
} |
37 | 42 |
else { $errors = $vresult->messages } |
... | ... |
@@ -98,7 +98,7 @@ note 'Login as admin user'; |
98 | 98 |
|
99 | 99 |
note 'Admin User page'; |
100 | 100 |
{ |
101 |
- $t->post_ok('/_admin/users')->content_like(qr/Admin Users/); |
|
101 |
+ $t->get_ok('/_admin/users')->content_like(qr/Admin Users/); |
|
102 | 102 |
} |
103 | 103 |
|
104 | 104 |
note 'Create User page'; |
... | ... |
@@ -176,7 +176,26 @@ note 'Login as admin user'; |
176 | 176 |
$t->post_ok('/reset-password?user=kimoto&op=reset', form => {password => 'a', password2 => 'a'}) |
177 | 177 |
->content_like(qr/Success.*changed/) |
178 | 178 |
; |
179 |
- |
|
180 |
- |
|
179 |
+ } |
|
180 |
+ |
|
181 |
+ note 'Delete user'; |
|
182 |
+ { |
|
183 |
+ # Create user |
|
184 |
+ $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto-tmp', password => 'a', password2 => 'a'}) |
|
185 |
+ ->content_like(qr/kimoto-tmp/); |
|
186 |
+ $t->get_ok('/_admin/users') |
|
187 |
+ ->content_like(qr/kimoto-tmp/); |
|
188 |
+ |
|
189 |
+ # User not exists |
|
190 |
+ $t->post_ok('/_admin/users?op=delete', form => {user => 'kimoto-notting'}) |
|
191 |
+ ->content_like(qr/Internal/); |
|
192 |
+ |
|
193 |
+ # User not exists |
|
194 |
+ $t->post_ok('/_admin/users?op=delete', form => {user => 'kimoto-tmp'}) |
|
195 |
+ ->content_like(qr/User.*deleted/); |
|
196 |
+ $t->get_ok('/_admin/users') |
|
197 |
+ ->content_unlike(qr/kimoto-tmp/); |
|
198 |
+ |
|
199 |
+ ; |
|
181 | 200 |
} |
182 | 201 |
} |