Bug 12583: DelItem prototype - Add unit tests
authorJonathan Druart <jonathan.druart@biblibre.com>
Wed, 16 Jul 2014 12:07:33 +0000 (14:07 +0200)
committerTomas Cohen Arazi <tomascohen@gmail.com>
Fri, 25 Jul 2014 22:06:19 +0000 (19:06 -0300)
DelItem should return 1 if the item has been deleted, otherwise 0.

Test plan:
Verify that t/db_dependent/Items/DelItem.t returns green

Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
C4/Items.pm
t/db_dependent/Items/DelItem.t [new file with mode: 0644]

index 4aaa078..fe05814 100644 (file)
@@ -648,8 +648,11 @@ sub DelItem {
         $biblionumber = C4::Biblio::GetBiblionumberFromItemnumber($itemnumber);
     }
 
+    # If there is no biblionumber for the given itemnumber, there is nothing to delete
+    return 0 unless $biblionumber;
+
     # FIXME check the item has no current issues
-    _koha_delete_item( $itemnumber );
+    my $deleted = _koha_delete_item( $itemnumber );
 
     # get the MARC record
     my $record = GetMarcBiblio($biblionumber);
@@ -657,6 +660,7 @@ sub DelItem {
 
     #search item field code
     logaction("CATALOGUING", "DELETE", $itemnumber, "item") if C4::Context->preference("CataloguingLog");
+    return $deleted;
 }
 
 =head2 CheckItemPreSave
@@ -2355,6 +2359,10 @@ sub _koha_delete_item {
     my $sth = $dbh->prepare("SELECT * FROM items WHERE itemnumber=?");
     $sth->execute($itemnum);
     my $data = $sth->fetchrow_hashref();
+
+    # There is no item to delete
+    return 0 unless $data;
+
     my $query = "INSERT INTO deleteditems SET ";
     my @bind  = ();
     foreach my $key ( keys %$data ) {
@@ -2368,8 +2376,8 @@ sub _koha_delete_item {
 
     # delete from items table
     $sth = $dbh->prepare("DELETE FROM items WHERE itemnumber=?");
-    $sth->execute($itemnum);
-    return;
+    my $deleted = $sth->execute($itemnum);
+    return ( $deleted == 1 ) ? 1 : 0;
 }
 
 =head2 _marc_from_item_hash
diff --git a/t/db_dependent/Items/DelItem.t b/t/db_dependent/Items/DelItem.t
new file mode 100644 (file)
index 0000000..35ff6e4
--- /dev/null
@@ -0,0 +1,49 @@
+use Modern::Perl;
+
+use MARC::Record;
+use C4::Biblio;
+
+use Test::More tests => 7;
+
+BEGIN {
+    use_ok('C4::Items');
+}
+
+my $dbh = C4::Context->dbh;
+$dbh->{AutoCommit} = 0;
+$dbh->{RaiseError} = 1;
+
+my ( $biblionumber, $bibitemnum ) = get_biblio();
+
+my ( $item_bibnum, $item_bibitemnum, $itemnumber );
+( $item_bibnum, $item_bibitemnum, $itemnumber ) =
+  AddItem( { homebranch => 'CPL', holdingbranch => 'CPL' }, $biblionumber );
+
+my $deleted = DelItem( { biblionumber => $biblionumber, itemnumber => $itemnumber } );
+is( $deleted, 1, "DelItem should return 1 if the item has been deleted" );
+my $deleted_item = GetItem($itemnumber);
+is( $deleted_item->{itemnumber}, undef, "DelItem with biblionumber parameter - the item should be deleted." );
+
+( $item_bibnum, $item_bibitemnum, $itemnumber ) =
+  AddItem( { homebranch => 'CPL', holdingbranch => 'CPL' }, $biblionumber );
+$deleted = DelItem( { biblionumber => $biblionumber, itemnumber => $itemnumber } );
+is( $deleted, 1, "DelItem should return 1 if the item has been deleted" );
+$deleted_item = GetItem($itemnumber);
+is( $deleted_item->{itemnumber}, undef, "DelItem without biblionumber parameter - the item should be deleted." );
+
+$deleted = DelItem( { itemnumber => $itemnumber + 1} );
+is ( $deleted, 0, "DelItem should return 0 if no item has been deleted" );
+
+$deleted = DelItem( { itemnumber => $itemnumber + 1, biblionumber => $biblionumber } );
+is ( $deleted, 0, "DelItem should return 0 if no item has been deleted" );
+
+# Helper method to set up a Biblio.
+sub get_biblio {
+    my $bib = MARC::Record->new();
+    $bib->append_fields(
+        MARC::Field->new( '100', ' ', ' ', a => 'Moffat, Steven' ),
+        MARC::Field->new( '245', ' ', ' ', a => 'Silence in the library' ),
+    );
+    my ( $bibnum, $bibitemnum ) = AddBiblio( $bib, '' );
+    return ( $bibnum, $bibitemnum );
+}