1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
use FixMyStreet::TestMech;
use Test::MockModule;
ok( my $mech = FixMyStreet::TestMech->new, 'Created mech object' );
my @urls = (
"/",
"/contact",
"/about/faq",
"/around?longitude=-1.351488&latitude=51.847235"
);
FixMyStreet::override_config {
LOGIN_REQUIRED => 0,
MAPIT_URL => 'http://mapit.uk/'
}, sub {
subtest 'LOGIN_REQUIRED = 0 behaves correctly' => sub {
foreach my $url (@urls) {
$mech->get_ok($url);
is $mech->res->code, 200, "got 200 for page";
is $mech->res->previous, undef, 'No redirect';
}
};
};
FixMyStreet::override_config {
LOGIN_REQUIRED => 1,
MAPIT_URL => 'http://mapit.uk/'
}, sub {
subtest 'LOGIN_REQUIRED = 1 redirects to /auth if not logged in' => sub {
foreach my $url (@urls) {
$mech->get_ok($url);
is $mech->res->code, 200, "got 200 for final destination";
is $mech->res->previous->code, 302, "got 302 for redirect";
is $mech->uri->path, '/auth';
}
};
subtest 'LOGIN_REQUIRED = 1 does not redirect if logged in' => sub {
$mech->log_in_ok('user@example.org');
foreach my $url (@urls) {
$mech->get_ok($url);
is $mech->res->code, 200, "got 200 for final destination";
is $mech->res->previous, undef, 'No redirect';
}
$mech->log_out_ok;
};
subtest 'LOGIN_REQUIRED = 1 allows whitelisted URLs' => sub {
my @whitelist = (
'/auth',
'/js/translation_strings.en-gb.js'
);
foreach my $url (@whitelist) {
$mech->get_ok($url);
is $mech->res->code, 200, "got 200 for final destination";
is $mech->res->previous, undef, 'No redirect';
}
};
subtest 'LOGIN_REQUIRED = 1 404s blacklisted URLs' => sub {
my @blacklist = (
'/offline/appcache',
);
foreach my $url (@blacklist) {
$mech->get($url);
ok !$mech->res->is_success(), "want a bad response";
is $mech->res->code, 404, "got 404";
}
};
};
subtest "check_login_disallowed cobrand hook" => sub {
warn '#' x 50 . "\n";
my $cobrand = Test::MockModule->new('FixMyStreet::Cobrand::Default');
$cobrand->mock('check_login_disallowed', sub {
my $self = shift;
return 0 if $self->{c}->req->path eq 'auth';
return 1;
}
);
$mech->get_ok('/');
is $mech->uri->path_query, '/auth?r=', 'redirects to auth page';
};
done_testing();
|