aboutsummaryrefslogtreecommitdiffstats
path: root/t/app/01app.t
blob: 50617d49109fd76b9f64f54e999cce32786bad8c (plain)
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
#!/usr/bin/env perl

use strict;
use warnings;
use utf8;

package FixMyStreet::Cobrand::Tester;
use parent 'FixMyStreet::Cobrand::FixaMinGata';
sub front_stats_data { { new => 0, fixed => 0, updates => 12345 } }

package main;

use Encode;
use Test::More;
use Catalyst::Test 'FixMyStreet::App';
use charnames ':full';

ok( request('/')->is_success, 'Request should succeed' );

FixMyStreet::override_config {
    ALLOWED_COBRANDS => [ 'tester' ],
}, sub {
    my $page = decode_utf8(get('/'));
    my $num = "12( | )345";
    like $page, qr/$num/;
};

subtest 'CSP header' => sub {
    my $res = request('/');
    is $res->header('Content-Security-Policy'), undef, 'None by default';

    FixMyStreet::override_config {
        CONTENT_SECURITY_POLICY => 1,
    }, sub {
        my $res = request('/');
        like $res->header('Content-Security-Policy'), qr/script-src 'self' 'unsafe-inline' 'nonce-[^']*' ; object-src 'none'; base-uri 'none'/,
            'Default CSP header if requested';
    };

    FixMyStreet::override_config {
        CONTENT_SECURITY_POLICY => 'www.example.org',
    }, sub {
        my $res = request('/');
        like $res->header('Content-Security-Policy'), qr/script-src 'self' 'unsafe-inline' 'nonce-[^']*' www.example.org; object-src 'none'; base-uri 'none'/,
            'With 3P domains if given';
    };

    FixMyStreet::override_config {
        CONTENT_SECURITY_POLICY => [ 'www.example.org' ],
    }, sub {
        my $res = request('/');
        like $res->header('Content-Security-Policy'), qr/script-src 'self' 'unsafe-inline' 'nonce-[^']*' www.example.org; object-src 'none'; base-uri 'none'/,
            'With 3P domains if given';
    };
};

done_testing();