diff options
Diffstat (limited to 't/app')
-rw-r--r-- | t/app/controller/report_display.t | 24 | ||||
-rw-r--r-- | t/app/model/problem.t | 140 | ||||
-rw-r--r-- | t/app/model/questionnaire.t | 106 |
3 files changed, 270 insertions, 0 deletions
diff --git a/t/app/controller/report_display.t b/t/app/controller/report_display.t index 1f857a387..5c66200c8 100644 --- a/t/app/controller/report_display.t +++ b/t/app/controller/report_display.t @@ -235,6 +235,30 @@ for my $test ( banner_text => 'This problem has been fixed.', fixed => 1 }, + { + description => 'user fixed report', + date => DateTime->now, + state => 'fixed - user', + banner_id => 'fixed', + banner_text => 'This problem has been fixed.', + fixed => 1 + }, + { + description => 'council fixed report', + date => DateTime->now, + state => 'fixed - council', + banner_id => 'fixed', + banner_text => 'This problem has been fixed.', + fixed => 1 + }, + { + description => 'closed report', + date => DateTime->now, + state => 'closed', + banner_id => '', + banner_text => '', + fixed => 0 + }, ) { subtest "banner for $test->{description}" => sub { $report->confirmed( $test->{date}->ymd . ' ' . $test->{date}->hms ); diff --git a/t/app/model/problem.t b/t/app/model/problem.t index 1b8804fce..43f15dbde 100644 --- a/t/app/model/problem.t +++ b/t/app/model/problem.t @@ -152,4 +152,144 @@ for my $test ( }; } +for my $test ( + { + state => 'unconfirmed', + is_open => 1, + }, + { + state => 'confirmed', + is_open => 1, + }, + { + state => 'investigating', + is_open => 1, + }, + { + state => 'planned', + is_open => 1, + }, + { + state => 'in progress', + is_open => 1, + }, + { + state => 'fixed', + is_open => 0, + }, + { + state => 'fixed - council', + is_open => 0, + }, + { + state => 'fixed - user', + is_open => 0, + }, + { + state => 'closed', + is_open => 0, + }, +) { + subtest $test->{state} . ' is open/closed' => sub { + $problem->state( $test->{state} ); + is $problem->is_open, $test->{is_open}, 'is_open'; + }; +} + +for my $test ( + { + state => 'unconfirmed', + is_fixed => 0, + }, + { + state => 'confirmed', + is_fixed => 0, + }, + { + state => 'investigating', + is_fixed => 0, + }, + { + state => 'planned', + is_fixed => 0, + }, + { + state => 'in progress', + is_fixed => 0, + }, + { + state => 'fixed', + is_fixed => 1, + }, + { + state => 'fixed - council', + is_fixed => 1, + }, + { + state => 'fixed - user', + is_fixed => 1, + }, + { + state => 'closed', + is_fixed => 0, + }, +) { + subtest $test->{state} . ' is fixed/open' => sub { + $problem->state( $test->{state} ); + is $problem->is_fixed, $test->{is_fixed}, 'is_fixed'; + }; +} + +for my $test ( + { + state => 'partial', + is_visible => 0, + }, + { + state => 'hidden', + is_visible => 0, + }, + { + state => 'unconfirmed', + is_visible => 0, + }, + { + state => 'confirmed', + is_visible => 1, + }, + { + state => 'investigating', + is_visible => 1, + }, + { + state => 'planned', + is_visible => 1, + }, + { + state => 'in progress', + is_visible => 1, + }, + { + state => 'fixed', + is_visible => 1, + }, + { + state => 'fixed - council', + is_visible => 1, + }, + { + state => 'fixed - user', + is_visible => 1, + }, + { + state => 'closed', + is_visible => 1, + }, +) { + subtest $test->{state} . ' is fixed/open' => sub { + $problem->state( $test->{state} ); + is $problem->is_visible, $test->{is_visible}, 'is_visible'; + }; +} + done_testing(); diff --git a/t/app/model/questionnaire.t b/t/app/model/questionnaire.t new file mode 100644 index 000000000..60b52043a --- /dev/null +++ b/t/app/model/questionnaire.t @@ -0,0 +1,106 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Test::More; + +use FixMyStreet; +use FixMyStreet::TestMech; + +my $user = FixMyStreet::App->model('DB::User')->find_or_create( { email => 'test@example.com' } ); + +my $problem = FixMyStreet::App->model('DB::Problem')->create( + { + postcode => 'EH99 1SP', + latitude => 1, + longitude => 1, + areas => 1, + title => 'to be sent', + detail => 'detail', + used_map => 1, + user_id => 1, + name => 'A Name', + state => 'confirmed', + service => '', + cobrand => 'default', + cobrand_data => '', + confirmed => \"ms_current_timestamp() - '5 weeks'::interval", + whensent => \"ms_current_timestamp() - '5 weeks'::interval", + user => $user, + anonymous => 0, + } +); + +diag $problem->id; + +my $mech = FixMyStreet::TestMech->new; + +for my $test ( + { + state => 'unconfirmed', + send_email => 0, + }, + { + state => 'partial', + send_email => 0, + }, + { + state => 'hidden', + send_email => 0, + }, + { + state => 'confirmed', + send_email => 1, + }, + { + state => 'investigating', + send_email => 1, + }, + { + state => 'planned', + send_email => 1, + }, + { + state => 'in progress', + send_email => 1, + }, + { + state => 'fixed', + send_email => 1, + }, + { + state => 'fixed - council', + send_email => 1, + }, + { + state => 'fixed - user', + send_email => 1, + }, + { + state => 'closed', + send_email => 1, + }, +) { + subtest "correct questionnaire behviour for state $test->{state}" => sub { + $problem->discard_changes; + $problem->state( $test->{state} ); + $problem->send_questionnaire( 1 ); + $problem->update; + + $problem->questionnaires->delete; + + $mech->email_count_is(0); + + FixMyStreet::App->model('DB::Questionnaire') + ->send_questionnaires( { site => 'fixmystreet' } ); + + $mech->email_count_is( $test->{send_email} ); + + $mech->clear_emails_ok(); + } +} + +$mech->delete_user( $user ); + +done_testing(); |