#!/usr/bin/perl # Copyright 2015 Tamil s.a.r.l. # # This file is part of Koha. # # Koha is free software; you can redistribute it and/or modify it under the # terms of the GNU General Public License as published by the Free Software # Foundation; either version 3 of the License, or (at your option) any later # version. # # Koha is distributed in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR # A PARTICULAR PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with Koha; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. use Modern::Perl; use File::Basename; use File::Path; use DateTime; use Test::MockModule; use Test::More tests => 16; use Koha::Schema; BEGIN { use_ok('Koha::Sitemapper'); use_ok('Koha::Sitemapper::Writer'); } sub slurp { my $file = shift; open my $fh, '<', $file or die; local $/ = undef; my $cont = <$fh>; close $fh; return $cont; } use Test::DBIx::Class { schema_class => 'Koha::Schema', connect_info => ['dbi:SQLite:dbname=:memory:','',''], connect_opts => { name_sep => '.', quote_char => '`', }, fixture_class => '::Populate', }, 'Biblio' ; sub fixtures { my ( $data ) = @_; fixtures_ok [ Biblio => [ [ qw/ biblionumber datecreated timestamp / ], @$data, ], ], 'add fixtures'; } # Make the code in the module use our mocked Koha::Schema/Koha::Database my $db = Test::MockModule->new('Koha::Database'); $db->mock( # Schema() gives us the DB connection set up by Test::DBIx::Class _new_schema => sub { return Schema(); } ); my $dir = File::Spec->tmpdir(); my $data = [ [ qw/ 1 2013-11-15 2013-11-15/ ], [ qw/ 2 2015-08-31 2015-08-31/ ], ]; fixtures($data); # Create a sitemap for a catalog containg 2 biblios, with option 'long url' my $sitemapper = Koha::Sitemapper->new( verbose => 0, url => 'http://www.mylibrary.org', dir => $dir, short => 0, ); $sitemapper->run(); my $file = "$dir/sitemapindex.xml"; ok( -e "$dir/sitemapindex.xml", "File sitemapindex.xml created"); my $file_content = slurp($file); my $now = DateTime->now->ymd; my $expected_content = < http://www.mylibrary.org/sitemap0001.xml $now EOS chop $expected_content; is( $file_content, $expected_content, "Its content is valid" ); $file = "$dir/sitemap0001.xml"; ok( -e $file, "File sitemap0001.xml created"); $file_content = slurp($file); $expected_content = < http://www.mylibrary.org/cgi-bin/koha/opac-detail.pl?biblionumber=1 2013-11-15 http://www.mylibrary.org/cgi-bin/koha/opac-detail.pl?biblionumber=2 2015-08-31 EOS is( $file_content, $expected_content, "Its content is valid" ); # Create a sitemap for a catalog containg 2 biblios, with option 'short url'. # Test that 2 files are created. $sitemapper = Koha::Sitemapper->new( verbose => 0, url => 'http://www.mylibrary.org', dir => $dir, short => 1, ); $sitemapper->run(); $file = "$dir/sitemap0001.xml"; ok( -e $file, "File sitemap0001.xml with short URLs created"); $file_content = slurp($file); $expected_content = < http://www.mylibrary.org/bib/1 2013-11-15 http://www.mylibrary.org/bib/2 2015-08-31 EOS is( $file_content, $expected_content, "Its content is valid" ); # Create a sitemap for a catalog containing 75000 biblios, with option 'short # url'. Test that 3 files are created: index file + 2 urls file with # respectively 50000 et 25000 urls. $data = []; push @$data, [ $_, '2015-08-31', '2015-08-31'] for 3..75000; fixtures($data); $sitemapper = Koha::Sitemapper->new( verbose => 0, url => 'http://www.mylibrary.org', dir => $dir, short => 1, ); $sitemapper->run(); $file = "$dir/sitemapindex.xml"; ok( -e "$dir/sitemapindex.xml", "File sitemapindex.xml for 75000 bibs created"); $file_content = slurp($file); $expected_content = < http://www.mylibrary.org/sitemap0001.xml $now http://www.mylibrary.org/sitemap0002.xml $now EOS chop $expected_content; is( $file_content, $expected_content, "Its content is valid" ); $file = "$dir/sitemap0001.xml"; ok( -e $file, "File sitemap0001.xml created"); open my $fh, "<", $file; my $count = 0; while (<$fh>) { $count++ if //; } is( $count, 50000, "It contains 50000 URLs"); $file = "$dir/sitemap0002.xml"; ok( -e $file, "File sitemap0002.xml created"); open $fh, "<", $file; $count = 0; while (<$fh>) { $count++ if //; } is( $count, 25000, "It contains 25000 URLs"); # Cleanup unlink "$dir/$_" for qw / sitemapindex.xml sitemap0001.xml sitemap0002.xml /;