Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion perllib/Open311/Endpoint/Integration/Confirm.pm
Original file line number Diff line number Diff line change
Expand Up @@ -602,7 +602,9 @@ sub post_service_request_update {
$args->{description} .= "\n\n[ This update contains a photo, see: " . $args->{media_url}->[0] . " ]";
}

if (my $status_code = $self->forward_status_mapping->{$args->{status}}) {
if (my $status_code = $args->{override_status_code}) {
$args->{status_code} = $status_code;
} elsif ($status_code = $self->forward_status_mapping->{$args->{status}}) {
$args->{status_code} = $status_code;
}

Expand Down
17 changes: 17 additions & 0 deletions perllib/Open311/Endpoint/Integration/UK/Gloucestershire.pm
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,21 @@ around BUILDARGS => sub {
return $class->$orig(%args);
};

=head2 post_service_request_update

If we receive an update with the by_reporter flag set, change the status
so that it uses a different code when sent to Confirm.

=cut

around post_service_request_update => sub {
my ($orig, $self, $args) = (@_);

if ($args->{status} eq 'OPEN' && $args->{attributes}{by_reporter}) {
$args->{override_status_code} = $self->forward_status_mapping->{OPEN_REPORTER};
}

return $self->$orig($args);
};

1;
54 changes: 54 additions & 0 deletions t/open311/endpoint/gloucestershire.t
Original file line number Diff line number Diff line change
@@ -1,17 +1,49 @@
package Integrations::Confirm::Dummy;
use Path::Tiny;
use Moo;
extends 'Integrations::Confirm';
sub _build_config { { server_timezone => 'Europe/London' } }

package main;

use strict;
use warnings;

BEGIN { $ENV{TEST_MODE} = 1 };

use Open311::Endpoint::Integration::UK::Gloucestershire;
use Test::More;
use Test::MockModule;

my $class = Open311::Endpoint::Integration::UK::Gloucestershire->new(
config_data => <<HERE,
integration_class: Integrations::Confirm::Dummy
default_site_code: 123456
forward_status_mapping:
OPEN: 123
OPEN_REPORTER: 456
CLOSED: 789
HERE
);

my $open311 = Test::MockModule->new('Integrations::Confirm');
$open311->mock(perform_request => sub {
my ($self, $op) = @_; # Don't care about subsequent ops
$op = $$op;
$op = $op->value;
if ($op->name eq 'EnquiryUpdate') {
# Check contents of req here
my %req = map { $_->name => $_->value } ${$op->value}->value;
if ($req{EnquiryNumber} eq '1001') {
is $req{EnquiryStatusCode}, 123;
} elsif ($req{EnquiryNumber} eq '1002') {
is $req{EnquiryStatusCode}, 456;
}
return { OperationResponse => { EnquiryUpdateResponse => { Enquiry => { EnquiryNumber => 2001, EnquiryLogNumber => 2 } } } };
}
return {};
});

subtest process_service_request_args => sub {
my $args = {
attributes => {
Expand All @@ -38,4 +70,26 @@ subtest process_service_request_args => sub {
};
};

subtest 'update by reporter' => sub {
my @req = (
POST => '/servicerequestupdates.xml',
api_key => 'test',
update_id => 123,
description => 'Update here',
status => 'OPEN',
updated_datetime => '2016-09-01T15:00:00Z',
);
my $res = $class->run_test_request(
@req,
service_request_id => 1001,
);
ok $res->is_success, 'valid request' or diag $res->content;
$res = $class->run_test_request(
@req,
service_request_id => 1002,
'attribute[by_reporter]' => 1,
);
ok $res->is_success, 'valid request' or diag $res->content;
};

done_testing();
Loading