aboutsummaryrefslogtreecommitdiffstats
path: root/t/open311
diff options
context:
space:
mode:
authorHakim Cassimally <hakim@mysociety.org>2014-02-20 17:02:33 +0000
committerMatthew Somerville <matthew@mysociety.org>2014-02-27 17:27:25 +0000
commit5ba57c5a9c8ecc51e73075fa003afa3694e7d269 (patch)
tree00ed24d5da9c054fac7b47bc585516b61ba079c2 /t/open311
parentcebc2d4fe88228a9864e737c9cdbdf94629f1554 (diff)
Fix uncommon Open311 errors on processing updates.
Fixes #677. The query to fetch the related alert sometimes: * retrieves no result, causing an error on $alert->id * retrieves multiple results, causing deprecation warnings (e.g. which may at some point become future errors in DBIC) This commit turns the resultset('DB::Alert')->find(...) into a search(...) and loops over the results, to suppress them.
Diffstat (limited to 't/open311')
-rw-r--r--t/open311/getservicerequestupdates.t34
1 files changed, 25 insertions, 9 deletions
diff --git a/t/open311/getservicerequestupdates.t b/t/open311/getservicerequestupdates.t
index 4e10766d6..00c25a83e 100644
--- a/t/open311/getservicerequestupdates.t
+++ b/t/open311/getservicerequestupdates.t
@@ -627,10 +627,22 @@ foreach my $test ( {
foreach my $test ( {
desc => 'normally alerts are not suppressed',
+ num_alerts => 1,
suppress_alerts => 0,
},
{
desc => 'alerts suppressed if suppress_alerts set',
+ num_alerts => 1,
+ suppress_alerts => 1,
+ },
+ {
+ desc => 'alert suppression ok even if no alerts',
+ num_alerts => 0,
+ suppress_alerts => 1,
+ },
+ {
+ desc => 'alert suppression ok even if 2x alerts',
+ num_alerts => 2,
suppress_alerts => 1,
}
) {
@@ -652,12 +664,14 @@ foreach my $test ( {
$problem->lastupdate( $dt->subtract( hours => 3 ) );
$problem->update;
- my $alert = FixMyStreet::App->model('DB::Alert')->find_or_create( {
- alert_type => 'new_updates',
- parameter => $problem->id,
- confirmed => 1,
- user_id => $problem->user->id,
- } );
+ my @alerts = map {
+ my $alert = FixMyStreet::App->model('DB::Alert')->create( {
+ alert_type => 'new_updates',
+ parameter => $problem->id,
+ confirmed => 1,
+ user_id => $problem->user->id,
+ } )
+ } (1..$test->{num_alerts});
$requests_xml =~ s/UPDATED_DATETIME/$dt/;
@@ -674,19 +688,21 @@ foreach my $test ( {
my $alerts_sent = FixMyStreet::App->model('DB::AlertSent')->search(
{
- alert_id => $alert->id,
+ alert_id => [ map $_->id, @alerts ],
parameter => $problem->comments->first->id,
}
);
if ( $test->{suppress_alerts} ) {
- ok $alerts_sent->count(), 'alerts suppressed';
+ is $alerts_sent->count(), $test->{num_alerts}, 'alerts suppressed';
} else {
is $alerts_sent->count(), 0, 'alerts not suppressed';
}
$alerts_sent->delete;
- $alert->delete;
+ for my $alert (@alerts) {
+ $alert->delete;
+ }
}
}