From e51e39b72fa0ebaa7dfb0f67e5552568b2db1aec Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Sun, 23 Aug 2020 17:39:23 -0300 Subject: [PATCH] Bug 22343: Add Koha::Library->smtp_server Signed-off-by: Kyle M Hall Signed-off-by: Martin Renvoize Signed-off-by: Jonathan Druart --- Koha/Library.pm | 52 +++++++++++++++++++ t/db_dependent/Koha/Library.t | 95 +++++++++++++++++++++++++++++++++++ 2 files changed, 147 insertions(+) create mode 100644 t/db_dependent/Koha/Library.t diff --git a/Koha/Library.pm b/Koha/Library.pm index b3f763a9ef..7a640d7b74 100644 --- a/Koha/Library.pm +++ b/Koha/Library.pm @@ -25,6 +25,7 @@ use C4::Context; use Koha::Database; use Koha::StockRotationStages; +use Koha::SMTP::Servers; use base qw(Koha::Object); @@ -65,6 +66,57 @@ sub get_effective_marcorgcode { return $self->marcorgcode || C4::Context->preference("MARCOrgCode"); } +=head3 smtp_server + + my $smtp_server = $library->smtp_server; + $library->smtp_server({ smtp_server => $smtp_server }); + $library->smtp_server({ smtp_server => undef }); + +Accessor for getting and setting the library's SMTP server. + +Returns the effective SMTP server configuration to be used on the library. The returned +value is always a I object. + +Setting it to undef will remove the link to a specific SMTP server and effectively +make the library use the default setting + +=cut + +sub smtp_server { + my ( $self, $params ) = @_; + + my $library_smtp_server_rs = $self->_result->library_smtp_server; + + if ( exists $params->{smtp_server} ) { + + $self->_result->result_source->schema->txn_do( sub { + $library_smtp_server_rs->delete + if $library_smtp_server_rs; + + if ( defined $params->{smtp_server} ) { + # Set the new server + # Remove any already set SMTP server + + my $smtp_server = $params->{smtp_server}; + $smtp_server->_result->add_to_library_smtp_servers({ library_id => $self->id }); + } + }); + } # else => reset to default + else { + # Getter + if ( $library_smtp_server_rs ) { + # use Data::Printer colored => 1; + # p($library_smtp_server_rs); + return Koha::SMTP::Servers->find( + $library_smtp_server_rs->smtp_server_id ); + } + + return Koha::SMTP::Servers->get_default; + } + + return $self; +} + =head3 inbound_email_address my $to_email = Koha::Library->inbound_email_address; diff --git a/t/db_dependent/Koha/Library.t b/t/db_dependent/Koha/Library.t new file mode 100644 index 0000000000..23e88578b3 --- /dev/null +++ b/t/db_dependent/Koha/Library.t @@ -0,0 +1,95 @@ +#!/usr/bin/perl + +# Copyright 2020 Koha Development team +# +# 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 Test::More tests => 1; + +use Koha::Database; +use Koha::SMTP::Servers; + +use t::lib::TestBuilder; + +my $schema = Koha::Database->new->schema; +my $builder = t::lib::TestBuilder->new; + +subtest 'smtp_server() tests' => sub { + + plan tests => 14; + + $schema->storage->txn_begin; + + my $library = $builder->build_object({ class => 'Koha::Libraries' }); + my $smtp_server_1 = $builder->build_object({ class => 'Koha::SMTP::Servers' }); + my $smtp_server_2 = $builder->build_object({ class => 'Koha::SMTP::Servers' }); + + is( ref($library->smtp_server), 'Koha::SMTP::Server', 'Type is correct' ); + + is_deeply( + $library->smtp_server->unblessed, + Koha::SMTP::Servers->get_default->unblessed, + 'Fresh library is set the default' + ); + + my $return = $library->smtp_server({ smtp_server => $smtp_server_1 }); + $library->discard_changes; + + is( ref($return), 'Koha::Library', 'The setter is chainable' ); + is( ref($library->smtp_server), 'Koha::SMTP::Server', 'Type is correct' ); + is_deeply( + $library->smtp_server->unblessed, + $smtp_server_1->unblessed, + 'SMTP server correctly set for library' + ); + + $return = $library->smtp_server({ smtp_server => $smtp_server_2 }); + $library->discard_changes; + + is( ref($return), 'Koha::Library', 'The setter is chainable' ); + is( ref($library->smtp_server), 'Koha::SMTP::Server', 'Type is correct' ); + is_deeply( + $library->smtp_server->unblessed, + $smtp_server_2->unblessed, + 'SMTP server correctly set for library' + ); + + $return = $library->smtp_server({ smtp_server => undef }); + $library->discard_changes; + + is( ref($return), 'Koha::Library', 'The setter is chainable' ); + is( ref($library->smtp_server), 'Koha::SMTP::Server', 'Type is correct' ); + is_deeply( + $library->smtp_server->unblessed, + Koha::SMTP::Servers->get_default->unblessed, + 'Resetting makes it return the default' + ); + + $return = $library->smtp_server({ smtp_server => undef }); + $library->discard_changes; + + is( ref($return), 'Koha::Library', 'The setter is chainable' ); + is( ref($library->smtp_server), 'Koha::SMTP::Server', 'Type is correct' ); + is_deeply( + $library->smtp_server->unblessed, + Koha::SMTP::Servers->get_default->unblessed, + q{Resetting twice doesn't explode and has the expected results} + ); + + $schema->storage->txn_rollback; +}; -- 2.39.5