Bug 20144: [sql_modes] Remove useless ORDER BY clauses in tests
[koha.git] / t / db_dependent / Letters.t
index c0a8a5d..d8e96a6 100644 (file)
@@ -18,7 +18,7 @@
 # along with Koha; if not, see <http://www.gnu.org/licenses>.
 
 use Modern::Perl;
-use Test::More tests => 75;
+use Test::More tests => 76;
 use Test::MockModule;
 use Test::Warn;
 
@@ -43,9 +43,9 @@ use t::lib::Mocks;
 use t::lib::TestBuilder;
 use Koha::Database;
 use Koha::DateUtils qw( dt_from_string output_pref );
-use Koha::Acquisition::Order;
 use Koha::Acquisition::Booksellers;
 use Koha::Acquisition::Bookseller::Contacts;
+use Koha::Acquisition::Orders;
 use Koha::Libraries;
 use Koha::Notice::Templates;
 my $schema = Koha::Database->schema;
@@ -109,6 +109,7 @@ $my_message->{letter} = {
     code         => 'TEST_MESSAGE',
     content_type => 'text/plain',
 };
+
 $message_id = C4::Letters::EnqueueLetter($my_message);
 is( $message_id, undef, 'EnqueueLetter without the message type argument argument returns undef' );
 
@@ -175,7 +176,6 @@ Look at this wonderful biblio timestamp: <<biblio.timestamp>>.
 $dbh->do( q|INSERT INTO letter(branchcode,module,code,name,is_html,title,content,message_transport_type) VALUES (?,'my module','my code','my name',1,?,?,'email')|, undef, $library->{branchcode}, $title, $content );
 $letters = C4::Letters::GetLetters();
 is( @$letters, 1, 'GetLetters returns the correct number of letters' );
-is( $letters->[0]->{branchcode}, $library->{branchcode}, 'GetLetters gets the branch code correctly' );
 is( $letters->[0]->{module}, 'my module', 'GetLetters gets the module correctly' );
 is( $letters->[0]->{code}, 'my code', 'GetLetters gets the code correctly' );
 is( $letters->[0]->{name}, 'my name', 'GetLetters gets the name correctly' );
@@ -184,6 +184,7 @@ is( $letters->[0]->{name}, 'my name', 'GetLetters gets the name correctly' );
 # getletter
 subtest 'getletter' => sub {
     plan tests => 16;
+    t::lib::Mocks::mock_preference('IndependentBranches', 0);
     my $letter = C4::Letters::getletter('my module', 'my code', $library->{branchcode}, 'email');
     is( $letter->{branchcode}, $library->{branchcode}, 'GetLetters gets the branch code correctly' );
     is( $letter->{module}, 'my module', 'GetLetters gets the module correctly' );
@@ -434,8 +435,8 @@ my $order = Koha::Acquisition::Order->new(
         biblionumber => $biblionumber,
         budget_id => $budgetid,
     }
-)->insert;
-my $ordernumber = $order->{ordernumber};
+)->store;
+my $ordernumber = $order->ordernumber;
 
 C4::Acquisition::CloseBasket( $basketno );
 my $err;
