| ... | ... |
@@ -136,3 +136,72 @@ EOS |
| 136 | 136 |
$t->status_is(200); |
| 137 | 137 |
$t->content_type_is('application/x-git-receive-pack-result');
|
| 138 | 138 |
} |
| 139 |
+ |
|
| 140 |
+note 'Private repository and collaborator'; |
|
| 141 |
+{
|
|
| 142 |
+ unlink $db_file; |
|
| 143 |
+ rmtree $rep_home; |
|
| 144 |
+ |
|
| 145 |
+ my $app = Gitprep->new; |
|
| 146 |
+ my $t = Test::Mojo->new($app); |
|
| 147 |
+ $t->ua->max_redirects(3); |
|
| 148 |
+ |
|
| 149 |
+ # Create admin user |
|
| 150 |
+ $t->post_ok('/_start?op=create', form => {password => 'a', password2 => 'a'});
|
|
| 151 |
+ $t->content_like(qr/Login page/); |
|
| 152 |
+ |
|
| 153 |
+ # Login success |
|
| 154 |
+ $t->post_ok('/_login?op=login', form => {id => 'admin', password => 'a'});
|
|
| 155 |
+ $t->content_like(qr/Admin/); |
|
| 156 |
+ |
|
| 157 |
+ # Create user |
|
| 158 |
+ $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto', password => 'a', password2 => 'a'});
|
|
| 159 |
+ $t->content_like(qr/Success.*created/); |
|
| 160 |
+ $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto2', password => 'a', password2 => 'a'});
|
|
| 161 |
+ $t->content_like(qr/Success.*created/); |
|
| 162 |
+ |
|
| 163 |
+ # Login as kimoto |
|
| 164 |
+ $t->post_ok('/_login?op=login', form => {id => 'kimoto', password => 'a'});
|
|
| 165 |
+ $t->get_ok('/')->content_like(qr/kimoto/);
|
|
| 166 |
+ |
|
| 167 |
+ # Create repository |
|
| 168 |
+ $t->post_ok('/_new?op=create', form => {project => 't1', description => 'Hello', readme => 1});
|
|
| 169 |
+ $t->content_like(qr/README/); |
|
| 170 |
+ |
|
| 171 |
+ # Check private repository |
|
| 172 |
+ $t->post_ok("/kimoto/t1/settings?op=private", form => {private => 1});
|
|
| 173 |
+ $t->content_like(qr/Repository is private/); |
|
| 174 |
+ |
|
| 175 |
+ # Can access private repository from myself |
|
| 176 |
+ $t->get_ok( |
|
| 177 |
+ '/kimoto/t1.git/info/refs?service=git-receive-pack', |
|
| 178 |
+ {
|
|
| 179 |
+ Authorization => 'Basic ' . encode_base64('kimoto:a')
|
|
| 180 |
+ } |
|
| 181 |
+ ); |
|
| 182 |
+ $t->header_is("Content-Type", "application/x-git-receive-pack-advertisement");
|
|
| 183 |
+ $t->content_like(qr/^001f# service=git-receive-pack/); |
|
| 184 |
+ |
|
| 185 |
+ # Can't access private repository from others |
|
| 186 |
+ $t->get_ok( |
|
| 187 |
+ '/kimoto/t1.git/info/refs?service=git-receive-pack', |
|
| 188 |
+ {
|
|
| 189 |
+ Authorization => 'Basic ' . encode_base64('kimoto2:a')
|
|
| 190 |
+ } |
|
| 191 |
+ ); |
|
| 192 |
+ $t->status_is(401); |
|
| 193 |
+ |
|
| 194 |
+ # Add collaborator |
|
| 195 |
+ $t->post_ok("/kimoto/t1/settings/collaboration?op=add", form => {collaborator => 'kimoto2'});
|
|
| 196 |
+ $t->content_like(qr/Collaborator kimoto2 is added/); |
|
| 197 |
+ |
|
| 198 |
+ # Can access private repository from collaborator |
|
| 199 |
+ $t->get_ok( |
|
| 200 |
+ '/kimoto/t1.git/info/refs?service=git-receive-pack', |
|
| 201 |
+ {
|
|
| 202 |
+ Authorization => 'Basic ' . encode_base64('kimoto2:a')
|
|
| 203 |
+ } |
|
| 204 |
+ ); |
|
| 205 |
+ $t->header_is("Content-Type", "application/x-git-receive-pack-advertisement");
|
|
| 206 |
+ $t->content_like(qr/^001f# service=git-receive-pack/); |
|
| 207 |
+} |