Skip to content

Commit

Permalink
[Northumberland] Send updates to assigned user to Alloy
Browse files Browse the repository at this point in the history
  • Loading branch information
nephila-nacrea committed Sep 4, 2024
1 parent e790de9 commit 8346eb9
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 8 deletions.
52 changes: 50 additions & 2 deletions perllib/Open311/Endpoint/Integration/UK/NorthumberlandAlloy.pm
Original file line number Diff line number Diff line change
Expand Up @@ -90,12 +90,14 @@ Adds an update for the status attribute given by C<update_status_attribute_id>,
Adds an update for 'extra_details' field ('FMS Extra Details' on Alloy end).
Adds an update for the assigned user ('Assigned to' on Alloy end).
=cut

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

return [
my $attr = [
{ attributeCode => $self->config->{update_status_attribute_id},
value => [
$self->config->{update_status_mapping}
Expand All @@ -104,9 +106,55 @@ sub update_additional_attributes {
},
{ attributeCode =>
$self->config->{inspection_attribute_mapping}{extra_details},
value => $args->{extra_details},
value => $args->{attributes}{extra_details},
},
];

if ( $args->{attributes}{assigned_to_user_email} ) {
# Search for existing user
my $mapping = $self->config->{assigned_to_user_mapping};

my $res = $self->alloy->search(
{ properties => {
dodiCode => $mapping->{design},
collectionCode => 'Live',
attributes => [
$mapping->{email_attribute},
],
},
children => [
{ type => "Equals",
children => [
{ type => 'Attribute',
properties => {
attributeCode =>
$mapping->{email_attribute}
},
},
{ type => 'String',
properties => {
value =>
[ $args->{attributes}{assigned_to_user_email} ]
},
}
],
},
],
},
);

# We don't update if user does not exist in Alloy
if (@$res) {
push @$attr, {
attributeCode =>
$self->config->{inspection_attribute_mapping}
{assigned_to_user},
value => [ $res->[0]{itemId} ],
};
}
}

return $attr;
}

=head2 get_assigned_to_users
Expand Down
1 change: 0 additions & 1 deletion perllib/Open311/Endpoint/Role/mySociety.pm
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,6 @@ sub POST_Service_Request_Update_input_schema {
public_anonymity_required => Open311::Endpoint::Schema->enum('//str', 'TRUE', 'FALSE'),
email_alerts_requested => Open311::Endpoint::Schema->enum('//str', 'TRUE', 'FALSE'),
service_code => $self->get_identifier_type('service_code'),
extra_details => '//str',
}
};

Expand Down
34 changes: 29 additions & 5 deletions t/open311/endpoint/northumberland_alloy.t
Original file line number Diff line number Diff line change
Expand Up @@ -150,15 +150,29 @@ $integration->mock('api_call', sub {
$content = path(__FILE__)->sibling("json/alloyv2/northumberland/fixmystreet_users_query_response.json")->slurp;

# Only get the IDs that are provided in the body
my $id_type = $body->{aqs}{children}[0]{children}[0]{type};
my @body_ids
= @{
$body->{aqs}{children}[0]{children}[1]{properties}{value}
};

my @matching_items;
for my $item ( @{ decode_json($content)->{results} } ) {
for (@body_ids) {
push @matching_items, $item if $item->{itemId} == $_;
if ( $id_type eq 'ItemProperty' ) {
# Searching for multiple users
for my $item ( @{ decode_json($content)->{results} } ) {
for (@body_ids) {
push @matching_items, $item if $item->{itemId} eq $_;
}
}
} elsif ( $id_type eq 'Attribute' ) {
# Searching for a single user via email
for my $item ( @{ decode_json($content)->{results} } ) {
for ( @{ $item->{attributes} } ) {
push @matching_items, $item
if $_->{attributeCode} eq
'attributes_fixMyStreetUsersEmail_6532518cac7139477485ec38'
&& $_->{value} eq $body_ids[0];
}
}
}

Expand Down Expand Up @@ -449,10 +463,11 @@ HERE
service_code => 'Damaged_/_Missing_/_Facing_Wrong_Way',
description => 'update',
status => 'FIXED',
extra_details => $extra_details,
service_request_id => '642062376be3a0036bbbb64b',
update_id => '1',
updated_datetime => '2023-05-15T14:55:55+00:00',
'attribute[extra_details]' => $extra_details,
'attribute[assigned_to_user_email]' => '[email protected]',
);
ok $res->is_success, 'valid request'
or diag $res->content;
Expand All @@ -467,13 +482,22 @@ HERE
my $expected_extra_details_attribute_code = 'attributes_customerRequestFMSExtraDetails_646e07533726d8036a7a4022';
my $expected_extra_details_attribute_value = $extra_details;

my $expected_assigned_user_attribute_code =
'attributes_customerRequestAssignedTo_653664b0557119eef53a97e1';
my $expected_assigned_user_attribute_value = '123';

foreach (@{ $attributes }) {
if ($_->{attributeCode} eq $expected_status_attribute_code) {
ok ref($_->{value}) eq 'ARRAY' && $_->{value}[0] eq $expected_status_attribute_value, "value sent in status attribute update is correct";
is_deeply $_->{value}, [$expected_status_attribute_value],
"value sent in status attribute update is correct";
}
if ($_->{attributeCode} eq $expected_extra_details_attribute_code) {
ok $_->{value} eq $expected_extra_details_attribute_value, "value sent in extra_details attribute update is correct";
}
if ( $_->{attributeCode} eq $expected_assigned_user_attribute_code ) {
is_deeply $_->{value}, [$expected_assigned_user_attribute_value],
"value sent in assigned_to_user attribute update is correct";
}
}
};

Expand Down

0 comments on commit 8346eb9

Please sign in to comment.