Bug 19743: Unit Tests
[srvgit] / t / db_dependent / Letters / TemplateToolkit.t
index 746c870..c4f4e82 100644 (file)
@@ -19,7 +19,7 @@
 # along with Koha; if not, see <http://www.gnu.org/licenses>.
 
 use Modern::Perl;
-use Test::More tests => 17;
+use Test::More tests => 18;
 use Test::Warn;
 
 use MARC::Record;
@@ -286,7 +286,7 @@ $prepared_letter = GetPreparedLetter(
 is( $prepared_letter->{content}, $modification->id(), 'Patron modification object used correctly' );
 
 subtest 'regression tests' => sub {
-    plan tests => 7;
+    plan tests => 8;
 
     my $library = $builder->build( { source => 'Branch' } );
     my $patron  = $builder->build( { source => 'Borrower' } );
@@ -555,8 +555,8 @@ You have [% count %] items due
 EOF
 
         reset_template( { template => $template, code => $code, module => 'circulation' } );
-        my $letter_for_item1 = C4::Reserves::ReserveSlip( $library->{branchcode}, $patron->{borrowernumber}, $biblio1->{biblionumber} );
-        my $letter_for_item2 = C4::Reserves::ReserveSlip( $library->{branchcode}, $patron->{borrowernumber}, $biblio2->{biblionumber} );
+        my $letter_for_item1 = C4::Reserves::ReserveSlip( { branchcode => $library->{branchcode}, borrowernumber => $patron->{borrowernumber}, biblionumber => $biblio1->{biblionumber} } );
+        my $letter_for_item2 = C4::Reserves::ReserveSlip( { branchcode => $library->{branchcode}, borrowernumber => $patron->{borrowernumber}, biblionumber => $biblio2->{biblionumber} } );
 
         my $tt_template = <<EOF;
 <h5>Date: [% today | \$KohaDates with_hours => 1 %]</h5>
@@ -589,8 +589,8 @@ EOF
 EOF
 
         reset_template( { template => $tt_template, code => $code, module => 'circulation' } );
-        my $tt_letter_for_item1 = C4::Reserves::ReserveSlip( $library->{branchcode}, $patron->{borrowernumber}, $biblio1->{biblionumber} );
-        my $tt_letter_for_item2 = C4::Reserves::ReserveSlip( $library->{branchcode}, $patron->{borrowernumber}, $biblio2->{biblionumber} );
+        my $tt_letter_for_item1 = C4::Reserves::ReserveSlip( { branchcode => $library->{branchcode}, borrowernumber => $patron->{borrowernumber}, biblionumber => $biblio1->{biblionumber} } );
+        my $tt_letter_for_item2 = C4::Reserves::ReserveSlip( { branchcode => $library->{branchcode}, borrowernumber => $patron->{borrowernumber}, biblionumber => $biblio2->{biblionumber} } );
 
         is( $tt_letter_for_item1->{content}, $letter_for_item1->{content}, );
         is( $tt_letter_for_item2->{content}, $letter_for_item2->{content}, );
@@ -860,6 +860,130 @@ EOF
         is( $tt_letter->{content}, $letter->{content}, );
     };
 
+    subtest 'Bug 19743 - Header and Footer should be updated on each item for checkin / checkout / renewal notices' => sub {
+        plan tests => 8;
+
+        my $checkout_code = 'CHECKOUT';
+        my $checkin_code = 'CHECKIN';
+
+        my $dbh = C4::Context->dbh;
+        $dbh->do("DELETE FROM letter");
+        $dbh->do("DELETE FROM issues");
+        $dbh->do("DELETE FROM message_queue");
+
+        # Enable notification for CHECKOUT - Things are hardcoded here but should work with default data
+        $dbh->do(q|INSERT INTO borrower_message_preferences( borrowernumber, message_attribute_id ) VALUES ( ?, ? )|, undef, $patron->{borrowernumber}, 6 );
+        my $borrower_message_preference_id = $dbh->last_insert_id(undef, undef, "borrower_message_preferences", undef);
+        $dbh->do(q|INSERT INTO borrower_message_transport_preferences( borrower_message_preference_id, message_transport_type) VALUES ( ?, ? )|, undef, $borrower_message_preference_id, 'email' );
+        # Enable notification for CHECKIN - Things are hardcoded here but should work with default data
+        $dbh->do(q|INSERT INTO borrower_message_preferences( borrowernumber, message_attribute_id ) VALUES ( ?, ? )|, undef, $patron->{borrowernumber}, 5 );
+        $borrower_message_preference_id = $dbh->last_insert_id(undef, undef, "borrower_message_preferences", undef);
+        $dbh->do(q|INSERT INTO borrower_message_transport_preferences( borrower_message_preference_id, message_transport_type) VALUES ( ?, ? )|, undef, $borrower_message_preference_id, 'email' );
+
+        my $checkout_template = q|
+<<branches.branchname>>
+----
+----
+|;
+        reset_template( { template => $checkout_template, code => $checkout_code, module => 'circulation' } );
+        my $checkin_template = q[
+<<branches.branchname>>
+----
+----
+];
+        reset_template( { template => $checkin_template, code => $checkin_code, module => 'circulation' } );
+
+        my $issue = C4::Circulation::AddIssue( $patron, $item1->{barcode} );
+        my $first_checkout_letter = Koha::Notice::Messages->search( {}, { order_by => { -desc => 'message_id' } } )->next;
+
+        my $library_object = Koha::Libraries->find( $issue->branchcode );
+        my $old_branchname = $library_object->branchname;
+        my $new_branchname = "Kyle M Hall Memorial Library";
+
+        # Change branch name for second checkout notice
+        $library_object->branchname($new_branchname);
+        $library_object->store();
+
+        C4::Circulation::AddIssue( $patron, $item2->{barcode} );
+        my $second_checkout_letter = Koha::Notice::Messages->search( {}, { order_by => { -desc => 'message_id' } } )->next;
+
+        # Restore old name for first checkin notice
+        $library_object->branchname( $old_branchname );
+        $library_object->store();
+
+        AddReturn( $item1->{barcode} );
+        my $first_checkin_letter = Koha::Notice::Messages->search( {}, { order_by => { -desc => 'message_id' } } )->next;
+
+        # Change branch name for second checkin notice
+        $library_object->branchname($new_branchname);
+        $library_object->store();
+
+        AddReturn( $item2->{barcode} );
+        my $second_checkin_letter = Koha::Notice::Messages->search( {}, { order_by => { -desc => 'message_id' } } )->next;
+
+        # Restore old name for first TT checkout notice
+        $library_object->branchname( $old_branchname );
+        $library_object->store();
+
+        Koha::Notice::Messages->delete;
+
+        # TT syntax
+        $checkout_template = q|
+[% branch.branchname %]
+----
+----
+|;
+        reset_template( { template => $checkout_template, code => $checkout_code, module => 'circulation' } );
+        $checkin_template = q[
+[% branch.branchname %]
+----
+----
+];
+        reset_template( { template => $checkin_template, code => $checkin_code, module => 'circulation' } );
+
+        C4::Circulation::AddIssue( $patron, $item1->{barcode} );
+        my $first_checkout_tt_letter = Koha::Notice::Messages->search( {}, { order_by => { -desc => 'message_id' } } )->next;
+
+        # Change branch name for second checkout notice
+        $library_object->branchname($new_branchname);
+        $library_object->store();
+
+        C4::Circulation::AddIssue( $patron, $item2->{barcode} );
+        my $second_checkout_tt_letter = Koha::Notice::Messages->search( {}, { order_by => { -desc => 'message_id' } } )->next;
+
+        # Restore old name for first checkin notice
+        $library_object->branchname( $old_branchname );
+        $library_object->store();
+
+        AddReturn( $item1->{barcode} );
+        my $first_checkin_tt_letter = Koha::Notice::Messages->search( {}, { order_by => { -desc => 'message_id' } } )->next;
+#
+        # Change branch name for second checkin notice
+        $library_object->branchname($new_branchname);
+        $library_object->store();
+
+        AddReturn( $item2->{barcode} );
+        my $second_checkin_tt_letter = Koha::Notice::Messages->search( {}, { order_by => { -desc => 'message_id' } } )->next;
+
+        my $first_letter = qq[
+$old_branchname
+];
+        my $second_letter = qq[
+$new_branchname
+];
+
+
+        is( $first_checkout_letter->content, $first_letter, 'Verify first checkout letter' );
+        is( $second_checkout_letter->content, $second_letter, 'Verify second checkout letter' );
+        is( $first_checkin_letter->content, $first_letter, 'Verify first checkin letter'  );
+        is( $second_checkin_letter->content, $second_letter, 'Verify second checkin letter' );
+
+        is( $first_checkout_tt_letter->content, $first_letter, 'Verify TT first checkout letter' );
+        is( $second_checkout_tt_letter->content, $second_letter, 'Verify TT second checkout letter' );
+        is( $first_checkin_tt_letter->content, $first_letter, 'Verify TT first checkin letter'  );
+        is( $second_checkin_tt_letter->content, $second_letter, 'Verify TT second checkin letter' );
+    };
+
 };
 
 subtest 'loops' => sub {
@@ -894,6 +1018,46 @@ subtest 'loops' => sub {
     };
 };
 
