@@ -, +, @@ t/db_dependent/Koha_ExternalContent_OneClickDigital.t --- C4/Installer/PerlDependencies.pm | 2 +- Koha/ExternalContent/OneClickDigital.pm | 92 ++++++++++++++++++++++ .../Koha_ExternalContent_OneClickDigital.t | 55 +++++++++++++ 3 files changed, 148 insertions(+), 1 deletion(-) create mode 100644 Koha/ExternalContent/OneClickDigital.pm create mode 100755 t/db_dependent/Koha_ExternalContent_OneClickDigital.t --- a/C4/Installer/PerlDependencies.pm +++ a/C4/Installer/PerlDependencies.pm @@ -855,7 +855,7 @@ our $PERL_DEPS = { 'WebService::ILS' => { 'usage' => 'Interface third party systems', 'required' => '0', - 'min_ver' => '0.07', + 'min_ver' => '0.10', }, }; --- a/Koha/ExternalContent/OneClickDigital.pm +++ a/Koha/ExternalContent/OneClickDigital.pm @@ -0,0 +1,92 @@ +# Copyright 2016 Catalyst +# +# 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +package Koha::ExternalContent::OneClickDigital; + +use Modern::Perl; +use Carp; + +use base qw(Koha::ExternalContent); +use WebService::ILS::OneClickDigital::PartnerPatron; +use C4::Context; +use Koha::Logger; + +use constant logger => Koha::Logger->get(); + +=head1 NAME + +Koha::ExternalContent::OneClickDigital + +=head1 SYNOPSIS + + use Koha::ExternalContent::OneClickDigital; + my $od_client = Koha::ExternalContent::OneClickDigital->new(); + my $od_auth_url = $od_client->auth_url(); + +=head1 DESCRIPTION + +A (very) thin wrapper around C + +Takes "OneClickDigital*" Koha preferences + +=cut + +sub new { + my $class = shift; + my $params = shift || {}; + $params->{koha_session_id} or croak "No koha_session_id"; + + my $self = $class->SUPER::new($params); + unless ($params->{client}) { + my $client_secret = C4::Context->preference('OneClickDigitalClientSecret') + or croak("OneClickDigitalClientSecret pref not set"); + my $library_id = C4::Context->preference('OneClickDigitalLibraryID') + or croak("OneClickDigitalLibraryID pref not set"); + my $domain = C4::Context->preference('OneClickDigitalDomain'); + my $patron = $self->koha_patron; + $self->client( WebService::ILS::OneClickDigital::PartnerPatron->new( + client_secret => $client_secret, + library_id => $library_id, + $domain && $domain gt '' ? (domain => $domain) : (), + user_id => $patron->email, + user_agent_params => { agent => $class->agent_string } + ) ); + } + return $self; +} + +=head1 METHODS + +L methods used without mods: + +=over 4 + +=item C + +=back + +=cut + +use vars qw{$AUTOLOAD}; +sub AUTOLOAD { + my $self = shift; + (my $method = $AUTOLOAD) =~ s/.*:://; + return $self->client->$method(@_); +} +sub DESTROY { } + +1; --- a/t/db_dependent/Koha_ExternalContent_OneClickDigital.t +++ a/t/db_dependent/Koha_ExternalContent_OneClickDigital.t @@ -0,0 +1,55 @@ +use Modern::Perl; + +use t::lib::Mocks; +use t::lib::TestBuilder; +use Test::More tests => 3; # last test to print +use C4::Auth; +use Koha::Database; + +use Module::Load::Conditional qw( can_load ); +SKIP: { + skip "cannot filnd WebService::ILS::OneClickDigital::PartnerPatron", 3 + unless can_load( modules => {'WebService::ILS::OneClickDigital::PartnerPatron' => undef} ); + + use_ok('Koha::ExternalContent::OneClickDigital'); + + my $ocd_user_email = $ENV{ONECLICKDIGITAL_TEST_USER_EMAIL}; + SKIP: { + skip "Env ONECLICKDIGITAL_TEST_USER_EMAIL not set", 2 unless $ocd_user_email; + + my $ocd_secret = $ENV{ONECLICKDIGITAL_TEST_CLIENT_SECRET} + || C4::Context->preference('OneClickDigitalClientSecret'); + my $ocd_library_id = $ENV{ONECLICKDIGITAL_TEST_LIBRARY_ID} + || C4::Context->preference('OneClickDigitalLibraryID'); + my $ocd_domain = $ENV{ONECLICKDIGITAL_TEST_DOMAIN} + || C4::Context->preference('OneClickDigitalDomain'); + skip "Env ONECLICKDIGITAL_TEST_CLIENT_SECRET ONECLICKDIGITAL_TEST_LIBRARY_ID ONECLICKDIGITAL_TEST_DOMAIN not set", 2 + unless $ocd_secret && $ocd_library_id && $ocd_domain; + + my $schema = Koha::Database->schema; + $schema->storage->txn_begin; + my $builder = t::lib::TestBuilder->new(); + + t::lib::Mocks::mock_preference('OneClickDigitalClientSecret', $ocd_secret); + t::lib::Mocks::mock_preference('OneClickDigitalLibraryID', $ocd_library_id); + t::lib::Mocks::mock_preference('OneClickDigitalDomain', $ocd_domain); + + my $patron = $builder->build({ + source => 'Borrower', + value => { + email => $ocd_user_email, + } + }); + + my $session = C4::Auth::get_session(""); + $session->param('number', $patron->{borrowernumber}); + $session->flush; + my $client = Koha::ExternalContent::OneClickDigital->new({koha_session_id => $session->id}); + + my $user_agent_string = $client->user_agent->agent(); + ok ($user_agent_string =~ m/^Koha/, 'User Agent string is set') + or diag("User Agent string: $user_agent_string"); + + ok ($client->search({query => "school"}), 'search()'); + } +} --