aboutsummaryrefslogtreecommitdiffstats
path: root/t/sendreport/open311.t
blob: 26764dc19db6f249ac8b097d263cc448e896d7aa (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
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package FixMyStreet::Cobrand::Tester;

use parent 'FixMyStreet::Cobrand::FixMyStreet';

sub open311_config {
    my ($self, $row, $h, $params) = @_;
    $params->{multi_photos} = 1;
}

package main;

use CGI::Simple;
use Path::Tiny;
use FixMyStreet::Script::Reports;
use FixMyStreet::TestMech;
my $mech = FixMyStreet::TestMech->new;

my $user = $mech->create_user_ok( 'eh@example.com' );
my $body = $mech->create_body_ok( 2342, 'East Hertfordshire Council');
my $contact = $mech->create_contact_ok( body_id => $body->id, category => 'Potholes', email => 'POT' );
$contact->set_extra_fields(
    { code => 'easting', datatype => 'number' },
    { code => 'northing', datatype => 'number' },
    { code => 'fixmystreet_id', datatype => 'number' },
);
$contact->update;

my ($report) = $mech->create_problems_for_body( 1, $body->id, 'Test', {
    cobrand => 'fixmystreet',
    category => 'Potholes',
    user => $user,
});

subtest 'testing Open311 behaviour', sub {
    $body->update( { send_method => 'Open311', endpoint => 'http://endpoint.example.com', jurisdiction => 'FMS', api_key => 'test' } );
    my $test_data;
    FixMyStreet::override_config {
        STAGING_FLAGS => { send_reports => 1 },
        ALLOWED_COBRANDS => [ 'fixmystreet' ],
        MAPIT_URL => 'http://mapit.uk/',
    }, sub {
        $test_data = FixMyStreet::Script::Reports::send();
    };
    $report->discard_changes;
    ok $report->whensent, 'Report marked as sent';
    is $report->send_method_used, 'Open311', 'Report sent via Open311';
    is $report->external_id, 248, 'Report has right external ID';

    my $req = $test_data->{test_req_used};
    my $c = CGI::Simple->new($req->content);
    is $c->param('attribute[easting]'), 529025, 'Request had easting';
    is $c->param('attribute[northing]'), 179716, 'Request had northing';
    is $c->param('attribute[fixmystreet_id]'), $report->id, 'Request had correct ID';
    is $c->param('jurisdiction_id'), 'FMS', 'Request had correct jurisdiction';
};

my ($photo_report) = $mech->create_problems_for_body( 1, $body->id, 'Test', {
    cobrand => 'fixmystreet',
    category => 'Potholes',
    user => $user,
});
my $sample_file = path(__FILE__)->parent->parent->child("app/controller/sample.jpg");
my $UPLOAD_DIR = File::Temp->newdir();
my @files = map { $_ x 40 . ".jpeg" } (1..3);
$sample_file->copy(path($UPLOAD_DIR, $_)) for @files;
$photo_report->photo(join(',', @files));
$photo_report->update;

subtest 'test report with multiple photos only sends one', sub {
    $body->update( { send_method => 'Open311', endpoint => 'http://endpoint.example.com', jurisdiction => 'FMS', api_key => 'test' } );
    my $test_data;

    FixMyStreet::override_config {
        STAGING_FLAGS => { send_reports => 1 },
        ALLOWED_COBRANDS => [ 'fixmystreet' ],
        MAPIT_URL => 'http://mapit.uk/',
    }, sub {
        $test_data = FixMyStreet::Script::Reports::send();
    };
    $photo_report->discard_changes;
    ok $photo_report->whensent, 'Report marked as sent';
    is $photo_report->send_method_used, 'Open311', 'Report sent via Open311';
    is $photo_report->external_id, 248, 'Report has right external ID';

    my $req = $test_data->{test_req_used};
    my $c = CGI::Simple->new($req->content);
    is $c->param('attribute[easting]'), 529025, 'Request had easting';
    is $c->param('attribute[northing]'), 179716, 'Request had northing';
    is $c->param('attribute[fixmystreet_id]'), $photo_report->id, 'Request had correct ID';
    is $c->param('jurisdiction_id'), 'FMS', 'Request had correct jurisdiction';
    my @media = $c->param('media_url');
    is_deeply \@media, [
        'http://www.example.org/photo/' . $photo_report->id .'.0.full.jpeg?11111111'
    ], 'One photo in media_url';
};

$photo_report->whensent(undef);
$photo_report->cobrand('tester');
$photo_report->send_method_used('');
$photo_report->update();

subtest 'test sending multiple photos', sub {
    $body->update( { send_method => 'Open311', endpoint => 'http://endpoint.example.com', jurisdiction => 'FMS', api_key => 'test' } );
    my $test_data;

    FixMyStreet::override_config {
        STAGING_FLAGS => { send_reports => 1 },
        ALLOWED_COBRANDS => [ 'tester' ],
        MAPIT_URL => 'http://mapit.uk/',
    }, sub {
        $test_data = FixMyStreet::Script::Reports::send();
    };
    $photo_report->discard_changes;
    ok $photo_report->whensent, 'Report marked as sent';
    is $photo_report->send_method_used, 'Open311', 'Report sent via Open311';
    is $photo_report->external_id, 248, 'Report has right external ID';

    my $req = $test_data->{test_req_used};
    my $c = CGI::Simple->new($req->content);
    my @media = $c->param('media_url');
    is_deeply \@media, [
        'http://www.example.org/photo/' . $photo_report->id .'.0.full.jpeg?11111111',
        'http://www.example.org/photo/' . $photo_report->id .'.1.full.jpeg?22222222',
        'http://www.example.org/photo/' . $photo_report->id .'.2.full.jpeg?33333333'
    ], 'Multiple photos in media_url';
};

done_testing();