From 8395d090fab50219cc285a560e730f5cea215705 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Wed, 16 Sep 2009 21:58:24 -0700 Subject: [PATCH] Show thingy controls when maxEntriesPerUser is reached. Fixes bug #10950. --- docs/changelog/7.x.x.txt | 1 + lib/WebGUI/Asset/Wobject/Thingy.pm | 12 ++++-- t/Asset/Wobject/Thingy.t | 62 ++++++++++++++++++++++++++---- 3 files changed, 64 insertions(+), 11 deletions(-) diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 559f1e0b5..5b205aecc 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -46,6 +46,7 @@ - fixed #10924: Calendar event in last day of month does not display in month/day view - fixed #10901: Calendar More Button/Display Box IE8 error. - fixed #10954: DataForm fails silently + - fixed #10950: Thingy 7.7.19 - fixed #10838: Forwarded forum post email to new CS adds reply to original thread diff --git a/lib/WebGUI/Asset/Wobject/Thingy.pm b/lib/WebGUI/Asset/Wobject/Thingy.pm index 27defee9d..a75e09679 100644 --- a/lib/WebGUI/Asset/Wobject/Thingy.pm +++ b/lib/WebGUI/Asset/Wobject/Thingy.pm @@ -2425,10 +2425,6 @@ sub editThingData { return $session->privilege->insufficient() unless $canEditThingData; - if($thingDataId eq 'new' && $self->hasEnteredMaxPerUser($thingId)){ - return $i18n->get("has entered max per user message"); - } - my (%thingData, $fields,@field_loop,$fieldValue, $privilegedGroup); my $var = $self->get; my $url = $self->getUrl; @@ -2510,6 +2506,14 @@ sub editThingData { $var->{"form_submit"} = WebGUI::Form::submit($self->session,{value => $thingProperties->{saveButtonLabel}}); $var->{"form_end"} = WebGUI::Form::formFooter($self->session); $self->appendThingsVars($var, $thingId); + + if($thingDataId eq 'new' && $self->hasEnteredMaxPerUser($thingId)){ + delete $var->{form_start}; + delete $var->{form_end}; + delete $var->{form_submit}; + delete $var->{field_loop}; + $var->{editInstructions} = $i18n->get("has entered max per user message"); + } return $self->processTemplate($var,$thingProperties->{editTemplateId}); } diff --git a/t/Asset/Wobject/Thingy.t b/t/Asset/Wobject/Thingy.t index 585f5bd00..42120ff54 100644 --- a/t/Asset/Wobject/Thingy.t +++ b/t/Asset/Wobject/Thingy.t @@ -16,19 +16,27 @@ use lib "$FindBin::Bin/../../lib"; use WebGUI::Test; use WebGUI::Session; -use WebGUI::PseudoRequest; -use Test::More tests => 17; # increment this value for each test you create +use Test::More tests => 22; # increment this value for each test you create use Test::Deep; use JSON; use WebGUI::Asset::Wobject::Thingy; +use Data::Dumper; my $session = WebGUI::Test->session; # Do our work in the import node my $node = WebGUI::Asset->getImportNode($session); +my $templateId = 'THING_EDIT_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]; } ); + my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->set({name=>"Thingy Test"}); +WebGUI::Test->tagsToRollback($versionTag); my $thingy = $node->addChild({className=>'WebGUI::Asset::Wobject::Thingy'}); # Test for a sane object type @@ -198,15 +206,16 @@ my $copyThingId = $thingy->duplicateThing($thingId); $isValidId = $session->id->valid($copyThingId); -is($isValidId,1,"duplicating a Thing: duplicateThing returned a valid id: ".$copyThingId); +ok($isValidId, "duplicating a Thing: duplicateThing returned a valid id: ".$copyThingId); # Test adding, editing, getting and deleting thing data my ($newThingDataId,$errors) = $thingy->editThingDataSave($thingId,'new',{"field_".$fieldId => 'test value'}); +ok( ! $thingy->hasEnteredMaxPerUser($thingId), 'hasEnteredMaxPerUser: returns false when maxEntriesPerUser=0 and 1 entry added'); my $isValidThingDataId = $session->id->valid($newThingDataId); -is($isValidId,1,"Adding thing data: editFieldSave returned a valid id: ".$newThingDataId); +ok($isValidThingDataId, "Adding thing data: editFieldSave returned a valid id: ".$newThingDataId); my $viewThingVars = $thingy->getViewThingVars($thingId,$newThingDataId); @@ -289,9 +298,48 @@ cmp_deeply( 'Getting thing data as JSON after deleting: www_viewThingDataViaAjax returns correct message.' ); +($newThingDataId,$errors) = $thingy->editThingDataSave($thingId,'new',{"field_".$fieldId => 'second test value'}); -END { - # Clean up after thy self - $versionTag->rollback(); +my %otherThingProperties = %thingProperties; +$otherThingProperties{maxEntriesPerUser} = 1; +$otherThingProperties{editTemplateId } = $templateId; +my $otherThingId = $thingy->addThing(\%otherThingProperties, 0); +my $otherFieldId = $thingy->addField(\%fieldProperties, 0); +ok( ! $thingy->hasEnteredMaxPerUser($otherThingId), 'hasEnteredMaxPerUser: returns false with no data entered'); + +my @edit_thing_form_fields = qw/form_start form_end form_submit field_loop/; + +{ + WebGUI::Test->mockAssetId($templateId, $templateMock); + $thingy->editThingData($otherThingId); + my %miniVars; + @miniVars{@edit_thing_form_fields} = @{ $templateVars }{ @edit_thing_form_fields }; + cmp_deeply( + \%miniVars, + { + form_start => ignore, + form_end => ignore, + form_submit => ignore, + field_loop => ignore, + }, + 'thing edit form variables exist, because max entries not reached yet' + ); } +$thingy->editThingDataSave($otherThingId, 'new', {"field_".$otherFieldId => 'other test value'} ); +ok( $thingy->hasEnteredMaxPerUser($otherThingId), '... returns true with one row entered, and maxEntriesPerUser=1'); + +{ + WebGUI::Test->mockAssetId($templateId, $templateMock); + $thingy->editThingData($otherThingId); + my %miniVars; + @miniVars{@edit_thing_form_fields} = @{ $templateVars }{ @edit_thing_form_fields }; + my $existance = 0; + foreach my $tmplVar (@edit_thing_form_fields) { + $existance ||= exists $templateVars->{$tmplVar} + } + ok( + ! $existance, + 'thing edit form variables do not exist, because max entries was reached' + ); +}