Bug 17600: Standardize our EXPORT_OK
[srvgit] / t / db_dependent / CourseReserves / CourseItems.t
old mode 100644 (file)
new mode 100755 (executable)
index aa6328d..9cb287c
@@ -19,11 +19,11 @@ use Modern::Perl;
 
 use t::lib::Mocks;
 use t::lib::TestBuilder;
-use C4::CourseReserves qw/ModCourseItem ModCourseReserve DelCourseReserve GetCourseItem/;
+use C4::CourseReserves qw( ModCourse ModCourseItem ModCourseReserve GetCourse GetCourseItem DelCourse DelCourseReserve );
 use C4::Context;
 use Koha::Items;
 
-use Test::More tests => 34;
+use Test::More tests => 36;
 
 BEGIN {
     require_ok('C4::CourseReserves');
@@ -202,6 +202,137 @@ DelCourseReserve( cr_id => $cr_id2 );
 $item = Koha::Items->find($itemnumber);
 is($item->ccode, '', 'Item ccode should be set back to empty');
 
+subtest 'Ensure modifying fields on existing course items updates the item and course item' => sub {
+    plan tests => 60;
+
+    my ($biblionumber, $itemnumber) = create_bib_and_item();
+    my $ci_id = ModCourseItem(
+        itemnumber            => $itemnumber,
+        itype_enabled         => 0,
+        ccode_enabled         => 0,
+        homebranch_enabled    => 0,
+        holdingbranch_enabled => 0,
+        location_enabled      => 0,
+    );
+
+    my $course = $builder->build({
+        source => 'CourseReserve',
+        value => {
+            ci_id => $ci_id,
+            enabled => 'no',
+        }
+    });
+
+    my $cr_id = ModCourseReserve(
+        course_id   => $course->{course_id},
+        ci_id       => $ci_id,
+        staff_note  => '',
+        public_note => '',
+    );
+
+    my $course_item = GetCourseItem( ci_id => $ci_id );
+    is($course_item->{itype_storage}, undef, 'Course item itype storage should be undef');
+    is($course_item->{ccode_storage}, undef, 'Course item ccode storage should be undef');
+    is($course_item->{homebranch_storage}, undef, 'Course item holding branch storage should be undef');
+    is($course_item->{holdingbranch_storage}, undef, 'Course item holding branch storage should be undef');
+    is($course_item->{location_storage}, undef, 'Course item location storage should be undef');
+
+    is($course_item->{itype}, undef, 'Course item itype should be undef');
+    is($course_item->{ccode}, undef, 'Course item ccode should be undef');
+    is($course_item->{homebranch}, undef, 'Course item holding branch should be undef');
+    is($course_item->{holdingbranch}, undef, 'Course item holding branch should be undef');
+    is($course_item->{location}, undef, 'Course item location should be undef');
+
+    is($course_item->{itype_enabled}, 0, 'Course item itype enabled should be 0');
+    is($course_item->{ccode_enabled}, 0, 'Course item ccode enabled should be 0');
+    is($course_item->{homebranch_enabled}, 0, 'Course item holding branch enabled should be 0');
+    is($course_item->{holdingbranch_enabled}, 0, 'Course item holding branch enabled should be 0');
+    is($course_item->{location_enabled}, 0, 'Course item location enabled should be 0');
+
+    my $item = Koha::Items->find($itemnumber);
+    is($item->effective_itemtype, 'CD_foo', 'Item type in course should be CD_foo');
+    is($item->ccode, 'CD', 'Item ccode in course should be CD');
+    is($item->homebranch, 'B1', 'Item home branch in course should be B1');
+    is($item->holdingbranch, 'B1', 'Item holding branch in course should be B1');
+    is($item->location, 'HR', 'Item location in course should be HR');
+
+    ModCourseItem(
+        itemnumber            => $itemnumber,
+        itype_enabled         => 1,
+        ccode_enabled         => 1,
+        homebranch_enabled    => 1,
+        holdingbranch_enabled => 1,
+        location_enabled      => 1,
+        itype                 => 'BK_foo',
+        ccode                 => 'BOOK',
+        homebranch            => 'B2',
+        holdingbranch         => 'B2',
+        location              => 'TH',
+    );
+
+    $course_item = GetCourseItem( ci_id => $ci_id );
+    is($course_item->{itype_storage}, 'CD_foo', 'Course item itype storage should be CD_foo');
+    is($course_item->{ccode_storage}, 'CD', 'Course item ccode storage should be CD');
+    is($course_item->{homebranch_storage}, 'B1', 'Course item holding branch storage should be B1');
+    is($course_item->{holdingbranch_storage}, 'B1', 'Course item holding branch storage should be B1');
+    is($course_item->{location_storage}, 'HR', 'Course item location storage should be HR');
+
+    is($course_item->{itype}, 'BK_foo', 'Course item itype should be BK_foo');
+    is($course_item->{ccode}, 'BOOK', 'Course item ccode should be BOOK');
+    is($course_item->{homebranch}, 'B2', 'Course item holding branch should be B2');
+    is($course_item->{holdingbranch}, 'B2', 'Course item holding branch should be B2');
+    is($course_item->{location}, 'TH', 'Course item location should be TH');
+
+    is($course_item->{itype_enabled}, 1, 'Course item itype enabled should be 1');
+    is($course_item->{ccode_enabled}, 1, 'Course item ccode enabled should be 1');
+    is($course_item->{homebranch_enabled}, 1, 'Course item holding branch enabled should be 1');
+    is($course_item->{holdingbranch_enabled}, 1, 'Course item holding branch enabled should be 1');
+    is($course_item->{location_enabled}, 1, 'Course item location enabled should be 1');
+
+    $item = Koha::Items->find($itemnumber);
+    is($item->effective_itemtype, 'BK_foo', 'Item type in course should be BK_foo');
+    is($item->ccode, 'BOOK', 'Item ccode in course should be BOOK');
+    is($item->homebranch, 'B2', 'Item home branch in course should be B2');
+    is($item->holdingbranch, 'B2', 'Item holding branch in course should be B2');
+    is($item->location, 'TH', 'Item location in course should be TH');
+
+    # Test removing fields from an active course item
+    ModCourseItem(
+        itemnumber            => $itemnumber,
+        itype_enabled         => 0,
+        ccode_enabled         => 0,
+        homebranch_enabled    => 0,
+        holdingbranch_enabled => 0,
+        location_enabled      => 0,
+    );
+
+    $course_item = GetCourseItem( ci_id => $ci_id );
+    is($course_item->{itype_storage}, undef, 'Course item itype storage should be undef');
+    is($course_item->{ccode_storage}, undef, 'Course item ccode storage should be undef');
+    is($course_item->{homebranch_storage}, undef, 'Course item holding branch storage should be undef');
+    is($course_item->{holdingbranch_storage}, undef, 'Course item holding branch storage should be undef');
+    is($course_item->{location_storage}, undef, 'Course item location storage should be undef');
+
+    is($course_item->{itype}, undef, 'Course item itype should be undef');
+    is($course_item->{ccode}, undef, 'Course item ccode should be undef');
+    is($course_item->{homebranch}, undef, 'Course item holding branch should be undef');
+    is($course_item->{holdingbranch}, undef, 'Course item holding branch should be undef');
+    is($course_item->{location}, undef, 'Course item location should be undef');
+
+    is($course_item->{itype_enabled}, 0, 'Course item itype enabled should be 0');
+    is($course_item->{ccode_enabled}, 0, 'Course item ccode enabled should be 0');
+    is($course_item->{homebranch_enabled}, 0, 'Course item holding branch enabled should be 0');
+    is($course_item->{holdingbranch_enabled}, 0, 'Course item holding branch enabled should be 0');
+    is($course_item->{location_enabled}, 0, 'Course item location enabled should be 0');
+
+    $item = Koha::Items->find($itemnumber);
+    is($item->effective_itemtype, 'CD_foo', 'Item type in course should be CD_foo');
+    is($item->ccode, 'CD', 'Item ccode in course should be CD');
+    is($item->homebranch, 'B1', 'Item home branch in course should be B1');
+    is($item->holdingbranch, 'B1', 'Item holding branch in course should be B1');
+    is($item->location, 'HR', 'Item location in course should be HR');
+};
+
 subtest 'Ensure item info is preserved' => sub {
     plan tests => 8;
 
@@ -267,7 +398,35 @@ subtest 'Ensure item info is preserved' => sub {
 
 };
 
+subtest 'biblio added to course without items' => sub {
+    plan tests => 1;
+
+    my $course = $builder->build({
+        source => 'Course',
+        value => {
+            enabled => 'no',
+        }
+    });
+    #Add course item but change nothing
+    my $course_item_id = ModCourseItem(
+        itemnumber    => undef,
+        biblionumber  => $biblionumber,
+        itype         => '',
+        ccode         => '',
+        holdingbranch => '',
+        location      => '',
+    );
+    #Add course reserve
+    my $course_reserve_id = ModCourseReserve(
+        course_id   => $course->{course_id},
+        ci_id       => $course_item_id,
+        staff_note  => 'staff note',
+        public_note => '',
+    );
 
+    my $course_item = GetCourseItem({ ci_id => $course_item_id });
+    is( $course_item->{itemnumber}, undef, "Course reserve with no item correctly added" );
+};
 
 
 
@@ -361,22 +520,13 @@ sub create_dependent_objects {
 }
 
 sub create_bib_and_item {
-    my $biblio = $builder->build({
-        source => 'Biblio',
-        value  => {
-            title => 'Title',
+    my $item = $builder->build_sample_item(
+        {
+            itype    => 'CD_foo',
+            ccode    => 'CD',
+            location => 'HR',
+            library  => 'B1',
         }
-    });
-    my $item = $builder->build({
-        source => 'Item',
-        value  => {
-            biblionumber  => $biblio->{biblionumber},
-            itype         => 'CD_foo',
-            ccode         => 'CD',
-            location      => 'HR',
-            homebranch    => 'B1',
-            holdingbranch => 'B1',
-        }
-    });
-    return ($biblio->{biblionumber}, $item->{itemnumber});
+    );
+    return ($item->biblionumber, $item->itemnumber);
 }