From db2dc9fc0f3289cb687b834c33a3a0f5600cc41c Mon Sep 17 00:00:00 2001 From: Finn Date: Fri, 18 Aug 2017 12:56:14 +0100 Subject: [PATCH 1/2] Can now edit valid and pending organisations --- lib/Pear/LocalLoop.pm | 2 + .../Controller/Admin/Organisations.pm | 75 +++++++++++++++++++ .../admin/organisations/pending_read.html.ep | 10 ++- .../admin/organisations/valid_read.html.ep | 10 ++- 4 files changed, 90 insertions(+), 7 deletions(-) diff --git a/lib/Pear/LocalLoop.pm b/lib/Pear/LocalLoop.pm index 5134e95..c8d154b 100644 --- a/lib/Pear/LocalLoop.pm +++ b/lib/Pear/LocalLoop.pm @@ -172,7 +172,9 @@ sub startup { $admin_routes->get('/organisations')->to('admin-organisations#list'); $admin_routes->get('/organisations/valid/:id')->to('admin-organisations#valid_read'); + $admin_routes->get('/organisations/valid/:id/edit')->to('admin-organisations#valid_edit'); $admin_routes->get('/organisations/pending/:id')->to('admin-organisations#pending_read'); + $admin_routes->get('/organisations/pending/:id/edit')->to('admin-organisations#pending_edit'); $admin_routes->get('/organisations/pending/:id/approve')->to('admin-organisations#pending_approve'); $admin_routes->get('/feedback')->to('admin-feedback#index'); diff --git a/lib/Pear/LocalLoop/Controller/Admin/Organisations.pm b/lib/Pear/LocalLoop/Controller/Admin/Organisations.pm index 1dffdc9..84eef3f 100644 --- a/lib/Pear/LocalLoop/Controller/Admin/Organisations.pm +++ b/lib/Pear/LocalLoop/Controller/Admin/Organisations.pm @@ -2,6 +2,7 @@ package Pear::LocalLoop::Controller::Admin::Organisations; use Mojo::Base 'Mojolicious::Controller'; use Try::Tiny; +use Data::Dumper; sub list { my $c = shift; @@ -30,6 +31,43 @@ sub valid_read { ); } +sub valid_edit { + my $c = shift; + + my $validation = $c->validation; + $validation->required('name'); + $validation->required('street_name'); + $validation->required('town'); + $validation->required('postcode')->postcode; + + if ( $validation->has_error ) { + $c->flash( error => 'The validation has failed' ); + $c->app->log->warn(Dumper $validation); + return $c->redirect_to( '/admin/organisations/valid/' . $c->param('id') ); + } + + my $valid_org = $c->schema->resultset('Organisation')->find( $c->param('id') ); + + try { + $c->schema->storage->txn_do( sub { + $valid_org->update({ + name => $validation->param('name'), + street_name => $validation->param('street_name'), + town => $validation->param('town'), + postcode => $validation->param('postcode'), + }); + } ); + } finally { + if ( @_ ) { + $c->flash( error => 'Something went wrong Updating the Organisation' ); + $c->app->log->warn(Dumper @_); + } else { + $c->flash( success => 'Updated Organisation' ); + } + }; + $c->redirect_to( '/admin/organisations/valid/' . $valid_org->id ); +} + sub pending_read { my $c = shift; my $pending_org = $c->schema->resultset('PendingOrganisation')->find( $c->param('id') ); @@ -45,6 +83,43 @@ sub pending_read { ); } +sub pending_edit { + my $c = shift; + + my $validation = $c->validation; + $validation->required('name'); + $validation->required('street_name'); + $validation->required('town'); + $validation->required('postcode')->postcode; + + if ( $validation->has_error ) { + $c->flash( error => 'The validation has failed' ); + $c->app->log->warn(Dumper $validation); + return $c->redirect_to( '/admin/organisations/pending/' . $c->param('id') ); + } + + my $pending_org = $c->schema->resultset('PendingOrganisation')->find( $c->param('id') ); + + try { + $c->schema->storage->txn_do( sub { + $pending_org->update({ + name => $validation->param('name'), + street_name => $validation->param('street_name'), + town => $validation->param('town'), + postcode => $validation->param('postcode'), + }); + } ); + } finally { + if ( @_ ) { + $c->flash( error => 'Something went wrong Updating the Organisation' ); + $c->app->log->warn(Dumper @_); + } else { + $c->flash( success => 'Updated Organisation' ); + } + }; + $c->redirect_to( '/admin/organisations/valid/' . $pending_org->id ); +} + sub pending_approve { my $c = shift; my $pending_org = $c->schema->resultset('PendingOrganisation')->find( $c->param('id') ); diff --git a/templates/admin/organisations/pending_read.html.ep b/templates/admin/organisations/pending_read.html.ep index 13995ff..aa0bec9 100644 --- a/templates/admin/organisations/pending_read.html.ep +++ b/templates/admin/organisations/pending_read.html.ep @@ -16,10 +16,12 @@ %= $pending_org->name
diff --git a/templates/admin/organisations/valid_read.html.ep b/templates/admin/organisations/valid_read.html.ep index 17099b2..961f5b2 100644 --- a/templates/admin/organisations/valid_read.html.ep +++ b/templates/admin/organisations/valid_read.html.ep @@ -16,9 +16,13 @@ %= $valid_org->name
From 36a5fdf2e30112cf90c8b1a3a71e71a0fc995c4e Mon Sep 17 00:00:00 2001 From: Finn Date: Fri, 18 Aug 2017 16:46:49 +0100 Subject: [PATCH 2/2] Fixed code and added test for reading and editing Organisations --- lib/Pear/LocalLoop.pm | 4 +- .../Controller/Admin/Organisations.pm | 2 +- t/admin/update.t | 81 +++++++++++++++++++ .../admin/organisations/pending_read.html.ep | 4 +- .../admin/organisations/valid_read.html.ep | 2 +- 5 files changed, 87 insertions(+), 6 deletions(-) create mode 100644 t/admin/update.t diff --git a/lib/Pear/LocalLoop.pm b/lib/Pear/LocalLoop.pm index c8d154b..a04a9bc 100644 --- a/lib/Pear/LocalLoop.pm +++ b/lib/Pear/LocalLoop.pm @@ -172,9 +172,9 @@ sub startup { $admin_routes->get('/organisations')->to('admin-organisations#list'); $admin_routes->get('/organisations/valid/:id')->to('admin-organisations#valid_read'); - $admin_routes->get('/organisations/valid/:id/edit')->to('admin-organisations#valid_edit'); + $admin_routes->post('/organisations/valid/:id/edit')->to('admin-organisations#valid_edit'); $admin_routes->get('/organisations/pending/:id')->to('admin-organisations#pending_read'); - $admin_routes->get('/organisations/pending/:id/edit')->to('admin-organisations#pending_edit'); + $admin_routes->post('/organisations/pending/:id/edit')->to('admin-organisations#pending_edit'); $admin_routes->get('/organisations/pending/:id/approve')->to('admin-organisations#pending_approve'); $admin_routes->get('/feedback')->to('admin-feedback#index'); diff --git a/lib/Pear/LocalLoop/Controller/Admin/Organisations.pm b/lib/Pear/LocalLoop/Controller/Admin/Organisations.pm index 84eef3f..0b3e4c5 100644 --- a/lib/Pear/LocalLoop/Controller/Admin/Organisations.pm +++ b/lib/Pear/LocalLoop/Controller/Admin/Organisations.pm @@ -117,7 +117,7 @@ sub pending_edit { $c->flash( success => 'Updated Organisation' ); } }; - $c->redirect_to( '/admin/organisations/valid/' . $pending_org->id ); + $c->redirect_to( '/admin/organisations/pending/' . $pending_org->id ); } sub pending_approve { diff --git a/t/admin/update.t b/t/admin/update.t new file mode 100644 index 0000000..84fc3e6 --- /dev/null +++ b/t/admin/update.t @@ -0,0 +1,81 @@ +use Mojo::Base -strict; + +use Test::More; +use Mojo::JSON; +use Test::Pear::LocalLoop; + +my $framework = Test::Pear::LocalLoop->new; +my $t = $framework->framework; +my $schema = $t->app->schema; + +my $user = $schema->resultset('User')->create({ + email => 'admin@example.com', + password => 'abc123', + administrator => {}, +}); + +is $schema->resultset('Administrator')->count, 1, 'Admin Created'; + +$schema->resultset('Organisation')->create({ + id => 1, + name => 'Shinra Electric Power Company', + street_name => 'Sector 0, Midgar, Eastern Continent', + town => 'Gaia', + postcode => 'WC1E 6AD', +}); + +$schema->resultset('PendingOrganisation')->create({ + id => 2, + name => '7th Heaven', + street_name => 'Slums, Sector 7', + town => 'Midgar', + postcode => 'WC1E 6AD', + submitted_by_id => $user->id, +}); + +#login to admin +$t->ua->max_redirects(10); +$t->post_ok('/admin', form => { + email => 'admin@example.com', + password => 'abc123', +})->status_is(200); + +#Read approved organisation +$t->get_ok('/admin/organisations/valid/1/') + ->status_is(200); + +#Read pending organisation +$t->get_ok('/admin/organisations/pending/2/') + ->status_is(200); + +#Valid approved organisation update +$t->post_ok('/admin/organisations/valid/1/edit', form => { + name => 'Shinra Electric Power Company', + street_name => 'Sector 0, Midgar, Eastern Continent', + town => 'Gaia', + postcode => 'WC1E 6AD', +})->status_is(200)->content_like(qr/Updated Organisation/); + +#Failed validation on approved organisation +$t->post_ok('/admin/organisations/valid/1/edit', form => { + name => 'Shinra Electric Power Company', + street_name => 'Sector 0, Midgar, Eastern Continent', + postcode => 'WC1E 6AD', +})->content_like(qr/The validation has failed/); + +#Valid pending organisation update +$t->post_ok('/admin/organisations/pending/2/edit', form => { + name => '7th Heaven', + street_name => 'Slums, Sector 7', + town => 'Midgar', + postcode => 'WC1E 6AD', +})->status_is(200)->content_like(qr/Updated Organisation/); + +#Failed validation on pending organisation +$t->post_ok('/admin/organisations/pending/2/edit', form => { + name => '7th Heaven', + street_name => 'Slums, Sector 7', + postcode => 'WC1E 6AD', +})->content_like(qr/The validation has failed/); + +done_testing(); diff --git a/templates/admin/organisations/pending_read.html.ep b/templates/admin/organisations/pending_read.html.ep index aa0bec9..bbf99e0 100644 --- a/templates/admin/organisations/pending_read.html.ep +++ b/templates/admin/organisations/pending_read.html.ep @@ -16,8 +16,8 @@ %= $pending_org->name
    -
    -
  • + +
  • diff --git a/templates/admin/organisations/valid_read.html.ep b/templates/admin/organisations/valid_read.html.ep index 961f5b2..9fd3e97 100644 --- a/templates/admin/organisations/valid_read.html.ep +++ b/templates/admin/organisations/valid_read.html.ep @@ -16,7 +16,7 @@ %= $valid_org->name
      - +