aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perllib/Open311.pm25
-rw-r--r--t/open311.t54
2 files changed, 72 insertions, 7 deletions
diff --git a/perllib/Open311.pm b/perllib/Open311.pm
index 6d218131f..b508a2bcc 100644
--- a/perllib/Open311.pm
+++ b/perllib/Open311.pm
@@ -24,6 +24,7 @@ has always_send_latlong => ( is => 'ro', isa => 'Bool', default => 1 );
has send_notpinpointed => ( is => 'ro', isa => 'Bool', default => 0 );
has basic_description => ( is => 'ro', isa => 'Bool', default => 0 );
has use_service_as_deviceid => ( is => 'ro', isa => 'Bool', default => 0 );
+has extended_statuses => ( is => 'ro', isa => 'Bool', default => 0 );
before [
qw/get_service_list get_service_meta_info get_service_requests get_service_request_updates
@@ -274,12 +275,34 @@ sub _populate_service_request_update_params {
my $name = $comment->name || $comment->user->name;
my ( $firstname, $lastname ) = ( $name =~ /(\w+)\.?\s+(.+)/ );
+ my $status = 'OPEN';
+ if ( $self->extended_statuses ) {
+ if ( $comment->problem->is_fixed ) {
+ $status = 'FIXED';
+ } elsif ( $comment->problem->state eq 'in progress' ) {
+ $status = 'IN_PROGRESS';
+ } elsif ($comment->problem->state eq 'action scheduled'
+ || $comment->problem->state eq 'planned' ) {
+ $status = 'ACTION_SCHEDULED';
+ } elsif ( $comment->problem->state eq 'investigating' ) {
+ $status = 'INVESTIGATING';
+ } elsif ( $comment->problem->state eq 'duplicate' ) {
+ $status = 'DUPLICATE';
+ } elsif ( $comment->problem->state eq 'not responsible' ) {
+ $status = 'NOT_COUNCILS_RESPONSIBILITY';
+ } elsif ( $comment->problem->state eq 'unable to fix' ) {
+ $status = 'UNABLE_TO_FIX';
+ }
+ } else {
+ $status = $comment->problem->is_open ? 'OPEN' : 'CLOSED',;
+ }
+
my $params = {
update_id_ext => $comment->id,
updated_datetime => DateTime::Format::W3CDTF->format_datetime($comment->confirmed_local->set_nanosecond(0)),
service_request_id => $comment->problem->external_id,
service_request_id_ext => $comment->problem->id,
- status => $comment->problem->is_open ? 'OPEN' : 'CLOSED',
+ status => $status,
email => $comment->user->email,
description => $comment->text,
public_anonymity_required => $comment->anonymous ? 'TRUE' : 'FALSE',
diff --git a/t/open311.t b/t/open311.t
index 835d8d8cb..82a6b420f 100644
--- a/t/open311.t
+++ b/t/open311.t
@@ -238,18 +238,42 @@ foreach my $test (
state => 'fixed',
anon => 0,
status => 'CLOSED',
+ extended => 'FIXED',
},
{
desc => 'comment with fixed - user state sends status of CLOSED',
state => 'fixed - user',
anon => 0,
status => 'CLOSED',
+ extended => 'FIXED',
},
{
desc => 'comment with fixed - council state sends status of CLOSED',
state => 'fixed - council',
anon => 0,
status => 'CLOSED',
+ extended => 'FIXED',
+ },
+ {
+ desc => 'comment with duplicate state sends status of CLOSED',
+ state => 'duplicate',
+ anon => 0,
+ status => 'CLOSED',
+ extended => 'DUPLICATE',
+ },
+ {
+ desc => 'comment with not reponsible state sends status of CLOSED',
+ state => 'not responsible',
+ anon => 0,
+ status => 'CLOSED',
+ extended => 'NOT_COUNCILS_RESPONSIBILITY',
+ },
+ {
+ desc => 'comment with unable to fix state sends status of CLOSED',
+ state => 'unable to fix',
+ anon => 0,
+ status => 'CLOSED',
+ extended => 'UNABLE_TO_FIX',
},
{
desc => 'comment with closed state sends status of CLOSED',
@@ -262,18 +286,28 @@ foreach my $test (
state => 'investigating',
anon => 0,
status => 'OPEN',
+ extended => 'INVESTIGATING',
},
{
desc => 'comment with planned state sends status of OPEN',
state => 'planned',
anon => 0,
status => 'OPEN',
+ extended => 'ACTION_SCHEDULED',
+ },
+ {
+ desc => 'comment with action scheduled state sends status of OPEN',
+ state => 'action scheduled',
+ anon => 0,
+ status => 'OPEN',
+ extended => 'ACTION_SCHEDULED',
},
{
desc => 'comment with in progress state sends status of OPEN',
state => 'in progress',
anon => 0,
status => 'OPEN',
+ extended => 'IN_PROGRESS',
},
{
desc => 'anonymous commment sets public_anonymity_required to true',
@@ -291,6 +325,12 @@ foreach my $test (
my $c = CGI::Simple->new( $results->{ req }->content );
is $c->param('status'), $test->{status}, 'correct status';
is $c->param('public_anonymity_required'), $test->{anon} ? 'TRUE' : 'FALSE', 'correct anonymity';
+
+ if ( $test->{extended} ) {
+ my $results = make_update_req( $comment, '<?xml version="1.0" encoding="utf-8"?><service_request_updates><request_update><update_id>248</update_id></request_update></service_request_updates>', { extended_statuses => 1 } );
+ my $c = CGI::Simple->new( $results->{ req }->content );
+ is $c->param('status'), $test->{extended}, 'correct extended status';
+ }
};
}
@@ -502,15 +542,17 @@ for my $test (
done_testing();
sub make_update_req {
- my $comment = shift;
- my $xml = shift;
+ my $comment = shift;
+ my $xml = shift;
+ my $open311_args = shift || {};
return make_req(
{
- object => $comment,
- xml => $xml,
- method => 'post_service_request_update',
- path => 'update.xml',
+ object => $comment,
+ xml => $xml,
+ method => 'post_service_request_update',
+ path => 'update.xml',
+ open311_conf => $open311_args,
}
);
}