diff options
-rw-r--r-- | bin/open311-update-reports | 21 | ||||
-rw-r--r-- | perllib/Open311/GetUpdates.pm | 82 | ||||
-rw-r--r-- | t/open311/getupdates.t | 198 |
3 files changed, 0 insertions, 301 deletions
diff --git a/bin/open311-update-reports b/bin/open311-update-reports deleted file mode 100644 index e7ff34273..000000000 --- a/bin/open311-update-reports +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/perl - -use strict; -use warnings; -use Open311::GetUpdates; -use FixMyStreet::App; - -# FIXME - make this configurable and/or better -my $system_user = FixMyStreet::App->model('DB::User')->find_or_create( - { - email => FixMyStreet::App->config->{'CONTACT_EMAIL'}, - name => 'System User', - } -); - -my $council_list = FixMyStreet::App->model('DB::Body'); - -my $update = Open311::GetUpdates->new( - council_list => $council_list, - system_user => $system_user -)->get_updates; diff --git a/perllib/Open311/GetUpdates.pm b/perllib/Open311/GetUpdates.pm deleted file mode 100644 index 5d5291d47..000000000 --- a/perllib/Open311/GetUpdates.pm +++ /dev/null @@ -1,82 +0,0 @@ -package Open311::GetUpdates; - -use Moose; -use Open311; -use FixMyStreet::App; - -has council_list => ( is => 'ro' ); -has system_user => ( is => 'ro' ); - -sub get_updates { - my $self = shift; - - while ( my $council = $self->council_list->next ) { - my $open311 = Open311->new( - endpoint => $council->endpoint, - jurisdiction => $council->jurisdiction, - api_key => $council->api_key - ); - - my $area_id = $council->area_id; - - my $council_details = mySociety::MaPit::call( 'area', $area_id ); - - my $reports = FixMyStreet::App->model('DB::Problem')->search( - { - council => { like => "\%$area_id\%" }, - state => { 'IN', [qw/confirmed fixed/] }, - -and => [ - external_id => { '!=', undef }, - external_id => { '!=', '' }, - ], - } - ); - - my @report_ids = (); - while ( my $report = $reports->next ) { - push @report_ids, $report->external_id; - } - - next unless @report_ids; - - $self->update_reports( \@report_ids, $open311, $council_details ); - } -} - -sub update_reports { - my ( $self, $report_ids, $open311, $council_details ) = @_; - - my $service_requests = $open311->get_service_requests( $report_ids ); - - my $requests; - - # XML::Simple is a bit inconsistent in how it structures - # things depending on the number of children an element has :( - if ( ref $service_requests->{request} eq 'ARRAY' ) { - $requests = $service_requests->{request}; - } - else { - $requests = [ $service_requests->{request} ]; - } - - for my $request (@$requests) { - # if it's a ref that means it's an empty element - # however, if there's no updated date then we can't - # tell if it's newer that what we have so we should skip it - next if ref $request->{updated_datetime} || ! exists $request->{updated_datetime}; - - my $request_id = $request->{service_request_id}; - - my $problem = - FixMyStreet::App->model('DB::Problem') - ->search( { external_id => $request_id, } ); - - if (my $p = $problem->first) { - $p->update_from_open311_service_request( $request, $council_details, $self->system_user ); - } - } - - return 1; -} - -1; diff --git a/t/open311/getupdates.t b/t/open311/getupdates.t deleted file mode 100644 index 500ac97d2..000000000 --- a/t/open311/getupdates.t +++ /dev/null @@ -1,198 +0,0 @@ -#!/usr/bin/env perl - -use strict; -use warnings; -use Test::More; - -use FindBin; -use lib "$FindBin::Bin/../perllib"; -use lib "$FindBin::Bin/../commonlib/perllib"; - -use_ok( 'Open311::GetUpdates' ); -use_ok( 'Open311' ); - -my $user = FixMyStreet::App->model('DB::User')->find_or_create( - { - email => 'system_user@example.com' - } -); - - -my $updates = Open311::GetUpdates->new( system_user => $user ); -ok $updates, 'created object'; - -my $requests_xml = qq{<?xml version="1.0" encoding="utf-8"?> -<service_requests> -<request> -<service_request_id>638344</service_request_id> -<status>open</status> -<status_notes>This is a note.</status_notes> -<service_name>Sidewalk and Curb Issues</service_name> -<service_code>006</service_code> -<description></description> -<agency_responsible></agency_responsible> -<service_notice></service_notice> -<requested_datetime>2010-04-14T06:37:38-08:00</requested_datetime> -UPDATED_DATETIME -<expected_datetime>2010-04-15T06:37:38-08:00</expected_datetime> -<lat>37.762221815</lat> -<long>-122.4651145</long> -</request> -</service_requests> -}; - -my $problem_rs = FixMyStreet::App->model('DB::Problem'); -my $problem = $problem_rs->new( - { - postcode => 'EH99 1SP', - latitude => 1, - longitude => 1, - areas => 1, - title => '', - detail => '', - used_map => 1, - user_id => 1, - name => '', - state => 'confirmed', - service => '', - cobrand => 'default', - cobrand_data => '', - user => $user, - created => DateTime->now()->subtract( days => 1 ), - lastupdate => DateTime->now()->subtract( days => 1 ), - anonymous => 1, - external_id => 638344, - } -); - -$problem->insert; - -for my $test ( - { - desc => 'element missing', - updated_datetime => '', - comment_count => 0, - }, - { - desc => 'empty element', - updated_datetime => '<updated_datetime />', - comment_count => 0, - }, - { - desc => 'element with no content', - updated_datetime => '<updated_datetime></updated_datetime>', - comment_count => 0, - }, - { - desc => 'element with old content', - updated_datetime => sprintf( '<updated_datetime>%s</updated_datetime>', DateTime->now->subtract( days => 3 ) ), - comment_count => 0, - }, - { - desc => 'element with new content', - updated_datetime => sprintf( '<updated_datetime>%s</updated_datetime>', DateTime->now ), - comment_count => 1, - }, -) { - subtest $test->{desc} => sub { - $problem->comments->delete; - $problem->lastupdate(DateTime->now()->subtract( days => 1 ) ), - $problem->update; - - my $local_requests_xml = $requests_xml; - $local_requests_xml =~ s/UPDATED_DATETIME/$test->{updated_datetime}/; - - my $o = Open311->new( jurisdiction => 'mysociety', endpoint => 'http://example.com', test_mode => 1, test_get_returns => { 'requests.xml' => $local_requests_xml } ); - - ok $updates->update_reports( [ 638344 ], $o, { name => 'Test Council' } ); - is $o->test_uri_used, 'http://example.com/requests.xml?jurisdiction_id=mysociety&service_request_id=638344', 'get url'; - - is $problem->comments->count, $test->{comment_count}, 'added a comment'; - }; -} - -$requests_xml = qq{<?xml version="1.0" encoding="utf-8"?> -<service_requests> -<request> -<service_request_id>638344</service_request_id> -<status>open</status> -<status_notes>This is a note.</status_notes> -<service_name>Sidewalk and Curb Issues</service_name> -<service_code>006</service_code> -<description></description> -<agency_responsible></agency_responsible> -<service_notice></service_notice> -<requested_datetime>2010-04-14T06:37:38-08:00</requested_datetime> -<updated_datetime>UPDATED_DATETIME</updated_datetime> -<expected_datetime>2010-04-15T06:37:38-08:00</expected_datetime> -<lat>37.762221815</lat> -<long>-122.4651145</long> -</request> -<request> -<service_request_id>638345</service_request_id> -<status>open</status> -<status_notes>This is a for a different issue.</status_notes> -<service_name>Sidewalk and Curb Issues</service_name> -<service_code>006</service_code> -<description></description> -<agency_responsible></agency_responsible> -<service_notice></service_notice> -<requested_datetime>2010-04-14T06:37:38-08:00</requested_datetime> -<updated_datetime>UPDATED_DATETIME2</updated_datetime> -<expected_datetime>2010-04-15T06:37:38-08:00</expected_datetime> -<lat>37.762221815</lat> -<long>-122.4651145</long> -</request> -</service_requests> -}; - -my $problem2 = $problem_rs->create( - { - postcode => 'EH99 1SP', - latitude => 1, - longitude => 1, - areas => 1, - title => '', - detail => '', - used_map => 1, - user_id => 1, - name => '', - state => 'confirmed', - service => '', - cobrand => 'default', - cobrand_data => '', - user => $user, - created => DateTime->now()->subtract( days => 1 ), - lastupdate => DateTime->now()->subtract( days => 1 ), - anonymous => 1, - external_id => 638345, - } -); - -$problem->comments->delete; -subtest 'update with two requests' => sub { - $problem->comments->delete; - $problem->lastupdate(DateTime->now()->subtract( days => 1 ) ), - - my $date1 = DateTime::Format::W3CDTF->new->format_datetime( DateTime->now() ); - my $date2 = DateTime::Format::W3CDTF->new->format_datetime( DateTime->now->subtract( hours => 1) ); - my $local_requests_xml = $requests_xml; - $local_requests_xml =~ s/UPDATED_DATETIME2/$date2/; - $local_requests_xml =~ s/UPDATED_DATETIME/$date1/; - - my $o = Open311->new( jurisdiction => 'mysociety', endpoint => 'http://example.com', test_mode => 1, test_get_returns => { 'requests.xml' => $local_requests_xml } ); - - ok $updates->update_reports( [ 638344,638345 ], $o, { name => 'Test Council' } ); - is $o->test_uri_used, 'http://example.com/requests.xml?jurisdiction_id=mysociety&service_request_id=638344%2C638345', 'get url'; - - is $problem->comments->count, 1, 'added a comment to first problem'; - is $problem2->comments->count, 1, 'added a comment to second problem'; -}; - -$problem->comments->delete; -$problem->delete; -$user->comments->delete; -$user->problems->delete; -$user->delete; - -done_testing(); |