diff options
-rw-r--r-- | perllib/Open311.pm | 25 | ||||
-rw-r--r-- | t/open311.t | 54 |
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, } ); } |