From 99937e80c16d0b1fe082b41328fa4497e841e68e Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Sun, 9 Jul 2006 04:56:25 +0000 Subject: [PATCH] new macro tests with interesting features --- t/Macro/AdminToggle.t | 195 ++++++++++++++++++++++++++++++++++++++++++ t/Macro/CanEditText.t | 129 ++++++++++++++++++++++++++++ t/Macro/a_account.t | 2 + 3 files changed, 326 insertions(+) create mode 100644 t/Macro/AdminToggle.t create mode 100644 t/Macro/CanEditText.t diff --git a/t/Macro/AdminToggle.t b/t/Macro/AdminToggle.t new file mode 100644 index 000000000..a4767ff81 --- /dev/null +++ b/t/Macro/AdminToggle.t @@ -0,0 +1,195 @@ +#------------------------------------------------------------------- +# WebGUI is Copyright 2001-2006 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 WebGUI::Test; +use WebGUI::Macro; +use WebGUI::Session; +use WebGUI::Macro_Config; +use HTML::TokeParser; +use Data::Dumper; + +use Test::More; # increment this value for each test you create + +my $session = WebGUI::Test->session; + +unless ($session->config->get('macros')->{'AdminToggle'}) { + Macro_Config::insert_macro($session, 'AdminToggle', 'AdminToggle'); +} + +my ($versionTag, $template) = addTemplate(); + +my $homeAsset = WebGUI::Asset->getDefault($session); +$session->asset($homeAsset); + +my $i18n = WebGUI::International->new($session,'Macro_AdminToggle'); + +my @testSets = ( + { + comment => 'Visitor sees nothing', + userId => 1, + adminStatus => 'off', + macroText => q!^AdminToggle();!, + onText => q!!, + offText => q!!, + template => q!!, + output => '', + }, + { + comment => 'Admin sees onText, default call', + userId => 3, + adminStatus => 'off', + macroText => q!^AdminToggle();!, + onText => $i18n->get(516), + offText => $i18n->get(517), + template => q!!, + url => $session->url->append($homeAsset->getUrl(),'op=switchOnAdmin'), + output => \&simpleHTMLParser, + }, + { + comment => 'Admin sees offText, default call', + userId => 3, + adminStatus => 'on', + macroText => q!^AdminToggle();!, + onText => $i18n->get(516), + offText => $i18n->get(517), + template => q!!, + url => $session->url->append($homeAsset->getUrl(),'op=switchOffAdmin'), + output => \&simpleHTMLParser, + }, + { + comment => 'Admin sees onText, custom text', + userId => 3, + adminStatus => 'off', + macroText => q!^AdminToggle("%s","%s");!, + onText => 'Admin powers... Activate!', + offText => 'Chillin, dude', + template => q!!, + url => $session->url->append($homeAsset->getUrl(),'op=switchOnAdmin'), + output => \&simpleHTMLParser, + }, + { + comment => 'Admin sees offText, custom text', + userId => 3, + adminStatus => 'on', + macroText => q!^AdminToggle("%s","%s");!, + onText => 'Admin powers... Activate!', + offText => 'Chillin, dude', + template => q!!, + url => $session->url->append($homeAsset->getUrl(),'op=switchOffAdmin'), + output => \&simpleHTMLParser, + }, + { + comment => 'Admin sees onText, custom text and template', + userId => 3, + adminStatus => 'off', + macroText => q!^AdminToggle("%s","%s","%s");!, + onText => 'Admin powers... Activate!', + offText => 'Chillin, dude', + template => $template->get('url'), + url => $session->url->append($homeAsset->getUrl(),'op=switchOnAdmin'), + output => \&simpleTextParser, + }, + { + comment => 'Admin sees offText, custom text and template', + userId => 3, + adminStatus => 'on', + macroText => q!^AdminToggle("%s","%s","%s");!, + onText => 'Admin powers... Activate!', + offText => 'Chillin, dude', + template => $template->get('url'), + url => $session->url->append($homeAsset->getUrl(),'op=switchOffAdmin'), + output => \&simpleTextParser, + }, +); + +my $numTests = 0; +foreach my $testSet (@testSets) { + $numTests += 1 + (ref $testSet->{output} eq 'CODE'); +} + +plan tests => $numTests + 1; + +foreach my $testSet (@testSets) { + my $output = sprintf $testSet->{macroText}, $testSet->{onText}, $testSet->{offText}, $testSet->{template}; + $session->user({userId=>$testSet->{userId}}); + if ($testSet->{adminStatus} eq 'off') { + $session->var->switchAdminOff(); + $testSet->{label} = $testSet->{onText}; + } + elsif ($testSet->{adminStatus} eq 'on') { + $session->var->switchAdminOn(); + $testSet->{label} = $testSet->{offText}; + } + else { + BAIL_OUT('Unknown admin status selected'); + } + WebGUI::Macro::process($session, \$output); + if (ref $testSet->{output} eq 'CODE') { + my ($url, $label) = $testSet->{output}->($output); + is($label, $testSet->{label}, $testSet->{comment}.", label"); + is($url, $testSet->{url}, $testSet->{comment}.", url"); + } + else { + is($output, $testSet->{output}, $testSet->{comment}); + } +} + +TODO: { + local $TODO = 'Tests to make later'; + ok(0, 'Run tests with a user other than Admin'); +} + +sub addTemplate { + $session->user({userId=>3}); + my $importNode = WebGUI::Asset->getImportNode($session); + my $versionTag = WebGUI::VersionTag->getWorking($session); + $versionTag->set({name=>"AdminToggle test"}); + my $properties = { + title => 'AdminToggle test template', + className => 'WebGUI::Asset::Template', + url => 'AdminToggle-test', + namespace => 'Macro/AdminToggle', + template => "HREF=\nLABEL=", + id => 'AdminToggleTemplate--Z', + }; + my $template = $importNode->addChild($properties, $properties->{id}); + $versionTag->commit; + return ($versionTag, $template); +} + +sub simpleHTMLParser { + my ($text) = @_; + my $p = HTML::TokeParser->new(\$text); + + my $token = $p->get_tag("a"); + my $url = $token->[1]{href} || "-"; + my $label = $p->get_trimmed_text("/a"); + + return ($url, $label); +} + +sub simpleTextParser { + my ($text) = @_; + + my ($url) = $text =~ /^HREF=(.+)$/m; + my ($label) = $text =~ /^LABEL=(.+)$/m; + + return ($url, $label); +} + +END { + if (defined $versionTag and ref $versionTag eq 'WebGUI::VersionTag') { + $versionTag->rollback; + } +} diff --git a/t/Macro/CanEditText.t b/t/Macro/CanEditText.t new file mode 100644 index 000000000..4c71f337e --- /dev/null +++ b/t/Macro/CanEditText.t @@ -0,0 +1,129 @@ +#------------------------------------------------------------------- +# WebGUI is Copyright 2001-2006 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 WebGUI::Test; +use WebGUI::Macro; +use WebGUI::Session; +use Data::Dumper; +use WebGUI::Macro_Config; + +my $session = WebGUI::Test->session; + +use Test::More; # increment this value for each test you create + +unless ($session->config->get('macros')->{'CanEditText'}) { + Macro_Config::insert_macro($session, 'CanEditText', 'CanEditText'); +} + +my $adminText = "^CanEditText(editor);"; +my $output; + +my $homeAsset = WebGUI::Asset->getDefault($session); +$session->asset($homeAsset); +my ($versionTag, $asset, $group, @users) = setupTest($session, $homeAsset); + +my @testSets = ( + { + comment => 'Visitor sees nothing', + userId => 1, + macroText => q!^CanEditText("%s");!, + text => q!I am an editor!, + asset => $asset, + output => '', + }, + { + comment => 'Admin sees text', + userId => 3, + macroText => q!^CanEditText("%s");!, + text => q!I am an editor!, + asset => $asset, + output => 'I am an editor', + }, + { + comment => 'Random user sees nothing', + userId => $users[0]->userId, + macroText => q!^CanEditText("%s");!, + text => q!I am an editor!, + asset => $asset, + output => '', + }, + { + comment => 'General Content Manager sees nothing', + userId => $users[1]->userId, + macroText => q!^CanEditText("%s");!, + text => q!I am an editor!, + asset => $asset, + output => '', + }, + { + comment => 'Member of group to edit this asset sees text', + userId => $users[2]->userId, + macroText => q!^CanEditText("%s");!, + text => q!I am an editor!, + asset => $asset, + output => 'I am an editor', + }, +); + +my $numTests = scalar @testSets; + +plan tests => $numTests; + +foreach my $testSet (@testSets) { + $session->user({userId=>$testSet->{userId}}); + $session->asset($testSet->{asset}); + my $output = sprintf $testSet->{macroText}, $testSet->{text}; + WebGUI::Macro::process($session, \$output); + is($output, $testSet->{output}, $testSet->{comment}); +} + + +sub setupTest { + my ($session, $defaultNode) = @_; + $session->user({userId=>3}); + my $editGroup = WebGUI::Group->new($session, "new"); + my $cm = WebGUI::Group->find($session, "Content Managers"); + $cm->addGroups([$editGroup->getId]); + ##Create an asset with specific editing privileges + my $versionTag = WebGUI::VersionTag->getWorking($session); + $versionTag->set({name=>"CanEditText test"}); + my $properties = { + title => 'CanEditText test template', + className => 'WebGUI::Asset::Wobject::Article', + url => '/home/CanEditText-test', + description => 'This is a test article for viewing privileges', + id => 'CanEditTextTestAsset01', + groupIdEdit => $editGroup->getId(), + }; + my $asset = $defaultNode->addChild($properties, $properties->{id}); + $versionTag->commit; + my @users = map { WebGUI::User->new($session, "new") } 0..2; + ##User 1 is a content manager + $users[1]->addToGroups([$cm->getId]); + ##User 2 is a member of a content manager sub-group + $users[2]->addToGroups([$editGroup->getId]); + return ($versionTag, $asset, $editGroup, @users); +} + +END { ##Clean-up after yourself, always + if (defined $versionTag and ref $versionTag eq 'WebGUI::VersionTag') { + $versionTag->rollback; + } + foreach my $testGroup ($group) { + $testGroup->delete if (defined $testGroup and ref $testGroup eq 'WebGUI::Group'); + } + foreach my $dude (@users) { + $dude->delete if (defined $dude and ref $dude eq 'WebGUI::User'); + } +} diff --git a/t/Macro/a_account.t b/t/Macro/a_account.t index 34c86a060..0a6309a8c 100644 --- a/t/Macro/a_account.t +++ b/t/Macro/a_account.t @@ -32,6 +32,8 @@ my ($versionTag, $template) = addTemplate(); my $homeAsset = WebGUI::Asset->getDefault($session); +$session->asset($homeAsset); + my $i18n = WebGUI::International->new($session,'Macro_a_account'); my @testSets = (