# 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;
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;
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' );
$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' );
# 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' );
biblionumber => $biblionumber,
budget_id => $budgetid,
}
-)->insert;
-my $ordernumber = $order->{ordernumber};
+)->store;
+my $ordernumber = $order->ordernumber;
C4::Acquisition::CloseBasket( $basketno );
my $err;
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|
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' );
};