From 57e6200757fbf9b9167e7678718f1f9c43a0d491 Mon Sep 17 00:00:00 2001 From: Marcel de Rooy Date: Wed, 31 May 2023 07:18:17 +0000 Subject: [PATCH] Bug 33870: Polishing Sitemapper.t Create subtest. Remove (useless) mock on DateTime. Remove T::D::C module, add TestBuilder. Replace local slurp function by use File::Slurp. Test plan: Run t/db_dependent/Sitemapper.t Signed-off-by: Marcel de Rooy Signed-off-by: Pedro Amorim Signed-off-by: Jonathan Druart Signed-off-by: Tomas Cohen Arazi --- t/db_dependent/Sitemapper.t | 114 ++++++++++++++++-------------------- 1 file changed, 49 insertions(+), 65 deletions(-) diff --git a/t/db_dependent/Sitemapper.t b/t/db_dependent/Sitemapper.t index ae3dbeba3f..d1b36f1f72 100755 --- a/t/db_dependent/Sitemapper.t +++ b/t/db_dependent/Sitemapper.t @@ -18,59 +18,44 @@ # along with Koha; if not, see . use Modern::Perl; +use Test::More tests => 1; +use Carp qw/croak/; use File::Basename; use File::Path; -use DateTime; -use Koha::DateUtils qw( dt_from_string ); +use File::Slurp qw( read_file ); use Test::MockModule; -use Test::More tests => 16; -use Carp qw/croak carp/; - -BEGIN { - use_ok('Koha::Sitemapper'); - use_ok('Koha::Sitemapper::Writer'); -} +use t::lib::TestBuilder; +use t::lib::Mocks; -my $now_value = dt_from_string(); -my $mocked_datetime = Test::MockModule->new('DateTime'); -$mocked_datetime->mock( 'now', sub { return $now_value->clone; } ); - -sub slurp { - my $file = shift; - open my $fh, '<', $file or croak; - local $/ = undef; - my $cont = <$fh>; - close $fh; - return $cont; -} - -use Test::DBIx::Class; - -sub fixtures { - my ($data) = @_; - fixtures_ok [ - Biblio => [ [qw/ biblionumber datecreated timestamp /], @{$data}, ], - ], 'add fixtures'; - return; -} - -# 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(); } -); +use Koha::Database; +use Koha::DateUtils qw( dt_from_string ); +use Koha::Biblios; +use Koha::Checkouts; +use Koha::Sitemapper; +use Koha::Sitemapper::Writer; + +my $schema = Koha::Database->new->schema; +my $builder = t::lib::TestBuilder->new; +$schema->storage->txn_begin; + +subtest 'Sitemapper' => sub { + plan tests => 12; + +my $now = dt_from_string()->ymd; + +# FIXME Would be nice to remove both deletes again +Koha::Checkouts->delete; +Koha::Biblios->delete; +my $biblio1 = $builder->build_sample_biblio; +$biblio1->set({ datecreated => '2013-11-15', timestamp => '2013-11-15' })->store; +my $id1 = $biblio1->id; +my $biblio2 = $builder->build_sample_biblio; +$biblio2->set({ datecreated => '2015-08-31', timestamp => '2015-08-31' })->store; +my $id2 = $biblio2->id; my $dir = C4::Context::temporary_directory; -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, @@ -82,8 +67,7 @@ $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 $file_content = read_file($file); my $expected_content = <<"EOS"; @@ -99,17 +83,17 @@ is( $file_content, $expected_content, 'Its content is valid' ); $file = "$dir/sitemap0001.xml"; ok( -e $file, 'File sitemap0001.xml created' ); -$file_content = slurp($file); +$file_content = read_file($file); $expected_content = <<"EOS"; - http://www.mylibrary.org/cgi-bin/koha/opac-detail.pl?biblionumber=1 + http://www.mylibrary.org/cgi-bin/koha/opac-detail.pl?biblionumber=$id1 2013-11-15 - http://www.mylibrary.org/cgi-bin/koha/opac-detail.pl?biblionumber=2 + http://www.mylibrary.org/cgi-bin/koha/opac-detail.pl?biblionumber=$id2 2015-08-31 @@ -128,31 +112,30 @@ $sitemapper->run(); $file = "$dir/sitemap0001.xml"; ok( -e $file, 'File sitemap0001.xml with short URLs created' ); -$file_content = slurp($file); +$file_content = read_file($file); $expected_content = <<"EOS"; - http://www.mylibrary.org/bib/1 + http://www.mylibrary.org/bib/$id1 2013-11-15 - http://www.mylibrary.org/bib/2 + http://www.mylibrary.org/bib/$id2 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 = []; -for my $count ( 3 .. 75_000 ) { - push @{$data}, [ $count, '2015-08-31', '2015-08-31' ]; +# No need to create 75000 biblios here. Let's create 10 with $MAX == 6. +# Expecting 3 files: index plus 2 url files with 6 and 4 urls. +$Koha::Sitemapper::Writer::MAX = 6; +for my $count ( 3..10 ) { + my $biblio2 = $builder->build_sample_biblio->set({ datecreated => '2015-08-31', timestamp => '2015-08-31' })->store; } -fixtures($data); + $sitemapper = Koha::Sitemapper->new( verbose => 0, url => 'http://www.mylibrary.org', @@ -162,9 +145,8 @@ $sitemapper = Koha::Sitemapper->new( $sitemapper->run(); $file = "$dir/sitemapindex.xml"; -ok( -e "$dir/sitemapindex.xml", - 'File sitemapindex.xml for 75000 bibs created' ); -$file_content = slurp($file); +ok( -e "$dir/sitemapindex.xml", 'File sitemapindex.xml for 10 bibs created' ); +$file_content = read_file($file); $expected_content = <<"EOS"; @@ -191,7 +173,7 @@ while (<$fh>) { if ( $_ =~ //xsm ) { $count++; } } close $fh; -is( $count, 50_000, 'It contains 50000 URLs' ); +is( $count, 6, 'It contains 6 URLs' ); $file = "$dir/sitemap0002.xml"; ok( -e $file, 'File sitemap0002.xml created' ); @@ -202,9 +184,11 @@ while (<$fh>) { if ( $_ =~ //xsm ) { $count++; } } close $fh; -is( $count, 25_000, 'It contains 25000 URLs' ); +is( $count, 4, 'It contains 4 URLs' ); # Cleanup for my $file (qw/sitemapindex.xml sitemap0001.xml sitemap0002.xml/) { unlink "$dir/$file"; } +}; +$schema->storage->txn_rollback; -- 2.39.5