Skip to content

Commit

Permalink
Merge branch 'merton-ww' into staging
Browse files Browse the repository at this point in the history
  • Loading branch information
dracos committed May 17, 2024
2 parents ca1e687 + b520477 commit af8e3d1
Show file tree
Hide file tree
Showing 9 changed files with 133 additions and 3 deletions.
54 changes: 52 additions & 2 deletions perllib/Open311/Endpoint.pm
Original file line number Diff line number Diff line change
Expand Up @@ -326,8 +326,9 @@ sub dispatch_request {
$self->call_api( POST_Service_Request => $args, );
},
sub (GET + /tokens/*) {
return Open311::Endpoint::Result->error( 400, 'not implemented' );
sub (GET + /tokens/* + ?*) {
my ($self, $token, $args) = @_;
$self->call_api( GET_Token => $token, $args );
},
sub (GET + /requests + ?*) {
Expand Down Expand Up @@ -589,6 +590,55 @@ sub POST_Service_Request {
};
}

sub GET_Token_input_schema {
my $self = shift;
return {
type => '//seq',
contents => [
'//str',
$self->get_jurisdiction_id_validation,
],
};
}

sub GET_Token_output_schema {
my ($self, $args) = @_;
return {
type => '//rec',
required => {
service_requests => {
type => '//arr',
contents => {
type => '//rec',
required => {
service_request_id => $self->get_identifier_type('service_request_id'),
},
optional => {
token => '//str',
},
},
},
},
};
}

sub GET_Token {
my ($self, $token, $args) = @_;

my @service_requests = $self->get_token( $token, $args );

return {
service_requests => [
map {
+{
$_->service_request_id ? (service_request_id => $_->service_request_id) : (),
$_->token ? (token => $_->token) : (),
}
} @service_requests,
],
};
}

sub GET_Service_Requests_input_schema {
my $self = shift;
return {
Expand Down
13 changes: 13 additions & 0 deletions perllib/Open311/Endpoint/Integration/Multi.pm
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,19 @@ sub post_service_request {
my $integration_service = (ref $service)->new(%$service, service_code => $service_code);

my $result = $self->_call('post_service_request', $integration, $integration_service, $integration_args);
if ($result->token) {
($result) = $self->_map_with_new_id(token => [$integration, $result]);
} else {
($result) = $self->_map_with_new_id(service_request_id => [$integration, $result]);
}
return $result;
}

sub get_token {
my ($self, $token, $args) = @_;

my ($integration, $int_token) = $self->_map_from_new_id($token, 'token');
my $result = $self->_call('get_token', $integration, $int_token);
($result) = $self->_map_with_new_id(service_request_id => [$integration, $result]);
return $result;
}
Expand Down
19 changes: 18 additions & 1 deletion perllib/Open311/Endpoint/Integration/Passthrough.pm
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ has jurisdiction_id => ( is => 'ro' );
has endpoint => ( is => 'ro' );
has api_key => ( is => 'ro' );

has batch_service => ( is => 'ro' );

=head2 ignore_services
Provide a list of service codes that should be ignored and not passed back from
Expand Down Expand Up @@ -154,7 +156,10 @@ sub service {
my $data = $self->memcache->get("service/$service_id");
return $data if $data;
my $xml = $self->_request(GET => "services/$service_id.xml");
my $service = Open311::Endpoint::Service->new( service_code => $service_id );
my $service = Open311::Endpoint::Service->new(
service_code => $service_id,
type => $self->batch_service ? 'batch' : 'realtime',
);
foreach (@{$xml->{attributes}}) {
$_->{required} = $_->{required} eq 'true' ? 1 : 0;
$_->{variable} = $_->{variable} eq 'true' ? 1 : 0;
Expand All @@ -181,11 +186,23 @@ sub post_service_request {

_strip_args($args);
my $xml = $self->_request(POST => "requests.xml", $args);
if (my $token = $xml->{request}[0]{token}) {
my $result = Open311::Endpoint::Service::Request->new(token => $token);
return $result;
}
my $id = $xml->{request}[0]{service_request_id};
my $result = Open311::Endpoint::Service::Request->new(service_request_id => $id);
return $result;
}

sub get_token {
my ($self, $token, $args) = @_;

my $xml = $self->_request(GET => "tokens/$token.xml");
my $result = Open311::Endpoint::Service::Request->new(%{$xml->{request}[0]});
return $result;
}

=head2 post_service_request_update
Resets the attributes to be in the format they were received, then passes
Expand Down
6 changes: 6 additions & 0 deletions perllib/Open311/Endpoint/Integration/UK.pm
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,12 @@ sub post_service_request {
$service, $args);
}

sub get_token {
my ($self, $token, $args) = @_;
return $self->_call('get_token', $args->{jurisdiction_id},
$token, $args);
}

sub service_request_content {
my ($self, $args) = @_;
return $self->_call('service_request_content', $args->{jurisdiction_id});
Expand Down
3 changes: 3 additions & 0 deletions perllib/Open311/Endpoint/Integration/UK/Merton.pm
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,9 @@ sub _map_from_new_id {
} else {
$integration = 'Passthrough';
}
} elsif ($type eq 'token') {
# Echo does not use tokens
$integration = 'Passthrough';
}
return ($integration, $code);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ extends 'Open311::Endpoint::Integration::Passthrough';
around BUILDARGS => sub {
my ($orig, $class, %args) = @_;
$args{jurisdiction_id} = 'www.merton.gov.uk';
$args{batch_service} = 1;
return $class->$orig(%args);
};

Expand Down
26 changes: 26 additions & 0 deletions t/open311/endpoint/merton.t
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,15 @@ $ua->mock(get => sub {
$file = 'xml/merton/services.xml';
} elsif ($_[1] eq 'services/TEST.xml') {
$file = 'xml/merton/service.xml';
} elsif ($_[1] eq 'tokens/TOKEN.xml') {
$file = 'xml/merton/token.xml';
}
return HTTP::Response->new(200, 'OK', [], path(__FILE__)->sibling($file)->slurp);
});
$ua->mock(post => sub {
my $file = 'xml/merton/requestpost.xml';
return HTTP::Response->new(200, 'OK', [], path(__FILE__)->sibling($file)->slurp);
});

use_ok 'Open311::Endpoint::Integration::UK::Merton';

Expand Down Expand Up @@ -116,4 +122,24 @@ subtest "Get service definition with a group" => sub {
}, 'correct json returned';
};

subtest "Post a report, get a token" => sub {
my $res = $endpoint->run_test_request(
POST => '/requests.json',
api_key => 'test',
service_code => 'TEST',
address_string => 'address',
'attribute[service]' => 1234,
'attribute[usrn]' => 1234,
'attribute[fixmystreet_id]' => 1001,
);
ok $res->is_success, 'valid request' or diag $res->content;
is_deeply decode_json($res->content), [ { "token" => 'TOKEN' } ];
};

subtest "Convert a token to an ID" => sub {
my $res = $endpoint->run_test_request( GET => "/tokens/TOKEN.json" );
ok $res->is_success, 'valid request' or diag $res->content;
is_deeply decode_json($res->content), [ { "service_request_id" => 'ServiceID' } ];
};

done_testing;
7 changes: 7 additions & 0 deletions t/open311/endpoint/xml/merton/requestpost.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<service_requests>
<request>
<token>TOKEN</token>
</request>
</service_requests>

7 changes: 7 additions & 0 deletions t/open311/endpoint/xml/merton/token.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<service_requests>
<request>
<service_request_id>ServiceID</service_request_id>
</request>
</service_requests>

0 comments on commit af8e3d1

Please sign in to comment.