diff --git a/lib/WebGUI/Asset/Wobject/StoryArchive.pm b/lib/WebGUI/Asset/Wobject/StoryArchive.pm index b35975115..710e520a9 100644 --- a/lib/WebGUI/Asset/Wobject/StoryArchive.pm +++ b/lib/WebGUI/Asset/Wobject/StoryArchive.pm @@ -357,15 +357,27 @@ sub getKeywordFilename { Returns the whole URL for the file containing stories that match this keyword. Used in exportAssetCollateral. +The goal of this method is to create a "safe" URL where all the keyword files can +reside with no clashes. The best place is based on the URL for the StoryArchive. + =head3 $keyword -The keyword to generate a URL for. +Generates a specific URL for $keyword. =cut sub getKeywordStaticURL { my ($self,$keyword) = @_; - return join '/', $self->getUrl, $self->getKeywordFilename($keyword); + my $url = $self->getUrl; + my @parts = split /\//, $url; + my $lastPart = pop @parts; + if (index $lastPart, '.' == -1) { + return join '/', $self->getUrl, $self->getKeywordFilename($keyword); + } + else { + $lastPart =~ s/\.[^.]*$//; + return join '/', @parts, $lastPart, $self->getKeywordFilename($keyword); + } } #------------------------------------------------------------------- diff --git a/t/Asset/Wobject/StoryArchive.t b/t/Asset/Wobject/StoryArchive.t index 86a87123a..0c736e3e3 100644 --- a/t/Asset/Wobject/StoryArchive.t +++ b/t/Asset/Wobject/StoryArchive.t @@ -62,7 +62,7 @@ $canPostMaker->prepare({ fail => [1, $reader ], }); -my $tests = 42 +my $tests = 45 + $canPostMaker->plan ; plan tests => 1 @@ -470,12 +470,12 @@ $templateVars = $archive->viewTemplateVariables(); @anchors = simpleHrefParser($templateVars->{keywordCloud}); @expectedAnchors = (); foreach my $keyword(qw/echo foxtrot roger/) { - push @expectedAnchors, [ $keyword, 'keyword_'.$keyword.'.html' ]; + push @expectedAnchors, [ $keyword, '/home/mystories/keyword_'.$keyword.'.html' ]; } cmp_bag( \@anchors, \@expectedAnchors, - 'keywordCloud template variable has keywords and correct links in export mode', + '... keywordCloud template variable has keywords and correct links in export mode', ); $session->scratch->delete('isExporting'); @@ -526,7 +526,7 @@ cmp_deeply( ################################################################ my $exportStorage = WebGUI::Storage->create($session); -WebGUI::Test->storagesToDelete($exportStorage); +#WebGUI::Test->storagesToDelete($exportStorage); my $basedir = Path::Class::Dir->new($exportStorage->getPath); $exportStorage->addFileFromScalar('index', 'export story archive content'); my $assetDir = $basedir->subdir('mystories'); @@ -539,14 +539,24 @@ my $exportedFiles = $exportStorage->getFiles(); cmp_bag( $exportedFiles, [qw/ - keyword_roger.html mystories.rss mystories - keyword_foxtrot.html mystories.atom - keyword_echo.html + mystories.rss mystories + mystories.atom /], - 'exportAssetCollateral: keyword and feed files exported' + 'exportAssetCollateral: feed files exported' ); -my $roger = $exportStorage->getFileContentsAsScalar('keyword_roger.html'); +cmp_bag( + [ map { $_->relative($assetDir)->stringify } $assetDir->children ], + [qw/ + keyword_echo.html + keyword_roger.html + keyword_foxtrot.html + index.html + /], + 'exportAssetCollateral: keyword files exported into correct dir (below the asset)' +); + +my $roger = $exportStorage->getFileContentsAsScalar('mystories/keyword_roger.html'); my @rogerStories = map { $_->[0] } fetchKeywordAssetList($roger); cmp_bag( \@rogerStories, @@ -558,7 +568,7 @@ cmp_bag( '... contents of roger keyword file' ); -my $foxtrot = $exportStorage->getFileContentsAsScalar('keyword_foxtrot.html'); +my $foxtrot = $exportStorage->getFileContentsAsScalar('mystories/keyword_foxtrot.html'); my @foxtrotStories = map { $_->[0] } fetchKeywordAssetList($foxtrot); cmp_bag( \@foxtrotStories, @@ -570,7 +580,7 @@ cmp_bag( '... contents of foxtrot keyword file' ); -my $echo = $exportStorage->getFileContentsAsScalar('keyword_echo.html'); +my $echo = $exportStorage->getFileContentsAsScalar('mystories/keyword_echo.html'); my @echoStories = map { $_->[0] } fetchKeywordAssetList($echo); cmp_bag( \@echoStories, @@ -582,6 +592,18 @@ cmp_bag( '... contents of echo keyword file' ); +################################################################ +# +# getKeywordStaticURL +# +################################################################ + +is($archive->getKeywordStaticURL('foo'), '/home/mystories/keyword_foo.html', 'getKeywordStaticURL: returns absolute URL to keyword file'); + +$archive->update({ url => '/home/mystories.arch' }); +is($archive->getKeywordStaticURL('bar'), '/home/mystories/keyword_bar.html', '... correct URL with file extension'); + +$archive->update({ url => '/home/mystories' }); } #----------------------------------------------------------------------------