aboutsummaryrefslogtreecommitdiffstats
path: root/t/app/controller/admin.t
diff options
context:
space:
mode:
authorStruan Donald <struan@exo.org.uk>2011-06-09 13:42:03 +0100
committerStruan Donald <struan@exo.org.uk>2011-06-09 13:42:03 +0100
commit98ea266a724e6c38b383c58289556f512a6074d3 (patch)
treeef881e4f3049fba7565725d8afc6320fcc02919b /t/app/controller/admin.t
parentbd892f411757a4fbbd81320495e34074aab19980 (diff)
admin edit report tests
Diffstat (limited to 't/app/controller/admin.t')
-rw-r--r--t/app/controller/admin.t339
1 files changed, 339 insertions, 0 deletions
diff --git a/t/app/controller/admin.t b/t/app/controller/admin.t
index 5b7a3e83a..a4b3f39dd 100644
--- a/t/app/controller/admin.t
+++ b/t/app/controller/admin.t
@@ -78,4 +78,343 @@ subtest 'check contact updating' => sub {
$mech->content_like(qr{test2\@example.com[^<]*</td>[^<]*<td><strong>Yes}s);
};
+my $user =
+ FixMyStreet::App->model('DB::User')
+ ->find_or_create( { email => 'test@example.com', name => 'Test User' } );
+ok $user, "created test user";
+
+my $user2 =
+ FixMyStreet::App->model('DB::User')
+ ->find_or_create( { email => 'test2@example.com', name => 'Test User 2' } );
+ok $user2, "created second test user";
+
+
+my $user3 =
+ FixMyStreet::App->model('DB::User')
+ ->find( { email => 'test3@example.com', name => 'Test User 2' } );
+
+if ( $user3 ) {
+ $mech->delete_user( $user3 );
+}
+
+my $dt = DateTime->new(
+ year => 2011,
+ month => 04,
+ day => 16,
+ hour => 15,
+ minute => 47,
+ second => 23
+);
+
+my $report = FixMyStreet::App->model('DB::Problem')->find_or_create(
+ {
+ postcode => 'SW1A 1AA',
+ council => '2504',
+ areas => ',105255,11806,11828,2247,2504,',
+ category => 'Other',
+ title => 'Report to Edit',
+ detail => 'Detail for Report to Edit',
+ used_map => 't',
+ name => 'Test User',
+ anonymous => 'f',
+ state => 'confirmed',
+ confirmed => $dt->ymd . ' ' . $dt->hms,
+ lang => 'en-gb',
+ service => '',
+ cobrand => 'default',
+ cobrand_data => '',
+ send_questionnaire => 't',
+ latitude => '51.5016605453401',
+ longitude => '-0.142497580865087',
+ user_id => $user->id,
+ whensent => $dt->ymd . ' ' . $dt->hms,
+ }
+);
+
+my $log_entries = FixMyStreet::App->model('DB::AdminLog')->search(
+ {
+ object_type => 'problem',
+ object_id => $report->id
+ },
+ {
+ order_by => { -desc => 'id' },
+ }
+);
+
+is $log_entries->count, 0, 'no admin log entries';
+
+my $report_id = $report->id;
+ok $report, "created test report - $report_id";
+
+foreach my $test (
+ {
+ description => 'edit report title',
+ fields => {
+ title => 'Report to Edit',
+ detail => 'Detail for Report to Edit',
+ state => 'confirmed',
+ name => 'Test User',
+ email => $user->email,
+ anonymous => 0,
+ },
+ changes => {
+ title => 'Edited Report',
+ },
+ log_count => 1,
+ log_entries => [ qw/edit/ ],
+ resend => 0,
+ },
+ {
+ description => 'edit report description',
+ fields => {
+ title => 'Edited Report',
+ detail => 'Detail for Report to Edit',
+ state => 'confirmed',
+ name => 'Test User',
+ email => $user->email,
+ anonymous => 0,
+ },
+ changes => {
+ detail => 'Edited Detail',
+ },
+ log_count => 2,
+ log_entries => [ qw/edit edit/ ],
+ resend => 0,
+ },
+ {
+ description => 'edit report user name',
+ fields => {
+ title => 'Edited Report',
+ detail => 'Edited Detail',
+ state => 'confirmed',
+ name => 'Test User',
+ email => $user->email,
+ anonymous => 0,
+ },
+ changes => {
+ name => 'Edited User',
+ },
+ log_count => 3,
+ log_entries => [ qw/edit edit edit/ ],
+ resend => 0,
+ user => $user,
+ },
+ {
+ description => 'edit report user email',
+ fields => {
+ title => 'Edited Report',
+ detail => 'Edited Detail',
+ state => 'confirmed',
+ name => 'Edited User',
+ email => $user->email,
+ anonymous => 0,
+ },
+ changes => {
+ email => $user2->email,
+ },
+ log_count => 4,
+ log_entries => [ qw/edit edit edit edit/ ],
+ resend => 0,
+ user => $user2,
+ },
+ {
+ description => 'change state to unconfirmed',
+ fields => {
+ title => 'Edited Report',
+ detail => 'Edited Detail',
+ state => 'confirmed',
+ name => 'Edited User',
+ email => $user2->email,
+ anonymous => 0,
+ },
+ changes => {
+ state => 'unconfirmed'
+ },
+ log_count => 5,
+ log_entries => [ qw/state_change edit edit edit edit/ ],
+ resend => 0,
+ },
+ {
+ description => 'change state to confirmed',
+ fields => {
+ title => 'Edited Report',
+ detail => 'Edited Detail',
+ state => 'unconfirmed',
+ name => 'Edited User',
+ email => $user2->email,
+ anonymous => 0,
+ },
+ changes => {
+ state => 'confirmed'
+ },
+ log_count => 6,
+ log_entries => [ qw/state_change state_change edit edit edit edit/ ],
+ resend => 0,
+ },
+ {
+ description => 'change state to fixed',
+ fields => {
+ title => 'Edited Report',
+ detail => 'Edited Detail',
+ state => 'confirmed',
+ name => 'Edited User',
+ email => $user2->email,
+ anonymous => 0,
+ },
+ changes => {
+ state => 'fixed'
+ },
+ log_count => 7,
+ log_entries => [ qw/state_change state_change state_change edit edit edit edit/ ],
+ resend => 0,
+ },
+ {
+ description => 'change state to hidden',
+ fields => {
+ title => 'Edited Report',
+ detail => 'Edited Detail',
+ state => 'fixed',
+ name => 'Edited User',
+ email => $user2->email,
+ anonymous => 0,
+ },
+ changes => {
+ state => 'hidden'
+ },
+ log_count => 8,
+ log_entries => [ qw/state_change state_change state_change state_change edit edit edit edit/ ],
+ resend => 0,
+ },
+ {
+ description => 'edit and change state',
+ fields => {
+ title => 'Edited Report',
+ detail => 'Edited Detail',
+ state => 'hidden',
+ name => 'Edited User',
+ email => $user2->email,
+ anonymous => 0,
+ },
+ changes => {
+ state => 'confirmed',
+ anonymous => 1,
+ },
+ log_count => 10,
+ log_entries => [ qw/edit state_change state_change state_change state_change state_change edit edit edit edit/ ],
+ resend => 0,
+ },
+ {
+ description => 'resend',
+ fields => {
+ title => 'Edited Report',
+ detail => 'Edited Detail',
+ state => 'confirmed',
+ name => 'Edited User',
+ email => $user2->email,
+ anonymous => 1,
+ },
+ changes => {
+ },
+ log_count => 11,
+ log_entries => [ qw/resend edit state_change state_change state_change state_change state_change edit edit edit edit/ ],
+ resend => 1,
+ },
+) {
+ subtest $test->{description} => sub {
+ $log_entries->reset;
+ $mech->get_ok("/admin/report_edit/$report_id");
+
+ is_deeply( $mech->visible_form_values(), $test->{fields}, 'initial form values' );
+
+ my $new_fields = {
+ %{ $test->{fields} },
+ %{ $test->{changes} },
+ };
+
+ if ( $test->{resend} ) {
+ $mech->click_ok( 'resend' );
+ } else {
+ $mech->submit_form_ok( { with_fields => $new_fields }, 'form_submitted' );
+ }
+
+ is_deeply( $mech->visible_form_values(), $new_fields, 'changed form values' );
+ is $log_entries->count, $test->{log_count}, 'log entry count';
+ is $log_entries->next->action, $_, 'log entry added' for @{ $test->{log_entries} };
+
+ $report->discard_changes;
+
+ if ( $report->state eq 'confirmed' ) {
+ $mech->content_contains( 'type="submit" name="resend"', 'no resend button' );
+ } else {
+ $mech->content_lacks( 'type="submit" name="resend"', 'no resend button' );
+ }
+
+ is $report->$_, $test->{changes}->{$_}, "$_ updated" for grep { $_ ne 'email' } keys %{ $test->{changes} };
+
+ if ( $test->{user} ) {
+ is $report->user->id, $test->{user}->id, 'user changed';
+ }
+
+ if ( $test->{resend} ) {
+ $mech->content_contains( 'That problem will now be resent' );
+ is $report->whensent, undef, 'mark report to resend';
+ }
+ };
+}
+
+subtest 'change email to new user' => sub {
+ $log_entries->delete;
+ $mech->get_ok("/admin/report_edit/$report_id");
+ my $fields = {
+ title => $report->title,
+ detail => $report->detail,
+ state => $report->state,
+ name => $report->name,
+ email => $report->user->email,
+ anonymous => 1,
+ };
+
+ is_deeply( $mech->visible_form_values(), $fields, 'initial form values' );
+
+ my $changes = {
+ email => 'test3@example.com'
+ };
+
+ $user3 =
+ FixMyStreet::App->model('DB::User')
+ ->find( { email => 'test3@example.com', name => 'Test User 2' } );
+
+ ok !$user3, 'user not in database';
+
+ my $new_fields = {
+ %{ $fields },
+ %{ $changes },
+ };
+
+ $mech->submit_form_ok(
+ {
+ with_fields => $new_fields,
+ }
+ );
+
+ is $log_entries->count, 1, 'created admin log entries';
+ is $log_entries->first->action, 'edit', 'log action';
+ is_deeply( $mech->visible_form_values(), $new_fields, 'changed form values' );
+
+ $user3 =
+ FixMyStreet::App->model('DB::User')
+ ->find( { email => 'test3@example.com', name => 'Test User 2' } );
+
+ $report->discard_changes;
+
+ ok $user3, 'new user created';
+ is $report->user_id, $user3->id, 'user changed to new user';
+};
+
+$log_entries->delete;
+
+$mech->delete_user( $user );
+$mech->delete_user( $user2 );
+$mech->delete_user( $user3 );
+
done_testing();