From b6ba99e327bdb1867893d1ed2a98d705f34cbe8a Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Thu, 16 May 2019 12:56:07 -0500 Subject: [PATCH] Bug 22930: Make TestBuilder->build_object explodes if parameters are wrong This patch implements bug 15339 for build_object. We want it to warn if the call is wrong. Test plan: Make sure the tests are still returning green Signed-off-by: Marcel de Rooy Signed-off-by: Nick Clemens (cherry picked from commit 52325a771a02b603e807c29d586fe44fabebb792) Signed-off-by: Martin Renvoize --- t/db_dependent/TestBuilder.t | 30 ++++++++++++++++++++++-------- t/lib/TestBuilder.pm | 3 +++ 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/t/db_dependent/TestBuilder.t b/t/db_dependent/TestBuilder.t index e69c1949b1..bf23e0b7d3 100644 --- a/t/db_dependent/TestBuilder.t +++ b/t/db_dependent/TestBuilder.t @@ -351,7 +351,7 @@ subtest 'Default values' => sub { subtest 'build_object() tests' => sub { - plan tests => 6; + plan tests => 5; $builder = t::lib::TestBuilder->new(); @@ -372,12 +372,6 @@ subtest 'build_object() tests' => sub { $categorycode, 'Category code correctly set' ); is( $issuing_rule->itemtype, $itemtype, 'Item type correctly set' ); - warning_is { $issuing_rule = $builder->build_object( {} ); } - { carped => 'Missing class param' }, - 'The class parameter is mandatory, raises a warning if absent'; - is( $issuing_rule, undef, - 'If the class parameter is missing, undef is returned' ); - subtest 'Test all classes' => sub { my $Koha_modules_dir = dirname(__FILE__) . '/../../Koha'; my @koha_object_based_modules = `/bin/grep -rl 'sub object_class' $Koha_modules_dir`; @@ -394,10 +388,25 @@ subtest 'build_object() tests' => sub { is( ref($object), $module->object_class, "Testing $module" ); } }; + + subtest 'test parameters' => sub { + plan tests => 3; + + warning_is { $issuing_rule = $builder->build_object( {} ); } + { carped => 'Missing class param' }, + 'The class parameter is mandatory, raises a warning if absent'; + is( $issuing_rule, undef, + 'If the class parameter is missing, undef is returned' ); + + warnings_like { + $builder->build_object( + { class => 'Koha::Patrons', categorycode => 'foobar' } ); + } qr{Unknown parameter\(s\): categorycode}, ""; + }; }; subtest '->build parameter' => sub { - plan tests => 3; + plan tests => 4; # Test to make sure build() warns user of unknown parameters. warnings_are { @@ -421,6 +430,11 @@ subtest '->build parameter' => sub { zource => 'Branch', # Intentional spelling error }) } qr/Source parameter not specified/, "Catch warning on missing source"; + + warnings_like { + $builder->build( + { source => 'Borrower', categorycode => 'foobar' } ); + } qr{Unknown parameter\(s\): categorycode}, ""; }; $schema->storage->txn_rollback; diff --git a/t/lib/TestBuilder.pm b/t/lib/TestBuilder.pm index b0eb922581..493b26403c 100644 --- a/t/lib/TestBuilder.pm +++ b/t/lib/TestBuilder.pm @@ -76,6 +76,9 @@ sub build_object { return; } + my @unknowns = grep( !/^(class|value)$/, keys %{ $params }); + carp "Unknown parameter(s): ", join( ', ', @unknowns ) if scalar @unknowns; + load $class; my $source = $class->_type; my @pks = $self->schema->source( $class->_type )->primary_columns; -- 2.39.5