From 30657d61f7a2a3caf5a55cdc35d5a7d43806563c Mon Sep 17 00:00:00 2001 From: Graham Knop Date: Sun, 13 Jun 2010 06:19:41 -0500 Subject: [PATCH] lots of test fixes --- t/AdSpace.t | 4 ++-- t/AdSpace/Ad.t | 4 ++-- t/Asset/Wobject/DataForm/viewList.t | 2 +- t/Asset/Wobject/GalleryAlbum/ajax.t | 9 +++------ t/Content/SiteIndex.t | 2 +- t/Exception/app.t | 5 +++-- t/Group.t | 8 ++++---- t/Macro/Env.t | 2 +- t/Macro/L_loginBox.t | 11 ++++------- t/Operation/User/service.t | 6 +++--- t/Session/CheckClient.t | 13 +++---------- t/Session/Env.t | 20 ++++---------------- t/Session/ErrorHandler.t | 18 +++++++++--------- t/Session/Form.t | 8 ++++---- t/Session/Scratch.t | 2 +- t/Session/Var.t | 11 ++++------- t/Shop/TaxDriver/Generic.t | 2 +- t/Storage.t | 2 +- t/User.t | 10 ++++------ t/VersionTag.t | 2 +- t/lib/WebGUI/Test.pm | 21 +++++++++++++++++++-- 21 files changed, 75 insertions(+), 87 deletions(-) diff --git a/t/AdSpace.t b/t/AdSpace.t index d92c109d2..0b19a51af 100644 --- a/t/AdSpace.t +++ b/t/AdSpace.t @@ -38,8 +38,8 @@ my $session = WebGUI::Test->session; my ($adSpace, $alfred, $alfred2, $bruce, $catWoman, $villianClone, $defaultAdSpace ); my ($jokerAd, $penguinAd, $twoFaceAd); - local $ENV{REMOTE_ADDR} = '10.0.0.1'; - local $ENV{HTTP_USER_AGENT} = 'Mozilla/5.0'; + $session->request->env->{REMOTE_ADDR} = '10.0.0.1'; + $session->request->env->{HTTP_USER_AGENT} = 'Mozilla/5.0'; $adSpace = WebGUI::AdSpace->create($session, {name=>"Alfred"}); diff --git a/t/AdSpace/Ad.t b/t/AdSpace/Ad.t index c11daa9ac..a910b0733 100644 --- a/t/AdSpace/Ad.t +++ b/t/AdSpace/Ad.t @@ -50,8 +50,8 @@ my $imageStorage = WebGUI::Storage->create($session); WebGUI::Test->addToCleanup($imageStorage); $imageStorage->addFileFromScalar('foo.bmp', 'This is not really an image'); - local $ENV{REMOTE_ADDR} = '10.0.0.1'; - local $ENV{HTTP_USER_AGENT} = 'Mozilla/5.0'; + $session->request->env->{REMOTE_ADDR} = '10.0.0.1'; + $session->request->env->{HTTP_USER_AGENT} = 'Mozilla/5.0'; $adSpace = WebGUI::AdSpace->create($session, {name=>"Tim Robbins"}); $ad=WebGUI::AdSpace::Ad->create($session, $adSpace->getId, {"type" => "text"}); diff --git a/t/Asset/Wobject/DataForm/viewList.t b/t/Asset/Wobject/DataForm/viewList.t index 77cd73ba2..a1233de64 100644 --- a/t/Asset/Wobject/DataForm/viewList.t +++ b/t/Asset/Wobject/DataForm/viewList.t @@ -145,7 +145,7 @@ while ( $entryIdx >= 0 ) { 'record.entryId' => $entries[$entryIdx]->getId, 'record.userId' => $session->user->userId, 'record.username' => $session->user->username, - 'record.ipAddress' => undef, + 'record.ipAddress' => $session->request->address, 'record.delete.icon' => ignore(), 'record.delete.url' => ignore(), 'record.edit.icon' => ignore(), diff --git a/t/Asset/Wobject/GalleryAlbum/ajax.t b/t/Asset/Wobject/GalleryAlbum/ajax.t index cb86a2814..970bc4d74 100644 --- a/t/Asset/Wobject/GalleryAlbum/ajax.t +++ b/t/Asset/Wobject/GalleryAlbum/ajax.t @@ -18,6 +18,7 @@ use JSON; use WebGUI::Test; use WebGUI::Session; use Test::More; +use WebGUI::Asset::Wobject::GalleryAlbum; #---------------------------------------------------------------------------- # Init @@ -87,11 +88,7 @@ my $result; #---------------------------------------------------------------------------- # Tests -plan tests => 19; - -#---------------------------------------------------------------------------- -# Test module compiles okay -use_ok("WebGUI::Asset::Wobject::GalleryAlbum"); +plan tests => 18; #---------------------------------------------------------------------------- # Test calling without arguments @@ -251,7 +248,7 @@ sub callAjaxService { my $args = shift; # Setup the mock request object - $session->request->method('POST'); + $session->request->env->{'REQUEST_METHOD'} = 'POST'; $session->request->setup_body({ args => encode_json($args) }); # Call ajax service function and decode reply diff --git a/t/Content/SiteIndex.t b/t/Content/SiteIndex.t index e8e25d430..80e6949d7 100644 --- a/t/Content/SiteIndex.t +++ b/t/Content/SiteIndex.t @@ -28,7 +28,7 @@ my $session = WebGUI::Test->session; my $output = WebGUI::Content::SiteIndex::handler($session); is $output, undef, 'no content returned unless sitemap.xml is requested'; -$session->request->uri('/sitemap.xml'); +$session->request->env->{PATH_INFO} = '/sitemap.xml'; $output = WebGUI::Content::SiteIndex::handler($session); my $xmlData = XMLin($output, KeepRoot => 1, diff --git a/t/Exception/app.t b/t/Exception/app.t index fa2f77a91..f40f1d715 100644 --- a/t/Exception/app.t +++ b/t/Exception/app.t @@ -1,15 +1,16 @@ # Test what happens when the WebGUI PSGI app throws exceptions use strict; use FindBin; -use lib "$FindBin::Bin/../../lib"; +use lib "$FindBin::Bin/../lib"; use WebGUI; +use WebGUI::Test; use Plack::Test; use Plack::Builder; use HTTP::Request::Common; use Test::More tests => 9; use HTTP::Exception; -my $wg = WebGUI->new; +my $wg = WebGUI->new(site => WebGUI::Test->file); my $regular_app = builder { enable '+WebGUI::Middleware::Session', config => $wg->config; diff --git a/t/Group.t b/t/Group.t index 2a5cf35b7..83f45990b 100644 --- a/t/Group.t +++ b/t/Group.t @@ -580,12 +580,13 @@ cmp_bag( my @tcps = (); foreach my $idx (0..$#ipTests) { - ##Set the ip to be used by the session for this user my $ip = $ipTests[$idx]->{ip}; - $ENV{REMOTE_ADDR} = $ip; ##Create a new session - $sessionBank[$idx] = WebGUI::Session->open(WebGUI::Test->file); + $sessionBank[$idx] = WebGUI::Test->newSession; + + ##Set the ip to be used by the session for this user + $sessionBank[$idx]->request->env->{REMOTE_ADDR} = $ip; ##Create a new user and make this session's default user that user $tcps[$idx] = WebGUI::User->new($sessionBank[$idx], "new"); @@ -598,7 +599,6 @@ foreach my $idx (0..$#ipTests) { $ipTests[$idx]->{user} = $tcps[$idx]; } WebGUI::Test->addToCleanup(@tcps); -WebGUI::Test->addToCleanup(@sessionBank); my $gI = WebGUI::Group->new($session, "new"); WebGUI::Test->addToCleanup($gI); diff --git a/t/Macro/Env.t b/t/Macro/Env.t index d84b51fb1..237fed212 100644 --- a/t/Macro/Env.t +++ b/t/Macro/Env.t @@ -25,7 +25,7 @@ my $session = WebGUI::Test->session; ##can be retrieved via the macro. There are also tests for null, undef, ##and non-existant keys. -my %env = %{ $session->env->{_env} }; +my %env = %{ $session->request->env }; my @keys = keys %env; my $numTests = 3 + scalar keys %env; diff --git a/t/Macro/L_loginBox.t b/t/Macro/L_loginBox.t index b66e0a198..376705cbc 100644 --- a/t/Macro/L_loginBox.t +++ b/t/Macro/L_loginBox.t @@ -29,12 +29,9 @@ $session->user({userId=>1}); ##Replace the original ENV hash with one that will return a ##known user agent. Since it usually contains a reference to %ENV, ##you can't just modify that hash since it's protected -my $origEnv = $session->{_env}; -my %newEnvHash = ( - 'HTTP_USER_AGENT' => 'mozilla', - 'QUERY_STRING' => 'func=search', -); -$session->{_env}->{_env} = \%newEnvHash; +my $env = $session->request->env; +$env->{'HTTP_USER_AGENT'} = 'mozilla'; +$env->{'QUERY_STRING'} = 'func=search'; my $i18n = WebGUI::International->new($session,'Macro_L_loginBox'); @@ -122,7 +119,7 @@ like($vars{'username.form'}, qr/size="16"/, 'boxSize set in username.form'); like($vars{'password.form'}, qr/size="16"/, 'boxSize set in password.form'); ##Change browser to be MSIE like and watch boxSize change -$newEnvHash{'HTTP_USER_AGENT'} = "msie"; +$env->{'HTTP_USER_AGENT'} = 'msie'; $output = WebGUI::Macro::L_loginBox::process($session,24,'Log In',$template->getId); %vars = simpleTextParser($output); diff --git a/t/Operation/User/service.t b/t/Operation/User/service.t index 632e72931..85d6c6460 100644 --- a/t/Operation/User/service.t +++ b/t/Operation/User/service.t @@ -56,7 +56,7 @@ cmp_deeply( ); # - serviceSubnets -$ENV{REMOTE_ADDR} = '2.2.2.2'; +$session->request->env->{REMOTE_ADDR} = '2.2.2.2'; $session->config->set('serviceSubnets',['1.1.1.1/32']); $session->user({ userId => 3 }); $session->request->setup_body({ @@ -196,7 +196,7 @@ cmp_deeply( ); # - serviceSubnets -$ENV{REMOTE_ADDR} = '2.2.2.2'; +$session->request->env->{REMOTE_ADDR} = '2.2.2.2'; $session->config->set('serviceSubnets',['1.1.1.1/32']); $session->user({ userId => 3 }); $session->request->setup_body({ @@ -336,7 +336,7 @@ cmp_deeply( ); # - serviceSubnets -$ENV{REMOTE_ADDR} = '2.2.2.2'; +$session->request->env->{REMOTE_ADDR} = '2.2.2.2'; $session->config->set('serviceSubnets',['1.1.1.1/32']); $session->user({ userId => 3 }); $session->request->setup_body({ diff --git a/t/Session/CheckClient.t b/t/Session/CheckClient.t index bd7d71176..1ea0aaab6 100644 --- a/t/Session/CheckClient.t +++ b/t/Session/CheckClient.t @@ -184,17 +184,10 @@ sub testCount { plan tests => testCount() ; -my $output; foreach my $testSet (@testArray) { - $output = FAKE_ENV->new( $testSet->{agent}, - $testSet->{address} || '69.42.78.32') - ->requestNotViewed(); + $session->request->env->{HTTP_USER_AGENT} = $testSet->{agent}; + $session->request->env->{REMOTE_ADDR} = $testSet->{address} || '69.42.78.32'; + my $output = $session->env->requestNotViewed; is($output, $testSet->{output}, $testSet->{comment}); } -{ # this is a local fake of the session, used for testing only -package FAKE_ENV; -use base 'WebGUI::Session::Env'; -sub new { shift; return bless { _env => { HTTP_USER_AGENT => $_[0], REMOTE_ADDR => $_[1] } }, __PACKAGE__; } -} - diff --git a/t/Session/Env.t b/t/Session/Env.t index 7c1d71133..45ea04ce2 100644 --- a/t/Session/Env.t +++ b/t/Session/Env.t @@ -15,26 +15,14 @@ use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; -use Test::More tests => 3; # increment this value for each test you create -use Test::MockObject::Extends; +use Test::More tests => 2; # increment this value for each test you create my $session = WebGUI::Test->session; -cmp_ok($session->env->get("PATH"), 'ne', "", "get() one valid entry"); - -#Replace the ENV hash so that we can test getIp. +cmp_ok($session->env->get("REMOTE_ADDR"), 'ne', "", "get() one valid entry"); my $env = $session->env; -$env = Test::MockObject::Extends->new($env); +$session->request->env->{REMOTE_ADDR} = '192.168.0.2'; +is ($env->getIp, '192.168.0.2', 'getIp'); -my %mockEnv = ( - REMOTE_ADDR => '192.168.0.2', -); - -$env->mock('get', sub { return $mockEnv{$_[1]}}); - -is ($env->getIp(), $mockEnv{'REMOTE_ADDR'}, 'getIp'); - -$mockEnv{HTTP_X_FORWARDED_FOR} = '10.0.2.5', -is ($env->getIp(), $mockEnv{'HTTP_X_FORWARDED_FOR'}, 'getIp with HTTP forwarding'); diff --git a/t/Session/ErrorHandler.t b/t/Session/ErrorHandler.t index 02a3b77d1..aa98f308c 100644 --- a/t/Session/ErrorHandler.t +++ b/t/Session/ErrorHandler.t @@ -25,10 +25,10 @@ plan tests => $numTests; my $session = WebGUI::Test->session; ##Setup for security method test -my %newEnv = ( REMOTE_ADDR => '192.168.0.6' ); -$session->env->{_env} = \%newEnv; +my $env = $session->request->env; +$env->{REMOTE_ADDR} = '192.168.0.6'; -my ($eh) = $session->quick('errorHandler'); +my $eh = $session->errorHandler; #################################################### # @@ -165,13 +165,13 @@ delete $eh->{_canShowDebug}; ok($eh->canShowDebug, 'canShowDebug: returns 1 if debugIp is empty string'); $session->setting->set('debugIp', '10.0.0.5/32, 192.168.0.4/30'); -$newEnv{REMOTE_ADDR} = '172.17.0.5'; +$env->{REMOTE_ADDR} ='172.17.0.5'; delete $eh->{_canShowDebug}; ok(! $eh->canShowDebug, 'canShowDebug: returns 0 if debugIp is set and IP address is out of filter'); -$newEnv{REMOTE_ADDR} = '10.0.0.5'; +$env->{REMOTE_ADDR} = '10.0.0.5'; delete $eh->{_canShowDebug}; ok($eh->canShowDebug, 'canShowDebug: returns 1 if debugIp is set and IP address matches filter'); -$newEnv{REMOTE_ADDR} = '192.168.0.5'; +$env->{REMOTE_ADDR} = '192.168.0.5'; delete $eh->{_canShowDebug}; ok($eh->canShowDebug, 'canShowDebug: returns 1 if debugIp is set and IP address matches filter'); @@ -189,11 +189,11 @@ $session->setting->set('debugIp', ''); is($eh->canShowPerformanceIndicators, 1, 'canShowPerformanceIndicators: returns 1 if debugIp is blank'); $session->setting->set('debugIp', '10.0.0.5/32, 192.168.0.4/30'); -$newEnv{REMOTE_ADDR} = '172.17.0.5'; +$env->{REMOTE_ADDR} = '172.17.0.5'; is($eh->canShowPerformanceIndicators, 0, 'canShowPerformanceIndicators: returns 0 if debugIp is set and IP address does not match'); -$newEnv{REMOTE_ADDR} = '10.0.0.5'; +$env->{REMOTE_ADDR} = '10.0.0.5'; is($eh->canShowPerformanceIndicators, 1, 'canShowPerformanceIndicators: returns 0 if debugIp is set and IP address matches exactly'); -$newEnv{REMOTE_ADDR} = '192.168.0.5'; +$env->{REMOTE_ADDR} = '192.168.0.5'; is($eh->canShowPerformanceIndicators, 1, 'canShowPerformanceIndicators: returns 0 if debugIp is set and IP address matches subnet'); #################################################### diff --git a/t/Session/Form.t b/t/Session/Form.t index c094b06ad..860522ebf 100644 --- a/t/Session/Form.t +++ b/t/Session/Form.t @@ -22,16 +22,16 @@ plan tests => 4; my $session = WebGUI::Test->session; my $token = $session->scratch->get('webguiCsrfToken'); -$session->request->method('POST'); +$session->request->env->{'REQUEST_METHOD'} = 'POST'; $session->request->setup_param({ webguiCsrfToken => $token, }); ok($session->form->validToken, 'validToken: right method and form value'); -$session->request->method('GET'); +$session->request->env->{'REQUEST_METHOD'} = 'GET'; ok(! $session->form->validToken, '... wrong method, right form value'); -$session->request->method('POST'); +$session->request->env->{'REQUEST_METHOD'} = 'POST'; $session->request->setup_param({ webguiCsrfToken => 'bad token', }); ok(! $session->form->validToken, 'validToken: right method and wrong form value'); -$session->request->method('GET'); +$session->request->env->{'REQUEST_METHOD'} = 'GET'; ok(! $session->form->validToken, 'validToken: wrong method and form value'); diff --git a/t/Session/Scratch.t b/t/Session/Scratch.t index 173719f7c..ab366f74c 100644 --- a/t/Session/Scratch.t +++ b/t/Session/Scratch.t @@ -54,7 +54,7 @@ for (my $count = 1; $count <= $maxCount; $count++){ } ##Creating a new session with the previous session's Id should clone the scratch data -my $newSession = WebGUI::Session->open(WebGUI::Test->file, undef, undef, $session->getId); +my $newSession = WebGUI::Session->open(WebGUI::Test->file, undef, $session->getId); is($newSession->getId, $session->getId, "Successful session duplication"); diff --git a/t/Session/Var.t b/t/Session/Var.t index 0798af97f..19a790176 100644 --- a/t/Session/Var.t +++ b/t/Session/Var.t @@ -37,9 +37,8 @@ my $id = $session->var->getId; my ($count) = $session->db->quickArray("select count(*) from userSession where sessionId=?",[$id]); is($count, 1, "created an user session entry in the database"); -my %newEnvHash = ( REMOTE_ADDR => '192.168.0.34'); -my $origEnv = $session->env->{_env}; -$session->env->{_env} = \%newEnvHash; +my $env = $session->request->env; +$env->{REMOTE_ADDR} = '192.168.0.34'; my $var = WebGUI::Session::Var->new($session); my $varTime = time(); @@ -66,7 +65,7 @@ isa_ok($var->session, 'WebGUI::Session', 'session method returns a Session objec is($var->session->getId, $session->getId, 'session method returns our Session object'); sleep(2); -$newEnvHash{REMOTE_ADDR} = '10.0.5.5'; +$env->{REMOTE_ADDR} = '10.0.5.5'; #Grab a more recent version of our user session object $varTime = time(); @@ -157,7 +156,7 @@ $varExpiring->{_var}{expires} = $varExpiring->get('lastPageView')-1; sleep 1; -$newEnvHash{REMOTE_ADDR} = '127.0.0.1'; +$env->{REMOTE_ADDR} = '127.0.0.1'; ##Test a valid fetch my $varTest = WebGUI::Session::Var->new($session, $var4->getId, 1); @@ -210,8 +209,6 @@ is($varTest->get('userId'), 1, 'calling start with null userId returns default u END { - $session->env->{_env} = $origEnv; - foreach my $varObj ($var, $var2, $var3, $var4, $varExpiring, $varTest) { if (defined $varObj and ref $varObj eq 'WebGUI::Session::Var') { $varObj->end(); diff --git a/t/Shop/TaxDriver/Generic.t b/t/Shop/TaxDriver/Generic.t index d0f3ee923..5c168f00c 100644 --- a/t/Shop/TaxDriver/Generic.t +++ b/t/Shop/TaxDriver/Generic.t @@ -68,7 +68,7 @@ is($session->getId, $taxer->session->getId, 'session method returns OUR session my $taxIterator = $taxer->getItems; -isa_ok($taxIterator, 'WebGUI::SQL::ResultSet'); +isa_ok($taxIterator, 'WebGUI::SQL::st'); is($taxIterator->rows, 0, 'WebGUI ships with no predefined tax data'); diff --git a/t/Storage.t b/t/Storage.t index cfdf26d07..7dfc4260c 100644 --- a/t/Storage.t +++ b/t/Storage.t @@ -608,7 +608,7 @@ is ($cdnStorage->getUrl, $locUrl, 'CDN: getUrl: URL for directory'); my $fileUrl = $locUrl . '/' . 'cdn-file'; is ($cdnStorage->getUrl('cdn-file'), $fileUrl, 'CDN: getUrl: URL for file'); # SSL -my %mockEnv = %ENV; +my %mockEnv = %{ $session->request->env }; my $env = Test::MockObject::Extends->new($session->env); $env->mock('get', sub { return $mockEnv{$_[1]} } ); $mockEnv{HTTPS} = 'on'; diff --git a/t/User.t b/t/User.t index 57386ce77..46569f943 100644 --- a/t/User.t +++ b/t/User.t @@ -478,9 +478,8 @@ ok($dude->canUseAdminMode, 'canUseAdminMode: with no subnets set, user canUseAdm $dude->deleteFromGroups([12]); ##Spoof the IP address to test subnet level access control to adminMode -my $origEnvHash = $session->env->{_env}; -my %newEnv = ( REMOTE_ADDR => '194.168.0.2' ); -$session->env->{_env} = \%newEnv; +my $env = $session->request->env; +$env->{REMOTE_ADDR} = '194.168.0.2'; $session->config->set('adminModeSubnets', ['194.168.0.0/24']); ok(!$dude->isInGroup(12), 'user is not in group 12'); @@ -490,7 +489,7 @@ $dude->addToGroups([12]); ok($dude->canUseAdminMode, 'canUseAdminMode: with no subnets set, user canUseAdminMode'); -$newEnv{REMOTE_ADDR} = '10.0.0.2'; +$env->{REMOTE_ADDR} = '10.0.0.2'; ok(!$dude->canUseAdminMode, 'canUseAdminMode: even with the right group permission, user must be in subnet if subnet is set'); @@ -498,11 +497,10 @@ ok(!$dude->canUseAdminMode, 'canUseAdminMode: even with the right group permissi $session->config->set('adminModeSubnets', ['10.0.0.0/24', '192.168.0.0/24', ]); ok($dude->canUseAdminMode, 'canUseAdminMode: multiple IP settings, first IP range'); -$newEnv{REMOTE_ADDR} = '192.168.0.127'; +$env->{REMOTE_ADDR} = '192.168.0.127'; ok($dude->canUseAdminMode, 'canUseAdminMode: multiple IP settings, second IP range'); ##restore the original session variables -$session->env->{_env} = $origEnvHash; $session->config->delete('adminModeSubnets'); ################################################################ diff --git a/t/VersionTag.t b/t/VersionTag.t index 8eadf4b84..cd625676f 100644 --- a/t/VersionTag.t +++ b/t/VersionTag.t @@ -208,7 +208,7 @@ $tag->clearWorking(); my $gotTag = ok(defined ($userTag = getWorking(1)), 'versionTagMode singlePerUser: reclaim version tag after clearWorking'); SKIP: { - skip 1, 'userTag not set' unless $gotTag; + skip 'userTag not set', 1 unless $gotTag; is ($userTag->getId(), $userTagId, q{versionTagMode singlePerUser: reclaimed version tag has same id}); $userTag->clearWorking(); } diff --git a/t/lib/WebGUI/Test.pm b/t/lib/WebGUI/Test.pm index ccd4666c8..a3a7ed371 100644 --- a/t/lib/WebGUI/Test.pm +++ b/t/lib/WebGUI/Test.pm @@ -154,9 +154,26 @@ sub newSession { shift if eval { $_[0]->isa($CLASS) }; my $noCleanup = shift; - my $request = shift; + my $http_request = shift; require WebGUI::Session; - my $session = WebGUI::Session->open( $CLASS->config, newEnv( $request ) ); + my $session = WebGUI::Session->open( $CLASS->config, newEnv( $http_request ) ); + my $request = Test::MockObject::Extends->new( $session->request ); + $request->mock('setup_body', sub { + my $self = shift; + my $params = shift; + delete $self->env->{$_} for grep { /^plack\./ } keys %{ $self->env }; + my $body_params = $self->body_parameters; + $body_params->clear; + $body_params->add( $_ => $params->{$_} ) for keys %$params; + }); + $request->mock('setup_param', sub { + my $self = shift; + my $params = shift; + delete $self->env->{$_} for grep { /^plack\./ } keys %{ $self->env }; + my $query_params = $self->query_parameters; + $query_params->clear; + $query_params->add( $_ => $params->{$_} ) for keys %$params; + }); if ( ! $noCleanup ) { $CLASS->addToCleanup($session); }