From 65f1377081b4f20ff8dc907dabc12fea75467500 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Wed, 23 Sep 2009 09:55:25 -0700 Subject: [PATCH] Add tests for InOutBoard. documents bug#11024. Also, add a purge method to clean-up the collateral tables for this asset. --- docs/changelog/7.x.x.txt | 1 + lib/WebGUI/Asset/Wobject/InOutBoard.pm | 24 ++++- t/Asset/Wobject/InOutBoard.t | 141 +++++++++++++++++++++++++ 3 files changed, 163 insertions(+), 3 deletions(-) create mode 100644 t/Asset/Wobject/InOutBoard.t diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 448d43bdc..96200e443 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -1,5 +1,6 @@ 7.8.1 - fixed: Wikis broken by 7.8.0 upgrade + - fixed #11024: In/Out Board Busted 7.8.0 - upgraded YUI to 2.8.0r4 diff --git a/lib/WebGUI/Asset/Wobject/InOutBoard.pm b/lib/WebGUI/Asset/Wobject/InOutBoard.pm index 1eac5dbbf..6fc43f790 100644 --- a/lib/WebGUI/Asset/Wobject/InOutBoard.pm +++ b/lib/WebGUI/Asset/Wobject/InOutBoard.pm @@ -137,6 +137,23 @@ sub prepareView { } +#------------------------------------------------------------------- + +=head2 purge ( ) + +Extend the base method to cleanup the status and statusLog tables. + +=cut + +sub purge { + my $self = shift; + my $session = $self->session; + $session->db->write('delete from InOutBoard_status where assetId=?', [$self->getId]); + $session->db->write('delete from InOutBoard_statusLog where assetId=?', [$self->getId]); + $self->SUPER::purge(@_); +} + + #------------------------------------------------------------------- =head2 view @@ -393,17 +410,18 @@ sub www_setStatus { $session->scratch->delete("userId"); $db->write("delete from InOutBoard_status where userId=? and assetId=?", [ $sessionUserId, $self->getId ]); my $message = $session->form->process('message'); + my $status = $session->form->process('status'); $db->write( "insert into InOutBoard_status (assetId,userId,status,dateStamp,message) values (?,?,?,?,?)", - [$self->getId, $sessionUserId, $session->form->process("status"), $session->datetime->time(), $message ], + [$self->getId, $sessionUserId, $status, $session->datetime->time(), $message ], ); $db->write( "insert into InOutBoard_statusLog (assetId,userId,createdBy,status,dateStamp,message) values (?,?,?,?,?,?)", - [$self->getId, $sessionUserId, $session->user->userId, $session->form->process("status"), $session->datetime->time(), $message ], + [$self->getId, $sessionUserId, $session->user->userId, $status, $session->datetime->time(), $message ], ); } else { - $session->scratch->set("userId",$session->form->process("delegate")); + $session->scratch->set("userId",$delegate); } return $self->www_view; } diff --git a/t/Asset/Wobject/InOutBoard.t b/t/Asset/Wobject/InOutBoard.t new file mode 100644 index 000000000..408f886f6 --- /dev/null +++ b/t/Asset/Wobject/InOutBoard.t @@ -0,0 +1,141 @@ +#------------------------------------------------------------------- +# WebGUI is Copyright 2001-2009 Plain Black Corporation. +#------------------------------------------------------------------- +# Please read the legal notices (docs/legal.txt) and the license +# (docs/license.txt) that came with this distribution before using +# this software. +#------------------------------------------------------------------- +# http://www.plainblack.com info@plainblack.com +#------------------------------------------------------------------- + +use FindBin; +use strict; +use lib "$FindBin::Bin/../../lib"; +use Test::MockObject; +use Test::MockObject::Extends; + +##The goal of this test is to test the creation of Article Wobjects. + +use WebGUI::Test; +use WebGUI::Session; +use Test::More tests => 6; # increment this value for each test you create +use Test::Deep; +use Data::Dumper; + +my $templateId = 'INOUTBOARD_TEMPLATE___'; +my $templateMock = Test::MockObject->new({}); +$templateMock->set_isa('WebGUI::Asset::Template'); +$templateMock->set_always('getId', $templateId); +my $templateVars; +$templateMock->mock('process', sub { $templateVars = $_[1]; } ); + +use WebGUI::Asset::Wobject::InOutBoard; + +my $session = WebGUI::Test->session; + +#Build a bunch of users +my @names = qw/red andy hadley boggs/; + +my @users = (); +foreach my $name (@names) { + my $user = WebGUI::User->create($session); + $user->username($name); + push @users, $user; +} +WebGUI::Test->usersToDelete(@users); + +# Do our work in the import node +my $node = WebGUI::Asset->getImportNode($session); + +my $versionTag = WebGUI::VersionTag->getWorking($session); +$versionTag->set({name=>"InOutBoard Test"}); +WebGUI::Test->tagsToRollback($versionTag); +my $board = $node->addChild({ + className => 'WebGUI::Asset::Wobject::InOutBoard', + inOutTemplateId => $templateId, +}); + +WebGUI::Test->mockAssetId($templateId, $templateMock); +$board->prepareView(); + +# Test for a sane object type +isa_ok($board, 'WebGUI::Asset::Wobject::InOutBoard'); + +################################################################ +# +# www_setStatus +# +################################################################ + +$session->request->setup_body({ + delegate => $users[0]->userId, + status => 'In', + message => 'work time', +}); +$session->scratch->set('userId', $users[0]->userId); +$board->www_setStatus; +my $status; +$status = $session->db->quickHashRef('select * from InOutBoard_status where assetId=? and userId=?',[$board->getId, $users[0]->userId]); +cmp_deeply( + $status, + { + assetId => $board->getId, + userId => $users[0]->getId, + status => 'In', + message => 'work time', + dateStamp => re('^\d+$'), + }, + 'www_setStatus: set status for a user' +); +my $statusLog; +$statusLog = $session->db->quickHashRef('select * from InOutBoard_statusLog where assetId=? and userId=?',[$board->getId, $users[0]->userId]); +cmp_deeply( + $statusLog, + { + assetId => $board->getId, + userId => $users[0]->getId, + status => 'In', + message => 'work time', + dateStamp => re('^\d+$'), + createdBy => 1, + }, + '... set statusLog for a user' +); +$session->request->setup_body({ }); +$session->scratch->delete('userId'); + +################################################################ +# +# view +# +################################################################ + +$board->view; +cmp_bag( + $templateVars->{rows_loop}, + [ + { + deptHasChanged => ignore(), + status => 'In', + dateStamp => ignore(), + message => 'work time', + username => 'red', + }, + ignore(), ignore(), ignore(), ignore(), + ] +); + +WebGUI::Test->unmockAssetId($templateId); +################################################################ +# +# purge +# +################################################################ + +my $boardId = $board->getId; +$board->purge; +my $count; +$count = $session->db->quickScalar('select count(*) from InOutBoard_status where assetId=?',[$boardId]); +is ($count, 0, 'purge: cleans up status table'); +$count = $session->db->quickScalar('select count(*) from InOutBoard_statusLog where assetId=?',[$boardId]); +is ($count, 0, '... cleans up statusLog table');