| File: | t/app.t |
| Coverage: | 100.0% |
| line | stmt | bran | cond | sub | pod | time | code |
|---|---|---|---|---|---|---|---|
| 1 | #!/usr/bin/env perl | ||||||
| 2 | 1 1 | 2445 3 | use v5.24; | ||||
| 3 | |||||||
| 4 | 1 1 1 | 474 106948 8 | use Test2::V0; | ||||
| 5 | 1 1 1 | 3203 12940 2 | use Test::Exception; | ||||
| 6 | |||||||
| 7 | 1 | 127 | BEGIN { plan 59; } | ||||
| 8 | |||||||
| 9 | 1 1 1 | 1942 6710 50 | use Path::Tiny; | ||||
| 10 | |||||||
| 11 | 1 1 1 1 1 1 1 | 431 4877 5 349 3 1 10 | use ok('Yukki'); | ||||
| 12 | 1 1 1 1 1 1 1 | 308 1 5 559 2 2 11 | use ok('Yukki::User'); | ||||
| 13 | |||||||
| 14 | 1 | 100830 | my $app = Yukki->new; | ||||
| 15 | 1 | 1437 | isa_ok($app, 'Yukki'); | ||||
| 16 | 1 | 198 | DOES_ok($app, 'Yukki::Role::App'); | ||||
| 17 | |||||||
| 18 | 1 1 | 135 46 | throws_ok { $app->config_file } qr/make YUKKI_CONFIG point/, 'missing config location complains'; | ||||
| 19 | |||||||
| 20 | 1 | 272 | $ENV{YUKKI_CONFIG} = 't/test-site/etc/bad-yukki.conf'; | ||||
| 21 | |||||||
| 22 | 1 1 | 6 34 | throws_ok { $app->config_file } qr/no configuration found/i, 'missing config file complains'; | ||||
| 23 | |||||||
| 24 | 1 | 262 | delete $ENV{YUKKI_CONFIG}; | ||||
| 25 | 1 | 16 | chdir 't/test-site'; | ||||
| 26 | |||||||
| 27 | 1 | 16 | is($app->config_file, path('.', 'etc', 'yukki.conf'), 'config set by CWD works'); | ||||
| 28 | |||||||
| 29 | 1 | 1384 | delete $app->{config_file}; | ||||
| 30 | 1 | 5 | chdir '../..'; | ||||
| 31 | 1 | 4 | $ENV{YUKKI_CONFIG} = 't/test-site/etc/yukki.conf'; | ||||
| 32 | |||||||
| 33 | 1 | 16 | is($app->config_file, path('.', 't', 'test-site', 'etc', 'yukki.conf'), 'config set by env works'); | ||||
| 34 | |||||||
| 35 | 1 1 | 602 22 | throws_ok { $app->view } qr/unimplemented/i, 'view is not implemented'; | ||||
| 36 | 1 1 | 238 21 | throws_ok { $app->controller } qr/unimplemented/i, 'controller is not implemented'; | ||||
| 37 | |||||||
| 38 | 1 | 239 | my $model = $app->model('User'); | ||||
| 39 | 1 | 2268 | isa_ok($model, 'Yukki::Model::User'); | ||||
| 40 | |||||||
| 41 | 1 | 178 | my $dir = $app->locate_dir('repository_path', 'main.git'); | ||||
| 42 | 1 | 5 | isa_ok($dir, 'Path::Tiny'); | ||||
| 43 | 1 | 192 | is("$dir", "/tmp/repositories/main.git", 'locate_dir makes the right dir'); | ||||
| 44 | |||||||
| 45 | 1 | 319 | my $file = $app->locate('user_path', 'demo'); | ||||
| 46 | 1 | 4 | isa_ok($file, 'Path::Tiny'); | ||||
| 47 | 1 | 140 | is("$file", "/tmp/var/db/users/demo", 'locate makes the right file'); | ||||
| 48 | |||||||
| 49 | 1 | 277 | my $group1_user = Yukki::User->new(login_name => 'abc', password => 'a', name => 'a', email => 'a@example.com', groups => [ 'group1' ]); | ||||
| 50 | 1 | 83 | my $group4_user = Yukki::User->new(login_name => 'bbc', password => 'a', name => 'b', email => 'b@example.com', groups => [ 'group4' ]); | ||||
| 51 | |||||||
| 52 | 1 | 41 | is($app->check_access( user => undef, repository => 'noaccess', needs => 'none' ), 1); | ||||
| 53 | 1 | 551 | is($app->check_access( user => undef, repository => 'noaccess', needs => 'read' ), ''); | ||||
| 54 | 1 | 305 | is($app->check_access( user => undef, repository => 'noaccess', needs => 'write' ), ''); | ||||
| 55 | 1 | 307 | is($app->check_access( user => $group1_user, repository => 'noaccess', needs => 'none' ), 1); | ||||
| 56 | 1 | 292 | is($app->check_access( user => $group1_user, repository => 'noaccess', needs => 'read' ), ''); | ||||
| 57 | 1 | 318 | is($app->check_access( user => $group1_user, repository => 'noaccess', needs => 'write' ), ''); | ||||
| 58 | |||||||
| 59 | 1 | 277 | is($app->check_access( user => undef, repository => 'anonymousread', needs => 'none' ), 1); | ||||
| 60 | 1 | 288 | is($app->check_access( user => undef, repository => 'anonymousread', needs => 'read' ), 1); | ||||
| 61 | 1 | 354 | is($app->check_access( user => undef, repository => 'anonymousread', needs => 'write' ), ''); | ||||
| 62 | 1 | 310 | is($app->check_access( user => $group1_user, repository => 'anonymousread', needs => 'none' ), 1); | ||||
| 63 | 1 | 298 | is($app->check_access( user => $group1_user, repository => 'anonymousread', needs => 'read' ), 1); | ||||
| 64 | 1 | 280 | is($app->check_access( user => $group1_user, repository => 'anonymousread', needs => 'write' ), ''); | ||||
| 65 | |||||||
| 66 | 1 | 335 | is($app->check_access( user => undef, repository => 'anonymouswrite', needs => 'none' ), 1); | ||||
| 67 | 1 | 304 | is($app->check_access( user => undef, repository => 'anonymouswrite', needs => 'read' ), 1); | ||||
| 68 | 1 | 279 | is($app->check_access( user => undef, repository => 'anonymouswrite', needs => 'write' ), 1); | ||||
| 69 | 1 | 280 | is($app->check_access( user => $group1_user, repository => 'anonymouswrite', needs => 'none' ), 1); | ||||
| 70 | 1 | 311 | is($app->check_access( user => $group1_user, repository => 'anonymouswrite', needs => 'read' ), 1); | ||||
| 71 | 1 | 397 | is($app->check_access( user => $group1_user, repository => 'anonymouswrite', needs => 'write' ), 1); | ||||
| 72 | |||||||
| 73 | 1 | 279 | is($app->check_access( user => undef, repository => 'loggedread', needs => 'none' ), 1); | ||||
| 74 | 1 | 366 | is($app->check_access( user => undef, repository => 'loggedread', needs => 'read' ), ''); | ||||
| 75 | 1 | 299 | is($app->check_access( user => undef, repository => 'loggedread', needs => 'write' ), ''); | ||||
| 76 | 1 | 303 | is($app->check_access( user => $group1_user, repository => 'loggedread', needs => 'none' ), 1); | ||||
| 77 | 1 | 271 | is($app->check_access( user => $group1_user, repository => 'loggedread', needs => 'read' ), 1); | ||||
| 78 | 1 | 523 | is($app->check_access( user => $group1_user, repository => 'loggedread', needs => 'write' ), ''); | ||||
| 79 | |||||||
| 80 | 1 | 297 | is($app->check_access( user => undef, repository => 'loggedwrite', needs => 'none' ), 1); | ||||
| 81 | 1 | 278 | is($app->check_access( user => undef, repository => 'loggedwrite', needs => 'read' ), ''); | ||||
| 82 | 1 | 319 | is($app->check_access( user => undef, repository => 'loggedwrite', needs => 'write' ), ''); | ||||
| 83 | 1 | 308 | is($app->check_access( user => $group1_user, repository => 'loggedwrite', needs => 'none' ), 1); | ||||
| 84 | 1 | 283 | is($app->check_access( user => $group1_user, repository => 'loggedwrite', needs => 'read' ), 1); | ||||
| 85 | 1 | 285 | is($app->check_access( user => $group1_user, repository => 'loggedwrite', needs => 'write' ), 1); | ||||
| 86 | |||||||
| 87 | 1 | 381 | is($app->check_access( user => undef, repository => 'groupaccess', needs => 'none' ), 1); | ||||
| 88 | 1 | 306 | is($app->check_access( user => undef, repository => 'groupaccess', needs => 'read' ), ''); | ||||
| 89 | 1 | 283 | is($app->check_access( user => undef, repository => 'groupaccess', needs => 'write' ), ''); | ||||
| 90 | 1 | 240 | is($app->check_access( user => $group1_user, repository => 'groupaccess', needs => 'none' ), 1); | ||||
| 91 | 1 | 357 | is($app->check_access( user => $group1_user, repository => 'groupaccess', needs => 'read' ), 1); | ||||
| 92 | 1 | 303 | is($app->check_access( user => $group1_user, repository => 'groupaccess', needs => 'write' ), ''); | ||||
| 93 | |||||||
| 94 | 1 | 290 | is($app->check_access( user => undef, repository => 'groupaccess', needs => 'none' ), 1); | ||||
| 95 | 1 | 334 | is($app->check_access( user => undef, repository => 'groupaccess', needs => 'read' ), ''); | ||||
| 96 | 1 | 322 | is($app->check_access( user => undef, repository => 'groupaccess', needs => 'write' ), ''); | ||||
| 97 | 1 | 425 | is($app->check_access( user => $group4_user, repository => 'groupaccess', needs => 'none' ), 1); | ||||
| 98 | 1 | 280 | is($app->check_access( user => $group4_user, repository => 'groupaccess', needs => 'read' ), 1); | ||||
| 99 | 1 | 302 | is($app->check_access( user => $group4_user, repository => 'groupaccess', needs => 'write' ), 1); | ||||
| 100 | |||||||
| 101 | 1 | 278 | isa_ok($app->hasher, 'Crypt::SaltedHash'); | ||||
| 102 | 1 | 158 | is($app->hasher->{algorithm}, $app->settings->digest, 'hasher is using the proper algorithm'); | ||||