@@ -631,7 +632,7 @@ subtest 'TranslateNotices' => sub {
 
 subtest 'SendQueuedMessages' => sub {
 
-    plan tests => 2;
+    plan tests => 3;
     t::lib::Mocks::mock_preference( 'SMSSendDriver', 'Email' );
     my $patron = Koha::Patrons->find($borrowernumber);
     $dbh->do(q|
@@ -650,6 +651,94 @@ subtest 'SendQueuedMessages' => sub {
         borrowernumber => $borrowernumber,
         status => 'sent'
     })->next()->to_address();
-    is( $sms_message_address, '5555555555@kidclamp.rocks', 'SendQueuedMessages populates the to address correctly for SMS by email' );
+    is( $sms_message_address, '5555555555@kidclamp.rocks', 'SendQueuedMessages populates the to address correctly for SMS by email when to_address not set' );
+    $schema->resultset('MessageQueue')->search({borrowernumber => $borrowernumber,status => 'sent'})->delete(); #clear borrower queue
+    $my_message->{to_address} = 'fixme@kidclamp.iswrong';
+    $message_id = C4::Letters::EnqueueLetter($my_message);
+    C4::Letters::SendQueuedMessages();
+    $sms_message_address = $schema->resultset('MessageQueue')->search({
+        borrowernumber => $borrowernumber,
+        status => 'sent'
+    })->next()->to_address();
+    is( $sms_message_address, '5555555555@kidclamp.rocks', 'SendQueuedMessages populates the to address correctly for SMS by email when to_address is set incorrectly' );
+
+};
+
+subtest 'get_item_content' => sub {
+    plan tests => 2;
+
+    t::lib::Mocks::mock_preference('dateformat', 'metric');
+    t::lib::Mocks::mock_preference('timeformat', '24hr');
+    my @items = (
+        {date_due => '2041-01-01 12:34', title => 'a first title', barcode => 'a_first_barcode', author => 'a_first_author', itemnumber => 1 },
+        {date_due => '2042-01-02 23:45', title => 'a second title', barcode => 'a_second_barcode', author => 'a_second_author', itemnumber => 2 },
+    );
+    my @item_content_fields = qw( date_due title barcode author itemnumber );
+
+    my $items_content;
+    for my $item ( @items ) {
+        $items_content .= C4::Letters::get_item_content( { item => $item, item_content_fields => \@item_content_fields } );
+    }
+
+    my $expected_items_content = <<EOF;
+01/01/2041 12:34\ta first title\ta_first_barcode\ta_first_author\t1
+02/01/2042 23:45\ta second title\ta_second_barcode\ta_second_author\t2
+EOF
+    is( $items_content, $expected_items_content, 'get_item_content should return correct items info with time (default)' );
+
+
+    $items_content = q||;
+    for my $item ( @items ) {
+        $items_content .= C4::Letters::get_item_content( { item => $item, item_content_fields => \@item_content_fields, dateonly => 1, } );
+    }
+
+    $expected_items_content = <<EOF;
+01/01/2041\ta first title\ta_first_barcode\ta_first_author\t1
+02/01/2042\ta second title\ta_second_barcode\ta_second_author\t2
+EOF
+    is( $items_content, $expected_items_content, 'get_item_content should return correct items info without time (if dateonly => 1)' );
+};
+
+subtest 'Test limit parameter for SendQueuedMessages' => sub {
+    plan tests => 3;
+
+    my $dbh = C4::Context->dbh;
+
+    my $borrowernumber = AddMember(
+        firstname    => 'Jane',
+        surname      => 'Smith',
+        categorycode => $patron_category,
+        branchcode   => $library->{branchcode},
+        dateofbirth  => $date,
+        smsalertnumber => undef,
+    );
 
+    $dbh->do(q|DELETE FROM message_queue|);
+    $my_message = {
+        'letter' => {
+            'content'      => 'a message',
+            'metadata'     => 'metadata',
+            'code'         => 'TEST_MESSAGE',
+            'content_type' => 'text/plain',
+            'title'        => 'message title'
+        },
+        'borrowernumber'         => $borrowernumber,
+        'to_address'             => undef,
+        'message_transport_type' => 'sms',
+        'from_address'           => 'from@example.com'
+    };
+    C4::Letters::EnqueueLetter($my_message);
+    C4::Letters::EnqueueLetter($my_message);
+    C4::Letters::EnqueueLetter($my_message);
+    C4::Letters::EnqueueLetter($my_message);
+    C4::Letters::EnqueueLetter($my_message);
+    my $messages_processed = C4::Letters::SendQueuedMessages( { limit => 1 } );
+    is( $messages_processed, 1,
+        'Processed 1 message with limit of 1 and 5 unprocessed messages' );
+    $messages_processed = C4::Letters::SendQueuedMessages( { limit => 2 } );
+    is( $messages_processed, 2,
+        'Processed 2 message with limit of 2 and 4 unprocessed messages' );
+    $messages_processed = C4::Letters::SendQueuedMessages( { limit => 3 } );
+    is( $messages_processed, 2,
+        'Processed 2 message with limit of 3 and 2 unprocessed messages' );
 };