... | ... |
@@ -111,22 +111,7 @@ sub startup { |
111 | 111 |
} |
112 | 112 |
); |
113 | 113 |
|
114 |
- # Helper |
|
115 |
- { |
|
116 |
- # API |
|
117 |
- $self->helper(gitprep_api => sub { Gitprep::API->new(shift) }); |
|
118 |
- |
|
119 |
- # Finish rendering |
|
120 |
- $self->helper(finish_rendering => sub { |
|
121 |
- my $self = shift; |
|
122 |
- |
|
123 |
- $self->stash->{'mojo.routed'} = 1; |
|
124 |
- $self->rendered; |
|
125 |
- |
|
126 |
- return $self; |
|
127 |
- }); |
|
128 |
- } |
|
129 |
- |
|
114 |
+ |
|
130 | 115 |
# Routes |
131 | 116 |
{ |
132 | 117 |
my $r = $self->routes; |
... | ... |
@@ -227,6 +212,22 @@ sub startup { |
227 | 212 |
} |
228 | 213 |
} |
229 | 214 |
} |
215 |
+ |
|
216 |
+ # Helper |
|
217 |
+ { |
|
218 |
+ # API |
|
219 |
+ $self->helper(gitprep_api => sub { Gitprep::API->new(shift) }); |
|
220 |
+ |
|
221 |
+ # Finish rendering |
|
222 |
+ $self->helper(finish_rendering => sub { |
|
223 |
+ my $self = shift; |
|
224 |
+ |
|
225 |
+ $self->stash->{'mojo.routed'} = 1; |
|
226 |
+ $self->rendered; |
|
227 |
+ |
|
228 |
+ return $self; |
|
229 |
+ }); |
|
230 |
+ } |
|
230 | 231 |
|
231 | 232 |
# Reverse proxy support |
232 | 233 |
my $reverse_proxy_on = $self->config->{reverse_proxy}{on}; |
... | ... |
@@ -12,11 +12,11 @@ |
12 | 12 |
my $rule = [ |
13 | 13 |
id => [ |
14 | 14 |
['not_blank' => 'User name is empty.'], |
15 |
- [{'regex' => qr/^[a-zA-Z0-9_]+$/} => 'User name contain invalid character.'], |
|
15 |
+ [user_name => 'User name contain invalid character.'], |
|
16 | 16 |
[{'length' => {max => 20}} => 'User name is too long.'] |
17 | 17 |
], |
18 | 18 |
password => [ |
19 |
- ['not_blank' => 'Input password.'], |
|
19 |
+ ['not_blank' => 'Password is empty.'], |
|
20 | 20 |
['ascii' => 'Password contain invalid character.'], |
21 | 21 |
[{'length' => {max => 20}} => 'Password is too long.'] |
22 | 22 |
], |
... | ... |
@@ -103,6 +103,44 @@ note 'Login as admin user'; |
103 | 103 |
|
104 | 104 |
note 'Create User page'; |
105 | 105 |
{ |
106 |
- $t->post_ok('/_admin/user/create')->content_like(qr/Create User/); |
|
106 |
+ # Page access |
|
107 |
+ $t->get_ok('/_admin/user/create')->content_like(qr/Create User/); |
|
108 |
+ |
|
109 |
+ # User name is empty |
|
110 |
+ $t->post_ok('/_admin/user/create?op=create', form => {id => ''}) |
|
111 |
+ ->content_like(qr/User name is empty/); |
|
112 |
+ |
|
113 |
+ # User name contain invalid character |
|
114 |
+ $t->post_ok('/_admin/user/create?op=create', form => {id => '&'}) |
|
115 |
+ ->content_like(qr/User name contain invalid character/); |
|
116 |
+ |
|
117 |
+ # User name is too long |
|
118 |
+ $t->post_ok('/_admin/user/create?op=create', form => {id => 'a' x 21}) |
|
119 |
+ ->content_like(qr/User name is too long/); |
|
120 |
+ |
|
121 |
+ # Password is empty |
|
122 |
+ $t->post_ok('/_admin/user/create?op=create', form => {id => 'a', password => ''}) |
|
123 |
+ ->content_like(qr/Password is empty/); |
|
124 |
+ |
|
125 |
+ # Password contain invalid character |
|
126 |
+ $t->post_ok('/_admin/user/create?op=create', form => {id => 'a', password => "\t"}) |
|
127 |
+ ->content_like(qr/Password contain invalid character/); |
|
128 |
+ |
|
129 |
+ # Password contain invalid character |
|
130 |
+ $t->post_ok('/_admin/user/create?op=create', form => {id => 'a', password => 'a' x 21}) |
|
131 |
+ ->content_like(qr/Password is too long/); |
|
132 |
+ |
|
133 |
+ # Password contain invalid character |
|
134 |
+ $t->post_ok('/_admin/user/create?op=create', form => {id => 'a', password => 'a', password2 => 'b'}) |
|
135 |
+ ->content_like(qr/Two password/); |
|
136 |
+ |
|
137 |
+ # Create user |
|
138 |
+ $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto', password => 'a', password2 => 'a'}) |
|
139 |
+ ->content_like(qr/Success.*created/); |
|
140 |
+ |
|
141 |
+ # Admin Users page |
|
142 |
+ $t->get_ok('/_admin/users') |
|
143 |
+ ->content_like(qr/Admin Users/) |
|
144 |
+ ->content_like(qr/kimoto/); |
|
107 | 145 |
} |
108 | 146 |
} |