diff --git a/bin/tick_parliament.pl b/bin/tick_parliament.pl index dd658e45..3bd18041 100644 --- a/bin/tick_parliament.pl +++ b/bin/tick_parliament.pl @@ -25,6 +25,9 @@ foreach my $id (@propositions) { my $proposition = $propositions_rs->find($id); out('Ticking '.$proposition->name); $proposition->check_status; + if ($proposition->name eq 'Abandon Station' && $proposition->status eq 'Passed') { + $proposition->station->sanitize; + } } my $finish = time; diff --git a/lib/Lacuna/DB/Result/Propositions.pm b/lib/Lacuna/DB/Result/Propositions.pm index 588c55d2..374daa8d 100644 --- a/lib/Lacuna/DB/Result/Propositions.pm +++ b/lib/Lacuna/DB/Result/Propositions.pm @@ -78,6 +78,7 @@ sub cast_vote { else { $self->votes_no( $self->votes_no + 1 ); } + $self->update; $self->check_status; } @@ -106,10 +107,7 @@ sub check_status { sub pass { my $self = shift; - $self->status('Passed'); - my $empire = Lacuna->db->resultset('Lacuna::DB::Result::Empire')->find($self->proposed_by_id); - my $alliance = $empire->alliance; - $alliance->send_predefined_message( + $self->station->alliance->send_predefined_message( filename => 'parliament_vote_passed.txt', tag => 'Correspondence', params => [ @@ -118,9 +116,10 @@ sub pass { $self->votes_yes, $self->votes_no, $self->description, - $self->fail_extra_message, + $self->pass_extra_message, ], ); + $self->status('Passed'); return $self; } @@ -130,7 +129,6 @@ has pass_extra_message => ( sub fail { my $self = shift; - $self->status('Failed'); $self->station->alliance->send_predefined_message( filename => 'parliament_vote_failed.txt', tag => 'Correspondence', @@ -143,6 +141,7 @@ sub fail { $self->fail_extra_message, ], ); + $self->status('Failed'); return $self; } diff --git a/lib/Lacuna/DB/Result/Propositions/AbandonStation.pm b/lib/Lacuna/DB/Result/Propositions/AbandonStation.pm index 1732735c..e0953b58 100644 --- a/lib/Lacuna/DB/Result/Propositions/AbandonStation.pm +++ b/lib/Lacuna/DB/Result/Propositions/AbandonStation.pm @@ -7,7 +7,8 @@ extends 'Lacuna::DB::Result::Propositions'; before pass => sub { my ($self) = @_; - $self->station->sanitize; + $self->pass_extra_message('Station shutdown has been initiated.'); +# $self->station->sanitize; }; diff --git a/t/Parliament.t b/t/Parliament.t index d399c2aa..efb67a02 100644 --- a/t/Parliament.t +++ b/t/Parliament.t @@ -1,5 +1,5 @@ use lib '../lib'; -use Test::More tests => 28; +use Test::More tests => 32; use Test::Deep; use Data::Dumper; use 5.010; @@ -109,6 +109,19 @@ is($result->{error}{data}, 17, 'renaming uninhabited requires level 17 parliamen $result = $tester->post('parliament', 'propose_fire_bfg', [$session_id, $par->id]); is($result->{error}{data}, 25, 'firing bfg requires level 25 parliament'); +$result = $tester->post('body', 'abandon', [$session_id, $station->id]); +is($result->{error}{code}, 1017, 'abandoning the station causes a proposition response'); + +$result = $tester->post('parliament', 'view_propositions', [$session_id, $par->id]); +is($result->{result}{propositions}[0]{name}, 'Abandon Station', 'got a list of propositions'); + +$result = $tester->post('parliament', 'cast_vote', [$session_id, $par->id, $result->{result}{propositions}[0]{id}, 1]); +is($result->{result}{proposition}{my_vote}, 1, 'got my vote'); + +$result = $tester->post('inbox','view_inbox', [$session_id]); + +my @messages = sort { $b->{id} <=> $a->{id} } @{ $result->{result}{messages} }; +ok($messages[0]->{subject} =~ /^Pass: Abandon Station/, 'Pass email received'); END { $station->sanitize; diff --git a/var/www/public/changes.txt b/var/www/public/changes.txt index 1c95a76c..02497e16 100644 --- a/var/www/public/changes.txt +++ b/var/www/public/changes.txt @@ -11,6 +11,7 @@ - Fix: view_ships_orbiting will now return the ships that are orbiting your planet instead of just the count. - Fix: Fighters will return home after defending (instead of doubling the travel time). - Fix: Fix defender's home field advantage. + - Fix: A passing vote for the Abandon Station proposition no longer causes a server error. 3.0402 - API: Changed parliament propositions and laws to use email formatting rules. -- 2.51.2 From c5a265a9a88a1786fdfcf396d950b02fb9c604a3 Mon Sep 17 00:00:00 2001 From: Matthew Musgrove Date: Fri, 8 Apr 2011 22:11:33 -0500 Subject: [PATCH 2/4] Fix tick_parliament.pl --- bin/tick_parliament.pl | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/bin/tick_parliament.pl b/bin/tick_parliament.pl index 3bd18041..b4e8c59e 100644 --- a/bin/tick_parliament.pl +++ b/bin/tick_parliament.pl @@ -20,12 +20,17 @@ our $db = Lacuna->db; out('Ticking parliament'); my $propositions_rs = $db->resultset('Lacuna::DB::Result::Propositions'); -my @propositions = $propositions_rs->search({ date_ends => { '<' => DateTime->now}})->get_column('id')->all; +my @propositions = $propositions_rs->search({ date_ends => { '<' => DateTime->now} })->get_column('id')->all; foreach my $id (@propositions) { my $proposition = $propositions_rs->find($id); out('Ticking '.$proposition->name); $proposition->check_status; - if ($proposition->name eq 'Abandon Station' && $proposition->status eq 'Passed') { +} +@propositions = $propositions_rs->search({ status => 'Passed' })->get_column('id')->all; +foreach my $id (@propositions) { + my $proposition = $propositions_rs->find($id); + if ($proposition->name eq 'Abandon Station') { + out($proposition->description); $proposition->station->sanitize; } } -- 2.51.2 From 46c2deae6978042c69335c8ed00bfec50c7af1fc Mon Sep 17 00:00:00 2001 From: Matthew Musgrove Date: Fri, 8 Apr 2011 22:21:55 -0500 Subject: [PATCH 3/4] Fix tick_parliament.pl --- bin/tick_parliament.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/tick_parliament.pl b/bin/tick_parliament.pl index b4e8c59e..8bb2fdac 100644 --- a/bin/tick_parliament.pl +++ b/bin/tick_parliament.pl @@ -20,7 +20,7 @@ our $db = Lacuna->db; out('Ticking parliament'); my $propositions_rs = $db->resultset('Lacuna::DB::Result::Propositions'); -my @propositions = $propositions_rs->search({ date_ends => { '<' => DateTime->now} })->get_column('id')->all; +my @propositions = $propositions_rs->search({ status => 'Pending', date_ends => { '<' => DateTime->now} })->get_column('id')->all; foreach my $id (@propositions) { my $proposition = $propositions_rs->find($id); out('Ticking '.$proposition->name); -- 2.51.2 From 2d08bdbecd3796fe58f5f325a9cef52ea1d5dfc2 Mon Sep 17 00:00:00 2001 From: Matthew Musgrove Date: Fri, 8 Apr 2011 22:29:57 -0500 Subject: [PATCH 4/4] Stop bogus fail message when a Space Station is abandoned. --- lib/Lacuna/DB/Result/Propositions.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Lacuna/DB/Result/Propositions.pm b/lib/Lacuna/DB/Result/Propositions.pm index 374daa8d..d73c08bf 100644 --- a/lib/Lacuna/DB/Result/Propositions.pm +++ b/lib/Lacuna/DB/Result/Propositions.pm @@ -84,7 +84,7 @@ sub cast_vote { before delete => sub { my $self = shift; - $self->fail; + $self->fail if $self->status eq 'Pending'; $self->votes->delete_all; };