245 lines
10 KiB
Perl
245 lines
10 KiB
Perl
#-------------------------------------------------------------------
|
|
# WebGUI is Copyright 2001-2007 Plain Black Corporation.
|
|
#-------------------------------------------------------------------
|
|
# Please read the legal notices (docs/legal.txt) and the license
|
|
# (docs/license.txt) that came with this distribution before using
|
|
# this software.
|
|
#-------------------------------------------------------------------
|
|
# http://www.plainblack.com info@plainblack.com
|
|
#-------------------------------------------------------------------
|
|
|
|
use FindBin;
|
|
use strict;
|
|
use lib "$FindBin::Bin/../lib";
|
|
|
|
use WebGUI::Test;
|
|
use WebGUI::Session;
|
|
use WebGUI::Asset;
|
|
use WebGUI::Asset::Wobject::Navigation;
|
|
use WebGUI::Asset::Wobject::Folder;
|
|
use WebGUI::AssetVersioning;
|
|
use WebGUI::VersionTag;
|
|
|
|
use Test::More tests => 48; # increment this value for each test you create
|
|
use Test::MockObject;
|
|
|
|
my $session = WebGUI::Test->session;
|
|
|
|
# Test the default constructor
|
|
my $defaultAsset = WebGUI::Asset->getDefault($session);
|
|
is(ref $defaultAsset, 'WebGUI::Asset::Wobject::Layout','default constructor');
|
|
|
|
my $versionTag = WebGUI::VersionTag->getWorking($session);
|
|
$versionTag->set({name=>"Asset tests"});
|
|
|
|
my $properties = {
|
|
# '1234567890123456789012'
|
|
id => 'fixUrlAsset00000000012',
|
|
title => 'fixUrl Asset Test',
|
|
className => 'WebGUI::Asset::Wobject::Folder',
|
|
url => 'fixUrlFolderURL2',
|
|
};
|
|
|
|
my $fixUrlAsset = $defaultAsset->addChild($properties, $properties->{id});
|
|
|
|
# '1234567890123456789012'
|
|
$properties->{id} = 'fixUrlAsset00000000013';
|
|
$properties->{url} = 'fixUrlFolderURL9';
|
|
|
|
my $fixUrlAsset2 = $defaultAsset->addChild($properties, $properties->{id});
|
|
|
|
# '1234567890123456789012'
|
|
$properties->{id} = 'fixUrlAsset00000000014';
|
|
$properties->{url} = 'fixUrlFolderURL00';
|
|
|
|
my $fixUrlAsset3 = $defaultAsset->addChild($properties, $properties->{id});
|
|
|
|
# '1234567890123456789012'
|
|
$properties->{id} = 'fixUrlAsset00000000015';
|
|
$properties->{url} = 'fixUrlFolderURL100';
|
|
|
|
my $fixUrlAsset4 = $defaultAsset->addChild($properties, $properties->{id});
|
|
|
|
delete $properties->{url};
|
|
# '1234567890123456789012'
|
|
$properties->{id} = 'fixUrlAsset00000000016';
|
|
$properties->{menuTitle} = 'fix url folder url autogenerated';
|
|
|
|
my $fixUrlAsset5 = $defaultAsset->addChild($properties, $properties->{id});
|
|
|
|
$versionTag->commit;
|
|
|
|
# Test the new constructor
|
|
my $assetId = "PBnav00000000000000001"; # one of the default nav assets
|
|
|
|
# - explicit class
|
|
my $asset = WebGUI::Asset->new($session, $assetId, 'WebGUI::Asset::Wobject::Navigation');
|
|
is (ref $asset, 'WebGUI::Asset::Wobject::Navigation','new constructor explicit - ref check');
|
|
is ($asset->getId, $assetId, 'new constructor explicit - returns correct asset');
|
|
|
|
# - new by hashref properties
|
|
$asset = undef;
|
|
$asset = WebGUI::Asset->newByPropertyHashRef($session, {
|
|
className=>"WebGUI::Asset::Wobject::Navigation",
|
|
assetId=>$assetId
|
|
});
|
|
is (ref $asset, 'WebGUI::Asset::Wobject::Navigation', 'new constructor newByHashref - ref check');
|
|
is ($asset->getId, $assetId, 'new constructor newByHashref - returns correct asset');
|
|
|
|
# - implicit class
|
|
$asset = undef;
|
|
$asset = WebGUI::Asset::Wobject::Navigation->new($session, $assetId);
|
|
is (ref $asset, 'WebGUI::Asset::Wobject::Navigation', 'new constructor implicit - ref check');
|
|
is ($asset->getId, $assetId, 'new constructor implicit - returns correct asset');
|
|
|
|
# - die gracefully
|
|
my $deadAsset = 1;
|
|
|
|
# -- no asset id
|
|
$deadAsset = WebGUI::Asset->new($session, '', 'WebGUI::Asset::Wobject::Navigation');
|
|
is ($deadAsset, undef,'new constructor with no assetId returns undef');
|
|
|
|
# -- no class
|
|
my $primevalAsset = WebGUI::Asset->new($session, $assetId);
|
|
isa_ok ($primevalAsset, 'WebGUI::Asset');
|
|
|
|
# Test the newByDynamicClass Constructor
|
|
$asset = undef;
|
|
|
|
$asset = WebGUI::Asset->newByDynamicClass($session, $assetId);
|
|
is (ref $asset, 'WebGUI::Asset::Wobject::Navigation', 'newByDynamicClass constructor - ref check');
|
|
is ($asset->getId, $assetId, 'newByDynamicClass constructor - returns correct asset');
|
|
|
|
# - die gracefully
|
|
$deadAsset = 1;
|
|
|
|
# -- invalid asset id
|
|
$deadAsset = WebGUI::Asset->newByDynamicClass($session, 'RoysNonExistantAssetId');
|
|
is ($deadAsset, undef,'newByDynamicClass constructor with invalid assetId returns undef');
|
|
|
|
# -- no assetId
|
|
$deadAsset = 1;
|
|
$deadAsset = WebGUI::Asset->newByDynamicClass($session);
|
|
is ($deadAsset, undef, 'newByDynamicClass constructor with no assetId returns undef');
|
|
|
|
# Root Asset
|
|
my $rootAsset = WebGUI::Asset->getRoot($session);
|
|
isa_ok($rootAsset, 'WebGUI::Asset');
|
|
is($rootAsset->getId, 'PBasset000000000000001', 'Root Asset ID check');
|
|
|
|
# getMedia Constructor
|
|
|
|
my $mediaFolder = WebGUI::Asset->getMedia($session);
|
|
isa_ok($mediaFolder, 'WebGUI::Asset::Wobject::Folder');
|
|
is($mediaFolder->getId, 'PBasset000000000000003', 'Media Folder Asset ID check');
|
|
|
|
# getImportNode Constructor
|
|
|
|
my $importNode = WebGUI::Asset->getImportNode($session);
|
|
isa_ok($importNode, 'WebGUI::Asset::Wobject::Folder');
|
|
is($importNode->getId, 'PBasset000000000000002', 'Import Node Asset ID check');
|
|
is($importNode->getParent->getId, $rootAsset->getId, 'Import Nodes parent is Root Asset');
|
|
|
|
# tempspace Constructor
|
|
|
|
my $tempNode = WebGUI::Asset->getTempspace($session);
|
|
isa_ok($tempNode, 'WebGUI::Asset::Wobject::Folder');
|
|
is($tempNode->getId, 'tempspace0000000000000', 'Tempspace Asset ID check');
|
|
is($tempNode->getParent->getId, $rootAsset->getId, 'Tempspace parent is Root Asset');
|
|
|
|
################################################################
|
|
#
|
|
# urlExists
|
|
#
|
|
################################################################
|
|
|
|
##We need an asset with a URL for this one.
|
|
|
|
my $importUrl = $importNode->get('url');
|
|
my $importId = $importNode->getId;
|
|
|
|
ok( WebGUI::Asset->urlExists($session, $importUrl), 'url for import node exists');
|
|
ok( WebGUI::Asset->urlExists($session, uc($importUrl)), 'url for import node exists, case insensitive');
|
|
ok( !WebGUI::Asset->urlExists($session, '/foo/bar/baz'), 'made up url does not exist');
|
|
|
|
ok( !WebGUI::Asset->urlExists($session, $importUrl, {assetId => $importId}), 'url for import node only exists at specific id');
|
|
ok( !WebGUI::Asset->urlExists($session, '/foo/bar/baz', {assetId => $importId}), 'imaginary url does not exist at specific id');
|
|
ok( WebGUI::Asset->urlExists($session, $importUrl, {assetId => 'notAnWebGUIId'}), 'imaginary url does not exist at wrong id');
|
|
|
|
################################################################
|
|
#
|
|
# addEditLabel
|
|
#
|
|
################################################################
|
|
|
|
my $i18n = WebGUI::International->new($session, 'Asset_Wobject');
|
|
is($importNode->addEditLabel, $i18n->get('edit').' '.$importNode->getName, 'addEditLabel, default mode is edit mode');
|
|
|
|
my $origRequest = $session->{_request};
|
|
my $newRequest = Test::MockObject->new();
|
|
my $func;
|
|
$newRequest->set_bound('body', \$func);
|
|
$session->{_request} = $newRequest;
|
|
$func = 'add';
|
|
is($importNode->addEditLabel, $i18n->get('add').' '.$importNode->getName, 'addEditLabel, use add mode');
|
|
$session->{_request} = $origRequest;
|
|
|
|
################################################################
|
|
#
|
|
# fixUrl
|
|
#
|
|
################################################################
|
|
|
|
my $origUrlExtension = $session->setting->get('urlExtension');
|
|
$session->setting->set('urlExtension', undef);
|
|
|
|
is($importNode->fixUrl('1234'.'-'x235 . 'abcdefghij'), '1234'.'-'x235 . 'abcdefghij', 'fixUrl leaves long URLs under 250 characters alone');
|
|
is($importNode->fixUrl('1234'.'-'x250 . 'abcdefghij'), '1234'.'-'x216, 'fixUrl truncates long URLs over 250 characters to 220 characters');
|
|
|
|
my $origExtras = $session->config->get('extrasURL');
|
|
my $origUploads = $session->config->get('uploadsURL');
|
|
my $origPassthru = $session->config->get('passthruUrls');
|
|
|
|
$session->config->set('extrasURL', '/extras');
|
|
$session->config->set('uploadsURL', '/uploads');
|
|
|
|
is($importNode->fixUrl('/extras'), '_extras', 'underscore prepended to URLs that match the extrasURL');
|
|
is($importNode->fixUrl('/uploads'), '_uploads', 'underscore prepended to URLs that match the uploadsURL');
|
|
|
|
#Now that we have verified that extrasURL and uploadsURL both work, just test one.
|
|
$session->config->set('extrasURL', '/extras1/');
|
|
is($importNode->fixUrl('/extras1'), '_extras1', 'trailing underscore in extrasURL does not defeat the check');
|
|
|
|
$session->config->set('extrasURL', 'http://mysite.com/extras2');
|
|
is($importNode->fixUrl('/extras2'), '_extras2', 'underscore prepended to URLs that match the extrasURL, even with http://');
|
|
|
|
##Now, check extension removal
|
|
|
|
is($importNode->fixUrl('one.html/two.html'), 'one/two.html', 'extensions are not allowed higher up in the path');
|
|
is($importNode->fixUrl('one.html/two.html/three.html'), 'one/two/three.html', 'extensions are not allowed anywhere in the path');
|
|
is($importNode->fixUrl('one.one.html/two.html/three.html'), 'one/two/three.html', 'multiple dot extensions are removed in any path element');
|
|
|
|
##Now, check duplicate URLs
|
|
|
|
is($importNode->fixUrl('/rootyRootRoot'), 'rootyrootroot', 'URLs are lowercased');
|
|
is($importNode->fixUrl('/root'), 'root2', 'If a node exists, appends a "2" to it');
|
|
my $importNodeURL = $importNode->getUrl;
|
|
$importNodeURL =~ s{ ^ / }{}x;
|
|
is($importNode->fixUrl($importNodeURL), $importNodeURL, q{fixing an asset's own URL returns it unchanged});
|
|
|
|
is($importNode->fixUrl('fixUrlFolderURL2'), 'fixurlfolderurl3', 'if a URL exists, fix it by incrementing any ending digits 2 -> 3');
|
|
is($importNode->fixUrl('fixUrlFolderURL9'), 'fixurlfolderurl10', 'increments past single digits 9 -> 10');
|
|
is($importNode->fixUrl('fixUrlFolderURL00'), 'fixurlfolderurl01', 'initial zeroes preserved 00 -> 01');
|
|
is($importNode->fixUrl('fixUrlFolderURL100'), 'fixurlfolderurl101', '100->101');
|
|
|
|
is($fixUrlAsset5->fixUrl(), 'home/fix-url-folder-url-autogenerated', 'fixUrl will autogenerate a url if not provided one');
|
|
|
|
$session->setting->set('urlExtension', 'html');
|
|
|
|
END: {
|
|
|
|
$session->config->set('extrasURL', $origExtras);
|
|
$session->config->set('uploadsURL', $origUploads);
|
|
$session->setting->set('urlExtension', $origUrlExtension);
|
|
$versionTag->rollback;
|
|
}
|