Bugzilla – Attachment 175787 Details for
Bug 38290
Add library group limits to vendors
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 38290: Add unit tests
Bug-38290-Add-unit-tests.patch (text/plain), 14.37 KB, created by
Matt Blenkinsop
on 2024-12-19 16:30:44 UTC
(
hide
)
Description:
Bug 38290: Add unit tests
Filename:
MIME Type:
Creator:
Matt Blenkinsop
Created:
2024-12-19 16:30:44 UTC
Size:
14.37 KB
patch
obsolete
>From ed84970fa429e5cf2d5aecbf01d9f093e7bb71ac Mon Sep 17 00:00:00 2001 >From: Matt Blenkinsop <matt.blenkinsop@ptfs-europe.com> >Date: Thu, 19 Dec 2024 16:16:31 +0000 >Subject: [PATCH] Bug 38290: Add unit tests > >prove t/db_dependent/Koha/*/Limit/LibraryGroup.t >--- > Koha/Object/Limit/LibraryGroup.pm | 9 +- > .../Koha/Object/Limit/LibraryGroup.t | 103 +++++++++++ > .../Koha/Objects/Limit/LibraryGroup.t | 169 ++++++++++++++++++ > 3 files changed, 279 insertions(+), 2 deletions(-) > create mode 100755 t/db_dependent/Koha/Object/Limit/LibraryGroup.t > create mode 100755 t/db_dependent/Koha/Objects/Limit/LibraryGroup.t > >diff --git a/Koha/Object/Limit/LibraryGroup.pm b/Koha/Object/Limit/LibraryGroup.pm >index ad3f15e67cf..3e366d315d2 100644 >--- a/Koha/Object/Limit/LibraryGroup.pm >+++ b/Koha/Object/Limit/LibraryGroup.pm >@@ -53,7 +53,7 @@ A method that can be used to embed or simply retrieve the library group limits f > sub lib_group_limits { > my ($self) = @_; > >- my $lib_group_visibility_parameters = $self->object_class()->_library_group_visibility_parameters; >+ my $lib_group_visibility_parameters = $self->_library_group_visibility_parameters; > my $visibility_column = $lib_group_visibility_parameters->{visibility_column}; > > my $lib_group_visibility = $self->$visibility_column; >@@ -78,9 +78,14 @@ sub set_lib_group_visibility { > my ( $self, $args ) = @_; > > my $new_visibility = $args->{new_visibility} || $self->lib_group_visibility; >- my $lib_group_visibility_parameters = $self->object_class()->_library_group_visibility_parameters; >+ my $lib_group_visibility_parameters = $self->_library_group_visibility_parameters; > my $visibility_column = $lib_group_visibility_parameters->{visibility_column}; > >+ if ( !$new_visibility ) { >+ $self->$visibility_column(undef); >+ return $self; >+ } >+ > if ( ref $new_visibility eq 'ARRAY' ) { > if ( scalar( @{$new_visibility} ) == 0 ) { > $self->$visibility_column(undef); >diff --git a/t/db_dependent/Koha/Object/Limit/LibraryGroup.t b/t/db_dependent/Koha/Object/Limit/LibraryGroup.t >new file mode 100755 >index 00000000000..cec76df19ec >--- /dev/null >+++ b/t/db_dependent/Koha/Object/Limit/LibraryGroup.t >@@ -0,0 +1,103 @@ >+#!/usr/bin/perl >+ >+# This file is part of Koha. >+# >+# Copyright PTFS Europe 2024 >+# >+# 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 <http://www.gnu.org/licenses>. >+ >+use Modern::Perl; >+use Test::More tests => 2; >+use t::lib::TestBuilder; >+ >+my $builder = t::lib::TestBuilder->new; >+my $schema = Koha::Database->schema; >+ >+subtest 'set_lib_group_visibility' => sub { >+ plan tests => 3; >+ >+ $schema->txn_begin; >+ >+ my $root_group1 = Koha::Library::Group->new( >+ { >+ title => "LibGroup1", >+ } >+ )->store(); >+ >+ my $lg1groupA = >+ Koha::Library::Group->new( { parent_id => $root_group1->id, title => 'LibGroup1 SubGroupA' } )->store(); >+ my $lg1groupA1 = >+ Koha::Library::Group->new( { parent_id => $lg1groupA->id, title => 'LibGroup1 SubGroupA SubGroup1' } )->store(); >+ my $lg1groupB = >+ Koha::Library::Group->new( { parent_id => $root_group1->id, title => 'LibGroup1 SubGroupB' } )->store(); >+ >+ my $vendor = $builder->build_object( >+ { class => 'Koha::Acquisition::Booksellers', value => { lib_group_visibility => undef } } ); >+ >+ # Pass in an array >+ my @vendor_lib_groups = ( $lg1groupA->id, $lg1groupB->id ); >+ $vendor->set_lib_group_visibility( { new_visibility => \@vendor_lib_groups } ); >+ is( >+ $vendor->lib_group_visibility, "|" . join( '|', @vendor_lib_groups ) . "|", >+ 'Got correct lib group visibility' >+ ); >+ >+ # Update with another array >+ @vendor_lib_groups = ( $lg1groupA1->id, $lg1groupB->id ); >+ $vendor->set_lib_group_visibility( { new_visibility => \@vendor_lib_groups } ); >+ is( >+ $vendor->lib_group_visibility, "|" . join( '|', @vendor_lib_groups ) . "|", >+ 'Got correct lib group visibility' >+ ); >+ >+ # Use the call in the object's "store" method >+ $vendor->lib_group_visibility( "|" . $lg1groupA->id . "|" )->store; >+ is( >+ $vendor->lib_group_visibility, "|" . $lg1groupA->id . "|", >+ 'Lib group visibility has been overridden correctly' >+ ); >+ >+ $schema->txn_rollback; >+}; >+ >+subtest 'lib_group_limits' => sub { >+ plan tests => 2; >+ >+ $schema->txn_begin; >+ >+ my $root_group1 = Koha::Library::Group->new( >+ { >+ title => "LibGroup1", >+ } >+ )->store(); >+ >+ my $lg1groupA = >+ Koha::Library::Group->new( { parent_id => $root_group1->id, title => 'LibGroup1 SubGroupA' } )->store(); >+ my $lg1groupB = >+ Koha::Library::Group->new( { parent_id => $root_group1->id, title => 'LibGroup1 SubGroupB' } )->store(); >+ >+ my $vendor = $builder->build_object( >+ { class => 'Koha::Acquisition::Booksellers', value => { lib_group_visibility => undef } } ); >+ >+ my @vendor_lib_groups = ( $lg1groupA->id, $lg1groupB->id ); >+ $vendor->set_lib_group_visibility( { new_visibility => \@vendor_lib_groups } ); >+ >+ my $lib_groups = $vendor->lib_group_limits; >+ >+ is( scalar(@$lib_groups), 2, 'Got correct number of lib groups' ); >+ my @ids = sort { $a <=> $b } map { $_->id } @$lib_groups; >+ is( join( '|', @ids ), join( '|', @vendor_lib_groups ), 'Got correct lib groups' ); >+ >+ $schema->txn_rollback; >+}; >diff --git a/t/db_dependent/Koha/Objects/Limit/LibraryGroup.t b/t/db_dependent/Koha/Objects/Limit/LibraryGroup.t >new file mode 100755 >index 00000000000..9156f747318 >--- /dev/null >+++ b/t/db_dependent/Koha/Objects/Limit/LibraryGroup.t >@@ -0,0 +1,169 @@ >+#!/usr/bin/perl >+ >+# This file is part of Koha. >+# >+# Copyright PTFS Europe 2024 >+# >+# 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 <http://www.gnu.org/licenses>. >+ >+use Modern::Perl; >+use Test::More tests => 1; >+use t::lib::TestBuilder; >+use t::lib::Mocks; >+ >+my $builder = t::lib::TestBuilder->new; >+my $schema = Koha::Database->schema; >+ >+subtest 'define_library_group_limits' => sub { >+ plan tests => 8; >+ >+ $schema->txn_begin; >+ >+ Koha::Acquisition::Baskets->delete; >+ Koha::Acquisition::Booksellers->delete; >+ >+ my $library1 = $builder->build_object( { class => 'Koha::Libraries' } ); >+ my $library2 = $builder->build_object( { class => 'Koha::Libraries' } ); >+ my $library3 = $builder->build_object( { class => 'Koha::Libraries' } ); >+ my $library4 = $builder->build_object( { class => 'Koha::Libraries' } ); >+ >+ # Group 1 - two sub groups: A, B. Sub group A then has two sub groups: A1, A2 >+ my $root_group1 = Koha::Library::Group->new( >+ { >+ title => "LibGroup1", >+ } >+ )->store(); >+ >+ my $lg1groupA = >+ Koha::Library::Group->new( { parent_id => $root_group1->id, title => 'LibGroup1 SubGroupA' } )->store(); >+ my $lg1groupA1 = >+ Koha::Library::Group->new( { parent_id => $lg1groupA->id, title => 'LibGroup1 SubGroupA SubGroup1' } )->store(); >+ my $lg1groupA2 = >+ Koha::Library::Group->new( { parent_id => $lg1groupA->id, title => 'LibGroup1 SubGroupA SubGroup2' } )->store(); >+ my $lg1groupB = >+ Koha::Library::Group->new( { parent_id => $root_group1->id, title => 'LibGroup1 SubGroupB' } )->store(); >+ >+ my $lg1groupA_library1 = >+ Koha::Library::Group->new( { parent_id => $lg1groupA->id, branchcode => $library1->branchcode } )->store(); >+ my $lg1groupA_library2 = >+ Koha::Library::Group->new( { parent_id => $lg1groupA->id, branchcode => $library2->branchcode } )->store(); >+ my $lg1groupB_library1 = >+ Koha::Library::Group->new( { parent_id => $lg1groupB->id, branchcode => $library1->branchcode } )->store(); >+ my $lg1groupA1_library1 = >+ Koha::Library::Group->new( { parent_id => $lg1groupA1->id, branchcode => $library2->branchcode } )->store(); >+ my $lg1groupA2_library1 = >+ Koha::Library::Group->new( { parent_id => $lg1groupA2->id, branchcode => $library1->branchcode } )->store(); >+ >+ # Group 2 - three sub groups: A, B, C. Sub group A then has two sub groups: A1, A2 and sub group C has two: C1, C2 >+ my $root_group2 = Koha::Library::Group->new( >+ { >+ title => "LibGroup2", >+ } >+ )->store(); >+ >+ my $lg2groupA = >+ Koha::Library::Group->new( { parent_id => $root_group2->id, title => 'LibGroup2 SubGroupA' } )->store(); >+ my $lg2groupA1 = >+ Koha::Library::Group->new( { parent_id => $lg2groupA->id, title => 'LibGroup2 SubGroupA SubGroup1' } )->store(); >+ my $lg2groupA2 = >+ Koha::Library::Group->new( { parent_id => $lg2groupA->id, title => 'LibGroup2 SubGroupA SubGroup2' } )->store(); >+ my $lg2groupB = >+ Koha::Library::Group->new( { parent_id => $root_group2->id, title => 'LibGroup2 SubGroupB' } )->store(); >+ my $lg2groupC = >+ Koha::Library::Group->new( { parent_id => $root_group2->id, title => 'LibGroup2 SubGroupC' } )->store(); >+ my $lg2groupC1 = >+ Koha::Library::Group->new( { parent_id => $lg2groupC->id, title => 'LibGroup2 SubGroupC SubGroup1' } )->store(); >+ my $lg2groupC2 = >+ Koha::Library::Group->new( { parent_id => $lg2groupC->id, title => 'LibGroup2 SubGroupC SubGroup2' } )->store(); >+ >+ my $lg2groupA_library1 = >+ Koha::Library::Group->new( { parent_id => $lg2groupA->id, branchcode => $library1->branchcode } )->store(); >+ my $lg2groupA_library2 = >+ Koha::Library::Group->new( { parent_id => $lg2groupA->id, branchcode => $library3->branchcode } )->store(); >+ my $lg2groupB_library1 = >+ Koha::Library::Group->new( { parent_id => $lg2groupB->id, branchcode => $library1->branchcode } )->store(); >+ my $lg2groupC_library1 = >+ Koha::Library::Group->new( { parent_id => $lg2groupC->id, branchcode => $library1->branchcode } )->store(); >+ my $lg2groupC_library2 = >+ Koha::Library::Group->new( { parent_id => $lg2groupC->id, branchcode => $library3->branchcode } )->store(); >+ my $lg2groupC_library3 = >+ Koha::Library::Group->new( { parent_id => $lg2groupC->id, branchcode => $library4->branchcode } )->store(); >+ my $lg2groupA1_library1 = >+ Koha::Library::Group->new( { parent_id => $lg2groupA1->id, branchcode => $library3->branchcode } )->store(); >+ my $lg2groupA2_library1 = >+ Koha::Library::Group->new( { parent_id => $lg2groupA2->id, branchcode => $library1->branchcode } )->store(); >+ my $lg2groupC1_library1 = >+ Koha::Library::Group->new( { parent_id => $lg2groupC1->id, branchcode => $library3->branchcode } )->store(); >+ my $lg2groupC2_library1 = >+ Koha::Library::Group->new( { parent_id => $lg2groupC2->id, branchcode => $library1->branchcode } )->store(); >+ my $lg2groupC2_library2 = >+ Koha::Library::Group->new( { parent_id => $lg2groupC2->id, branchcode => $library4->branchcode } )->store(); >+ >+ my $vendor1 = $builder->build_object( >+ { >+ class => 'Koha::Acquisition::Booksellers', value => { lib_group_visibility => "|" . $root_group1->id . "|" } >+ } >+ ); >+ my $vendor2 = $builder->build_object( >+ { >+ class => 'Koha::Acquisition::Booksellers', value => { lib_group_visibility => "|" . $root_group2->id . "|" } >+ } >+ ); >+ >+ t::lib::Mocks::mock_userenv( { branchcode => $library1->branchcode } ); >+ my $vendors = Koha::Acquisition::Booksellers->search()->as_list; >+ is( scalar(@$vendors), 2, "Two vendors returned" ); >+ >+ t::lib::Mocks::mock_userenv( { branchcode => $library2->branchcode } ); >+ $vendors = Koha::Acquisition::Booksellers->search()->as_list; >+ is( scalar(@$vendors), 1, "One vendor returned as library2 is not in root_group2" ); >+ >+ my $vendor3 = $builder->build_object( >+ { class => 'Koha::Acquisition::Booksellers', value => { lib_group_visibility => "|" . $lg2groupA->id . "|" } } >+ ); >+ $vendors = Koha::Acquisition::Booksellers->search()->as_list; >+ is( scalar(@$vendors), 1, "Still only one vendor returned as library2 is not in root_group2 or lg2groupA" ); >+ >+ t::lib::Mocks::mock_userenv( { branchcode => $library3->branchcode } ); >+ $vendors = Koha::Acquisition::Booksellers->search()->as_list; >+ is( scalar(@$vendors), 2, "Two vendors now returned as library3 is in lg2groupA and root_group2" ); >+ >+ my $vendor4 = $builder->build_object( >+ { class => 'Koha::Acquisition::Booksellers', value => { lib_group_visibility => "|" . $lg2groupB->id . "|" } } >+ ); >+ $vendors = Koha::Acquisition::Booksellers->search()->as_list; >+ is( >+ scalar(@$vendors), 2, >+ "Still two vendors returned as library3 is in lg2groupA and root_group2 but not lg2groupB" >+ ); >+ >+ t::lib::Mocks::mock_userenv( { branchcode => $library4->branchcode } ); >+ $vendors = Koha::Acquisition::Booksellers->search()->as_list; >+ is( >+ scalar(@$vendors), 1, >+ "One vendor returned as library2 is only in root_group2 but not the previously assigned sub groups" >+ ); >+ $vendor2->lib_group_visibility( "|" . $root_group1->id . "|" )->store; >+ $vendors = Koha::Acquisition::Booksellers->search()->as_list; >+ is( scalar(@$vendors), 0, "No vendors returned as none are visible to this branch code" ); >+ >+ $vendor2->lib_group_visibility(undef)->store; >+ $vendors = Koha::Acquisition::Booksellers->search()->as_list; >+ is( >+ scalar(@$vendors), 1, >+ "One vendor returned as its lib_group_visibility is now undefined and so is visible to all" >+ ); >+ >+ $schema->txn_rollback; >+}; >-- >2.39.5 (Apple Git-154)
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 38290
:
175155
|
175156
|
175157
|
175158
|
175159
|
175160
|
175161
|
175779
|
175780
|
175781
|
175782
|
175783
|
175784
|
175785
|
175786
| 175787