From 78b30f2bbd78a67fc63c8b6796b08dfc0169659d Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Thu, 21 Apr 2016 13:11:02 -0300 Subject: [PATCH] Bug 16320: Refactor ILSDI_Services.t so it uses TestBuilder Content-Type: text/plain; charset=utf-8 This patch refactors the tests so they are corerctly built using TestBuilder and wrapper inside a DB transaction in a less ambiguous way. To test: - Verify that the tests pass with the patch: - Run: $ prove t/db_dependent/ILSDI_Services.t => SUCCESS: Tests pass - Sign off :-D Signed-off-by: Marcel de Rooy --- t/db_dependent/ILSDI_Services.t | 171 +++++++++++++++++++-------------------- 1 file changed, 83 insertions(+), 88 deletions(-) diff --git a/t/db_dependent/ILSDI_Services.t b/t/db_dependent/ILSDI_Services.t index ee012e2..361e7ba 100644 --- a/t/db_dependent/ILSDI_Services.t +++ b/t/db_dependent/ILSDI_Services.t @@ -1,122 +1,115 @@ #!/usr/bin/perl +# 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, see . + use Modern::Perl; -use C4::Members qw/AddMember GetMember GetBorrowercategory/; -use Koha::Libraries; use CGI qw ( -utf8 ); -use Test::More tests => 16; +use Test::More tests => 3; use t::lib::Mocks; use t::lib::TestBuilder; +use Koha::AuthUtils; + BEGIN { use_ok('C4::ILSDI::Services'); } -my $dbh = C4::Context->dbh; - -# Start transaction -$dbh->{AutoCommit} = 0; -$dbh->{RaiseError} = 1; - -# Create patron -my %data = ( - firstname => 'my firstname', - surname => 'my surname', - categorycode => 'UT', - branchcode => 'UT', - cardnumber => 'ilsdi-cardnumber', - userid => 'ilsdi-userid', - password => 'ilsdi-password', -); - -# Crate patron category -unless ( GetBorrowercategory('UT') ) { - $dbh->do("INSERT INTO categories - (categorycode,description,enrolmentperiod,upperagelimit,enrolmentfee,overduenoticerequired,reservefee,category_type,default_privacy) - VALUES - ('UT','Unit tester',99,99,0.000000,1,0.000000,'C','default');"); -} - -# Create library -unless ( Koha::Libraries->find('UT') ) { - $dbh->do("INSERT INTO branches (branchcode,branchname) VALUES ('UT','Unit test library');"); -} - +my $schema = Koha::Database->schema; +my $dbh = C4::Context->dbh; +my $builder = t::lib::TestBuilder->new; -my $borrowernumber = AddMember(%data); -my $borrower = GetMember( borrowernumber => $borrowernumber ); +subtest 'AuthenticatePatron test' => sub { -{ # AuthenticatePatron test + plan tests => 14; - my $query = new CGI; - $query->param('username',$borrower->{'userid'}); - $query->param('password','ilsdi-password'); - - my $reply = C4::ILSDI::Services::AuthenticatePatron($query); - is($reply->{'id'}, $borrowernumber, "userid and password - Patron authenticated"); - is($reply->{'code'}, undef, "Error code undef"); + $schema->storage->txn_begin; - $query->param('password','ilsdi-passworD'); - $reply = C4::ILSDI::Services::AuthenticatePatron($query); - is($reply->{'code'}, 'PatronNotFound', "userid and wrong password - PatronNotFound"); - is($reply->{'id'}, undef, "id undef"); + my $plain_password = 'tomasito'; - $query->param('password','ilsdi-password'); - $query->param('username','wrong-ilsdi-useriD'); - $reply = C4::ILSDI::Services::AuthenticatePatron($query); - is($reply->{'code'}, 'PatronNotFound', "non-existing userid - PatronNotFound"); - is($reply->{'id'}, undef, "id undef"); + my $borrower = $builder->build({ + source => 'Borrower', + value => { + password => Koha::AuthUtils::hash_password( $plain_password ) + } + }); - $query->param('username',uc($borrower->{'userid'})); - $reply = C4::ILSDI::Services::AuthenticatePatron($query); - is($reply->{'id'}, $borrowernumber, "userid is not case sensitive - Patron authenticated"); - is($reply->{'code'}, undef, "Error code undef"); + my $query = new CGI; + $query->param( 'username', $borrower->{userid}); + $query->param( 'password', $plain_password); - $query->param('username',$borrower->{'cardnumber'}); - $reply = C4::ILSDI::Services::AuthenticatePatron($query); - is($reply->{'id'}, $borrowernumber, "cardnumber and password - Patron authenticated"); - is($reply->{'code'}, undef, "Error code undef"); + my $reply = C4::ILSDI::Services::AuthenticatePatron( $query ); + is( $reply->{id}, $borrower->{borrowernumber}, "userid and password - Patron authenticated" ); + is( $reply->{code}, undef, "Error code undef"); $query->param('password','ilsdi-passworD'); + $reply = C4::ILSDI::Services::AuthenticatePatron( $query ); + is( $reply->{code}, 'PatronNotFound', "userid and wrong password - PatronNotFound" ); + is( $reply->{id}, undef, "id undef"); + + $query->param( 'password', $plain_password ); + $query->param( 'username', 'wrong-ilsdi-useriD' ); + $reply = C4::ILSDI::Services::AuthenticatePatron( $query ); + is( $reply->{code}, 'PatronNotFound', "non-existing userid - PatronNotFound" ); + is( $reply->{id}, undef, "id undef"); + + $query->param( 'username', uc( $borrower->{userid} )); + $reply = C4::ILSDI::Services::AuthenticatePatron( $query ); + is( $reply->{id}, $borrower->{borrowernumber}, "userid is not case sensitive - Patron authenticated" ); + is( $reply->{code}, undef, "Error code undef"); + + $query->param( 'username', $borrower->{cardnumber} ); + $reply = C4::ILSDI::Services::AuthenticatePatron( $query ); + is( $reply->{id}, $borrower->{borrowernumber}, "cardnumber and password - Patron authenticated" ); + is( $reply->{code}, undef, "Error code undef" ); + + $query->param( 'password', 'ilsdi-passworD' ); + $reply = C4::ILSDI::Services::AuthenticatePatron( $query ); + is( $reply->{code}, 'PatronNotFound', "cardnumber and wrong password - PatronNotFount" ); + is( $reply->{id}, undef, "id undef" ); + + $query->param( 'username', 'randomcardnumber1234' ); + $query->param( 'password', $plain_password ); $reply = C4::ILSDI::Services::AuthenticatePatron($query); - is($reply->{'code'}, 'PatronNotFound', "cardnumber and wrong password - PatronNotFount"); - is($reply->{'id'}, undef, "id undef"); + is( $reply->{code}, 'PatronNotFound', "non-existing cardnumer/userid - PatronNotFound" ); + is( $reply->{id}, undef, "id undef"); - $query->param('username','randomcardnumber1234'); - $query->param('password','ilsdi-password'); - $reply = C4::ILSDI::Services::AuthenticatePatron($query); - is($reply->{'code'}, 'PatronNotFound', "non-existing cardnumer/userid - PatronNotFound"); - is($reply->{'id'}, undef, "id undef"); + $schema->storage->txn_rollback; +}; -} - -# End transaction -$dbh->rollback; -$dbh->{AutoCommit} = 1; -$dbh->{RaiseError} = 0; -my $schema = Koha::Database->schema; -$schema->storage->txn_begin; +subtest 'GetPatronInfo/GetBorrowerAttributes test for extended patron attributes' => sub { -$schema->resultset( 'Issue' )->delete_all; -$schema->resultset( 'Borrower' )->delete_all; -$schema->resultset( 'BorrowerAttribute' )->delete_all; -$schema->resultset( 'BorrowerAttributeType' )->delete_all; -$schema->resultset( 'Category' )->delete_all; -$schema->resultset( 'Item' )->delete_all; # 'Branch' deps. on this -$schema->resultset( 'Branch' )->delete_all; + plan tests => 1; + $schema->storage->txn_begin; -{ # GetPatronInfo/GetBorrowerAttributes test for extended patron attributes: + $schema->resultset( 'Issue' )->delete_all; + $schema->resultset( 'Borrower' )->delete_all; + $schema->resultset( 'BorrowerAttribute' )->delete_all; + $schema->resultset( 'BorrowerAttributeType' )->delete_all; + $schema->resultset( 'Category' )->delete_all; + $schema->resultset( 'Item' )->delete_all; # 'Branch' deps. on this + $schema->resultset( 'Branch' )->delete_all; # Configure Koha to enable ILS-DI server and extended attributes: t::lib::Mocks::mock_preference( 'ILS-DI', 1 ); t::lib::Mocks::mock_preference( 'ExtendedPatronAttributes', 1 ); - my $builder = t::lib::TestBuilder->new; - # Set up a library/branch for our user to belong to: my $lib = $builder->build( { source => 'Branch', @@ -195,7 +188,9 @@ $schema->resultset( 'Branch' )->delete_all; # Check results: is_deeply( $reply->{'attributes'}, [ $cmp ], 'Test GetPatronInfo - show_attributes parameter' ); -} -# Cleanup -$schema->storage->txn_rollback; + # Cleanup + $schema->storage->txn_rollback; +}; + +1; -- 1.7.10.4