[Koha-patches] [PATCH] Bug 10508 : C4::Branch.pm needs unit tests.

Srdjan srdjan at catalyst.net.nz
Fri Jul 19 03:56:34 CEST 2013


From: Kenza Zaki <kenza.zaki at biblibre.com>

Unit tests are wrap in a transaction.

NOTE: the field "issuing" isn't used in the database

To test:
prove t/db_dependent/Branch.t
t/db_dependent/Branch.t .. ok
All tests successful.
Files=1, Tests=31,  0 wallclock secs ( 0.03 usr  0.00 sys +  0.13 cusr  0.00 csys =  0.16 CPU)
Result: PASS

Signed-off-by: Srdjan <srdjan at catalyst.net.nz>
---
 C4/Branch.pm            |  10 --
 t/db_dependent/Branch.t | 298 ++++++++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 291 insertions(+), 17 deletions(-)

diff --git a/C4/Branch.pm b/C4/Branch.pm
index 8b76771..c1e3587 100644
--- a/C4/Branch.pm
+++ b/C4/Branch.pm
@@ -182,7 +182,6 @@ sub GetBranchName {
     $sth = $dbh->prepare("Select branchname from branches where branchcode=?");
     $sth->execute($branchcode);
     my $branchname = $sth->fetchrow_array;
-    $sth->finish;
     return ($branchname);
 }
 
@@ -278,7 +277,6 @@ sub ModBranch {
 "insert into branchrelations (branchcode, categorycode) values(?, ?)"
           );
         $sth->execute( $branchcode, $cat );
-        $sth->finish;
     }
     foreach my $cat (@removecats) {
         my $sth =
@@ -286,7 +284,6 @@ sub ModBranch {
             "delete from branchrelations where branchcode=? and categorycode=?"
           );
         $sth->execute( $branchcode, $cat );
-        $sth->finish;
     }
 }
 
@@ -422,7 +419,6 @@ sub GetBranchesInCategory {
 	while (my $branch = $sth->fetchrow) {
 		push @branches, $branch;
 	}
-	$sth->finish();
 	return( \@branches );
 }
 
@@ -467,11 +463,9 @@ sub GetBranchInfo {
         while ( my ($cat) = $nsth->fetchrow_array ) {
             push( @cats, $cat );
         }
-        $nsth->finish;
         $data->{'categories'} = \@cats;
         push( @results, $data );
     }
-    $sth->finish;
     return \@results;
 }
 
@@ -486,7 +480,6 @@ sub DelBranch {
     my $dbh = C4::Context->dbh;
     my $sth = $dbh->prepare("delete from branches where branchcode = ?");
     $sth->execute($branchcode);
-    $sth->finish;
 }
 
 =head2 ModBranchCategoryInfo
@@ -503,13 +496,11 @@ sub ModBranchCategoryInfo {
 	# we are doing an insert
   my $sth   = $dbh->prepare("INSERT INTO branchcategories (categorycode,categoryname,codedescription,categorytype,show_in_pulldown) VALUES (?,?,?,?,?)");
         $sth->execute(uc( $data->{'categorycode'} ),$data->{'categoryname'}, $data->{'codedescription'},$data->{'categorytype'},$data->{'show_in_pulldown'} );
-	$sth->finish();		
     }
     else {
 	# modifying
         my $sth = $dbh->prepare("UPDATE branchcategories SET categoryname=?,codedescription=?,categorytype=?,show_in_pulldown=? WHERE categorycode=?");
         $sth->execute($data->{'categoryname'}, $data->{'codedescription'},$data->{'categorytype'},$data->{'show_in_pulldown'},uc( $data->{'categorycode'} ) );
-	$sth->finish();
     }
 }
 
@@ -546,7 +537,6 @@ sub DelBranchCategory {
     my $dbh = C4::Context->dbh;
     my $sth = $dbh->prepare("delete from branchcategories where categorycode = ?");
     $sth->execute($categorycode);
-    $sth->finish;
 }
 
 =head2 CheckBranchCategorycode
diff --git a/t/db_dependent/Branch.t b/t/db_dependent/Branch.t
index cc19f21..4251816 100644
--- a/t/db_dependent/Branch.t
+++ b/t/db_dependent/Branch.t
@@ -21,7 +21,7 @@ use Modern::Perl;
 use C4::Context;
 use Data::Dumper;
 