+subtest 'add_tt_filters' => sub {
+    plan tests => 1;
+    my $code   = "TEST";
+    my $module = "TEST";
+
+    my $patron = $builder->build_object(
+        {
+            class => 'Koha::Patrons',
+            value => { surname => "with_punctuation_" }
+        }
+    );
+    my $biblio = $builder->build_object(
+        { class => 'Koha::Biblios', value => { title => "with_punctuation_" } }
+    );
+    my $biblioitem = $builder->build_object(
+        {
+            class => 'Koha::Biblioitems',
+            value => {
+                biblionumber => $biblio->biblionumber,
+                isbn         => "with_punctuation_"
+            }
+        }
+    );
+
+    my $template = q|patron=[% borrower.surname %];biblio=[% biblio.title %];biblioitems=[% biblioitem.isbn %]|;
+    reset_template( { template => $template, code => $code, module => $module } );
+    my $letter = GetPreparedLetter(
+        module      => $module,
+        letter_code => $code,
+        tables      => {
+            borrowers   => $patron->borrowernumber,
+            biblio      => $biblio->biblionumber,
+            biblioitems => $biblioitem->biblioitemnumber
+        }
+    );
+    my $expected_letter = q|patron=with_punctuation_;biblio=with_punctuation;biblioitems=with_punctuation|;
+    is( $letter->{content}, $expected_letter, "Pre-processing should call TT plugin to remove punctuation if table is biblio or biblioitems");
+};
+
+
 sub reset_template {
     my ( $params ) = @_;
     my $template   = $params->{template};