diff --git a/C4/SIP/Sip/MsgType.pm b/C4/SIP/Sip/MsgType.pm index a631a023fd..7ac89d10ab 100644 --- a/C4/SIP/Sip/MsgType.pm +++ b/C4/SIP/Sip/MsgType.pm @@ -503,6 +503,7 @@ sub handle_patron_status { $ils->check_inst_id( $fields->{ (FID_INST_ID) }, "handle_patron_status" ); $patron = $ils->find_patron( $fields->{ (FID_PATRON_ID) } ); + $patron->update_lastseen() if $patron; $resp = build_patron_status( $patron, $lang, $fields, $server ); $self->write_msg( $resp, undef, $server->{account}->{terminator}, $server->{account}->{encoding} ); return (PATRON_STATUS_REQ); diff --git a/t/db_dependent/SIP/Message.t b/t/db_dependent/SIP/Message.t index dee74f8166..ff001ad7e7 100755 --- a/t/db_dependent/SIP/Message.t +++ b/t/db_dependent/SIP/Message.t @@ -21,7 +21,7 @@ # along with Koha; if not, see . use Modern::Perl; -use Test::More tests => 17; +use Test::More tests => 18; use Test::Exception; use Test::MockObject; use Test::MockModule; @@ -196,7 +196,7 @@ subtest 'hold_patron_name() tests' => sub { $schema->storage->txn_rollback; }; -subtest 'Lastseen response' => sub { +subtest 'Lastseen response patron_info' => sub { my $schema = Koha::Database->new->schema; $schema->storage->txn_begin; @@ -247,6 +247,57 @@ subtest 'Lastseen response' => sub { }; +subtest 'Lastseen response patron status' => sub { + + my $schema = Koha::Database->new->schema; + $schema->storage->txn_begin; + + plan tests => 6; + my $builder = t::lib::TestBuilder->new(); + my $branchcode = $builder->build({ source => 'Branch' })->{branchcode}; + my ( $response, $findpatron ); + my $mocks = create_mocks( \$response, \$findpatron, \$branchcode ); + my $seen_patron = $builder->build({ + source => 'Borrower', + value => { + lastseen => '2001-01-01', + password => hash_password( PATRON_PW ), + branchcode => $branchcode, + }, + }); + my $cardnum = $seen_patron->{cardnumber}; + my $sip_patron = C4::SIP::ILS::Patron->new( $cardnum ); + $findpatron = $sip_patron; + + my $siprequest = PATRON_STATUS_REQ. 'engYYYYMMDDZZZZHHMMSS'. + FID_INST_ID. $branchcode. '|'. + FID_PATRON_ID. $cardnum. '|'. + FID_PATRON_PWD. PATRON_PW. '|'; + my $msg = C4::SIP::Sip::MsgType->new( $siprequest, 0 ); + + my $server = { ils => $mocks->{ils} }; + undef $response; + t::lib::Mocks::mock_preference( 'TrackLastPatronActivity', '' ); + $msg->handle_patron_status( $server ); + + isnt( $response, undef, 'At least we got a response.' ); + my $respcode = substr( $response, 0, 2 ); + is( $respcode, PATRON_STATUS_RESP, 'Response code fine' ); + $seen_patron = Koha::Patrons->find({ cardnumber => $seen_patron->{cardnumber} }); + is( output_pref({str => $seen_patron->lastseen(), dateonly => 1}), output_pref({str => '2001-01-01', dateonly => 1}),'Last seen not updated if not tracking patrons'); + undef $response; + t::lib::Mocks::mock_preference( 'TrackLastPatronActivity', '1' ); + $msg->handle_patron_status( $server ); + + isnt( $response, undef, 'At least we got a response.' ); + $respcode = substr( $response, 0, 2 ); + is( $respcode, PATRON_STATUS_RESP, 'Response code fine' ); + $seen_patron = Koha::Patrons->find({ cardnumber => $seen_patron->cardnumber() }); + is( output_pref({str => $seen_patron->lastseen(), dateonly => 1}), output_pref({dt => dt_from_string(), dateonly => 1}),'Last seen updated if tracking patrons'); + $schema->storage->txn_rollback; + +}; + subtest "Test patron_status_string" => sub { my $schema = Koha::Database->new->schema; $schema->storage->txn_begin;