diff options
Diffstat (limited to 't/open311')
-rw-r--r-- | t/open311/getservicerequestupdates.t | 100 | ||||
-rw-r--r-- | t/open311/post-service-request-updates.t | 25 |
2 files changed, 66 insertions, 59 deletions
diff --git a/t/open311/getservicerequestupdates.t b/t/open311/getservicerequestupdates.t index e53921156..130b618c9 100644 --- a/t/open311/getservicerequestupdates.t +++ b/t/open311/getservicerequestupdates.t @@ -23,6 +23,7 @@ my $user = FixMyStreet::DB->resultset('User')->find_or_create( my %bodies = ( 2237 => FixMyStreet::DB->resultset("Body")->create({ name => 'Oxfordshire' }), + 2494 => FixMyStreet::DB->resultset("Body")->create({ name => 'Bexley' }), 2482 => FixMyStreet::DB->resultset("Body")->create({ name => 'Bromley', send_method => 'Open311', @@ -34,6 +35,7 @@ my %bodies = ( 2651 => FixMyStreet::DB->resultset("Body")->create({ name => 'Edinburgh' }), ); $bodies{2237}->body_areas->create({ area_id => 2237 }); +$bodies{2494}->body_areas->create({ area_id => 2494 }); my $response_template = $bodies{2482}->response_templates->create({ title => "investigating template", @@ -130,8 +132,10 @@ subtest 'check extended request parsed correctly' => sub { }; my $problem_rs = FixMyStreet::DB->resultset('Problem'); -my $problem = $problem_rs->new( - { + +sub create_problem { + my ($body_id, $external_id) = @_; + my $problem = $problem_rs->create({ postcode => 'EH99 1SP', latitude => 1, longitude => 1, @@ -149,12 +153,13 @@ my $problem = $problem_rs->new( created => DateTime->now()->subtract( days => 1 ), lastupdate => DateTime->now()->subtract( days => 1 ), anonymous => 1, - external_id => int(rand(time())), - bodies_str => $bodies{2482}->id, - } -); + external_id => $external_id || int(rand(time())), + bodies_str => $body_id, + }); + return $problem; +} -$problem->insert; +my $problem = create_problem($bodies{2482}->id); for my $test ( { @@ -448,27 +453,7 @@ for my $test ( }; } -my $problemOx = $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 => int(rand(time())), - bodies_str => $bodies{2237}->id, -}); +my $problemB = create_problem($bodies{2237}->id); for my $test ( { @@ -487,27 +472,46 @@ for my $test ( }, ) { subtest $test->{desc} => sub { - my $local_requests_xml = setup_xml($problemOx->external_id, $problemOx->id, $test->{comment_status}); + my $local_requests_xml = setup_xml($problemB->external_id, $problemB->id, $test->{comment_status}); my $o = Open311->new( jurisdiction => 'mysociety', endpoint => 'http://example.com', test_mode => 1, test_get_returns => { 'servicerequestupdates.xml' => $local_requests_xml } ); - $problemOx->lastupdate( DateTime->now()->subtract( days => 1 ) ); - $problemOx->state( $test->{start_state} ); - $problemOx->update; + $problemB->lastupdate( DateTime->now()->subtract( days => 1 ) ); + $problemB->state( $test->{start_state} ); + $problemB->update; my $update = Open311::GetServiceRequestUpdates->new( system_user => $user ); $update->update_comments( $o, $bodies{2237} ); - is $problemOx->comments->count, 1, 'comment count'; - $problemOx->discard_changes; + is $problemB->comments->count, 1, 'comment count'; + $problemB->discard_changes; my $c = FixMyStreet::DB->resultset('Comment')->search( { external_id => 638344 } )->first; ok $c, 'comment exists'; is $c->problem_state, $test->{problem_state}, 'problem_state correct'; - is $problemOx->state, $test->{end_state}, 'correct problem state'; - $problemOx->comments->delete; + is $problemB->state, $test->{end_state}, 'correct problem state'; + $problemB->comments->delete; }; } +subtest 'Marking report as fixed closes it for updates (Bexley)' => sub { + my $local_requests_xml = setup_xml($problemB->external_id, $problemB->id, 'CLOSED'); + my $o = Open311->new( jurisdiction => 'mysociety', endpoint => 'http://example.com', test_mode => 1, test_get_returns => { 'servicerequestupdates.xml' => $local_requests_xml } ); + + $problemB->update( { bodies_str => $bodies{2494}->id } ); + + my $update = Open311::GetServiceRequestUpdates->new( system_user => $user ); + FixMyStreet::override_config { + ALLOWED_COBRANDS => 'bexley', + }, sub { + $update->update_comments( $o, $bodies{2494} ); + }; + + $problemB->discard_changes; + is $problemB->comments->count, 1, 'comment count'; + is $problemB->get_extra_metadata('closed_updates'), 1; + $problemB->comments->delete; +}; + subtest 'Update with media_url includes image in update' => sub { my $UPLOAD_DIR = tempdir( CLEANUP => 1 ); FixMyStreet::override_config { @@ -578,29 +582,7 @@ subtest 'date for comment correct' => sub { $problem->comments->delete; }; -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(), - lastupdate => DateTime->now(), - anonymous => 1, - external_id => $problem->external_id, - bodies_str => $bodies{2651}->id, - } -); +my $problem2 = create_problem($bodies{2651}->id, $problem->external_id); for my $test ( { diff --git a/t/open311/post-service-request-updates.t b/t/open311/post-service-request-updates.t index 6a7bc6ff2..ac6fb870c 100644 --- a/t/open311/post-service-request-updates.t +++ b/t/open311/post-service-request-updates.t @@ -62,6 +62,7 @@ my $other_user = $mech->create_user_ok('test2@example.com', title => 'MRS'); sub c { my ($p, $user) = @_; my $c = $mech->create_comment_for_problem($p, $user || $p->user, 'Name', 'Update text', 'f', 'confirmed', 'confirmed', { confirmed => \'current_timestamp' }); + $c->discard_changes; return $c; } @@ -96,6 +97,30 @@ subtest 'Send comments' => sub { }; }; +subtest 'Check Bexley munging' => sub { + FixMyStreet::override_config { + ALLOWED_COBRANDS => ['fixmystreet', 'bexley'], + }, sub { + my $bexley = $mech->create_body_ok(2494, 'Bexley', $params); + $mech->create_contact_ok(body_id => $bexley->id, category => 'Other', email => "OTHER"); + + my $test_res = HTTP::Response->new(); + $test_res->code(200); + $test_res->message('OK'); + $test_res->content('<?xml version="1.0" encoding="utf-8"?><service_request_updates><request_update><update_id>248</update_id></request_update></service_request_updates>'); + my $o = Open311->new( + fixmystreet_body => $bexley, + test_mode => 1, + test_get_returns => { 'servicerequestupdates.xml' => $test_res }, + ); + my ($p5, $c5) = p_and_c($bexley); + my $id = $o->post_service_request_update($c5); + is $id, 248, 'correct update ID returned'; + like $o->test_req_used->content, qr/service_code=OTHER/, 'Service code included'; + }; +}; + + subtest 'Oxfordshire gets an ID' => sub { FixMyStreet::override_config { ALLOWED_COBRANDS => ['fixmystreet', 'bromley', 'buckinghamshire', 'lewisham', 'oxfordshire'], |