Kyle M Hall
dbc24783ee
Some libraries need to be able to send additional patron data from the extended patron attributes in made up SIP2 fields for the patron information and patron status responses. Test Plan: 1) Apply this patch 2) Create 3 new patron attributes with the codes CODE1, CODE2, CODE3. Make a least one repeatable. 3) Create a patron, add those attibutes for the patron, make sure there are at least two instances of the repeatable code 4) Edit your SIP2 config file, add the following within the login stanza: <patron_attribute field="XX" code="CODE1" /> <patron_attribute field="XY" code="CODE2" /> <patron_attribute field="XZ" code="CODE3" /> 5) Using the sip cli emulator, run patron_information and patron_status_request messages for the patron 6) Note the values you set for the patron attributes are sent in the corrosponding fields! Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com> Signed-off-by: Daniel Mauchley <dmauchley@duchesne.utah.gov> Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl> Amended: added parentheses on line 488 when assigning hashref to array. Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
117 lines
4.4 KiB
Perl
Executable file
117 lines
4.4 KiB
Perl
Executable file
#!/usr/bin/perl
|
|
|
|
# Some tests for SIP::ILS::Patron
|
|
# This needs to be extended! Your help is appreciated..
|
|
|
|
use Modern::Perl;
|
|
use Test::More tests => 4;
|
|
|
|
use Koha::Database;
|
|
use t::lib::TestBuilder;
|
|
use t::lib::Mocks;
|
|
use C4::SIP::ILS::Patron;
|
|
use Koha::Patron::Attributes;
|
|
|
|
my $schema = Koha::Database->new->schema;
|
|
$schema->storage->txn_begin;
|
|
|
|
my $builder = t::lib::TestBuilder->new();
|
|
my $patron1 = $builder->build({ source => 'Borrower' });
|
|
my $card = $patron1->{cardnumber};
|
|
|
|
# Check existing card number
|
|
my $sip_patron = C4::SIP::ILS::Patron->new( $card );
|
|
is( defined $sip_patron, 1, "Patron is valid" );
|
|
|
|
# Check invalid cardnumber by deleting patron
|
|
$schema->resultset('Borrower')->search({ cardnumber => $card })->delete;
|
|
my $sip_patron2 = C4::SIP::ILS::Patron->new( $card );
|
|
is( $sip_patron2, undef, "Patron is not valid (anymore)" );
|
|
|
|
subtest "OverduesBlockCirc tests" => sub {
|
|
|
|
plan tests => 6;
|
|
|
|
my $odue_patron = $builder->build(
|
|
{
|
|
source => 'Borrower',
|
|
value => {
|
|
dateexpiry => "3000-01-01",
|
|
}
|
|
}
|
|
);
|
|
my $good_patron = $builder->build(
|
|
{
|
|
source => 'Borrower',
|
|
value => {
|
|
dateexpiry => "3000-01-01",
|
|
}
|
|
}
|
|
);
|
|
my $odue = $builder->build({ source => 'Issue', value => {
|
|
borrowernumber => $odue_patron->{borrowernumber},
|
|
date_due => '2017-01-01',
|
|
}
|
|
});
|
|
t::lib::Mocks::mock_preference( 'OverduesBlockCirc', 'noblock' );
|
|
my $odue_sip_patron = C4::SIP::ILS::Patron->new( $odue_patron->{cardnumber} );
|
|
is( $odue_sip_patron->{charge_ok}, 1, "Not blocked with overdues when set to 'Don't block'");
|
|
$odue_sip_patron = C4::SIP::ILS::Patron->new( $good_patron->{cardnumber} );
|
|
is( $odue_sip_patron->{charge_ok}, 1, "Not blocked without overdues when set to 'Don't block'");
|
|
|
|
t::lib::Mocks::mock_preference( 'OverduesBlockCirc', 'confirmation' );
|
|
$odue_sip_patron = C4::SIP::ILS::Patron->new( $odue_patron->{cardnumber} );
|
|
is( $odue_sip_patron->{charge_ok}, '', "Blocked with overdues when set to 'Ask for confirmation'");
|
|
$odue_sip_patron = C4::SIP::ILS::Patron->new( $good_patron->{cardnumber} );
|
|
is( $odue_sip_patron->{charge_ok}, 1, "Not blocked without overdues when set to 'confirmation'");
|
|
|
|
t::lib::Mocks::mock_preference( 'OverduesBlockCirc', 'block' );
|
|
$odue_sip_patron = C4::SIP::ILS::Patron->new( $odue_patron->{cardnumber} );
|
|
is( $odue_sip_patron->{charge_ok}, '', "Blocked with overdues when set to 'Block'");
|
|
$odue_sip_patron = C4::SIP::ILS::Patron->new( $good_patron->{cardnumber} );
|
|
is( $odue_sip_patron->{charge_ok}, 1, "Not blocked without overdues when set to 'Block'");
|
|
|
|
};
|
|
|
|
subtest "Test build_patron_attribute_string" => sub {
|
|
|
|
plan tests => 2;
|
|
|
|
my $patron = $builder->build( { source => 'Borrower' } );
|
|
|
|
my $attribute_type = $builder->build( { source => 'BorrowerAttributeType' } );
|
|
my $attribute = Koha::Patron::Attribute->new(
|
|
{
|
|
borrowernumber => $patron->{borrowernumber},
|
|
code => $attribute_type->{code},
|
|
attribute => 'Test Attribute'
|
|
}
|
|
)->store();
|
|
|
|
my $attribute_type2 = $builder->build( { source => 'BorrowerAttributeType' } );
|
|
my $attribute2 = Koha::Patron::Attribute->new(
|
|
{
|
|
borrowernumber => $patron->{borrowernumber},
|
|
code => $attribute_type2->{code},
|
|
attribute => 'Another Test Attribute'
|
|
}
|
|
)->store();
|
|
|
|
my $ils_patron = C4::SIP::ILS::Patron->new( $patron->{cardnumber} );
|
|
|
|
my $server = {};
|
|
$server->{account}->{patron_attribute}->{code} = $attribute->code;
|
|
$server->{account}->{patron_attribute}->{field} = 'XY';
|
|
my $attribute_string = $ils_patron->build_patron_attributes_string( $server );
|
|
is( $attribute_string, "XYTest Attribute|", 'Attribute field generated correctly with single param' );
|
|
|
|
$server = {};
|
|
$server->{account}->{patron_attribute}->[0]->{code} = $attribute->code;
|
|
$server->{account}->{patron_attribute}->[0]->{field} = 'XY';
|
|
$server->{account}->{patron_attribute}->[1]->{code} = $attribute2->code;
|
|
$server->{account}->{patron_attribute}->[1]->{field} = 'YZ';
|
|
$attribute_string = $ils_patron->build_patron_attributes_string( $server );
|
|
is( $attribute_string, "XYTest Attribute|YZAnother Test Attribute|", 'Attribute field generated correctly with multiple params' );
|
|
};
|
|
|
|
$schema->storage->txn_rollback;
|