-use Test::More tests => 6;
+use Test::More ;#tests => 6;
 
 use C4::Branch;
 
@@ -30,6 +30,29 @@ BEGIN {
     use lib $FindBin::Bin;
     use_ok('C4::Branch');
 }
+can_ok(
+    'C4::Branch', qw(
+      GetBranchCategory
+      GetBranchName
+      GetBranch
+      GetBranches
+      GetBranchesLoop
+      GetBranchDetail
+      get_branchinfos_of
+      ModBranch
+      CheckBranchCategorycode
+      GetBranchInfo
+      GetCategoryTypes
+      GetBranchCategories
+      GetBranchesInCategory
+      ModBranchCategoryInfo
+      DelBranch
+      DelBranchCategory
+      CheckCategoryUnique
+      mybranch
+      GetBranchesCount)
+);
+
 
 # Start transaction
 my $dbh = C4::Context->dbh;
@@ -39,8 +62,127 @@ $dbh->{RaiseError} = 1;
 # clear the slate
 $dbh->do('DELETE FROM branchcategories');
 
-my @category_types = GetCategoryTypes();
-is_deeply(\@category_types, [ 'searchdomain', 'properties' ], 'received expected library category types');
+# Start test
+
+my $count = GetBranchesCount;
+like( $count, '/^\d+$/', "the count is a number" );
+
+#add 2 branches
+my $b1 = {
+    add            => 1,
+    branchcode     => 'BRA',
+    branchname     => 'BranchA',
+    branchaddress1 => 'adr1A',
+    branchaddress2 => 'adr2A',
+    branchaddress3 => 'adr3A',
+    branchzip      => 'zipA',
+    branchcity     => 'cityA',
+    branchstate    => 'stateA',
+    branchcountry  => 'countryA',
+    branchphone    => 'phoneA',
+    branchfax      => 'faxA',
+    branchemail    => 'emailA',
+    branchurl      => 'urlA',
+    branchip       => 'ipA',
+    branchprinter  => undef,
+    branchnotes    => 'noteA',
+    opac_info      => 'opacA'
+};
+my $b2 = {
+    branchcode     => 'BRB',
+    branchname     => 'BranchB',
+    branchaddress1 => 'adr1B',
+    branchaddress2 => 'adr2B',
+    branchaddress3 => 'adr3B',
+    branchzip      => 'zipB',
+    branchcity     => 'cityB',
+    branchstate    => 'stateB',
+    branchcountry  => 'countryB',
+    branchphone    => 'phoneB',
+    branchfax      => 'faxB',
+    branchemail    => 'emailB',
+    branchurl      => 'urlB',
+    branchip       => 'ipB',
+    branchprinter  => undef,
+    branchnotes    => 'noteB',
+    opac_info      => 'opacB',
+};
+ModBranch($b1);
+is( ModBranch($b2), undef, 'the field add is missing' );
+
+$b2->{add} = 1;
+ModBranch($b2);
+is( GetBranchesCount, $count + 2, "two branches added" );
+
+#Test DelBranch
+
+is( DelBranch( $b2->{branchcode} ), 1,          "One row affected" );
+is( GetBranchesCount,               $count + 1, "branch BRB deleted" );
+
+#Test GetBranchName
+is( GetBranchName( $b1->{branchcode} ),
+    $b1->{branchname}, "GetBranchName returns the right name" );
+
+#Test GetBranchDetail
+my $branchdetail = GetBranchDetail( $b1->{branchcode} );
+$branchdetail->{add} = 1;
+$b1->{issuing}       = undef;    # Not used in DB
+is_deeply( $branchdetail, $b1, 'branchdetail is right' );
+
+#Test Getbranches
+my $branches = GetBranches;
+is( scalar( keys %$branches ),
+    GetBranchesCount, "GetBranches returns the right number of branches" );
+
+#Test ModBranch
+
+$b1 = {
+    branchcode     => 'BRA',
+    branchname     => 'BranchA modified',
+    branchaddress1 => 'adr1A modified',
+    branchaddress2 => 'adr2A modified',
+    branchaddress3 => 'adr3A modified',
+    branchzip      => 'zipA modified',
+    branchcity     => 'cityA modified',
+    branchstate    => 'stateA modified',
+    branchcountry  => 'countryA modified',
+    branchphone    => 'phoneA modified',
+    branchfax      => 'faxA modified',
+    branchemail    => 'emailA modified',
+    branchurl      => 'urlA modified',
+    branchip       => 'ipA modified',
+    branchprinter  => undef,
+    branchnotes    => 'notesA modified',
+    opac_info      => 'opacA modified'
+};
+
+ModBranch($b1);
+is( GetBranchesCount, $count + 1,
+    "A branch has been modified, no new branch added" );
+$branchdetail = GetBranchDetail( $b1->{branchcode} );
+$b1->{issuing} = undef;
+is_deeply( $branchdetail, $b1 );
+
+#Test categories
+my $categories = GetBranchCategories;
+my $count_cat  = scalar( keys $categories );
+
+my $cat1 = {
+    add              => 1,
+    categorycode     => 'CAT1',
+    categoryname     => 'catname1',
+    codedescription  => 'catdesc1',
+    categorytype     => 'cattype1',
+    show_in_pulldown => 1
+};
+my $cat2 = {
+    add              => 1,
+    categorycode     => 'CAT2',
+    categoryname     => 'catname2',
+    categorytype     => 'catype2',
+    codedescription  => 'catdesc2',
+    show_in_pulldown => 1
+};
 
 my %new_category = (
     categorycode     => 'LIBCATCODE',
@@ -49,21 +191,163 @@ my %new_category = (
     categorytype     => 'searchdomain',
     show_in_pulldown => 1,
 );
+
 ModBranchCategoryInfo({
     add => 1,
     %new_category,
 });
 
+ModBranchCategoryInfo($cat1);
+ModBranchCategoryInfo($cat2);
+
+$categories = GetBranchCategories;
+is( scalar( keys $categories ), $count_cat + 3, "Two categories added" );
+delete $cat1->{add};
+delete $cat2->{add};
+delete %new_category->{add};
+is_deeply($categories, [ $cat1,$cat2,\%new_category ], 'retrieve all expected library categories (bug 10515)');
+
+#test GetBranchCategory
+my $cat1detail = GetBranchCategory( $cat1->{categorycode} );
+delete $cat1->{add};
+is_deeply( $cat1detail, $cat1, 'CAT1 details are right' );
 my $category = GetBranchCategory('LIBCATCODE');
 is_deeply($category, \%new_category, 'fetched newly added library category');
 
+#Test DelBranchCategory
+my $del = DelBranchCategory( $cat2->{categorycode} );
+is( $del, 1, 'One row affected' );
+
+$categories = GetBranchCategories;
+is( scalar( keys $categories ), $count_cat + 2, "Category  CAT2 deleted" );
+
+my $cat2detail = GetBranchCategory( $cat2->{categorycode} );
+is( $cat2detail, undef, 'CAT2 doesnt exist' );
+
 $category = GetBranchCategory();
 is($category, undef, 'retrieve library category only if code is supplied (bug 10515)');
 
-my $categories = GetBranchCategories();
-is_deeply($categories, [ \%new_category ], 'retrieve all expected library categories (bug 10515)');
+#Test CheckBranchCategoryCode
+my $check1 = CheckBranchCategorycode( $cat1->{categorycode} );
+my $check2 = CheckBranchCategorycode( $cat2->{categorycode} );
+like( $check1, '/^\d+$/', "CheckBranchCategorycode returns a number" );
+
+$b2->{CAT1} = 1;
+ModBranch($b2);
+is( GetBranchesCount, $count + 2, 'BRB added' );
+is(
+    CheckBranchCategorycode( $cat1->{categorycode} ),
+    $check1 + 1,
+    'BRB added to CAT1'
+);
+
+#Test GetBranchInfo
+my $b1info = GetBranchInfo( $b1->{branchcode} );
+$b1->{categories} = [];
+is_deeply( @$b1info[0], $b1, 'BRA has no categories' );
+
+my $b2info = GetBranchInfo( $b2->{branchcode} );
+my @cat    = ( $cat1->{categorycode} );
+delete $b2->{add};
+delete $b2->{CAT1};
+$b2->{issuing}    = undef;
+$b2->{categories} = \@cat;
+is_deeply( @$b2info[0], $b2, 'BRB has the category CAT1' );
+
+ModBranchCategoryInfo({add => 1,%$cat2});
+$categories = GetBranchCategories;
+is( scalar( keys $categories ), $count_cat + 3, "Two categories added" );
+$b2 = {
+    branchcode     => 'BRB',
+    branchname     => 'BranchB',
+    branchaddress1 => 'adr1B',
+    branchaddress2 => 'adr2B',
+    branchaddress3 => 'adr3B',
+    branchzip      => 'zipB',
+    branchcity     => 'cityB',
+    branchstate    => 'stateB',
+    branchcountry  => 'countryB',
+    branchphone    => 'phoneB',
+    branchfax      => 'faxB',
+    branchemail    => 'emailB',
+    branchurl      => 'urlB',
+    branchip       => 'ipB',
+    branchprinter  => undef,
+    branchnotes    => 'noteB',
+    opac_info      => 'opacB',
+    CAT1           => 1,
+    CAT2           => 1
+};
+ModBranch($b2);
+$b2info = GetBranchInfo( $b2->{branchcode} );
+is(
+    CheckBranchCategorycode( $cat2->{categorycode} ),
+    $check2 + 1,
+    'BRB added to CAT2'
+);
+push( @cat, $cat2->{categorycode} );
+delete $b2->{CAT1};
+delete $b2->{CAT2};
+$b2->{issuing}    = undef;
+$b2->{categories} = \@cat;
+is_deeply( @$b2info[0], $b2, 'BRB has the category CAT1 and CAT2' );
+
+#Test GetBranchesInCategory
+my $brCat1 = GetBranchesInCategory( $cat1->{categorycode} );
+my @b      = ( $b2->{branchcode} );
+is_deeply( $brCat1, \@b, 'CAT1 has branch BRB' );
+
+my $b3 = {
+    add            => 1,
+    branchcode     => 'BRC',
+    branchname     => 'BranchC',
+    branchaddress1 => 'adr1C',
+    branchaddress2 => 'adr2C',
+    branchaddress3 => 'adr3C',
+    branchzip      => 'zipC',
+    branchcity     => 'cityC',
+    branchstate    => 'stateC',
+    branchcountry  => 'countryC',
+    branchphone    => 'phoneC',
+    branchfax      => 'faxC',
+    branchemail    => 'emailC',
+    branchurl      => 'urlC',
+    branchip       => 'ipC',
+    branchprinter  => undef,
+    branchnotes    => 'noteC',
+    opac_info      => 'opacC',
+    CAT1           => 1,
+    CAT2           => 1
+};
+ModBranch($b3);
+$brCat1 = GetBranchesInCategory( $cat1->{categorycode} );
+push( @b, $b3->{branchcode} );
+is_deeply( $brCat1, \@b, 'CAT1 has branch BRB and BRC' );
+is(
+    CheckBranchCategorycode( $cat1->{categorycode} ),
+    $check1 + 2,
+    'BRC has been added to CAT1'
+);
+
+#Test CheckCategoryUnique
+is( CheckCategoryUnique('CAT2'),          0, 'CAT2 exists' );
+is( CheckCategoryUnique('CAT_NO_EXISTS'), 1, 'CAT_NO_EXISTS doesnt exist' );
+
+#Test GetCategoryTypes
+my @category_types = GetCategoryTypes();
+is_deeply(\@category_types, [ 'searchdomain', 'properties' ], 'received expected library category types');
 
 $categories = GetBranchCategories(undef, undef, 'LIBCATCODE');
-is_deeply($categories, [ { %new_category, selected => 1 } ], 'retrieve expected, eselected library category (bug 10515)');
+is_deeply($categories, [ {%$cat1}, {%$cat2},{ %new_category, selected => 1 } ], 'retrieve expected, eselected library category (bug 10515)');
+
+#TODO later: test mybranchine and onlymine
+# Actually we cannot mock C4::Context->userenv in unit tests
+
+#Test GetBranchesLoop
+my $loop = GetBranchesLoop;
+is( scalar(@$loop), GetBranchesCount, 'There is the right number of branches' );
+
+# End transaction
+$dbh->rollback;
 
-$dbh->rollback();
+done_testing;
-- 
1.8.1.2


More information about the Koha-patches mailing list