Bugzilla – Attachment 37216 Details for
Bug 13906
TestObjectFactory(ies) for Koha objects. Enable easy Test object creation from HASHes or from preconfigured test groups.
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 13906 - TestObjectFactory(ies) for Koha objects. Enable easy Test object creation from HASHes or from preconfigured test groups.
Bug-13906---TestObjectFactoryies-for-Koha-objects-.patch (text/plain), 38.72 KB, created by
Olli-Antti Kivilahti
on 2015-03-25 13:57:42 UTC
(
hide
)
Description:
Bug 13906 - TestObjectFactory(ies) for Koha objects. Enable easy Test object creation from HASHes or from preconfigured test groups.
Filename:
MIME Type:
Creator:
Olli-Antti Kivilahti
Created:
2015-03-25 13:57:42 UTC
Size:
38.72 KB
patch
obsolete
>From 4113db2b295d1d57e18041ed7ee73248d632a366 Mon Sep 17 00:00:00 2001 >From: Olli-Antti Kivilahti <olli-antti.kivilahti@jns.fi> >Date: Wed, 25 Mar 2015 15:53:07 +0200 >Subject: [PATCH] Bug 13906 - TestObjectFactory(ies) for Koha objects. Enable > easy Test object creation from HASHes or from preconfigured > test groups. > >In discussion. >--- > .../TestObjects/Biblios/BiblioFactory.pm | 96 +++++++++++++ > .../TestObjects/Biblios/ExampleBiblios.pm | 75 +++++++++++ > .../TestObjects/Borrowers/BorrowerFactory.pm | 91 +++++++++++++ > .../TestObjects/Borrowers/ExampleBorrowers.pm | 60 +++++++++ > t/db_dependent/TestObjects/Issues/ExampleIssues.pm | 41 ++++++ > t/db_dependent/TestObjects/Issues/IssueFactory.pm | 142 ++++++++++++++++++++ > t/db_dependent/TestObjects/Items/ExampleItems.pm | 99 ++++++++++++++ > t/db_dependent/TestObjects/Items/ItemFactory.pm | 92 +++++++++++++ > .../LetterTemplates/ExampleLetterTemplates.pm | 92 +++++++++++++ > .../LetterTemplates/LetterTemplateFactory.pm | 101 ++++++++++++++ > t/db_dependent/TestObjects/ObjectFactory.pm | 33 +++++ > 11 files changed, 922 insertions(+) > create mode 100644 t/db_dependent/TestObjects/Biblios/BiblioFactory.pm > create mode 100644 t/db_dependent/TestObjects/Biblios/ExampleBiblios.pm > create mode 100644 t/db_dependent/TestObjects/Borrowers/BorrowerFactory.pm > create mode 100644 t/db_dependent/TestObjects/Borrowers/ExampleBorrowers.pm > create mode 100644 t/db_dependent/TestObjects/Issues/ExampleIssues.pm > create mode 100644 t/db_dependent/TestObjects/Issues/IssueFactory.pm > create mode 100644 t/db_dependent/TestObjects/Items/ExampleItems.pm > create mode 100644 t/db_dependent/TestObjects/Items/ItemFactory.pm > create mode 100644 t/db_dependent/TestObjects/LetterTemplates/ExampleLetterTemplates.pm > create mode 100644 t/db_dependent/TestObjects/LetterTemplates/LetterTemplateFactory.pm > create mode 100644 t/db_dependent/TestObjects/ObjectFactory.pm > >diff --git a/t/db_dependent/TestObjects/Biblios/BiblioFactory.pm b/t/db_dependent/TestObjects/Biblios/BiblioFactory.pm >new file mode 100644 >index 0000000..25f2c55 >--- /dev/null >+++ b/t/db_dependent/TestObjects/Biblios/BiblioFactory.pm >@@ -0,0 +1,96 @@ >+package t::db_dependent::TestObjects::Biblios::BiblioFactory; >+ >+# Copyright Vaara-kirjastot 2015 >+# >+# 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. >+# >+ >+use Modern::Perl; >+use Carp; >+ >+use C4::Biblio; >+ >+use t::db_dependent::TestObjects::Biblios::ExampleBiblios; >+use t::db_dependent::TestObjects::ObjectFactory; >+ >+=head t::db_dependent::TestObjects::Biblios::createTestGroup( $data [, $hashKey] ) >+Calls C4::Biblio::TransformKohaToMarc() to make a MARC::Record and add it to >+the DB. Returns a HASH of MARC::Records. >+The HASH is keyed with the biblionumber, or the given $hashKey. >+The biblionumber is injected to the MARC::Record-object to be easily accessable, >+so we can get it like this: >+ $records->{$key}->{biblionumber}; >+ >+See C4::Biblio::TransformKohaToMarc() for how the biblio- or biblioitem-tables' >+columns need to be given. >+=cut >+ >+sub createTestGroup { >+ my ($biblios, $hashKey) = @_; >+ my %records; >+ foreach my $biblio (@$biblios) { >+ my $record = C4::Biblio::TransformKohaToMarc($biblio); >+ my ($biblionumber, $biblioitemnumber) = C4::Biblio::AddBiblio($record,''); >+ $record->{biblionumber} = $biblionumber; >+ >+ my $key = t::db_dependent::TestObjects::ObjectFactory::getHashKey($biblio, $biblionumber, $hashKey); >+ >+ $records{$key} = $record; >+ } >+ return \%records; >+} >+ >+=head >+ >+ my $records = createTestGroup(); >+ ##Do funky stuff >+ deleteTestGroup($records); >+ >+Removes the given test group from the DB. >+ >+=cut >+ >+sub deleteTestGroup { >+ my $records = shift; >+ >+ my ( $biblionumberFieldCode, $biblionumberSubfieldCode ) = >+ C4::Biblio::GetMarcFromKohaField( "biblio.biblionumber", '' ); >+ >+ my $schema = Koha::Database->new_schema(); >+ while( my ($key, $record) = each %$records) { >+ my $biblionumber = $record->subfield($biblionumberFieldCode, $biblionumberSubfieldCode); >+ $schema->resultset('Biblio')->search($biblionumber)->delete_all(); >+ $schema->resultset('Biblioitem')->search($biblionumber)->delete_all(); >+ } >+} >+sub _deleteTestGroupFromIdentifiers { >+ my $testGroupIdentifiers = shift; >+ >+ my $schema = Koha::Database->new_schema(); >+ foreach my $isbn (@$testGroupIdentifiers) { >+ $schema->resultset('Biblio')->search({"biblioitems.isbn" => $isbn},{join => 'biblioitems'})->delete(); >+ $schema->resultset('Biblioitem')->search({isbn => $isbn})->delete(); >+ } >+} >+ >+sub createTestGroup1 { >+ return t::db_dependent::TestObjects::Biblios::ExampleBiblios::createTestGroup1(); >+} >+sub deleteTestGroup1 { >+ return t::db_dependent::TestObjects::Biblios::ExampleBiblios::deleteTestGroup1(); >+} >+ >+1; >\ No newline at end of file >diff --git a/t/db_dependent/TestObjects/Biblios/ExampleBiblios.pm b/t/db_dependent/TestObjects/Biblios/ExampleBiblios.pm >new file mode 100644 >index 0000000..278f683 >--- /dev/null >+++ b/t/db_dependent/TestObjects/Biblios/ExampleBiblios.pm >@@ -0,0 +1,75 @@ >+package t::db_dependent::TestObjects::Biblios::ExampleBiblios; >+ >+# Copyright Vaara-kirjastot 2015 >+# >+# 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. >+# >+ >+use Modern::Perl; >+use Carp; >+ >+use t::db_dependent::TestObjects::Biblios::BiblioFactory; >+ >+=head createTestGroupX >+ >+ my $hash_of_records = TestObjects::C4::Biblio::ExampleBiblios::createTestGroup1(); >+ >+ ##Do stuff with the test group## >+ >+ #Remember to delete them after use. >+ TestObjects::C4::Biblio::ExampleBiblios::deleteTestGroup1($biblionumbers); >+=cut >+ >+my @testGroup1Identifiers = ('9519671580', '9519671581', '9519671582', '9519671583', >+ ); #So we can later delete these Biblios >+sub createTestGroup1 { >+ my @records = [ >+ { >+ "biblio.title" => 'I wish I met your mother', >+ "biblio.author" => 'Pertti Kurikka', >+ "biblio.copyrightdate" => '1960', >+ "biblioitems.isbn" => $testGroup1Identifiers[0], >+ "biblioitems.itemtype" => 'BK', >+ }, >+ { >+ "biblio.title" => 'Me and your mother', >+ "biblio.author" => 'Jaakko Kurikka', >+ "biblio.copyrightdate" => '1961', >+ "biblioitems.isbn" => $testGroup1Identifiers[1], >+ "biblioitems.itemtype" => 'BK', >+ }, >+ { >+ "biblio.title" => 'How I met your mother', >+ "biblio.author" => 'Martti Kurikka', >+ "biblio.copyrightdate" => '1962', >+ "biblioitems.isbn" => $testGroup1Identifiers[2], >+ "biblioitems.itemtype" => 'DV', >+ }, >+ { >+ "biblio.title" => 'How I wish I had met your mother', >+ "biblio.author" => 'Tapio Kurikka', >+ "biblio.copyrightdate" => '1963', >+ "biblioitems.isbn" => $testGroup1Identifiers[3], >+ "biblioitems.itemtype" => 'DV', >+ }, >+ ]; >+ return createTestGroup(\@records); >+} >+sub deleteTestGroup1 { >+ t::db_dependent::TestObjects::Biblios::BiblioFactory::_deleteTestGroupFromIdentifiers(\@testGroup1Identifiers); >+} >+ >+1; >diff --git a/t/db_dependent/TestObjects/Borrowers/BorrowerFactory.pm b/t/db_dependent/TestObjects/Borrowers/BorrowerFactory.pm >new file mode 100644 >index 0000000..7fb0cd6 >--- /dev/null >+++ b/t/db_dependent/TestObjects/Borrowers/BorrowerFactory.pm >@@ -0,0 +1,91 @@ >+package t::db_dependent::TestObjects::Borrowers::BorrowerFactory; >+ >+# Copyright Vaara-kirjastot 2015 >+# >+# 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. >+# >+ >+use Modern::Perl; >+use Carp; >+ >+use C4::Members; >+ >+use t::db_dependent::TestObjects::Borrowers::ExampleBorrowers; >+use t::db_dependent::TestObjects::ObjectFactory qw(getHashKey); >+ >+=head t::db_dependent::TestObjects::Borrowers::BorrowerFactory::createTestGroup( $data [, $hashKey] ) >+Returns a HASH of borrowers. >+The HASH is keyed with the PRIMARY KEY, or the given $hashKey. >+ >+See C4::Members::AddMember() for how the table columns need to be given. >+=cut >+ >+sub createTestGroup { >+ my ($objects, $hashKey) = @_; >+ >+ my %objects; >+ foreach my $object (@$objects) { >+ my $borrowernumber = C4::Members::AddMember(%$object); >+ #If adding failed, we still get some strange borrowernumber result. >+ #Check for sure by finding the real borrower. >+ my $borrower = C4::Members::GetMember(cardnumber => $object->{cardnumber}); >+ unless ($borrower) { >+ carp "BorrowerFactory:> No borrower for cardnumber '".$object->{cardnumber}."'"; >+ next(); >+ } >+ >+ my $key = t::db_dependent::TestObjects::ObjectFactory::getHashKey($borrower, $borrowernumber, $hashKey); >+ >+ $objects{$key} = $borrower; >+ } >+ return \%objects; >+} >+ >+=head >+ >+ my $records = createTestGroup(); >+ ##Do funky stuff >+ deleteTestGroup($records); >+ >+Removes the given test group from the DB. >+ >+=cut >+ >+sub deleteTestGroup { >+ my $objects = shift; >+ >+ my $schema = Koha::Database->new_schema(); >+ while( my ($key, $object) = each %$objects) { >+ $schema->resultset('Borrower')->find($object->{borrowernumber})->delete(); >+ } >+} >+sub _deleteTestGroupFromIdentifiers { >+ my $testGroupIdentifiers = shift; >+ >+ my $schema = Koha::Database->new_schema(); >+ foreach my $key (@$testGroupIdentifiers) { >+ $schema->resultset('Borrower')->find({"cardnumber" => $key})->delete(); >+ } >+} >+ >+sub createTestGroup1 { >+ return t::db_dependent::TestObjects::Borrowers::ExampleBorrowers::createTestGroup1(); >+} >+sub deleteTestGroup1 { >+ return t::db_dependent::TestObjects::Borrowers::ExampleBorrowers::deleteTestGroup1(); >+} >+ >+1; >\ No newline at end of file >diff --git a/t/db_dependent/TestObjects/Borrowers/ExampleBorrowers.pm b/t/db_dependent/TestObjects/Borrowers/ExampleBorrowers.pm >new file mode 100644 >index 0000000..51c1c94 >--- /dev/null >+++ b/t/db_dependent/TestObjects/Borrowers/ExampleBorrowers.pm >@@ -0,0 +1,60 @@ >+package t::db_dependent::TestObjects::Borrowers::ExampleBorrowers; >+ >+# Copyright Vaara-kirjastot 2015 >+# >+# 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. >+# >+ >+use Modern::Perl; >+use Carp; >+ >+use t::db_dependent::TestObjects::Borrowers::BorrowerFactory; >+ >+=head createTestGroupX >+ >+ You should use the appropriate Factory-class to create these test-objects. >+ >+=cut >+ >+my @testGroup1Identifiers = ('167Azel0001', '167Azel0002', '167Azel0003', '167Azel0004', >+ '167Azel0005', '167Azel0006', '167Azel0007', '167Azel0008', >+ ); >+sub createTestGroup1 { >+ my @borrowers = ( >+ {cardnumber => $testGroup1Identifiers[0], branchcode => 'CPL', categorycode => 'YA', >+ surname => 'Costly', firstname => 'Colt', address => 'Street 11', zipcode => '10221'}, >+ {cardnumber => $testGroup1Identifiers[1], branchcode => 'CPL', categorycode => 'YA', >+ surname => 'Dearly', firstname => 'Colt', address => 'Street 12', zipcode => '10222'}, >+ {cardnumber => $testGroup1Identifiers[2], branchcode => 'CPL', categorycode => 'YA', >+ surname => 'Pricy', firstname => 'Colt', address => 'Street 13', zipcode => '10223'}, >+ {cardnumber => $testGroup1Identifiers[3], branchcode => 'CPL', categorycode => 'YA', >+ surname => 'Expensive', firstname => 'Colt', address => 'Street 14', zipcode => '10224'}, >+ {cardnumber => $testGroup1Identifiers[4], branchcode => 'FTL', categorycode => 'YA', >+ surname => 'Cheap', firstname => 'Colt', address => 'Street 15', zipcode => '10225'}, >+ {cardnumber => $testGroup1Identifiers[5], branchcode => 'FTL', categorycode => 'YA', >+ surname => 'Poor', firstname => 'Colt', address => 'Street 16', zipcode => '10226'}, >+ {cardnumber => $testGroup1Identifiers[6], branchcode => 'FTL', categorycode => 'YA', >+ surname => 'Stingy', firstname => 'Colt', address => 'Street 17', zipcode => '10227'}, >+ {cardnumber => $testGroup1Identifiers[7], branchcode => 'FTL', categorycode => 'YA', >+ surname => 'Impoverished', firstname => 'Colt', address => 'Street 18', zipcode => '10228'}, >+ ); >+ return t::db_dependent::TestObjects::Borrowers::BorrowerFactory::createTestGroup(\@borrowers); >+} >+sub deleteTestGroup1 { >+ t::db_dependent::TestObjects::Borrowers::BorrowerFactory::_deleteTestGroupFromIdentifiers(\@testGroup1Identifiers); >+} >+ >+1; >\ No newline at end of file >diff --git a/t/db_dependent/TestObjects/Issues/ExampleIssues.pm b/t/db_dependent/TestObjects/Issues/ExampleIssues.pm >new file mode 100644 >index 0000000..c685722 >--- /dev/null >+++ b/t/db_dependent/TestObjects/Issues/ExampleIssues.pm >@@ -0,0 +1,41 @@ >+package t::db_dependent::TestObjects::Issues::ExampleIssues; >+ >+# Copyright Vaara-kirjastot 2015 >+# >+# 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. >+# >+ >+use Modern::Perl; >+use Carp; >+ >+use t::db_dependent::TestObjects::Issues::IssueFactory; >+ >+=head createTestGroupX >+ >+ You should use the appropriate Factory-class to create these test-objects. >+ >+=cut >+ >+ >+ >+sub createTestGroup1 { >+ return t::db_dependent::TestObjects::Issues::IssueFactory::createTestGroup(); >+} >+sub deleteTestGroup1 { >+ t::db_dependent::TestObjects::Issues::IssueFactory::_deleteTestGroupFromIdentifiers(); >+} >+ >+1; >\ No newline at end of file >diff --git a/t/db_dependent/TestObjects/Issues/IssueFactory.pm b/t/db_dependent/TestObjects/Issues/IssueFactory.pm >new file mode 100644 >index 0000000..5ab953d >--- /dev/null >+++ b/t/db_dependent/TestObjects/Issues/IssueFactory.pm >@@ -0,0 +1,142 @@ >+package t::db_dependent::TestObjects::Issues::IssueFactory; >+ >+# Copyright Vaara-kirjastot 2015 >+# >+# 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. >+# >+ >+use Modern::Perl; >+use Carp; >+ >+use C4::Circulation; >+use C4::Members; >+use C4::Items; >+ >+use t::db_dependent::TestObjects::Issues::ExampleIssues; >+use t::db_dependent::TestObjects::ObjectFactory; >+ >+=head t::db_dependent::TestObjects::Issues::IssueFactory::createTestGroup( $data [, $hashKey, $checkoutBranchRule] ) >+Returns a Issues-HASH. >+The HASH is keyed with the PRIMARY KEY, or the given $hashKey. >+ >+@PARAM1, ARRAY of HASHes. >+ [ { >+ cardnumber => '167Azava0001', >+ barcode => '167Nfafa0010', >+ daysOverdue => 7, #This issue's duedate was 7 days ago. If undef, then uses today as the checkout day. >+ daysAgoIssued => 28, #This Issue hapened 28 days ago. If undef, then uses today. >+ }, >+ { >+ ... >+ } >+ ] >+@PARAM2, String, the HASH-element to use as the returning HASHes key. >+@PARAM3, String, the rule on where to check these Issues out: >+ 'homebranch', uses the Item's homebranch as the checkout branch >+ 'holdingbranch', uses the Item's holdingbranch as the checkout branch >+ undef, uses the current Environment branch >+ '<branchCode>', checks out all Issues from the given branchCode >+=cut >+ >+sub createTestGroup { >+ my ($objects, $hashKey, $checkoutBranchRule) = @_; >+ >+ my $oldContextBranch = C4::Context->userenv()->{branch}; >+ >+ my %objects; >+ foreach my $issueParams (@$objects) { >+ my $borrower = C4::Members::GetMember(cardnumber => $issueParams->{cardnumber}); >+ my $item = C4::Items::GetItem(undef, $issueParams->{barcode}); >+ >+ my $duedate = DateTime->now(time_zone => C4::Context->tz()); >+ if ($issueParams->{daysOverdue}) { >+ $duedate->subtract(days => $issueParams->{daysOverdue} ); >+ } >+ >+ my $issuedate = DateTime->now(time_zone => C4::Context->tz()); >+ if ($issueParams->{daysAgoIssued}) { >+ $issuedate->subtract(days => $issueParams->{daysAgoIssued} ); >+ } >+ >+ #Set the checkout branch >+ my $checkoutBranch; >+ if (not($checkoutBranchRule)) { >+ #Use the existing userenv()->{branch} >+ } >+ elsif ($checkoutBranchRule eq 'homebranch') { >+ $checkoutBranch = $item->{homebranch}; >+ } >+ elsif ($checkoutBranchRule eq 'holdingbranch') { >+ $checkoutBranch = $item->{holdingbranch}; >+ } >+ elsif ($checkoutBranchRule) { >+ $checkoutBranch = $checkoutBranchRule; >+ } >+ C4::Context->userenv()->{branch} = $checkoutBranch if $checkoutBranch; >+ >+ my $datedue = C4::Circulation::AddIssue( $borrower, $issueParams->{barcode}, $duedate, undef, $issuedate ); >+ #We want the issue_id as well. >+ my $issues = C4::Circulation::GetIssues({ borrowernumber => $borrower->{borrowernumber}, itemnumber => $item->{itemnumber} }); >+ my $issue = $issues->[0]; >+ unless ($issue) { >+ carp "IssueFactory:> No issue for cardnumber '".$issueParams->{cardnumber}."' and barcode '".$issueParams->{barcode}."'"; >+ next(); >+ } >+ >+ my $key = t::db_dependent::TestObjects::ObjectFactory::getHashKey($issue, $issue->{issueid}, $hashKey); >+ >+ $objects{$key} = $issue; >+ } >+ >+ C4::Context->userenv()->{branch} = $oldContextBranch; >+ return \%objects; >+} >+ >+=head >+ >+ my $objects = createTestGroup(); >+ ##Do funky stuff >+ deleteTestGroup($records); >+ >+Removes the given test group from the DB. >+ >+=cut >+ >+sub deleteTestGroup { >+ my $objects = shift; >+ >+ my $schema = Koha::Database->new_schema(); >+ while( my ($key, $object) = each %$objects) { >+ $schema->resultset('Issue')->find($object->{issueid})->delete(); >+ } >+} >+sub _deleteTestGroupFromIdentifiers { >+ my $testGroupIdentifiers = shift; >+ >+ my $schema = Koha::Database->new_schema(); >+ foreach my $key (@$testGroupIdentifiers) { >+ $schema->resultset('Issue')->find({"barcode" => $key})->delete(); >+ } >+} >+ >+sub createTestGroup1 { >+ return t::db_dependent::TestObjects::Issues::ExampleIssues::createTestGroup1(); >+} >+sub deleteTestGroup1 { >+ return t::db_dependent::TestObjects::Issues::ExampleIssues::deleteTestGroup1(); >+} >+ >+1; >\ No newline at end of file >diff --git a/t/db_dependent/TestObjects/Items/ExampleItems.pm b/t/db_dependent/TestObjects/Items/ExampleItems.pm >new file mode 100644 >index 0000000..62c2cb4 >--- /dev/null >+++ b/t/db_dependent/TestObjects/Items/ExampleItems.pm >@@ -0,0 +1,99 @@ >+package t::db_dependent::TestObjects::Items::ExampleItems; >+ >+# Copyright Vaara-kirjastot 2015 >+# >+# 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. >+# >+ >+use Modern::Perl; >+use Carp; >+ >+use t::db_dependent::TestObjects::Items::ItemFactory; >+ >+=head createTestGroupX >+ >+ You should use the appropriate Factory-class to create these test-objects. >+ >+=cut >+ >+my @testGroup1Identifiers = ('167Nxxx0001', '167Nxxx0002', '167Nxxx0003', '167Nxxx0004', >+ '167Nxxx0005', '167Nxxx0006', '167Nxxx0007', '167Nxxx0008', >+ ); >+ >+sub shareItemsToBiblios { >+ my ($items, $biblios) = @_; >+ my @biblioKeys = keys %$biblios; >+ >+ for (my $i=0 ; $i<@$items ; $i++) { >+ my $item = $items->[$i]; >+ my $biblioKey = $biblioKeys[ $i % scalar(@$biblios) ]; #Split these Items to each of the Biblios >+ my $biblio = $biblios->{$biblioKey}; >+ >+ unless ($biblio && $biblio->{biblionumber}) { >+ carp "ExampleItems:> Item \$barcode '".$item->{barcode}."' doesn't have a biblionumber, skipping."; >+ next(); >+ } >+ $item->{biblionumber} = $biblio->{biblionumber}; >+ } >+} >+ >+sub createTestGroup1 { >+ my $biblios = shift; >+ >+ my @items = ( >+ {barcode => $testGroup1Identifiers[0], >+ homebranch => 'CPL', holdingbranch => 'CPL', >+ price => '0.5', replacementprice => '0.5', itype => 'BK' >+ }, >+ {barcode => $testGroup1Identifiers[1], >+ homebranch => 'CPL', holdingbranch => 'FFL', >+ price => '1.5', replacementprice => '1.5', itype => 'BK' >+ }, >+ {barcode => $testGroup1Identifiers[2], >+ homebranch => 'CPL', holdingbranch => 'FFL', >+ price => '2.5', replacementprice => '2.5', itype => 'BK' >+ }, >+ {barcode => $testGroup1Identifiers[3], >+ homebranch => 'FFL', holdingbranch => 'FFL', >+ price => '3.5', replacementprice => '3.5', itype => 'BK' >+ }, >+ {barcode => $testGroup1Identifiers[4], >+ homebranch => 'FFL', holdingbranch => 'FFL', >+ price => '4.5', replacementprice => '4.5', itype => 'VM' >+ }, >+ {barcode => $testGroup1Identifiers[5], >+ homebranch => 'FFL', holdingbranch => 'FFL', >+ price => '5.5', replacementprice => '5.5', itype => 'VM' >+ }, >+ {barcode => $testGroup1Identifiers[6], >+ homebranch => 'FFL', holdingbranch => 'CPL', >+ price => '6.5', replacementprice => '6.5', itype => 'VM' >+ }, >+ {barcode => $testGroup1Identifiers[7], >+ homebranch => 'CPL', holdingbranch => 'CPL', >+ price => '7.5', replacementprice => '7.5', itype => 'VM' >+ }, >+ ); >+ >+ shareItemsToBiblios(\@items, $biblios); >+ >+ return t::db_dependent::TestObjects::Items::ItemFactory::createTestGroup(\@items); >+} >+sub deleteTestGroup1 { >+ t::db_dependent::TestObjects::Items::ItemFactory::_deleteTestGroupFromIdentifiers(\@testGroup1Identifiers); >+} >+ >+1; >\ No newline at end of file >diff --git a/t/db_dependent/TestObjects/Items/ItemFactory.pm b/t/db_dependent/TestObjects/Items/ItemFactory.pm >new file mode 100644 >index 0000000..739b197 >--- /dev/null >+++ b/t/db_dependent/TestObjects/Items/ItemFactory.pm >@@ -0,0 +1,92 @@ >+package t::db_dependent::TestObjects::Items::ItemFactory; >+ >+# Copyright Vaara-kirjastot 2015 >+# >+# 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. >+# >+ >+use Modern::Perl; >+use Carp; >+ >+use C4::Items; >+ >+use t::db_dependent::TestObjects::Items::ExampleItems; >+use t::db_dependent::TestObjects::ObjectFactory; >+ >+=head t::db_dependent::TestObjects::Items::ItemFactory::createTestGroup( $data [, $hashKey] ) >+Returns a HASH of objects. >+Each Item is expected to contain the biblionumber of the Biblio they are added into. >+ eg. $item->{biblionumber} = 550242; >+ >+The HASH is keyed with the PRIMARY KEY, or the given $hashKey. >+ >+See C4::Items::AddItem() for how the table columns need to be given. >+=cut >+ >+sub createTestGroup { >+ my ($objects, $hashKey) = @_; >+ >+ my %objects; >+ foreach my $object (@$objects) { >+ my ($biblionumber, $biblioitemnumber, $itemnumber) = C4::Items::AddItem($object, $object->{biblionumber}); >+ my $item = C4::Items::GetItem($itemnumber, undef); >+ unless ($item) { >+ carp "ItemFactory:> No item for barcode '".$object->{barcode}."'"; >+ next(); >+ } >+ >+ my $key = t::db_dependent::TestObjects::ObjectFactory::getHashKey($item, $itemnumber, $hashKey); >+ >+ $objects{$key} = $item; >+ } >+ return \%objects; >+} >+ >+=head >+ >+ my $objects = createTestGroup(); >+ ##Do funky stuff >+ deleteTestGroup($records); >+ >+Removes the given test group from the DB. >+ >+=cut >+ >+sub deleteTestGroup { >+ my $objects = shift; >+ >+ my $schema = Koha::Database->new_schema(); >+ while( my ($key, $object) = each %$objects) { >+ $schema->resultset('Item')->find($object->{itemnumber})->delete(); >+ } >+} >+sub _deleteTestGroupFromIdentifiers { >+ my $testGroupIdentifiers = shift; >+ >+ my $schema = Koha::Database->new_schema(); >+ foreach my $key (@$testGroupIdentifiers) { >+ $schema->resultset('Item')->find({"barcode" => $key})->delete(); >+ } >+} >+ >+sub createTestGroup1 { >+ return t::db_dependent::TestObjects::Items::ExampleItems::createTestGroup1(); >+} >+sub deleteTestGroup1 { >+ return t::db_dependent::TestObjects::Items::ExampleItems::deleteTestGroup1(); >+} >+ >+1; >\ No newline at end of file >diff --git a/t/db_dependent/TestObjects/LetterTemplates/ExampleLetterTemplates.pm b/t/db_dependent/TestObjects/LetterTemplates/ExampleLetterTemplates.pm >new file mode 100644 >index 0000000..4e0da09 >--- /dev/null >+++ b/t/db_dependent/TestObjects/LetterTemplates/ExampleLetterTemplates.pm >@@ -0,0 +1,92 @@ >+package t::db_dependent::TestObjects::LetterTemplates::ExampleLetterTemplates; >+ >+# Copyright Vaara-kirjastot 2015 >+# >+# 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. >+# >+ >+use Modern::Perl; >+use Carp; >+ >+use t::db_dependent::TestObjects::LetterTemplates::LetterTemplateFactory; >+ >+=head createTestGroupX >+ >+ You should use the appropriate Factory-class to create these test-objects. >+ >+=cut >+ >+my @testGroup1Identifiers = ('circulation-ODUE1-CPL-print', 'circulation-ODUE2-CPL-print', 'circulation-ODUE3-CPL-print', >+ 'circulation-ODUE1-CPL-email', 'circulation-ODUE2-CPL-email', 'circulation-ODUE3-CPL-email', >+ 'circulation-ODUE1-CPL-sms', 'circulation-ODUE2-CPL-sms', 'circulation-ODUE3-CPL-sms', >+ ); >+ >+sub createTestGroup1 { >+ my @letterTemplates = ( >+ {letter_id => $testGroup1Identifiers[0], >+ module => 'circulation', code => 'ODUE1', branchcode => 'CPL', name => 'Notice1', >+ is_html => undef, title => 'Notice1', message_transport_type => 'print', >+ content => '<item>Barcode: <<items.barcode>>, bring it back!</item>', >+ }, >+ {letter_id => $testGroup1Identifiers[0], >+ module => 'circulation', code => 'ODUE2', branchcode => 'CPL', name => 'Notice2', >+ is_html => undef, title => 'Notice2', message_transport_type => 'print', >+ content => '<item>Barcode: <<items.barcode>></item>', >+ }, >+ {letter_id => $testGroup1Identifiers[0], >+ module => 'circulation', code => 'ODUE3', branchcode => 'CPL', name => 'Notice3', >+ is_html => undef, title => 'Notice3', message_transport_type => 'print', >+ content => '<item>Barcode: <<items.barcode>>, bring back!</item>', >+ }, >+ {letter_id => $testGroup1Identifiers[0], >+ module => 'circulation', code => 'ODUE1', branchcode => 'CPL', name => 'Notice1', >+ is_html => undef, title => 'Notice1', message_transport_type => 'email', >+ content => '<item>Barcode: <<items.barcode>>, bring it back!</item>', >+ }, >+ {letter_id => $testGroup1Identifiers[0], >+ module => 'circulation', code => 'ODUE2', branchcode => 'CPL', name => 'Notice2', >+ is_html => undef, title => 'Notice2', message_transport_type => 'email', >+ content => '<item>Barcode: <<items.barcode>></item>', >+ }, >+ {letter_id => $testGroup1Identifiers[0], >+ module => 'circulation', code => 'ODUE3', branchcode => 'CPL', name => 'Notice3', >+ is_html => undef, title => 'Notice3', message_transport_type => 'email', >+ content => '<item>Barcode: <<items.barcode>>, bring back!</item>', >+ }, >+ {letter_id => $testGroup1Identifiers[0], >+ module => 'circulation', code => 'ODUE1', branchcode => 'CPL', name => 'Notice1', >+ is_html => undef, title => 'Notice1', message_transport_type => 'sms', >+ content => '<item>Barcode: <<items.barcode>>, bring it back!</item>', >+ }, >+ {letter_id => $testGroup1Identifiers[0], >+ module => 'circulation', code => 'ODUE2', branchcode => 'CPL', name => 'Notice2', >+ is_html => undef, title => 'Notice2', message_transport_type => 'sms', >+ content => '<item>Barcode: <<items.barcode>></item>', >+ }, >+ {letter_id => $testGroup1Identifiers[0], >+ module => 'circulation', code => 'ODUE3', branchcode => 'CPL', name => 'Notice3', >+ is_html => undef, title => 'Notice3', message_transport_type => 'sms', >+ content => '<item>Barcode: <<items.barcode>>, bring back!</item>', >+ }, >+ ); >+ >+ return t::db_dependent::TestObjects::LetterTemplates::LetterTemplateFactory::createTestGroup(\@letterTemplates); >+} >+sub deleteTestGroup1 { >+ t::db_dependent::TestObjects::LetterTemplates::LetterTemplateFactory::_deleteTestGroupFromIdentifiers(\@testGroup1Identifiers); >+} >+ >+1; >\ No newline at end of file >diff --git a/t/db_dependent/TestObjects/LetterTemplates/LetterTemplateFactory.pm b/t/db_dependent/TestObjects/LetterTemplates/LetterTemplateFactory.pm >new file mode 100644 >index 0000000..0f55090 >--- /dev/null >+++ b/t/db_dependent/TestObjects/LetterTemplates/LetterTemplateFactory.pm >@@ -0,0 +1,101 @@ >+package t::db_dependent::TestObjects::LetterTemplates::LetterTemplateFactory; >+ >+# Copyright Vaara-kirjastot 2015 >+# >+# 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. >+# >+ >+use Modern::Perl; >+use Carp; >+ >+use C4::Letters; >+ >+use t::db_dependent::TestObjects::LetterTemplates::ExampleLetterTemplates; >+use t::db_dependent::TestObjects::ObjectFactory qw(getHashKey); >+ >+=head t::db_dependent::TestObjects::LetterTemplates::LetterTemplateFactory::createTestGroup( $data [, $hashKey] ) >+Returns a HASH of Koha::Schema::Result::Letter >+The HASH is keyed with the PRIMARY KEYS eg. 'circulation-ODUE2-CPL-print', or the given $hashKey. >+=cut >+ >+#Incredibly the Letters-module has absolutely no Create or Update-component to operate on Letter templates? >+#Tests like these are brittttle. :( >+sub createTestGroup { >+ my ($objects, $hashKey) = @_; >+ >+ my %objects; >+ my $schema = Koha::Database->new()->schema(); >+ foreach my $object (@$objects) { >+ my $rs = $schema->resultset('Letter'); >+ my $result = $rs->update_or_create({ >+ module => $object->{module}, >+ code => $object->{code}, >+ branchcode => ($object->{branchcode}) ? $object->{branchcode} : '', >+ name => $object->{name}, >+ is_html => $object->{is_html}, >+ title => $object->{title}, >+ message_transport_type => $object->{message_transport_type}, >+ content => $object->{content}, >+ }); >+ >+ my @pks = $result->id(); >+ my $key = t::db_dependent::TestObjects::ObjectFactory::getHashKey($object, join('-',@pks), $hashKey); >+ >+ $objects{$key} = $result; >+ } >+ return \%objects; >+} >+ >+=head >+ >+ my $objects = createTestGroup(); >+ ##Do funky stuff >+ deleteTestGroup($records); >+ >+Removes the given test group from the DB. >+ >+=cut >+ >+sub deleteTestGroup { >+ my $objects = shift; >+ >+ my $schema = Koha::Database->new_schema(); >+ while( my ($key, $object) = each %$objects) { >+ $object->delete(); >+ } >+} >+sub _deleteTestGroupFromIdentifiers { >+ my $testGroupIdentifiers = shift; >+ >+ my $schema = Koha::Database->new_schema(); >+ foreach my $key (@$testGroupIdentifiers) { >+ my ($module, $code, $branchcode, $mtt) = split('-',$key); >+ $schema->resultset('Letter')->find({module => $module, >+ code => $code, >+ branchcode => $branchcode, >+ message_transport_type => $mtt, >+ })->delete(); >+ } >+} >+ >+sub createTestGroup1 { >+ return t::db_dependent::TestObjects::LetterTemplates::ExampleLetterTemplates::createTestGroup1(); >+} >+sub deleteTestGroup1 { >+ return t::db_dependent::TestObjects::LetterTemplates::ExampleLetterTemplates::deleteTestGroup1(); >+} >+ >+1; >\ No newline at end of file >diff --git a/t/db_dependent/TestObjects/ObjectFactory.pm b/t/db_dependent/TestObjects/ObjectFactory.pm >new file mode 100644 >index 0000000..0f96bc9 >--- /dev/null >+++ b/t/db_dependent/TestObjects/ObjectFactory.pm >@@ -0,0 +1,33 @@ >+package t::db_dependent::TestObjects::ObjectFactory; >+ >+# Copyright Vaara-kirjastot 2015 >+# >+# 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. >+# >+ >+use Modern::Perl; >+use Carp; >+ >+sub getHashKey { >+ my ($object, $primaryKey, $hashKey) = @_; >+ >+ if ($hashKey && not($object->{$hashKey})) { >+ carp "BiblioFactory::getHashKey($object, $primaryKey, $hashKey):> Given HASH has no \$hashKey '$hashKey'."; >+ } >+ return ($hashKey) ? $object->{$hashKey} : $primaryKey; >+} >+ >+1; >\ No newline at end of file >-- >1.7.9.5
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 13906
:
37216
|
40071
|
40072
|
40078
|
41021
|
41119
|
41154
|
41251
|
41459
|
41531
|
42108
|
42141
|
42161
|
42169
|
42430
|
42552
|
42563
|
42602
|
44293
|
47244
|
47253
|
63244