From 651d3b119ddece472e0898c503401d72568c030d Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Fri, 30 Oct 2009 08:48:48 -0700 Subject: [PATCH 01/18] Fix the tree navigation template. Fixes bug #11135 --- docs/changelog/7.x.x.txt | 1 + .../root_import_navigation_tree-navigation.wgpkg | Bin 0 -> 1726 bytes 2 files changed, 1 insertion(+) create mode 100644 docs/upgrades/packages-7.8.3/root_import_navigation_tree-navigation.wgpkg diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 402145569..cc3308049 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -27,6 +27,7 @@ - fixed #11181: ableToBeFriend label not i18n - fixed #11179: user.CanStartThread missing from help - fixed #11183: Calendar List View + - fixed #11135: Tree Navigation menu template shows a drop down fly-out menu 7.8.2 - Added scheduled vendor payout workflow activity. (Special thanks to Martin @ Oqapi) diff --git a/docs/upgrades/packages-7.8.3/root_import_navigation_tree-navigation.wgpkg b/docs/upgrades/packages-7.8.3/root_import_navigation_tree-navigation.wgpkg new file mode 100644 index 0000000000000000000000000000000000000000..f2ba1fc1ec73555133a938e6329c054676b018ed GIT binary patch literal 1726 zcmV;v20{5BiwFP!00000|Ls_9Q`j$i&1RucsZ`s|YN1eX z>&G!qrBJQb+O>M4(rVQUPPI~P!avyZ@J}ox;Sk!AUQAj66JhWl#R3*vjmAy+uT~rF#zy|@jb^LhJPL{rmH+a81l|Li`Th)wuqf#~ z@`aWFrr*CiVM+qRpGRVdMZF^VsICT7&LlL1|RW`P$jaaYAo&@0KwAtl~`OvM=) zU&1bBxa+gv(&5y9JuC{j@+sJ(a#(caDxxqZVWT@10!C(>PGIEEx5|{*TE)!0h?(!X zl2f{1bmBPM-DR)XXexG&r2mYGh8aA6D}D3SvV0i|B)YtkzSY$1sY~a zwZ;;3M#vu~KqU?m49iOP@HWZXNbH;A0N=!zZPjl}L6~+;9il3B#9Rg7tcRi$im>aS|RXJ#NttvRR45$^Jt_5t@rxi2%ZA9D`vde0nTtOtfg zy^{KZCW*J3dcl|~CbhdrG6LJoU9g{QU?im}ZC%w21_J#6iY9Zza8$vmFJbn|<4MwM zkLzYcd;-A9g-`cqKzVQ?;}TbAQse_Y`5WGWU;7Gc6@tMEJ>c=vAvBePGn?S9beVy8 zG&=5m9E?WBrj6X(fHKGd!2f!NwX=;ZUyDEwm`i0mS?pC*dH2EGpsuMKT&l0^jr@-u zT(|rD%YMH%=zURpwkB~fR(*Tx<#+XcDF5gko}QLt$^3FZoR>MBhYPx|I^x!gTWjjY zD<@rG%I5_L2ehhgi`wnHc0fou+R2i6Q!2{?7*}^-3pCN~MVnev%OEmX9@MB648S6p$#_@wqg)bj)NtDSlQy*uwj~!9%qVB_ocjknoSzX@lbfW4J@W)u z11CPyi(k)=c6WP9)a~vL65(r2f^wvZ)GZ=E=DZx))hJu{XC#>BiCQIw--jNXutb+u zYt7b9z22xdt%-y@RTeP9ww*%0z(JKK2e>d{dbR2&Kzaoi1=`XTs+_ab5BZ~+J4TEcL0DX7&aPa>4dJ3304waPG zZwYJf4@~swgv9=}EN2seK0BRur_*fLGRlU7o>yewPhU0Cbks7KgZzQ_i1Y?z@QMZ1 zZy4$O2D-_Z7qf7A6dZ(nu93^^RiZ^iWUR5y%OefOd=<&F)N#gcs-Uv(H;RGpprf4b zeFap)wl^pzOAtmg*_LV={F+Yc-lUN7Hd@)Uhf*?M57{U(f(PWE5;{3n6&GqES+jW; zVbjep=8d98hi9lPac#&*Gy8^!LE1sFk|ia0%{8DRqd%4~QTHf$akgM%1ph{n*gJ$< z@?=OB$e&3M9f4L{N@nDw*hq>E?AK((4H$08x1EFubhR!p{Vli1Vkz|^@Ubc^C4exWKx48PNfBM_|%T9ke8Z7Nf zCO)nNw6x9c2}FfI8|6_IHtv)Uii?BFIq5B0(L4Ex?SDACdUy2u;Rovhe`8u}^VM3T z-f6ZvExQQV3A92I^P7Xo$+zaR*SY8~cMj|0fbT@vm`&?Xf>ytY{do4{fq$BNGXI3Y U69P{NJSYPH07prG$^aYy0GjtsR{#J2 literal 0 HcmV?d00001 From 21223657a13403b94ee377842879cfc85fa49fe9 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Fri, 30 Oct 2009 09:16:38 -0700 Subject: [PATCH 02/18] Extend the PickLanguage macro to let the user clear their overrides. --- .../root_import_macro_picklanguage.wgpkg | Bin 837 -> 867 bytes lib/WebGUI/Help/Macro_PickLanguage.pm | 6 +++++ lib/WebGUI/Macro/PickLanguage.pm | 25 +++++++++++------- lib/WebGUI/i18n/English/Macro_PickLanguage.pm | 15 +++++++++++ t/Macro/PickLanguage.t | 4 +++ 5 files changed, 41 insertions(+), 9 deletions(-) diff --git a/docs/upgrades/packages-7.8.3/root_import_macro_picklanguage.wgpkg b/docs/upgrades/packages-7.8.3/root_import_macro_picklanguage.wgpkg index 30ba71727f5f20a05e5f9a29567bc904950e6667..da20e143f0dbc42c040384ba8b37387a6f575e6b 100644 GIT binary patch literal 867 zcmV-p1DyOHiwFP!00000|Ls;?Z`v>v&2xW6l;^D^fsle268&0{XoXf-r;Z6Zi2;`o zTeefmrvCTYP9Wx^+f?0fF@x#!$)Z0vv8w(WbKVc53gdyZk0{cM@5WgCv; z`mX0yZMSTgj_r7^VTzFbuat2>MQL*wj8pXbeBzQ~$xF)hdYpHTRMk4_SyoT?_<`Z% zO{);N)k@{X{+BCabG`qr@A-!LE-db=|Hp4i;oiW09SIX!9L`7#I2;1bK{%Pggfq*m zo8NzYQ2UHy3dT@>MJOhaas<^u1tXC{3I$Gdx{znBvZdnXMhqCgcp{jJ-Ij_;(l}mi z3m0;QZ;>>J5u3oMh)v-94kZzuD^R=GV2cD3hPL706Q|$`f~W_^tP8@afD;9+rNr|D z(msQY$^)?^4V$UyzI&?doHSQ__wuBE+*Ow+LIdQ*AW3==96PN|rYil{W`gbH|PZY6SspHcCKYHA<^2+5bCm zBN#&=u`Sg6eGCE^uKz$p? z+xQj1Ox%7EikNIJ2=aJM7Ho>h4dx z6h0y*SU6u!kX?O1Y6>h>pmRCF^LBEH=`15d+e#VCM#plHY|1VXT44l)8BNz9q`1@- zZSHIteCfzy6y=87@a3Br($w9!6Y-y|Sf~*uAzcvOT~equfP-;93tMT}?{%(P*q`2i z=IpHBKPk^!1qfod3nsYOBvQ3-sSJG(3lFGo#x57APt8W(y-HdBx-2pZxr%v_m)AX2 t!d5e2_0YaitA^+G$#38D(evIuz6am~0|y2U4E#q1eghfAewzRg008=3qJ97X literal 837 zcmV-L1G@YliwFP!00000|Ls=WZrU&y=DJT2<$8l85K<6BqNf!JI<(St2PR|^11^c} z*-j~)`tGxxK*FJ$RF&QgUqmSOfADwsL$R>`Wm%Tzx`l#e*`8|`3S}=@#%fsw+jczL zty-RE6%5<5<#|Jf?0>~v047_T!_g#0FRv#rDVMsWS})J@#*w;PTR+SC=@joc!LQnd z%v-Hgp5?#nRO}7@9i9!en;!55fNj<(am2f@H41VJB6cn|n9nNBveR+7vyWH%hL zw%*G(yB4mC4%h%^bphv4q+vsFZdX4u`~B$a$@uuX4LaZNPAA#fn1wn+1Oo(06#26d z;7P3DT-_e=OB4hU>w|XweUA}A#DXT+z!wA)U3yt4;))kAO5<~k@)@F6 zM99iM5Qrp<=irdmi~Ij5tRRcE=1oAQ5AX9{(bBv|k4fj1S|#g>0w&e233vvfdi}EB z?QG+Pc!wwtCAMC35#ncX4C3&w#Oj*0npdm2o|C&RgZGF_6wa3BU-7U8rZVtS1$iu| zWZuRXghdG$xviMP#P!P=uqit%wZbXz6PUWdXQb4VGCUlN01yBGUKW^y diff --git a/lib/WebGUI/Help/Macro_PickLanguage.pm b/lib/WebGUI/Help/Macro_PickLanguage.pm index f5bb02f61..a97371655 100644 --- a/lib/WebGUI/Help/Macro_PickLanguage.pm +++ b/lib/WebGUI/Help/Macro_PickLanguage.pm @@ -26,6 +26,12 @@ our $HELP = { }, ], }, + { + name => "delete_url", + }, + { + name => "delete_label", + }, ], related => [ ], diff --git a/lib/WebGUI/Macro/PickLanguage.pm b/lib/WebGUI/Macro/PickLanguage.pm index 306f4f183..a1af2a40b 100644 --- a/lib/WebGUI/Macro/PickLanguage.pm +++ b/lib/WebGUI/Macro/PickLanguage.pm @@ -11,6 +11,7 @@ package WebGUI::Macro::PickLanguage; # edit this line to match your own macro na #------------------------------------------------------------------- use strict; +use WebGUI::Asset::Template; =head1 NAME @@ -47,17 +48,23 @@ sub process { return "Could not instanciate template with id [$templateId]" unless $template; my $i18n = WebGUI::International->new($session); my $languages = $i18n->getLanguages(); - my $vars = {'lang_loop' => []}; + my @lang_loop = (); foreach my $language ( keys %$languages ) { - my $langVars = {}; - $langVars->{ 'language_url' } = '?op=setLanguage;language=' . $language ; - $langVars->{ 'language_lang' } = $i18n->getLanguage($language , 'label'); - $langVars->{ 'language_langAbbr' } = $i18n->getLanguage($language, 'languageAbbreviation'); - $langVars->{ 'language_langAbbrLoc' } = $i18n->getLanguage($language, 'locale'); - $langVars->{ 'language_langEng' } = $language; - push(@{$vars->{lang_loop}}, $langVars); + push @lang_loop, { + language_url => '?op=setLanguage;language=' . $language, + language_lang => $i18n->getLanguage($language , 'label'), + language_langAbbr => $i18n->getLanguage($language, 'languageAbbreviation'), + language_langAbbrLoc => $i18n->getLanguage($language, 'locale'), + language_langEng => $language, + }; } - return $template->process($vars); + my %vars = ( + lang_loop => \@lang_loop, + delete_url => '?op=setLanguage;language=delete;', + delete_label => $i18n->get('delete',"Macro_PickLanguage"), + ); + + return $template->process(\%vars); } 1; diff --git a/lib/WebGUI/i18n/English/Macro_PickLanguage.pm b/lib/WebGUI/i18n/English/Macro_PickLanguage.pm index a4f1cc78c..99458355a 100644 --- a/lib/WebGUI/i18n/English/Macro_PickLanguage.pm +++ b/lib/WebGUI/i18n/English/Macro_PickLanguage.pm @@ -40,6 +40,21 @@ our $I18N = { ##hashref of hashes lastUpdated => 1131394072, context => q|The url to change languages| }, + 'delete_url' => { + message => q|The url that deletes the scratch language from the session.|, + lastUpdated => 1131394072, + context => q|A template var to remove the scratch language| + }, + 'delete' => { + message => q|Go back to profile language.|, + lastUpdated => 1131394072, + context => q|An internationalized label to go back to the profile language| + }, + 'delete_label' => { + message => q|A label for the link to go back to the profile language.|, + lastUpdated => 1131394072, + context => q|Help for delete_label| + }, }; diff --git a/t/Macro/PickLanguage.t b/t/Macro/PickLanguage.t index ad93afb6a..3f7fc3de1 100644 --- a/t/Macro/PickLanguage.t +++ b/t/Macro/PickLanguage.t @@ -61,6 +61,8 @@ $templateMock->mock('process', sub { $templateVars = $_[1]; } ); 'language_langEng' => 'English' }, ], + delete_url => '?op=setLanguage;language=delete;', + delete_label => 'Go back to profile language.', }, 'some template variables are created' ); @@ -90,6 +92,8 @@ $templateMock->mock('process', sub { $templateVars = $_[1]; } ); 'language_langEng' => 'English' }, ], + delete_url => '?op=setLanguage;language=delete;', + delete_label => "Go back to profile language.", }, 'some template variables are created, when no templateId is passed on with the macro' ); From 6b88a8915a95b29217b66bd4721cccf411d5b348 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Fri, 30 Oct 2009 10:13:48 -0700 Subject: [PATCH 03/18] Fix bad CSS link in the Edit Survey template. Fixes bug #10984. Update test to scan for links and srcs in the template body, too. --- docs/changelog/7.x.x.txt | 1 + ...ot_import_survey_default-survey-edit.wgpkg | Bin 0 -> 2025 bytes t/rawHrefUrls.t | 43 +++++++++++------- 3 files changed, 28 insertions(+), 16 deletions(-) create mode 100644 docs/upgrades/packages-7.8.3/root_import_survey_default-survey-edit.wgpkg diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index cc3308049..e523f5150 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -28,6 +28,7 @@ - fixed #11179: user.CanStartThread missing from help - fixed #11183: Calendar List View - fixed #11135: Tree Navigation menu template shows a drop down fly-out menu + - fixed #10984: Edit Survey Screen isn't right in demo 7.8.2 - Added scheduled vendor payout workflow activity. (Special thanks to Martin @ Oqapi) diff --git a/docs/upgrades/packages-7.8.3/root_import_survey_default-survey-edit.wgpkg b/docs/upgrades/packages-7.8.3/root_import_survey_default-survey-edit.wgpkg new file mode 100644 index 0000000000000000000000000000000000000000..bc776e75f71d3ceda3a5bac821ed560db614e39d GIT binary patch literal 2025 zcmVe?1)q|YQgrX%&R;?(`xX#T@;z?t>X<9cP zh=fJN6u<(Y6!r4&T>vBjT`X0yG}8yuGa|(W&MtNrz#ho8o$X(HdwcD6YiCE@51RU3 zZ^GRxuf3gmz0qzQ)DId5`#WB}zSlU|@u180uS`h9!L*Pigx=n*FB6!HyTxj7aOuJ6 z`+}zbCy}?ihphUrf)*S zU*EtatVlda6D099k`jgS08=R{UdQ|G_s3c;B;%-$-B&4RDdv)3-B80Qqy!21;%myd z#L=-9(JV2&r<)74{tMe{ruRrCE`72lF4yuyy6U+ zh}R^FFx58HZI?c0S$Z11P&$=&>kTU_0;~ny7(8}#Mb+}#9bk#PSjyDLe`I9%^r~{g zsDuRYFF^NI#S6_>5J>P?5X(XG#0z7@VK7fKdEqaC6Dy*&(HurK30ynKG!b$?nyT=y$nPSq!we3;{?=fiz99#MNFVC8Jf9T8O|rt42s7!7?7=s@iy} z3G4UaH7rC~m19Bv#8m+^Ex~H=j8`*B5~3EL>bujkDpklm0P=jl2(Ab@N##Vod_hBG zUPBfL9?s305;-WJU@ugObJPt?@B6B-gAMGXPSFi3a(y1SU$&vF3}#S1Z9|Ppi9mg9 z1Ki{#tRE^px1m5Kcc4DD0d6KuU~bz`U}j=qZre~`W_RFD^#yA31!}dKK4QHuIFy0e zeS#?3%87+3ZnO*FvT)ZLGapbHbb*CD&xnLFb$V305@eoG!c~za zy2WO7mX*=?$l#l`zRjBiY zpCXFYG%SE27xG4CTNU}N&c8YKDM)p71z;#&p(r{xu&VZgmrEM|ltIwJi2v65n2HhR zlWoCRCvp?dl6B~M;*Hh2#%rG~LNBv1QXktNO8 z%>3+h^bF~AE^@kVA%V)^oS;|iVa}dD*eQ;5Y->%nPhv#-^QgF@@b6eeZir#iKqOlS zhmA(#`<8{s$>z@l8&cl3BB?l_Hv73@!=9N<-V2zrwiztv=^2xt29{C?n>gPK0WY zdO4OuboG*W4r_+)a?ofycB!Fdn(J3k3TG5U_Z&f$jTisTx>WI7zR3BV&g+YJZ)Zb6 z#9O8gBFq`b#8CthxkskQ>IOv14iDRhhpl$Q$q0^NtpqB$1@Nx{+Tz{L@aE%EXr7XVwWNVkVL zB?(_Z$JYk8?0XpzUt5LCx|dV%wbhiAdkOhoTft)5y*BJ}!o4>1VyeA1>~fO5HuQ3O zy*9L}Sr}hVtXEVp#d_zE>H7gHvrVx*Lq0bJJfA>s4E+x3ydu6`QKw0BPMH_e<)Q$e zpvm@SL2D=I@r+oN^r{9f*g({^q!T67OH1_CNjlseSQd_<=C| zlP&FuI3EkBvZpJ0AW-^;*m)F6lZk?(RGeC0|3Ev*GTsession; -my $lib = WebGUI::Test->lib; - -##Find the name of the International macro in the user's config file. - -#note "International macro name = $international"; ##Regexp setup for parsing out the Macro calls. my $macro = qr{ @@ -43,19 +38,28 @@ my $macro = qr{ $numTests = $session->db->quickScalar('select count(distinct(assetId)) from template'); -plan tests => $numTests; +plan tests => 2*$numTests; my $validLinks = 0; +my $nonRootLink = qr{ + ^ + \s* #Optional whitespace + (?: \^ (?: / | Extras)) #Gateway or Extras macro + | # OR + {href}) { - if ($attrs->{href} !~ /\s*\^(?:\/|Extras)/) { + diag sprintf '%s: %s', $tag, $attrs->{href}; + if ($attrs->{href} !~ $nonRootLink) { $validLinks = 0; } } elsif ($tag eq 'script' && $attrs->{src}) { - if ($attrs->{src} !~ /\s*\^(?:\/|Extras)/) { + if ($attrs->{src} !~ $nonRootLink) { $validLinks = 0; } } @@ -70,15 +74,22 @@ my $parser = HTML::Parser->new( my $getATemplate = WebGUI::Asset::Template->getIsa($session); TEMPLATE: while (my $templateAsset = $getATemplate->()) { - my $template = $templateAsset->get('template'); my $header = $templateAsset->get('extraHeadTags'); if(! $header) { - ok(1, sprintf "%s: %s (%s) has no rooted link urls", $templateAsset->getTitle, $templateAsset->getId, $templateAsset->getUrl); - next TEMPLATE; + ok(1, sprintf "%s: %s (%s) has no rooted link urls in the head tags", $templateAsset->getTitle, $templateAsset->getId, $templateAsset->getUrl); + } + else { + $validLinks = 1; + $parser->parse($header); + ok($validLinks, sprintf "%s: %s (%s) has no rooted link urls in the head tags", $templateAsset->getTitle, $templateAsset->getId, $templateAsset->getUrl); + } + my $template = $templateAsset->get('template'); + if(! $template) { + ok(1, sprintf "%s: %s (%s) has no rooted link urls in the template", $templateAsset->getTitle, $templateAsset->getId, $templateAsset->getUrl); + } + else { + $validLinks = 1; + $parser->parse($template); + ok($validLinks, sprintf "%s: %s (%s) has no rooted link urls in the template", $templateAsset->getTitle, $templateAsset->getId, $templateAsset->getUrl); } - $validLinks = 1; - $parser->parse($header); - ok($validLinks, sprintf "%s: %s (%s) has no rooted link urls", $templateAsset->getTitle, $templateAsset->getId, $templateAsset->getUrl); } - - From 1e4bcbb3fbae9a3fc165d12ba382f33cc6293a4a Mon Sep 17 00:00:00 2001 From: khenn Date: Fri, 30 Oct 2009 16:43:51 -0500 Subject: [PATCH 04/18] Added getTopKeyword method --- lib/WebGUI/Keyword.pm | 74 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/lib/WebGUI/Keyword.pm b/lib/WebGUI/Keyword.pm index c0a2e4936..66f5e84ae 100644 --- a/lib/WebGUI/Keyword.pm +++ b/lib/WebGUI/Keyword.pm @@ -383,6 +383,80 @@ sub getMatchingAssets { return $self->session->db->buildArrayRef($query, \@params); } +#------------------------------------------------------------------- + +=head2 getTopKeywords ( $options ) + +Returns a hashref of the the top N keywords as well as the total number returned sorted in alphabetical order + +=head3 $options + +A hashref of options to change the behavior of the method. + +=head4 asset + +Find all keywords for all assets below an asset, providing a WebGUI::Asset object. + +=head4 assetId + +Find all keywords for all assets below an asset, providing an assetId. + +=head4 search + +Find all keywords using the SQL clause LIKE. This can be used in tandem with asset or assetId. + +=head4 limit + +Limit the number of top keywords that are returned. + +=cut + +sub getTopKeywords { + my $self = shift; + my $options = shift; + my $sql = q| + SELECT + keyword,occurrance + FROM ( + SELECT + keyword, count(keyword) as occurrance + FROM + assetKeyword + |; + my @where; + my @placeholders; + my $parentAsset; + if ($options->{asset}) { + $parentAsset = $options->{asset}; + } + if ($options->{assetId}) { + $parentAsset = WebGUI::Asset->new($self->session, $options->{assetId}); + } + if ($parentAsset) { + $sql .= ' INNER JOIN asset USING (assetId)'; + push @where, 'lineage LIKE ?'; + push @placeholders, $parentAsset->get('lineage') . '%'; + } + if ($options->{search}) { + push @where, 'keyword LIKE ?'; + push @placeholders, '%' . $options->{search} . '%'; + } + if (@where) { + $sql .= ' WHERE ' . join(' AND ', @where); + } + $sql .= ' GROUP BY keyword'; + $sql .= ' ORDER BY occurrance desc'; + if ($options->{limit}) { + $sql .= ' LIMIT ' . $options->{limit}; + } + $sql .= q| + ) as keywords + order by keyword + |; + my $keywords = $self->session->db->buildHashRef($sql, \@placeholders); + return $keywords; +} + #------------------------------------------------------------------- From a09501b1c38868349e2acabb398769015d140392 Mon Sep 17 00:00:00 2001 From: khenn Date: Fri, 30 Oct 2009 17:02:24 -0500 Subject: [PATCH 05/18] Added test for getTopKeywords --- t/Keyword.t | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/t/Keyword.t b/t/Keyword.t index 03c7e2a01..c5ea23482 100644 --- a/t/Keyword.t +++ b/t/Keyword.t @@ -94,6 +94,12 @@ cmp_deeply( '... retrieving assets in more than one state' ); +cmp_deeply( + $keyword->getTopKeywords(), + { 'webgui' => '2' }, + 'check getTopKeywords returns correctly' +); + $keyword->deleteKeywordsForAsset($home); is(scalar(@{$keyword->getKeywordsForAsset({ asset=>$home, asArrayRef=>1})}), 0, "getKeywordsForAsset()"); From aafb5b0c26ab1a5cb1cc27ae35994803aeaeb804 Mon Sep 17 00:00:00 2001 From: khenn Date: Fri, 30 Oct 2009 17:03:48 -0500 Subject: [PATCH 06/18] New templates and changes for EMS print remaining tickets feature --- .../packages-7.8.3/root_import_ems.wgpkg | Bin 0 -> 19033 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/upgrades/packages-7.8.3/root_import_ems.wgpkg diff --git a/docs/upgrades/packages-7.8.3/root_import_ems.wgpkg b/docs/upgrades/packages-7.8.3/root_import_ems.wgpkg new file mode 100644 index 0000000000000000000000000000000000000000..6b429b0423be6876ee8c95536bc44d6c8443e338 GIT binary patch literal 19033 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 Q+z%kBLDyZ literal 0 HcmV?d00001 From 17145cf082ff7582806acf1cd603be961bcf9a2f Mon Sep 17 00:00:00 2001 From: khenn Date: Fri, 30 Oct 2009 17:07:59 -0500 Subject: [PATCH 07/18] added print remaining tickets feature to EMS --- .../Asset/Wobject/EventManagementSystem.pm | 68 +++++- .../Help/Asset_EventManagementSystem.pm | 62 +++++ .../English/Asset_EventManagementSystem.pm | 208 +++++++++++++++++ t/Asset/Wobject/EventManagementSystem.t | 211 +++++++++++++++++- 4 files changed, 538 insertions(+), 11 deletions(-) diff --git a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm index f1f4d3ad0..453441583 100644 --- a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm +++ b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm @@ -107,6 +107,14 @@ sub definition { hoverHelp => $i18n->get('print ticket template help'), namespace => 'EMS/PrintTicket', }, + printRemainingTicketsTemplateId => { + fieldType => 'template', + defaultValue => 'hreA_bgxiTX-EzWCSZCZJw', + tab => 'display', + label => $i18n->get('print remaining ticket template'), + hoverHelp => $i18n->get('print remaining ticket template help'), + namespace => 'EMS/PrintRemainingTickets', + }, badgeInstructions => { fieldType => 'HTMLArea', defaultValue => $i18n->get('default badge instructions'), @@ -553,6 +561,7 @@ sub www_buildBadge { importTicketsUrl => $self->getUrl('func=importEvents'), exportTicketsUrl => $self->getUrl('func=exportEvents'), getTicketsUrl => $self->getUrl('func=getTicketsAsJson;badgeId='.$badgeId), + printRemainingTicketsUrl => $self->getUrl('func=printRemainingTickets'), canEdit => $self->canEdit, hasBadge => ($badgeId ne ""), badgeId => $badgeId, @@ -1957,6 +1966,62 @@ sub www_printBadge { #------------------------------------------------------------------- +=head2 www_printRemainingTickets () + +Displays all of the remaining tickets for this EMS + +=cut + +sub www_printRemainingTickets { + my $self = shift; + my $session = $self->session; + return $session->privilege->insufficient() unless ($self->isRegistrationStaff); + + my $var = $self->get; + my $sth = $session->db->read(qq{ + SELECT + asset.creationDate, + assetData.*, + assetData.title as ticketTitle, + EMSTicket.price, + EMSTicket.seatsAvailable, + EMSTicket.startDate as ticketStart, + EMSTicket.duration as ticketDuration, + EMSTicket.eventNumber as ticketEventNumber, + EMSTicket.location as ticketLocation, + EMSTicket.relatedBadgeGroups, + EMSTicket.relatedRibbons, + EMSTicket.eventMetaData, + (seatsAvailable - (select count(*) from EMSRegistrantTicket where ticketAssetId = asset.assetId)) as seatsRemaining + FROM + asset + join assetData using (assetId) + left join EMSTicket using (assetId) + WHERE + parentId=? + and className='WebGUI::Asset::Sku::EMSTicket' + and state='published' + and EMSTicket.revisionDate=(select max(revisionDate) from EMSTicket where assetId=asset.assetId) + and (seatsAvailable - (select count(*) from EMSRegistrantTicket where ticketAssetId = asset.assetId)) > 0 + GROUP BY + asset.assetId + ORDER BY + title desc + },[$self->getId]); + + $var->{'tickets_loop'} = []; + while (my $hash = $sth->hashRef) { + my $seatsRemaining = $hash->{seatsRemaining}; + for (my $i = 0; $i < $seatsRemaining; $i++ ) { + push(@{$var->{'tickets_loop'}},$hash); + } + } + + return $self->processTemplate($var,$self->get('printRemainingTicketsTemplateId')); +} + +#------------------------------------------------------------------- + =head2 www_printTicket ( ) Prints a ticket using a template. @@ -2037,7 +2102,7 @@ Toggles the registrant checked in flag. sub www_toggleRegistrantCheckedIn { my $self = shift; - return $self->session->privilege->insfufficient() unless ($self->isRegistrationStaff); + return $self->session->privilege->insufficient() unless ($self->isRegistrationStaff); my $db = $self->session->db; my $badgeId = $self->session->form->param('badgeId'); my $flag = $db->quickScalar("select hasCheckedIn from EMSRegistrant where badgeId=?",[$badgeId]); @@ -2046,7 +2111,6 @@ sub www_toggleRegistrantCheckedIn { return $self->www_manageRegistrant; } - #------------------------------------------------------------------- =head2 www_viewSchedule () diff --git a/lib/WebGUI/Help/Asset_EventManagementSystem.pm b/lib/WebGUI/Help/Asset_EventManagementSystem.pm index eacf27f93..3cbc8891b 100644 --- a/lib/WebGUI/Help/Asset_EventManagementSystem.pm +++ b/lib/WebGUI/Help/Asset_EventManagementSystem.pm @@ -42,6 +42,7 @@ our $HELP = { { 'name' => 'addTokenUrl'}, { 'name' => 'importTicketsUrl'}, { 'name' => 'exportTicketsUrl'}, + { 'name' => 'printRemainingTicketsUrl'}, { 'name' => 'canEdit'}, { 'name' => 'hasBadge'}, { 'name' => 'badgeId'}, @@ -226,6 +227,67 @@ our $HELP = { related => [], }, + 'ems print remaining ticket template' => { + source => 'sub www_printRemainingTickets', + title => 'print remaining ticket template help', + body => '', + variables => [ + { 'name' => 'tickets_loop', + 'variables' => [ + { 'name' => 'ticketTitle'}, + { 'name' => 'ticketStart'}, + { 'name' => 'ticketDuration'}, + { 'name' => 'ticketLocation'}, + { 'name' => 'ticketEventNumber'}, + { 'name' => 'seatsRemaining'}, + { 'name' => 'seatsAvailable'}, + { 'name' => 'price'}, + { 'name' => 'relatedRibbons'}, + { 'name' => 'relatedBadgeGroups'}, + { 'name' => 'eventMetaData'}, + { 'name' => 'title'}, + { 'name' => 'menuTitle'}, + { 'name' => 'url'}, + { 'name' => 'synopsis'}, + { 'name' => 'assetId'}, + { 'name' => 'assetSize'}, + { 'name' => 'creationDate'}, + { 'name' => 'encryptPage'}, + { 'name' => 'extraHeadTags'}, + { 'name' => 'extraHeadTagsPacked'}, + { 'name' => 'groupIdEdit'}, + { 'name' => 'groupIdView'}, + { 'name' => 'inheritUrlFromParent'}, + { 'name' => 'isExportable'}, + { 'name' => 'isHidden'}, + { 'name' => 'isPrototype'}, + { 'name' => 'isPackage'}, + { 'name' => 'lastModified'}, + { 'name' => 'newWindow'}, + { 'name' => 'ownerUserId'}, + { 'name' => 'revisedBy'}, + { 'name' => 'revisionDate'}, + { 'name' => 'skipNotification'}, + { 'name' => 'tagId'}, + { 'name' => 'usePackedHeadTags'}, + ], + }, + ], + isa => [ + { namespace => "Asset_EventManagementSystem", + tag => "ems asset template variables" + }, + { namespace => "Asset_Template", + tag => "template variables" + }, + { namespace => "Asset_Wobject", + tag => "wobject template variables" + }, + ], + fields => [], + related => [], + }, + 'ems asset template variables' => { source => 'sub definition', title => 'ems asset template variables', diff --git a/lib/WebGUI/i18n/English/Asset_EventManagementSystem.pm b/lib/WebGUI/i18n/English/Asset_EventManagementSystem.pm index c8145bf3a..2327fb730 100644 --- a/lib/WebGUI/i18n/English/Asset_EventManagementSystem.pm +++ b/lib/WebGUI/i18n/English/Asset_EventManagementSystem.pm @@ -560,6 +560,25 @@ our $I18N = { context => q|help for a property label|, }, + + 'print remaining ticket template' => { + message => q|Print Remaining Tickets Template|, + lastUpdated => 0, + context => q|a property label|, + }, + + 'print remaining ticket template help' => { + message => q|Which template would you like to use for printing remaining tickets?|, + lastUpdated => 0, + context => q|help for a property label|, + }, + + 'print remaining tickets' => { + message => q|Print Remaining Tickets|, + lastUpdated => 0, + context => q|a link label on the builder page|, + }, + 'badge builder template' => { message => q|Badge Builder Template|, lastUpdated => 0, @@ -1878,6 +1897,195 @@ normal templates.|, context => q|help text for the columns per page field|, }, + + 'print remaining ticket template help' => { + message => q|EMS Print Remaining Ticket Template|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'tickets_loop' => { + message => q|A loop containing all of the remaining tickets and their associated data|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'seatsRemaining' => { + message => q|Total number of seats remaining for the ticket|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'seatsAvailable' => { + message => q|Total number of seats available for the ticket|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'relatedRibbons' => { + message => q|Ribbons related to the ticket|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'relatedBadgeGroups' => { + message => q|Badge groups related to the ticket|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'title' => { + message => q|The title of the ticket to be printed.|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'menuTitle' => { + message => q|The title of the ticket to be displayed in the menu.|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'synopsis' => { + message => q|Synopsis of the description for the ticket.|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'assetId' => { + message => q|Asset Id of the ticket.|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'assetSize' => { + message => q|Size of this ticket asset|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'creationDate' => { + message => q|Epoch value date for when the asset was created|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'encryptPage' => { + message => q|Whether or not to encrypt the page that the ticket is dipslayed on|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'extraHeadTags' => { + message => q|Extra tags that should be displayed in the header that this ticket is displayed on|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'extraHeadTagsPacked' => { + message => q|Extra tags that should be displayed in the header that this tikcet is displayed on minimized so no whitespace exists|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'groupIdEdit' => { + message => q|The id of the group that can edit this ticket.|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'groupIdView' => { + message => q|The id of the group that can view this ticket.|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'inheritUrlFromParent' => { + message => q|Whether or not to inherit the url from the parent|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'isExportable' => { + message => q|Whether or not this ticket is exportable|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'isHidden' => { + message => q|Whether or not this ticket should be hidden from the menu.|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'isPrototype' => { + message => q|Whether or not this ticket asset is a prototype|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'isPackage' => { + message => q|Whether or not this ticket asset is a package|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'lastModified' => { + message => q|Epoch date for when this ticket was last modified|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'newWindow' => { + message => q|Whether this ticket should be displayed in a new window|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'ownerUserId' => { + message => q|User Id of the owner of this ticket|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'revisedBy' => { + message => q|Id of the user who last modified this ticket|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'revisionDate' => { + message => q|Epoch date for when this ticket was last revised|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'skipNotification' => { + message => q|Whether or not notifications for this ticket should be skipped.|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'tagId' => { + message => q|Tag Id for this asset|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'usePackedHeadTags' => { + message => q|Whether or not packed head tags should be used for this ticket|, + lastUpdated => 1147050475, + context => q|help text label|, + }, + + 'printRemainingTicketsUrl' => { + message => q|URL to the print remaining tickets page|, + lastUpdated => 1147050475, + context => q|Field Label|, + }, + + + }; 1; diff --git a/t/Asset/Wobject/EventManagementSystem.t b/t/Asset/Wobject/EventManagementSystem.t index 9796a6d91..f52a620bc 100644 --- a/t/Asset/Wobject/EventManagementSystem.t +++ b/t/Asset/Wobject/EventManagementSystem.t @@ -49,7 +49,7 @@ $versionTag->set({name=>"EventManagementSystem Test"}); #---------------------------------------------------------------------------- # Tests -plan tests => 35 ; # Increment this number for each test you create +plan tests => 41; # Increment this number for each test you create #---------------------------------------------------------------------------- @@ -128,16 +128,26 @@ ok(scalar(@$badges) == 2, 'Two Badges exist'); # Add tickets my @tickets; push(@tickets, $ems->addChild({ - className => 'WebGUI::Asset::Sku::EMSTicket', - startDate => '2009-01-01 14:00:00', - eventNumber => 1, - location => 'qq', + className => 'WebGUI::Asset::Sku::EMSTicket', + title => 'Test Ticket 1', + url => 'test-ems/ticket-1', + startDate => '2009-01-01 14:00:00', + eventNumber => 1, + location => 'qq', + seatsAvailable => 5, + price => 5, + duration => 1, })); push(@tickets, $ems->addChild({ - className => 'WebGUI::Asset::Sku::EMSTicket', - startDate => '2009-01-01 14:00:00', - eventNumber => 2, - location => 'qq', + className => 'WebGUI::Asset::Sku::EMSTicket', + title => 'Test Ticket 2', + url => 'test-ems/ticket-2', + startDate => '2009-01-01 14:00:00', + eventNumber => 2, + location => 'qq', + seatsAvailable => 3, + price => 10, + duration => 2, })); foreach my $ticket(@tickets) { @@ -163,17 +173,200 @@ ok(scalar(@$ribbons) == 2, 'Two ribbons exist'); ok( $ems->can('www_getScheduleDataJSON'), 'Can call get Schedule data' ); ok( $ems->can('www_viewSchedule'), 'Can call view Schedule' ); +ok( $ems->can('www_printRemainingTickets'), 'Can call print remaining tickets' ); + +#Test that the default template is correct +my $printRemainingTicketsTemplateId = $ems->get('printRemainingTicketsTemplateId'); +ok($printRemainingTicketsTemplateId eq "hreA_bgxiTX-EzWCSZCZJw", 'Default print remaining tickets template id ok'); + +#Make sure printRemainingTickets template returns the right data +my $templateMock = Test::MockObject->new({}); +$templateMock->set_isa('WebGUI::Asset::Template'); +$templateMock->set_always('getId', $printRemainingTicketsTemplateId); +my $templateVars; +$templateMock->mock('process', sub { $templateVars = $_[1]; } ); + +{ + WebGUI::Test->mockAssetId($printRemainingTicketsTemplateId, $templateMock); + $ems->www_printRemainingTickets(); + + my $ticket1 = { + 'seatsRemaining' => '5', + 'ticketTitle' => 'Test Ticket 1', + 'newWindow' => ignore(), + 'extraHeadTagsPacked' => ignore(), + 'synopsis' => ignore(), + 'extraHeadTags' => ignore(), + 'ownerUserId' => ignore(), + 'url' => 'test-ems/ticket-1', + 'assetId' => ignore(), + 'isPrototype' => ignore(), + 'isHidden' => ignore(), + 'groupIdEdit' => ignore(), + 'inheritUrlFromParent' => ignore(), + 'ticketEventNumber' => '1', + 'lastModified' => ignore(), + 'price' => '5', + 'title' => 'Test Ticket 1', + 'groupIdView' => ignore(), + 'ticketLocation' => 'qq', + 'skipNotification' => ignore(), + 'status' => ignore(), + 'menuTitle' => 'Test Ticket 1', + 'assetSize' => ignore(), + 'ticketDuration' => '1', + 'relatedRibbons' => ignore(), + 'revisionDate' => ignore(), + 'relatedBadgeGroups' => ignore(), + 'isPackage' => ignore(), + 'eventMetaData' => ignore(), + 'usePackedHeadTags' => ignore(), + 'encryptPage' => ignore(), + 'tagId' => ignore(), + 'seatsAvailable' => '5', + 'revisedBy' => ignore(), + 'isExportable' => ignore(), + 'creationDate' => ignore(), + 'ticketStart' => '2009-01-01 14:00:00' + }; + + my $ticket2 = { + 'seatsRemaining' => '3', + 'ticketTitle' => 'Test Ticket 2', + 'newWindow' => ignore(), + 'extraHeadTagsPacked' => ignore(), + 'synopsis' => ignore(), + 'extraHeadTags' => ignore(), + 'ownerUserId' => ignore(), + 'url' => 'test-ems/ticket-2', + 'assetId' => ignore(), + 'isPrototype' => ignore(), + 'isHidden' => ignore(), + 'groupIdEdit' => ignore(), + 'inheritUrlFromParent' => ignore(), + 'ticketEventNumber' => '2', + 'lastModified' => ignore(), + 'price' => '10', + 'title' => 'Test Ticket 2', + 'groupIdView' => ignore(), + 'ticketLocation' => 'qq', + 'skipNotification' => ignore(), + 'status' => ignore(), + 'menuTitle' => 'Test Ticket 2', + 'assetSize' => ignore(), + 'ticketDuration' => '2', + 'relatedRibbons' => ignore(), + 'revisionDate' => ignore(), + 'relatedBadgeGroups' => ignore(), + 'isPackage' => ignore(), + 'eventMetaData' => ignore(), + 'usePackedHeadTags' => ignore(), + 'encryptPage' => ignore(), + 'tagId' => ignore(), + 'seatsAvailable' => '3', + 'revisedBy' => ignore(), + 'isExportable' => ignore(), + 'creationDate' => ignore(), + 'ticketStart' => '2009-01-01 14:00:00' + }; + + my @ticketArray = (); + for(1..3) { + push(@ticketArray,$ticket2); + } + for(1..5) { + push(@ticketArray,$ticket1); + } + + cmp_deeply( + $templateVars, + { + 'badgeInstructions' => ignore(), + 'displayTitle' => ignore(), + 'createdBy' => ignore(), + 'lastExportedAs' => ignore(), + 'printRemainingTicketsTemplateId' => ignore(), + 'state' => ignore(), + 'printTicketTemplateId' => ignore(), + 'newWindow' => ignore(), + 'scheduleColumnsPerPage' => ignore(), + 'synopsis' => ignore(), + 'extraHeadTagsPacked' => ignore(), + 'ownerUserId' => ignore(), + 'extraHeadTags' => ignore(), + 'assetId' => ignore(), + 'url' => 'test-ems', + 'isHidden' => ignore(), + 'isPrototype' => ignore(), + 'groupIdEdit' => ignore(), + 'timezone' => ignore(), + 'styleTemplateId' => ignore(), + 'inheritUrlFromParent' => ignore(), + 'description' => 'This is a test ems', + 'stateChangedBy' => ignore(), + 'lineage' => ignore(), + 'className' => 'WebGUI::Asset::Wobject::EventManagementSystem', + 'groupToApproveEvents' => ignore(), + 'lastModified' => ignore(), + 'title' => 'Test EMS', + 'groupIdView' => ignore(), + 'mobileStyleTemplateId' => ignore(), + 'skipNotification' => ignore(), + 'scheduleTemplateId' => ignore(), + 'status' => ignore(), + 'menuTitle' => 'Test EMS', + 'assetSize' => ignore(), + 'lookupRegistrantTemplateId' => ignore(), + 'isLockedBy' => ignore(), + 'stateChanged' => ignore(), + 'revisionDate' => ignore(), + 'ribbonInstructions' => ignore(), + 'isPackage' => ignore(), + 'usePackedHeadTags' => ignore(), + 'templateId' => ignore(), + 'badgeBuilderTemplateId' => ignore(), + 'printBadgeTemplateId' => ignore(), + 'encryptPage' => ignore(), + 'tagId' => ignore(), + 'isSystem' => ignore(), + 'revisedBy' => ignore(), + 'isExportable' => ignore(), + 'creationDate' => ignore(), + 'registrationStaffGroupId' => ignore(), + 'parentId' => ignore(), + 'tokenInstructions' => ignore(), + 'printableStyleTemplateId' => ignore(), + 'ticketInstructions' => ignore(), + 'tickets_loop' => \@ticketArray, + }, + "www_printRemainingTickets: template variables valid" + ); + + WebGUI::Test->unmockAssetId($printRemainingTicketsTemplateId); +} + +#Make sure permissions work on pages my $data; $session->user({userId => $crasher->getId}); $session->http->setStatus(201); $data = $ems->www_viewSchedule(); is($session->http->getStatus, 401, 'www_viewSchedule: visitor may not see the schedule'); +$data = $ems->www_printRemainingTickets(); +is($session->http->getStatus, 401, 'www_printRemainingTickets: visitor may not print the remaining tickets'); $session->http->setStatus(201); $session->user({userId => $attender->getId}); $data = $ems->www_viewSchedule(); is($session->http->getStatus, 201, '... attender user can see the schedule'); +$data = $ems->www_printRemainingTickets(); +is($session->http->getStatus, 401, 'www_printRemainingTickets: attender may not print the remaining tickets'); + +$session->http->setStatus(201); +$session->user({userId => $registrar->getId}); +$data = $ems->www_printRemainingTickets(); +is($session->http->getStatus, 201, 'www_printRemainingTickets: registration staff may print the remaining tickets'); + $session->http->setStatus(201); $session->user({userId => $crasher->getId}); From a25f273076a97964ed18f15a99e7b4b646dc5c09 Mon Sep 17 00:00:00 2001 From: khenn Date: Fri, 30 Oct 2009 17:09:44 -0500 Subject: [PATCH 08/18] added top keywords and print remaining tickets updates --- docs/changelog/7.x.x.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index e523f5150..9e9ae35ca 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -29,6 +29,8 @@ - fixed #11183: Calendar List View - fixed #11135: Tree Navigation menu template shows a drop down fly-out menu - fixed #10984: Edit Survey Screen isn't right in demo + - added: getTopKeywords method to Keywords API + - added: print remaining tickets feature to EMS 7.8.2 - Added scheduled vendor payout workflow activity. (Special thanks to Martin @ Oqapi) From 2e5250bdc9b4775eb9b941ab3260b7d359b55a8a Mon Sep 17 00:00:00 2001 From: khenn Date: Fri, 30 Oct 2009 17:13:04 -0500 Subject: [PATCH 09/18] forgot to update the plan --- t/Keyword.t | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/t/Keyword.t b/t/Keyword.t index c5ea23482..03e5e55d7 100644 --- a/t/Keyword.t +++ b/t/Keyword.t @@ -17,7 +17,7 @@ use WebGUI::Keyword; use WebGUI::Asset; # load your modules here -use Test::More tests => 14; # increment this value for each test you create +use Test::More tests => 15; # increment this value for each test you create use Test::Deep; use Data::Dumper; From ef51fdd426e664e33a2e5c2a9065c253b983c171 Mon Sep 17 00:00:00 2001 From: khenn Date: Fri, 30 Oct 2009 17:19:58 -0500 Subject: [PATCH 10/18] Fixes to tests suggested by Colin. Committing upgrade script --- docs/upgrades/upgrade_7.8.2-7.8.3.pl | 12 ++++++++++++ t/Asset/Wobject/EventManagementSystem.t | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/docs/upgrades/upgrade_7.8.2-7.8.3.pl b/docs/upgrades/upgrade_7.8.2-7.8.3.pl index b0d402b9b..5eb1224eb 100644 --- a/docs/upgrades/upgrade_7.8.2-7.8.3.pl +++ b/docs/upgrades/upgrade_7.8.2-7.8.3.pl @@ -40,9 +40,21 @@ addTrashAdminSetting($session); addPickLanguageMacro($session); installSetLanguage($session); i18nAbleToBeFriend($session); +addEMSEnhancements($session); finish($session); # this line required +#---------------------------------------------------------------------------- +sub addEMSEnhancements { + my $session = shift; + print "\tAdding EMS Enhancements, if needed... \n" unless $quiet; + my $sth = $session->db->read('describe EventManagementSystem printRemainingTicketsTemplateId'); + if (! defined $sth->hashRef) { + $session->db->write("alter table EventManagementSystem add column printRemainingTicketsTemplateId char(22) not null default 'hreA_bgxiTX-EzWCSZCZJw' after printTicketTemplateId"); + } + print "Done.\n" unless $quiet; +} + #---------------------------------------------------------------------------- sub i18nAbleToBeFriend { my $session = shift; diff --git a/t/Asset/Wobject/EventManagementSystem.t b/t/Asset/Wobject/EventManagementSystem.t index f52a620bc..06f4bf3db 100644 --- a/t/Asset/Wobject/EventManagementSystem.t +++ b/t/Asset/Wobject/EventManagementSystem.t @@ -178,7 +178,7 @@ ok( $ems->can('www_printRemainingTickets'), 'Can call print remaining tickets' ) #Test that the default template is correct my $printRemainingTicketsTemplateId = $ems->get('printRemainingTicketsTemplateId'); -ok($printRemainingTicketsTemplateId eq "hreA_bgxiTX-EzWCSZCZJw", 'Default print remaining tickets template id ok'); +is($printRemainingTicketsTemplateId, "hreA_bgxiTX-EzWCSZCZJw", 'Default print remaining tickets template id ok'); #Make sure printRemainingTickets template returns the right data my $templateMock = Test::MockObject->new({}); From 6f646f8a07b1be4691807c61aa36fc94ba56a867 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Fri, 30 Oct 2009 15:23:42 -0700 Subject: [PATCH 11/18] Remove extra newline from upgrade notice. --- docs/upgrades/upgrade_7.8.2-7.8.3.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/upgrades/upgrade_7.8.2-7.8.3.pl b/docs/upgrades/upgrade_7.8.2-7.8.3.pl index 5eb1224eb..3aac01b6d 100644 --- a/docs/upgrades/upgrade_7.8.2-7.8.3.pl +++ b/docs/upgrades/upgrade_7.8.2-7.8.3.pl @@ -47,7 +47,7 @@ finish($session); # this line required #---------------------------------------------------------------------------- sub addEMSEnhancements { my $session = shift; - print "\tAdding EMS Enhancements, if needed... \n" unless $quiet; + print "\tAdding EMS Enhancements, if needed... " unless $quiet; my $sth = $session->db->read('describe EventManagementSystem printRemainingTicketsTemplateId'); if (! defined $sth->hashRef) { $session->db->write("alter table EventManagementSystem add column printRemainingTicketsTemplateId char(22) not null default 'hreA_bgxiTX-EzWCSZCZJw' after printTicketTemplateId"); From 6fa96efff48fa815159978b54ffbb60d22f521fc Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Fri, 30 Oct 2009 15:26:07 -0700 Subject: [PATCH 12/18] Fix syntax errors in Operation/Group. --- lib/WebGUI/Operation/Group.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/WebGUI/Operation/Group.pm b/lib/WebGUI/Operation/Group.pm index 2ebf7d6b7..e0f0ed571 100644 --- a/lib/WebGUI/Operation/Group.pm +++ b/lib/WebGUI/Operation/Group.pm @@ -337,7 +337,7 @@ A WebGUI::Session object sub www_autoAddToGroup { my $session = shift; - return $self->session->privilege->noAccess() if ($session->user->isVisitor); + return $session->privilege->noAccess() if ($session->user->isVisitor); my $group = WebGUI::Group->new($session,$session->form->process("groupId")); if ($group && $group->autoAdd) { $group->addUsers([$session->user->userId],[$session->form->process("groupId")]); @@ -361,7 +361,7 @@ A WebGUI::Session object sub www_autoDeleteFromGroup { my $session = shift; - return $self->session->privilege->noAccess() if ($session->user->isVisitor); + return $session->privilege->noAccess() if ($session->user->isVisitor); my $group = WebGUI::Group->new($session,$session->form->process("groupId")); if ($group && $group->autoDelete) { $group->deleteUsers([$session->user->userId],[$session->form->process("groupId")]); From e74b689ac25c905cacf2b9acbb21f18dc8d85bd6 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Fri, 30 Oct 2009 15:45:32 -0700 Subject: [PATCH 13/18] Fix a syntax error. --- t/Macro/c_companyName.t | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/t/Macro/c_companyName.t b/t/Macro/c_companyName.t index 24d51d7ff..d3b22abb1 100644 --- a/t/Macro/c_companyName.t +++ b/t/Macro/c_companyName.t @@ -24,7 +24,7 @@ my $session = WebGUI::Test->session; plan tests => 2; my $output = WebGUI::Macro::c_companyName::process($session); -is($output, $originalCompanyName, "Testing companyName"); +is($output, $session->setting->get('companyName'), "Testing companyName"); $session->setting->set('companyName', q|Gooey's Consulting, LLC|); $output = WebGUI::Macro::c_companyName::process($session); From 058704d0279cb27130e7b6f926e03874d58122df Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Fri, 30 Oct 2009 15:58:43 -0700 Subject: [PATCH 14/18] Remove template variable from printRemainingTickets in the EMS. --- lib/WebGUI/Asset/Wobject/EventManagementSystem.pm | 1 - lib/WebGUI/Help/Asset_EventManagementSystem.pm | 1 - t/Asset/Wobject/EventManagementSystem.t | 2 -- 3 files changed, 4 deletions(-) diff --git a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm index 453441583..8e291dde5 100644 --- a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm +++ b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm @@ -1991,7 +1991,6 @@ sub www_printRemainingTickets { EMSTicket.location as ticketLocation, EMSTicket.relatedBadgeGroups, EMSTicket.relatedRibbons, - EMSTicket.eventMetaData, (seatsAvailable - (select count(*) from EMSRegistrantTicket where ticketAssetId = asset.assetId)) as seatsRemaining FROM asset diff --git a/lib/WebGUI/Help/Asset_EventManagementSystem.pm b/lib/WebGUI/Help/Asset_EventManagementSystem.pm index 3cbc8891b..9bb4a5115 100644 --- a/lib/WebGUI/Help/Asset_EventManagementSystem.pm +++ b/lib/WebGUI/Help/Asset_EventManagementSystem.pm @@ -244,7 +244,6 @@ our $HELP = { { 'name' => 'price'}, { 'name' => 'relatedRibbons'}, { 'name' => 'relatedBadgeGroups'}, - { 'name' => 'eventMetaData'}, { 'name' => 'title'}, { 'name' => 'menuTitle'}, { 'name' => 'url'}, diff --git a/t/Asset/Wobject/EventManagementSystem.t b/t/Asset/Wobject/EventManagementSystem.t index 06f4bf3db..8a7c73747 100644 --- a/t/Asset/Wobject/EventManagementSystem.t +++ b/t/Asset/Wobject/EventManagementSystem.t @@ -220,7 +220,6 @@ $templateMock->mock('process', sub { $templateVars = $_[1]; } ); 'revisionDate' => ignore(), 'relatedBadgeGroups' => ignore(), 'isPackage' => ignore(), - 'eventMetaData' => ignore(), 'usePackedHeadTags' => ignore(), 'encryptPage' => ignore(), 'tagId' => ignore(), @@ -260,7 +259,6 @@ $templateMock->mock('process', sub { $templateVars = $_[1]; } ); 'revisionDate' => ignore(), 'relatedBadgeGroups' => ignore(), 'isPackage' => ignore(), - 'eventMetaData' => ignore(), 'usePackedHeadTags' => ignore(), 'encryptPage' => ignore(), 'tagId' => ignore(), From 5ea3f025204e7ef13ef2efa418cdf24d204f5425 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Sat, 31 Oct 2009 12:05:07 -0700 Subject: [PATCH 15/18] Macro test maintenance. --- t/Macro/Env.t | 12 ++---------- t/Macro/FetchMimeType.t | 12 +----------- t/Macro/FileUrl.t | 20 ++++---------------- t/Macro/FormParam.t | 13 +------------ t/Macro/GroupAdd.t | 27 ++++++--------------------- t/Macro/GroupDelete.t | 27 ++++++--------------------- 6 files changed, 20 insertions(+), 91 deletions(-) diff --git a/t/Macro/Env.t b/t/Macro/Env.t index 1baa0c062..d84b51fb1 100644 --- a/t/Macro/Env.t +++ b/t/Macro/Env.t @@ -15,6 +15,7 @@ use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; use Data::Dumper; +use WebGUI::Macro::Env; use Test::More; # increment this value for each test you create @@ -27,17 +28,10 @@ my $session = WebGUI::Test->session; my %env = %{ $session->env->{_env} }; my @keys = keys %env; -my $numTests = 1 + 3 + scalar keys %env; +my $numTests = 3 + scalar keys %env; plan tests => $numTests; -my $macro = 'WebGUI::Macro::Env'; -my $loaded = use_ok($macro); - -SKIP: { - -skip "Unable to load $macro", $numTests-1 unless $loaded; - my $output; $output = WebGUI::Macro::Env::process($session, ''); @@ -53,5 +47,3 @@ foreach my $key (keys %env) { my $output = WebGUI::Macro::Env::process($session, $key); is($output, $env{$key}, 'Fetching: '.$key); } - -} diff --git a/t/Macro/FetchMimeType.t b/t/Macro/FetchMimeType.t index 5b40e0a6b..83632e587 100644 --- a/t/Macro/FetchMimeType.t +++ b/t/Macro/FetchMimeType.t @@ -14,6 +14,7 @@ use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; +use WebGUI::Macro::FetchMimeType; use Test::More; # increment this value for each test you create @@ -49,17 +50,8 @@ my @testSets = ( my $numTests = scalar @testSets; -$numTests += 1; #For the use_ok - plan tests => $numTests; -my $macro = 'WebGUI::Macro::FetchMimeType'; -my $loaded = use_ok($macro); - -SKIP: { - -skip "Unable to load $macro", $numTests-1 unless $loaded; - foreach my $testSet (@testSets) { my $file = $testSet->{input} ? join '/', WebGUI::Test->root, 'www/extras', $testSet->{input} @@ -67,5 +59,3 @@ foreach my $testSet (@testSets) { my $output = WebGUI::Macro::FetchMimeType::process($session, $file); is($output, $testSet->{output}, $testSet->{comment} ); } - -} diff --git a/t/Macro/FileUrl.t b/t/Macro/FileUrl.t index 6cc0963fe..05df10e4a 100644 --- a/t/Macro/FileUrl.t +++ b/t/Macro/FileUrl.t @@ -16,6 +16,7 @@ use WebGUI::Test; use WebGUI::Session; use WebGUI::Storage; use Data::Dumper; +use WebGUI::Macro::FileUrl; use Test::More; # increment this value for each test you create @@ -85,21 +86,13 @@ my @testSets = ( my $numTests = scalar @testSets; -$numTests += 1; #For the use_ok $numTests += 1; #non-existant URL plan tests => $numTests; -my $macro = 'WebGUI::Macro::FileUrl'; -my $loaded = use_ok($macro); - -SKIP: { - -skip "Unable to load $macro", $numTests-1 unless $loaded; - my $homeAsset = WebGUI::Asset->getDefault($session); -my ($versionTag, @testSets) = setupTest($session, $homeAsset, @testSets); +my @testSets = setupTest($session, $homeAsset, @testSets); foreach my $testSet (@testSets) { my $output = WebGUI::Macro::FileUrl::process($session, $testSet->{url}); @@ -114,8 +107,6 @@ foreach my $testSet (@testSets) { my $output = WebGUI::Macro::FileUrl::process($session, "non-existant-url"); is($output, $i18n->get('invalid url'), "Non-existant url returns error message"); -} - sub setupTest { my ($session, $homeAsset, @testSets) = @_; my $versionTag = WebGUI::VersionTag->getWorking($session); @@ -145,9 +136,6 @@ sub setupTest { ++$testNum; } $versionTag->commit; - WebGUI::Test->tagsToRollback($versionTag); - return $versionTag, @testSets; -} - -END { ##Clean-up after yourself, always + addToCleanup($versionTag); + return @testSets; } diff --git a/t/Macro/FormParam.t b/t/Macro/FormParam.t index 4040fd15f..78d1e41f9 100644 --- a/t/Macro/FormParam.t +++ b/t/Macro/FormParam.t @@ -14,6 +14,7 @@ use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; +use WebGUI::Macro::FormParam; use Test::More; # increment this value for each test you create use Test::MockObject; @@ -53,23 +54,11 @@ my @testSets = ( my $numTests = scalar @testSets; -$numTests += 1; ##use_ok $numTests += 1; ##testBlock has no name collisions $numTests += 3; ##TODO block -plan tests => $numTests; - -my $macro = 'WebGUI::Macro::FormParam'; -my $loaded = use_ok($macro); - -SKIP: { - -skip "Unable to load $macro", $numTests-1 unless $loaded; - auto_check($session, \@testSets); -} - TODO: { local $TODO = "Tests to write later"; ok(0, "What will this do with a non-existant form param?"); diff --git a/t/Macro/GroupAdd.t b/t/Macro/GroupAdd.t index 32e2f8c8d..582be72ba 100644 --- a/t/Macro/GroupAdd.t +++ b/t/Macro/GroupAdd.t @@ -14,6 +14,7 @@ use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; +use WebGUI::Macro::GroupAdd; use Data::Dumper; use Test::More; # increment this value for each test you create @@ -22,7 +23,7 @@ use HTML::TokeParser; my $session = WebGUI::Test->session; my $homeAsset = WebGUI::Asset->getDefault($session); -my ($versionTag, $template, $groups, $users) = setupTest($session, $homeAsset); +my ($template, $groups, $users) = setupTest($session, $homeAsset); my @testSets = ( { @@ -118,17 +119,8 @@ foreach my $testSet (@testSets) { $numTests += 1 + ($testSet->{empty} == 0); } -$numTests += 1; #For the use_ok - plan tests => $numTests; -my $macro = 'WebGUI::Macro::GroupAdd'; -my $loaded = use_ok($macro); - -SKIP: { - -skip "Unable to load $macro", $numTests-1 unless $loaded; - foreach my $testSet (@testSets) { $session->user({ userId => $testSet->{userId} }); my $output = WebGUI::Macro::GroupAdd::process($session, @@ -144,8 +136,6 @@ foreach my $testSet (@testSets) { } } -} - sub setupTest { my ($session, $defaultNode) = @_; my @groups; @@ -156,13 +146,13 @@ sub setupTest { $groups[1] = WebGUI::Group->new($session, "new"); $groups[1]->name('Regular Old Group'); $groups[1]->autoAdd(0); - WebGUI::Test->groupsToDelete(@groups); + addToCleanup(@groups); ##Three users. One in each group and one with no group membership my @users = map { WebGUI::User->new($session, "new") } 0..2; $users[0]->addToGroups([$groups[0]->getId]); $users[1]->addToGroups([$groups[1]->getId]); - WebGUI::Test->usersToDelete(@users); + addToCleanup(@users); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->set({name=>"GroupAdd test"}); @@ -178,8 +168,9 @@ sub setupTest { }; my $asset = $defaultNode->addChild($properties, $properties->{id}); $versionTag->commit; + addToCleanup($versionTag); - return $versionTag, $asset, \@groups, \@users; + return $asset, \@groups, \@users; } sub simpleHTMLParser { @@ -201,9 +192,3 @@ sub simpleTextParser { return ($url, $label); } - -END { ##Clean-up after yourself, always - if (defined $versionTag and ref $versionTag eq 'WebGUI::VersionTag') { - $versionTag->rollback; - } -} diff --git a/t/Macro/GroupDelete.t b/t/Macro/GroupDelete.t index c8ec7eb0f..6e3b48cc1 100644 --- a/t/Macro/GroupDelete.t +++ b/t/Macro/GroupDelete.t @@ -14,6 +14,7 @@ use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; +use WebGUI::Macro::GroupDelete; use Data::Dumper; use Test::More; # increment this value for each test you create @@ -22,7 +23,7 @@ use HTML::TokeParser; my $session = WebGUI::Test->session; my $homeAsset = WebGUI::Asset->getDefault($session); -my ($versionTag, $template, $groups, $users) = setupTest($session, $homeAsset); +my ($template, $groups, $users) = setupTest($session, $homeAsset); my @testSets = ( { @@ -118,17 +119,8 @@ foreach my $testSet (@testSets) { $numTests += 1 + ($testSet->{empty} == 0); } -$numTests += 1; #For the use_ok - plan tests => $numTests; -my $macro = 'WebGUI::Macro::GroupDelete'; -my $loaded = use_ok($macro); - -SKIP: { - -skip "Unable to load $macro", $numTests-1 unless $loaded; - foreach my $testSet (@testSets) { $session->user({ userId => $testSet->{userId} }); my $output = WebGUI::Macro::GroupDelete::process($session, @@ -144,8 +136,6 @@ foreach my $testSet (@testSets) { } } -} - sub setupTest { my ($session, $defaultNode) = @_; my @groups; @@ -156,13 +146,13 @@ sub setupTest { $groups[1] = WebGUI::Group->new($session, "new"); $groups[1]->name('Regular Old Group'); $groups[1]->autoDelete(0); - WebGUI::Test->groupsToDelete(@groups); + addToCleanup(@groups); ##Three users. One in each group and one with no group membership my @users = map { WebGUI::User->new($session, "new") } 0..2; $users[0]->addToGroups([$groups[0]->getId]); $users[1]->addToGroups([$groups[1]->getId]); - WebGUI::Test->usersToDelete(@users); + addToCleanup(@users); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->set({name=>"GroupDelete test"}); @@ -178,8 +168,9 @@ sub setupTest { }; my $asset = $defaultNode->addChild($properties, $properties->{id}); $versionTag->commit; + addToCleanup($versionTag); - return $versionTag, $asset, \@groups, \@users; + return $asset, \@groups, \@users; } sub simpleHTMLParser { @@ -201,9 +192,3 @@ sub simpleTextParser { return ($url, $label); } - -END { ##Clean-up after yourself, always - if (defined $versionTag and ref $versionTag eq 'WebGUI::VersionTag') { - $versionTag->rollback; - } -} From 3b11493744de90e1d3d7697f539cf1edf6377a71 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Sat, 31 Oct 2009 14:37:15 -0700 Subject: [PATCH 16/18] More Macro test maintenance. Up through LastModified. --- t/Macro/FormParam.t | 2 ++ t/Macro/GroupText.t | 17 ++++------------- t/Macro/Hash_userId.t | 12 +----------- t/Macro/If.t | 12 ++---------- t/Macro/Include.t | 14 +------------- t/Macro/International.t | 10 +--------- t/Macro/LastModified.t | 18 +++--------------- 7 files changed, 14 insertions(+), 71 deletions(-) diff --git a/t/Macro/FormParam.t b/t/Macro/FormParam.t index 78d1e41f9..c608eaf2f 100644 --- a/t/Macro/FormParam.t +++ b/t/Macro/FormParam.t @@ -57,6 +57,8 @@ my $numTests = scalar @testSets; $numTests += 1; ##testBlock has no name collisions $numTests += 3; ##TODO block +plan tests => $numTests; + auto_check($session, \@testSets); TODO: { diff --git a/t/Macro/GroupText.t b/t/Macro/GroupText.t index c3f066066..e09085017 100644 --- a/t/Macro/GroupText.t +++ b/t/Macro/GroupText.t @@ -16,6 +16,7 @@ use WebGUI::Test; use WebGUI::Session; use WebGUI::Group; use WebGUI::User; +use WebGUI::Macro::GroupText; my $session = WebGUI::Test->session; @@ -24,21 +25,13 @@ use Test::More; # increment this value for each test you create my $numTests; $numTests = 3; #Direct Macro tests $numTests += 4; #Bug tests -$numTests += 1; #For the use_ok plan tests => $numTests; -my $macro = 'WebGUI::Macro::GroupText'; -my $loaded = use_ok($macro); - my @mob; my ($ms_users, $ms_distributors, $ms_int_distributors); my ($disti, $int_disti); -SKIP: { - -skip "Unable to load $macro", $numTests-1 unless $loaded; - my $output; $session->user({userId => 1}); @@ -65,14 +58,14 @@ my $sth = $session->db->prepare('INSERT INTO myUserTable VALUES(?)'); foreach my $mob (@mob) { $sth->execute([ $mob->userId ]); } -WebGUI::Test->usersToDelete(@mob); +addToCleanup(@mob); ##Create the 3 groups $ms_users = WebGUI::Group->new($session, "new"); $ms_distributors = WebGUI::Group->new($session, "new"); $ms_int_distributors = WebGUI::Group->new($session, "new"); -WebGUI::Test->groupsToDelete($ms_users, $ms_distributors, $ms_int_distributors); +addToCleanup($ms_users, $ms_distributors, $ms_int_distributors); $ms_users->name('MS Users'); $ms_distributors->name('MS Distributors'); @@ -94,7 +87,7 @@ $ms_distributors->addGroups([$ms_int_distributors->getId]); $disti = WebGUI::User->new($session, 'new'); $int_disti = WebGUI::User->new($session, 'new'); -WebGUI::Test->usersToDelete($disti, $int_disti); +addToCleanup($disti, $int_disti); $ms_distributors->addUsers([$disti->userId]); $ms_int_distributors->addUsers([$int_disti->userId]); @@ -123,8 +116,6 @@ $output = join ',', ; is($output, 'user,disti,int_disti', 'user is in all three groups'); -} - ##clean up everything END { $session->db->dbh->do('DROP TABLE IF EXISTS myUserTable'); diff --git a/t/Macro/Hash_userId.t b/t/Macro/Hash_userId.t index 064c25465..cd2f2fca9 100644 --- a/t/Macro/Hash_userId.t +++ b/t/Macro/Hash_userId.t @@ -16,6 +16,7 @@ use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; +use WebGUI::Macro::Hash_userId; use Data::Dumper; my $session = WebGUI::Test->session; @@ -35,21 +36,10 @@ my @testSets = ( my $numTests = scalar @testSets; -$numTests += 1; #For the use_ok - plan tests => $numTests; -my $macro = 'WebGUI::Macro::Hash_userId'; -my $loaded = use_ok($macro); - -SKIP: { - -skip "Unable to load $macro", $numTests-1 unless $loaded; - foreach my $testSet (@testSets) { $session->user({userId => $testSet->{userId}}); my $output = WebGUI::Macro::Hash_userId::process($session); is($output, $testSet->{userId}, 'testing '.$testSet->{comment}); } - -} diff --git a/t/Macro/If.t b/t/Macro/If.t index c6563018a..fe2e929d4 100644 --- a/t/Macro/If.t +++ b/t/Macro/If.t @@ -14,23 +14,17 @@ use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; +use WebGUI::Macro::If; use Data::Dumper; my $session = WebGUI::Test->session; use Test::More; # increment this value for each test you create -my $numTests = 8 + 1; # For conditional load and skip +my $numTests = 8; # For conditional load and skip plan tests => $numTests; -my $macro = 'WebGUI::Macro::If'; -my $loaded = use_ok($macro); - -SKIP: { - -skip "Unable to load $macro", $numTests-1 unless $loaded; - my $output; $output = WebGUI::Macro::If::process($session, '', 'full', 'empty'); @@ -56,5 +50,3 @@ is($output, 'There are 5 lights', 'true text works with sprintf'); $output = WebGUI::Macro::If::process($session, 0, 'Full', 'There are %s lights'); is($output, 'There are %s lights', '...false text does not'); - -} diff --git a/t/Macro/Include.t b/t/Macro/Include.t index a10fab767..cf57e7452 100644 --- a/t/Macro/Include.t +++ b/t/Macro/Include.t @@ -15,6 +15,7 @@ use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; use WebGUI::Storage; +use WebGUI::Macro::Include; use Test::More; # increment this value for each test you create @@ -85,18 +86,10 @@ my @testSets = ( my $numTests = scalar @testSets; -$numTests += 1; #For the use_ok $numTests += 1; #For the unreadable file test plan tests => $numTests; -my $macro = 'WebGUI::Macro::Include'; -my $loaded = use_ok($macro); - -SKIP: { - -skip "Unable to load $macro", $numTests-1 unless $loaded; - foreach my $testSet (@testSets) { my $output = WebGUI::Macro::Include::process($session, $testSet->{file}); is($output, $testSet->{output}, $testSet->{comment} . ":" .$testSet->{file}); @@ -109,8 +102,3 @@ SKIP: { my $output = WebGUI::Macro::Include::process($session, $file); is($output, $i18n->get('not found'), q|Unreadable file returns NOT FOUND|. ":" .$file); } - -} - -END { -} diff --git a/t/Macro/International.t b/t/Macro/International.t index 5aa5b97dd..ae4033da5 100644 --- a/t/Macro/International.t +++ b/t/Macro/International.t @@ -14,6 +14,7 @@ use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; +use WebGUI::Macro::International; use Data::Dumper; use Test::More; # increment this value for each test you create @@ -50,18 +51,9 @@ my @testSets = ( my $numTests = scalar @testSets; -$numTests += 1; plan tests => $numTests; -my $loaded = use_ok('WebGUI::Macro::International'); - -SKIP: { - -skip 'Module was not loaded, skipping all tests', $numTests -1 unless $loaded; - foreach my $testSet (@testSets) { my $output = WebGUI::Macro::International::process($session, @{ $testSet->{input} }); is($output, $testSet->{output}, $testSet->{comment} ); } - -} diff --git a/t/Macro/LastModified.t b/t/Macro/LastModified.t index 285a9219c..5907bae34 100644 --- a/t/Macro/LastModified.t +++ b/t/Macro/LastModified.t @@ -14,6 +14,7 @@ use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; +use WebGUI::Macro::LastModified; use Test::More; # increment this value for each test you create @@ -46,17 +47,12 @@ my @testSets = ( my $numTests = scalar @testSets; -$numTests += 1 + 2; #For the use_ok, default asset, and revisionDate=0 +$numTests += 2; #For the use_ok, default asset, and revisionDate=0 plan tests => $numTests; -my $macro = 'WebGUI::Macro::LastModified'; -my $loaded = use_ok($macro); my $versionTag = WebGUI::VersionTag->getWorking($session); - -SKIP: { - -skip "Unable to load $macro", $numTests-1 unless $loaded; +addToCleanup($versionTag); my $output = WebGUI::Macro::LastModified::process($session); is($output, '', "Macro returns '' if no asset is defined"); @@ -97,11 +93,3 @@ is($output, $i18n->get('never'), 'asset with 0 revisionDate returns never modifi ##Restore the original revisionDate, otherwise it dies during clean-up $session->db->write('update assetData set revisionDate=? where assetId=?', [$revDate, $assetA->getId]); - -} - -END { ##Clean-up after yourself, always - if (defined $versionTag and ref $versionTag eq 'WebGUI::VersionTag') { - $versionTag->rollback; - } -} From bd6677942ce99eedf22a413efabc8fc3d06faa92 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Sat, 31 Oct 2009 15:53:10 -0700 Subject: [PATCH 17/18] Macro test maintenance, up through Page.t --- t/Macro/L_loginBox.t | 26 ++---- t/Macro/LoginToggle.t | 22 +---- t/Macro/MiniCart.t | 187 +++++++++++++++++++----------------------- t/Macro/Page.t | 21 +---- 4 files changed, 98 insertions(+), 158 deletions(-) diff --git a/t/Macro/L_loginBox.t b/t/Macro/L_loginBox.t index 444e63acc..b66e0a198 100644 --- a/t/Macro/L_loginBox.t +++ b/t/Macro/L_loginBox.t @@ -14,6 +14,7 @@ use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; +use WebGUI::Macro::L_loginBox; use HTML::TokeParser; use Test::More; # increment this value for each test you create @@ -22,7 +23,7 @@ my $session = WebGUI::Test->session; my $homeAsset = WebGUI::Asset->getDefault($session); $session->asset($homeAsset); -my ($versionTag, $template) = setupTest($session, $homeAsset); +my $template = setupTest($session, $homeAsset); $session->user({userId=>1}); ##Replace the original ENV hash with one that will return a @@ -37,17 +38,7 @@ $session->{_env}->{_env} = \%newEnvHash; my $i18n = WebGUI::International->new($session,'Macro_L_loginBox'); -my $numTests = 1; #Module loading test -$numTests += 30; #Static tests - -plan tests => $numTests; - -my $macro = 'WebGUI::Macro::L_loginBox'; -my $loaded = use_ok($macro); - -SKIP: { - -skip "Unable to load $macro", $numTests-1 unless $loaded; +plan tests => 30; my $output = WebGUI::Macro::L_loginBox::process($session,'','',$template->getId); my %vars = simpleTextParser($output); @@ -170,8 +161,6 @@ $output = WebGUI::Macro::L_loginBox::process($session,'','',''); my $passwordLabel = $i18n->get(51, 'WebGUI'); like($output, qr/$passwordLabel/, 'default template works'); -} - sub simpleTextParser { my ($text) = @_; @@ -236,11 +225,6 @@ sub setupTest { #$properties->{template} .= "\n"; my $template = $defaultNode->addChild($properties, $properties->{id}); $versionTag->commit; - return ($versionTag, $template); -} - -END { ##Clean-up after yourself, always - if (defined $versionTag and ref $versionTag eq 'WebGUI::VersionTag') { - $versionTag->rollback; - } + addToCleanup($versionTag); + return $template; } diff --git a/t/Macro/LoginToggle.t b/t/Macro/LoginToggle.t index 0b34064bd..dde519766 100644 --- a/t/Macro/LoginToggle.t +++ b/t/Macro/LoginToggle.t @@ -14,6 +14,7 @@ use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; +use WebGUI::Macro::LoginToggle; use HTML::TokeParser; use Data::Dumper; @@ -23,7 +24,7 @@ my $session = WebGUI::Test->session; my $homeAsset = WebGUI::Asset->getDefault($session); $session->asset($homeAsset); -my ($versionTag, $template) = setupTest($session, $homeAsset); +my $template = setupTest($session, $homeAsset); my $i18n = WebGUI::International->new($session,'Macro_LoginToggle'); @@ -131,16 +132,8 @@ foreach my $testSet (@testSets) { $numTests += 1 + (ref $testSet->{parser} eq 'CODE'); } -$numTests += 1; #for the use_ok plan tests => $numTests; -my $macro = 'WebGUI::Macro::LoginToggle'; -my $loaded = use_ok($macro); - -SKIP: { - -skip "Unable to load $macro", $numTests-1 unless $loaded; - foreach my $testSet (@testSets) { $session->user({userId=>$testSet->{userId}}); if ($testSet->{userId} eq '1') { @@ -163,8 +156,6 @@ foreach my $testSet (@testSets) { } } -} - sub simpleHTMLParser { my ($text) = @_; my $p = HTML::TokeParser->new(\$text); @@ -205,11 +196,6 @@ sub setupTest { }; my $template = $defaultNode->addChild($properties, $properties->{id}); $versionTag->commit; - return ($versionTag, $template); -} - -END { ##Clean-up after yourself, always - if (defined $versionTag and ref $versionTag eq 'WebGUI::VersionTag') { - $versionTag->rollback; - } + addToCleanup($versionTag); + return ($template); } diff --git a/t/Macro/MiniCart.t b/t/Macro/MiniCart.t index 14ef3d2bf..101f2154b 100644 --- a/t/Macro/MiniCart.t +++ b/t/Macro/MiniCart.t @@ -14,6 +14,7 @@ use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; +use WebGUI::Macro::MiniCart; use JSON; use Data::Dumper; @@ -22,14 +23,7 @@ use Test::Deep; my $session = WebGUI::Test->session; -my $numTests = 4; - -$numTests += 1; #For the use_ok - -plan tests => $numTests; - -my $macro = 'WebGUI::Macro::MiniCart'; -my $loaded = use_ok($macro); +plan tests => 4; my $cart = WebGUI::Shop::Cart->newBySession($session); my $donation = WebGUI::Asset->getRoot($session)->addChild({ @@ -40,105 +34,94 @@ my $donation = WebGUI::Asset->getRoot($session)->addChild({ }); my $template = setupJSONtemplate($session); +addToCleanup($cart, $donation, $template); -SKIP: { +my $json; +my $templateVars; -skip "Unable to load $macro", $numTests-1 unless $loaded; +$json = WebGUI::Macro::MiniCart::process($session, $template->getId); +$templateVars = JSON::from_json($json); +cmp_deeply( + $templateVars, + { + totalPrice => '0', + totalItems => '0', + items => [], + }, + 'Empty cart works' +); - my $json; - my $templateVars; +my $item1 = $cart->addItem($donation); +$json = WebGUI::Macro::MiniCart::process($session, $template->getId); +$templateVars = JSON::from_json($json); +cmp_deeply( + $templateVars, + { + totalPrice => '10', + totalItems => '1', + items => [ + { + name => $donation->getConfiguredTitle(), + quantity => 1, + price => 10, + url => $donation->getUrl('shop=cart;method=viewItem;itemId='.$item1->getId), + }, + ], + }, + 'Cart with one item works' +); - $json = WebGUI::Macro::MiniCart::process($session, $template->getId); - $templateVars = JSON::from_json($json); - cmp_deeply( - $templateVars, - { - totalPrice => '0', - totalItems => '0', - items => [], - }, - 'Empty cart works' - ); +my $item2 = $cart->addItem($donation); +$json = WebGUI::Macro::MiniCart::process($session, $template->getId); +$templateVars = JSON::from_json($json); +cmp_deeply( + $templateVars, + { + totalPrice => '20', + totalItems => '2', + items => bag( + { + name => $donation->getConfiguredTitle(), + quantity => 1, + price => 10, + url => $donation->getUrl('shop=cart;method=viewItem;itemId='.$item1->getId), + }, + { + name => $donation->getConfiguredTitle(), + quantity => 1, + price => 10, + url => $donation->getUrl('shop=cart;method=viewItem;itemId='.$item2->getId), + }, + ), + }, + 'Cart with two items works' +); - my $item1 = $cart->addItem($donation); - $json = WebGUI::Macro::MiniCart::process($session, $template->getId); - $templateVars = JSON::from_json($json); - cmp_deeply( - $templateVars, - { - totalPrice => '10', - totalItems => '1', - items => [ - { - name => $donation->getConfiguredTitle(), - quantity => 1, - price => 10, - url => $donation->getUrl('shop=cart;method=viewItem;itemId='.$item1->getId), - }, - ], - }, - 'Cart with one item works' - ); - - my $item2 = $cart->addItem($donation); - $json = WebGUI::Macro::MiniCart::process($session, $template->getId); - $templateVars = JSON::from_json($json); - cmp_deeply( - $templateVars, - { - totalPrice => '20', - totalItems => '2', - items => bag( - { - name => $donation->getConfiguredTitle(), - quantity => 1, - price => 10, - url => $donation->getUrl('shop=cart;method=viewItem;itemId='.$item1->getId), - }, - { - name => $donation->getConfiguredTitle(), - quantity => 1, - price => 10, - url => $donation->getUrl('shop=cart;method=viewItem;itemId='.$item2->getId), - }, - ), - }, - 'Cart with two items works' - ); - - $item2->setQuantity(9); - $json = WebGUI::Macro::MiniCart::process($session, $template->getId); - $templateVars = JSON::from_json($json); - cmp_deeply( - $templateVars, - { - totalPrice => '100', - totalItems => '10', - items => bag( - { - name => $donation->getConfiguredTitle(), - quantity => 1, - price => 10, - url => $donation->getUrl('shop=cart;method=viewItem;itemId='.$item1->getId), - }, - { - name => $donation->getConfiguredTitle(), - quantity => 9, - price => 10, - url => $donation->getUrl('shop=cart;method=viewItem;itemId='.$item2->getId), - }, - ), - }, - 'Cart with two items and multiple quantities works' - ); - -} - -END { - $cart->delete; - $donation->purge; - $template->purge; -} +$item2->setQuantity(9); +$json = WebGUI::Macro::MiniCart::process($session, $template->getId); +$templateVars = JSON::from_json($json); +cmp_deeply( + $templateVars, + { + totalPrice => '100', + totalItems => '10', + items => bag( + { + name => $donation->getConfiguredTitle(), + quantity => 1, + price => 10, + url => $donation->getUrl('shop=cart;method=viewItem;itemId='.$item1->getId), + }, + { + name => $donation->getConfiguredTitle(), + quantity => 9, + price => 10, + url => $donation->getUrl('shop=cart;method=viewItem;itemId='.$item2->getId), + }, + ), + }, + 'Cart with two items and multiple quantities works' +); sub setupJSONtemplate { my ($session) = @_; diff --git a/t/Macro/Page.t b/t/Macro/Page.t index 0654a366d..6d063586a 100644 --- a/t/Macro/Page.t +++ b/t/Macro/Page.t @@ -14,6 +14,7 @@ use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; +use WebGUI::Macro::Page; use Data::Dumper; use Test::More; # increment this value for each test you create @@ -46,22 +47,13 @@ foreach my $testSet (@testSets) { $numTests += scalar keys %{ $testSet }; } -$numTests += 1; #For the use_ok $numTests += 1; #For macro call with undefined session asset plan tests => $numTests; -my $macro = 'WebGUI::Macro::Page'; -my $loaded = use_ok($macro); - my $homeAsset = WebGUI::Asset->getDefault($session); -my $versionTag; -($versionTag, @testSets) = setupTest($session, $homeAsset, @testSets); - -SKIP: { - -skip "Unable to load $macro", $numTests-1 unless $loaded; +@testSets = setupTest($session, $homeAsset, @testSets); is( WebGUI::Macro::Page::process($session,'url'), @@ -80,8 +72,6 @@ foreach my $testSet (@testSets) { } } -} - sub setupTest { my ($session, $homeAsset, @testSets) = @_; my $versionTag = WebGUI::VersionTag->getWorking($session); @@ -92,9 +82,6 @@ sub setupTest { $testSet->{asset} = $asset; } $versionTag->commit; - return $versionTag, @testSets; -} - -END { ##Clean-up after yourself, always - $versionTag->rollback; + addToCleanup($versionTag); + return @testSets; } From 71548339de4cc94e93436c6ebc077f92308e0922 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Sat, 31 Oct 2009 19:02:52 -0700 Subject: [PATCH 18/18] Done with Macro test maintenance. --- t/Macro/PageTitle.t | 17 +--- t/Macro/PickLanguage.t | 6 +- t/Macro/RootTitle.t | 21 +--- t/Macro/SQL.t | 11 +- t/Macro/SessionId.t | 16 +-- t/Macro/Slash_gatewayUrl.t | 19 +--- t/Macro/Thumbnail.t | 8 +- t/Macro/User.t | 3 - t/Macro/UsersOnline.t | 203 +++++++++++++++++-------------------- t/Macro/ViewCart.t | 18 +--- t/Macro/r_printable.t | 11 +- 11 files changed, 112 insertions(+), 221 deletions(-) diff --git a/t/Macro/PageTitle.t b/t/Macro/PageTitle.t index 58d7401ec..846968494 100644 --- a/t/Macro/PageTitle.t +++ b/t/Macro/PageTitle.t @@ -14,6 +14,7 @@ use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; +use WebGUI::Macro::PageTitle; use Data::Dumper; use Test::More; @@ -22,13 +23,9 @@ use Test::MockObject; my $session = WebGUI::Test->session; my $numTests = 7; -$numTests += 1; #For the use_ok plan tests => $numTests; -my $macro = 'WebGUI::Macro::PageTitle'; -my $loaded = use_ok($macro); - my $homeAsset = WebGUI::Asset->getDefault($session); my $versionTag = WebGUI::VersionTag->getWorking($session); @@ -45,10 +42,7 @@ my $snippet = $homeAsset->addChild({ }); $versionTag->commit; - -SKIP: { - -skip "Unable to load $macro", $numTests-1 unless $loaded; +addToCleanup($versionTag); is( WebGUI::Macro::PageTitle::process($session), @@ -66,7 +60,6 @@ $session->asset($snippet); my $macroOutput = WebGUI::Macro::PageTitle::process($session); is($macroOutput, $snippet->get('title'), "testing title returned from localy created asset with known title"); - my $origSessionRequest = $session->{_request}; my ($operation, $function) = (0,0); @@ -105,9 +98,3 @@ $operation = 1; $function = 1; $output = WebGUI::Macro::PageTitle::process($session); is($output, $urlizedTitle, 'fetching urlized title via an operation and function'); - -} - -END { - $versionTag->rollback; -} diff --git a/t/Macro/PickLanguage.t b/t/Macro/PickLanguage.t index 3f7fc3de1..bc7feaf71 100644 --- a/t/Macro/PickLanguage.t +++ b/t/Macro/PickLanguage.t @@ -14,6 +14,7 @@ use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; use WebGUI::Asset::Template; +use WebGUI::Macro::PickLanguage; use Test::More; # increment this value for each test you create use Test::Deep; @@ -24,13 +25,8 @@ my $session = WebGUI::Test->session; my $numTests = 3; -$numTests += 1; #For the use_ok - plan tests => $numTests; -my $macro = 'WebGUI::Macro::PickLanguage'; -my $loaded = use_ok($macro); - my $macroMock = Test::MockObject->new({}); $macroMock->set_isa('WebGUI::Macro::PickLanguage'); $macroMock->set_true('process'); diff --git a/t/Macro/RootTitle.t b/t/Macro/RootTitle.t index 16a82ca56..353d14e6c 100644 --- a/t/Macro/RootTitle.t +++ b/t/Macro/RootTitle.t @@ -13,8 +13,8 @@ use strict; use lib "$FindBin::Bin/../lib"; use WebGUI::Test; -use WebGUI::Macro::RootTitle; use WebGUI::Session; +use WebGUI::Macro::RootTitle; use Data::Dumper; use Test::More; # increment this value for each test you create @@ -32,6 +32,7 @@ my $session = WebGUI::Test->session; my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->set({name=>"Adding assets for RootTitle tests"}); +addToCleanup($versionTag); my $root = WebGUI::Asset->getRoot($session); my %properties_A = ( @@ -160,17 +161,10 @@ my @testSets = ( ); my $numTests = scalar @testSets; -$numTests += 2; +$numTests += 1; plan tests => $numTests; -my $macro = 'WebGUI::Macro::RootTitle'; -my $loaded = use_ok($macro); - -SKIP: { - -skip "Unable to load $macro", $numTests-1 unless $loaded; - is( WebGUI::Macro::RootTitle::process($session), '', @@ -183,12 +177,3 @@ foreach my $testSet (@testSets) { my $output = WebGUI::Macro::RootTitle::process($session); is($output, $testSet->{title}, $testSet->{comment}); } - -} - -END { ##Clean-up after yourself, always - $session->db->write('update asset set lineage=? where assetId=?',[$origLineage, $asset_->getId]); - if (defined $versionTag and ref $versionTag eq 'WebGUI::VersionTag') { - $versionTag->rollback; - } -} diff --git a/t/Macro/SQL.t b/t/Macro/SQL.t index 720536728..1e4219a62 100644 --- a/t/Macro/SQL.t +++ b/t/Macro/SQL.t @@ -17,6 +17,7 @@ use WebGUI::Macro::Slash_gatewayUrl; use WebGUI::Session; use WebGUI::International; use WebGUI::DatabaseLink; +use WebGUI::Macro::SQL; use Data::Dumper; use Test::More; # increment this value for each test you create @@ -119,14 +120,10 @@ my @testSets = ( my $numTests = scalar @testSets; -++$numTests; ##For the load check; ++$numTests; ##For the allow macro access test; plan tests => $numTests; -my $macro = 'WebGUI::Macro::SQL'; -my $loaded = use_ok($macro); - $WebGUIdbLink->set({allowMacroAccess=>0}); # run one test to test allowMacroAccess @@ -136,10 +133,6 @@ is($output, $i18n->get('database access not allowed'), 'Test allow access from m # set allowMacroAccess to 1 to allow other tests to run $WebGUIdbLink->set({allowMacroAccess=>1}); -SKIP: { - -skip "Unable to load $macro", $numTests-1 unless $loaded; - foreach my $testSet (@testSets) { # we know some of these will fail. Keep them quiet. local $SIG{__WARN__} = sub {}; @@ -148,8 +141,6 @@ foreach my $testSet (@testSets) { is($output, $testSet->{output}, $testSet->{comment}); } -} - # reset allowMacroAccess to original value $WebGUIdbLink->set({allowMacroAccess=>$originalMacroAccessValue}); diff --git a/t/Macro/SessionId.t b/t/Macro/SessionId.t index e2ca4df69..5c4867db4 100644 --- a/t/Macro/SessionId.t +++ b/t/Macro/SessionId.t @@ -14,6 +14,7 @@ use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; +use WebGUI::Macro::SessionId; use HTML::TokeParser; use Data::Dumper; @@ -21,16 +22,7 @@ use Test::More; # increment this value for each test you create my $session = WebGUI::Test->session; -my $numTests = 1; -$numTests += 1; #For the use_ok -plan tests => 2; +plan tests => 1; -my $macro = 'WebGUI::Macro::SessionId'; -my $loaded = use_ok($macro); - -SKIP: { - -skip "Unable to load $macro", $numTests-1 unless $loaded; - my $output = WebGUI::Macro::SessionId::process( $session ); - is($session->getId, $output, 'Session macro works'); -} +my $output = WebGUI::Macro::SessionId::process( $session ); +is($session->getId, $output, 'Session macro works'); diff --git a/t/Macro/Slash_gatewayUrl.t b/t/Macro/Slash_gatewayUrl.t index 596bcf6a0..670de8cc4 100644 --- a/t/Macro/Slash_gatewayUrl.t +++ b/t/Macro/Slash_gatewayUrl.t @@ -14,6 +14,7 @@ use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; +use WebGUI::Macro::Slash_gatewayUrl; use Data::Dumper; use Test::More; # increment this value for each test you create @@ -24,17 +25,7 @@ my $session = WebGUI::Test->session; ##in t/Session/Url.t All we need to do is make sure that the macro ##fetches the same thing as the method. -my $numTests = 4; -$numTests += 1; #For the use_ok - -plan tests => $numTests; - -my $macro = 'WebGUI::Macro::Slash_gatewayUrl'; -my $loaded = use_ok($macro); - -SKIP: { - -skip "Unable to load $macro", $numTests-1 unless $loaded; +plan tests => 4; $session->setting->set('preventProxyCache', 0); @@ -54,9 +45,3 @@ like($output, qr{/\?noCache=\d+:\d+$}, 'checking the cache settings in the URL') $output = WebGUI::Macro::Slash_gatewayUrl::process($session, '/foo/bar'); like($output, qr{/foo/bar\?noCache=\d+:\d+$}, 'checking the cache settings in the URL are at the end of the URL'); -$session->setting->set('preventProxyCache', 0); - -} - -END { -} diff --git a/t/Macro/Thumbnail.t b/t/Macro/Thumbnail.t index 6b8f97cd5..78100d881 100644 --- a/t/Macro/Thumbnail.t +++ b/t/Macro/Thumbnail.t @@ -68,6 +68,7 @@ $asset->update({ $asset->generateThumbnail(); $versionTag->commit; +addToCleanup($versionTag); ##Call the Thumbnail Macro with that Asset's URL and see if it returns @@ -95,10 +96,3 @@ SKIP: { cmp_bag([$thumbImg->GetPixels(width=>1, height=>1, x=>50, y=>50, map=>'RGB', normalize=>'true')], [0,0,1], 'blue pixel #3'); } - -END { - if (defined $versionTag and ref $versionTag eq 'WebGUI::VersionTag') { - $versionTag->rollback; - } - ##Storage is cleaned up by rolling back the version tag -} diff --git a/t/Macro/User.t b/t/Macro/User.t index 6053a1955..33a0decba 100644 --- a/t/Macro/User.t +++ b/t/Macro/User.t @@ -79,6 +79,3 @@ sub setupTest { } return @testSets; } - -END { ##Clean-up after yourself, always -} diff --git a/t/Macro/UsersOnline.t b/t/Macro/UsersOnline.t index 42734ec33..c64e6e32b 100644 --- a/t/Macro/UsersOnline.t +++ b/t/Macro/UsersOnline.t @@ -29,130 +29,119 @@ my $template = setupJSONtemplate($session); my @users = setupUsers($session); my $i18n = WebGUI::International->new($session,'Macro_UsersOnline'); -my $numTests = 1; # Module loading test -$numTests += 30; # Static tests +plan tests => 30; -plan tests => $numTests; +# Basic testing ----------------------------------------------------------- -my $macro = 'WebGUI::Macro::UsersOnline'; -my $loaded = use_ok($macro); +# Check for default template +my $defTemplate = WebGUI::Asset->new($session, 'h_T2xtOxGRQ9QJOR6ebLpQ'); +ok(defined $defTemplate, 'default template is present'); -SKIP: { - -skip "Unable to load $macro", $numTests-1 unless $loaded; - - # Basic testing ----------------------------------------------------------- - - # Check for default template - my $defTemplate = WebGUI::Asset->new($session, 'h_T2xtOxGRQ9QJOR6ebLpQ'); - ok(defined $defTemplate, 'default template is present'); - - # Call with default values - my $html = WebGUI::Macro::UsersOnline::process($session); - cmp_ok((length $html), '>', 0, 'call with default template and values returns some output'); +# Call with default values +my $html = WebGUI::Macro::UsersOnline::process($session); +cmp_ok((length $html), '>', 0, 'call with default template and values returns some output'); - # Test labels ------------------------------------------------------------- +# Test labels ------------------------------------------------------------- - $session->user({userId => 1}); - my $json = WebGUI::Macro::UsersOnline::process($session, $template->getId); - my $vars = JSON::from_json($json); +$session->user({userId => 1}); +my $json = WebGUI::Macro::UsersOnline::process($session, $template->getId); +my $vars = JSON::from_json($json); - is($vars->{'usersOnline_label'}, $i18n->get('Users Online'), 'usersOnline_label'); - is($vars->{'members_label'}, $i18n->get('Members'), 'members_label'); - is($vars->{'visitors_label'}, $i18n->get('Visitors'), 'visitors_label'); - is($vars->{'total_label'}, $i18n->get('Total'), 'total_label'); - is($vars->{'membersOnline_label'}, $i18n->get('Members Online'), 'membersOnline_label'); - is($vars->{'visitorsOnline_label'}, $i18n->get('Visitors Online'), 'visitorsOnline_label'); - is($vars->{'avatar_label'}, $i18n->get('Avatar'), 'avatar_label'); - is($vars->{'name_label'}, $i18n->get('Name'), 'name_label'); - is($vars->{'alias_label'}, $i18n->get('Alias'), 'alias_label'); - is($vars->{'session_label'}, $i18n->get('Session'), 'session_label'); - is($vars->{'ip_label'}, $i18n->get('IP'), 'ip_label'); - is($vars->{'lastActivity_label'}, $i18n->get('Last Activity'), 'lastActivity_label'); +is($vars->{'usersOnline_label'}, $i18n->get('Users Online'), 'usersOnline_label'); +is($vars->{'members_label'}, $i18n->get('Members'), 'members_label'); +is($vars->{'visitors_label'}, $i18n->get('Visitors'), 'visitors_label'); +is($vars->{'total_label'}, $i18n->get('Total'), 'total_label'); +is($vars->{'membersOnline_label'}, $i18n->get('Members Online'), 'membersOnline_label'); +is($vars->{'visitorsOnline_label'}, $i18n->get('Visitors Online'), 'visitorsOnline_label'); +is($vars->{'avatar_label'}, $i18n->get('Avatar'), 'avatar_label'); +is($vars->{'name_label'}, $i18n->get('Name'), 'name_label'); +is($vars->{'alias_label'}, $i18n->get('Alias'), 'alias_label'); +is($vars->{'session_label'}, $i18n->get('Session'), 'session_label'); +is($vars->{'ip_label'}, $i18n->get('IP'), 'ip_label'); +is($vars->{'lastActivity_label'}, $i18n->get('Last Activity'), 'lastActivity_label'); - # Test logic -------------------------------------------------------------- +# Test logic -------------------------------------------------------------- - like($vars->{'visitors'}, qr/[0-9]+/, 'visitors is numeric'); +like($vars->{'visitors'}, qr/[0-9]+/, 'visitors is numeric'); # Does not work in testing environments that run on the loopback interface, # since these queries are filtered out by the macro. # is($vars->{'visitors'} > 0, 1, 'visitors > 0 when calling as visitor'); - like($vars->{'members'}, qr/[0-9]+/, 'members is numeric'); - cmp_ok($vars->{'members'}, '>', 0, 'members > 0 since we have created one visible active member'); - is($vars->{'total'}, $vars->{'visitors'} + $vars->{'members'}, 'total == visitors + members'); - ok($vars->{'isVisitor'}, 'isVisitor is true when calling as visitor'); - ok(defined $vars->{'hasMembers'}, 'hasMembers is defined since we have created one visible active member'); +like($vars->{'members'}, qr/[0-9]+/, 'members is numeric'); +cmp_ok($vars->{'members'}, '>', 0, 'members > 0 since we have created one visible active member'); +is($vars->{'total'}, $vars->{'visitors'} + $vars->{'members'}, 'total == visitors + members'); +ok($vars->{'isVisitor'}, 'isVisitor is true when calling as visitor'); +ok(defined $vars->{'hasMembers'}, 'hasMembers is defined since we have created one visible active member'); - # Check member loop ------------------------------------------------------- +# Check member loop ------------------------------------------------------- - my $allFieldsSet = 1; - my $firstUserPresent = 0; - my $secondUserAbsent = 1; +my $allFieldsSet = 1; +my $firstUserPresent = 0; +my $secondUserAbsent = 1; - foreach (@{$vars->{'member_loop'}}) { - # Check whether first user is present - if ($_->{'username'} eq 'tester1') { - # Indicate success - $firstUserPresent = 1; - # Check whether alias and name have been set correctly - $allFieldsSet = $_->{'alias'} eq 'alias1'; - $allFieldsSet &&= $_->{'firstName'} eq 'first1'; - $allFieldsSet &&= $_->{'middleName'} eq 'middle1'; - $allFieldsSet &&= $_->{'lastName'} eq 'last1'; - } - - # Check whether second user is present - if ($_->{'username'} eq 'tester2') { - # Indicate failure - $secondUserAbsent = 0; - } - - # Check whether remaining fields have been set. Note that we cannot - # check for the alias, name or avatar, since these values may be - # optional. - $allFieldsSet &&= $_->{'uid'} =~ /.*/; - $allFieldsSet &&= $_->{'sessionId'} =~ /.*/; -# $allFieldsSet &&= $_->{'ip'} =~ /.*/; # IP is not set for our test user - $allFieldsSet &&= $_->{'lastActivity'} =~ /.*/; - } - # Check booleans indicating errors - ok($allFieldsSet, 'fields in the member loop have been set correctly'); - ok($firstUserPresent, 'the first user is present in the member loop'); - ok($secondUserAbsent, 'the second user is absent from the member loop'); - - - # Check visitor loop ------------------------------------------------------ - - $allFieldsSet = 1; - - foreach (@{$vars->{'visitor_loop'}}) { -# $allFieldsSet &&= $_->{'ip'} =~ /.*/; # IP is not set for our test user - $allFieldsSet &&= $_->{'sessionId'} =~ /.*/; - $allFieldsSet &&= $_->{'lastActivity'} =~ /.*/; +foreach (@{$vars->{'member_loop'}}) { + # Check whether first user is present + if ($_->{'username'} eq 'tester1') { + # Indicate success + $firstUserPresent = 1; + # Check whether alias and name have been set correctly + $allFieldsSet = $_->{'alias'} eq 'alias1'; + $allFieldsSet &&= $_->{'firstName'} eq 'first1'; + $allFieldsSet &&= $_->{'middleName'} eq 'middle1'; + $allFieldsSet &&= $_->{'lastName'} eq 'last1'; } - # Check booleans indicating errors - ok($allFieldsSet, 'fields in the visitor loop have been set correctly'); + # Check whether second user is present + if ($_->{'username'} eq 'tester2') { + # Indicate failure + $secondUserAbsent = 0; + } - - # Test macro parameters --------------------------------------------------- - - # Call with zero max limits - $json = WebGUI::Macro::UsersOnline::process($session, $template->getId, undef, 0, 0); - $vars = JSON::from_json($json); - ok(!defined $vars->{'hasMembers'}, 'hasMembers undefined when display limit is set to zero'); - is(@{$vars->{'member_loop'}} == 0, 1, 'empty member loop when display limit is set to zero'); - is(@{$vars->{'visitor_loop'}} == 0, 1, 'empty visitor loop when display limit is set to zero'); - - # Call with zero max inactivity time - $json = WebGUI::Macro::UsersOnline::process($session, $template->getId, 0, undef, undef); - $vars = JSON::from_json($json); - ok(!defined $vars->{'hasMembers'}, 'hasMembers undefined when max inactivity time is set to zero'); - is(@{$vars->{'member_loop'}} == 0, 1, 'empty member loop when max inactivity time is set to zero'); - is(@{$vars->{'visitor_loop'}} == 0, 1, 'empty visitor loop when max inactivity time is set to zero'); + # Check whether remaining fields have been set. Note that we cannot + # check for the alias, name or avatar, since these values may be + # optional. + $allFieldsSet &&= $_->{'uid'} =~ /.*/; + $allFieldsSet &&= $_->{'sessionId'} =~ /.*/; +# $allFieldsSet &&= $_->{'ip'} =~ /.*/; # IP is not set for our test user + $allFieldsSet &&= $_->{'lastActivity'} =~ /.*/; } +# Check booleans indicating errors +ok($allFieldsSet, 'fields in the member loop have been set correctly'); +ok($firstUserPresent, 'the first user is present in the member loop'); +ok($secondUserAbsent, 'the second user is absent from the member loop'); + + +# Check visitor loop ------------------------------------------------------ + +$allFieldsSet = 1; + +foreach (@{$vars->{'visitor_loop'}}) { +# $allFieldsSet &&= $_->{'ip'} =~ /.*/; # IP is not set for our test user + $allFieldsSet &&= $_->{'sessionId'} =~ /.*/; + $allFieldsSet &&= $_->{'lastActivity'} =~ /.*/; +} + +# Check booleans indicating errors +ok($allFieldsSet, 'fields in the visitor loop have been set correctly'); + + +# Test macro parameters --------------------------------------------------- + +# Call with zero max limits +$json = WebGUI::Macro::UsersOnline::process($session, $template->getId, undef, 0, 0); +$vars = JSON::from_json($json); +ok(!defined $vars->{'hasMembers'}, 'hasMembers undefined when display limit is set to zero'); +is(@{$vars->{'member_loop'}} == 0, 1, 'empty member loop when display limit is set to zero'); +is(@{$vars->{'visitor_loop'}} == 0, 1, 'empty visitor loop when display limit is set to zero'); + +# Call with zero max inactivity time +$json = WebGUI::Macro::UsersOnline::process($session, $template->getId, 0, undef, undef); +$vars = JSON::from_json($json); +ok(!defined $vars->{'hasMembers'}, 'hasMembers undefined when max inactivity time is set to zero'); +is(@{$vars->{'member_loop'}} == 0, 1, 'empty member loop when max inactivity time is set to zero'); +is(@{$vars->{'visitor_loop'}} == 0, 1, 'empty visitor loop when max inactivity time is set to zero'); sub setupUsers { @@ -192,7 +181,7 @@ sub setupUsers { my $newSession = WebGUI::Session->open(WebGUI::Test::root, WebGUI::Test::file); $newSession->user({user => $_}); } - WebGUI::Test->usersToDelete(@users); + addToCleanup(@users); return @users; } @@ -246,10 +235,6 @@ sub setupJSONtemplate { } EOTMPL my $template = WebGUI::Asset->getImportNode($session)->addChild({className=>'WebGUI::Asset::Template', namespace => 'Macro/UsersOnline', template=>$templateBody}); + addToCleanup($template); return $template; } - - -END { ##Clean-up after yourself, always - $template->purge; -} diff --git a/t/Macro/ViewCart.t b/t/Macro/ViewCart.t index 5a2574f3e..063b09421 100644 --- a/t/Macro/ViewCart.t +++ b/t/Macro/ViewCart.t @@ -14,6 +14,7 @@ use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; +use WebGUI::Macro::ViewCart; use HTML::TokeParser; use Data::Dumper; @@ -21,8 +22,6 @@ use Test::More; # increment this value for each test you create my $session = WebGUI::Test->session; - - my @testSets = ( { comment => 'default', @@ -41,17 +40,8 @@ foreach my $testSet (@testSets) { $numTests += 1 + (ref $testSet->{output} eq 'CODE'); } -$numTests += 1; #For the use_ok - plan tests => $numTests; -my $macro = 'WebGUI::Macro::ViewCart'; -my $loaded = use_ok($macro); - -SKIP: { - -skip "Unable to load $macro", $numTests-1 unless $loaded; - foreach my $testSet (@testSets) { my $output = WebGUI::Macro::ViewCart::process( $session, $testSet->{label}); if (ref $testSet->{output} eq 'CODE') { @@ -64,9 +54,6 @@ foreach my $testSet (@testSets) { } } -} - - sub simpleHTMLParser { my ($text) = @_; my $p = HTML::TokeParser->new(\$text); @@ -86,6 +73,3 @@ sub simpleTextParser { return ($url, $label); } - -END { -} diff --git a/t/Macro/r_printable.t b/t/Macro/r_printable.t index 2578c88eb..b0aa4e518 100644 --- a/t/Macro/r_printable.t +++ b/t/Macro/r_printable.t @@ -25,7 +25,7 @@ my $session = WebGUI::Test->session; my $homeAsset = WebGUI::Asset->getDefault($session); $session->asset($homeAsset); -my ($versionTag, $template) = setupTest($session, $homeAsset); +my $template = setupTest($session, $homeAsset); my $i18n = WebGUI::International->new($session, 'Macro_r_printable'); @@ -125,8 +125,9 @@ sub setupTest { }; my $asset = $defaultNode->addChild($properties, $properties->{id}); $versionTag->commit; + addToCleanup($versionTag); - return $versionTag, $asset; + return $asset; } sub simpleHTMLParser { @@ -148,9 +149,3 @@ sub simpleTextParser { return ($url, $label); } - -END { ##Clean-up after yourself, always - if (defined $versionTag and ref $versionTag eq 'WebGUI::VersionTag') { - $versionTag->rollback; - } -}