Lines 30-35
use MARC::Record;
Link Here
|
30 |
use utf8; |
30 |
use utf8; |
31 |
|
31 |
|
32 |
my ( $email_object, $sendmail_params ); |
32 |
my ( $email_object, $sendmail_params ); |
|
|
33 |
our $send_or_die_count = 0; |
33 |
|
34 |
|
34 |
my $email_sender_module = Test::MockModule->new('Email::Stuffer'); |
35 |
my $email_sender_module = Test::MockModule->new('Email::Stuffer'); |
35 |
$email_sender_module->mock( |
36 |
$email_sender_module->mock( |
Lines 38-43
$email_sender_module->mock(
Link Here
|
38 |
( $email_object, $sendmail_params ) = @_; |
39 |
( $email_object, $sendmail_params ) = @_; |
39 |
my $str = $email_object->email->as_string; |
40 |
my $str = $email_object->email->as_string; |
40 |
unlike $str, qr/I =C3=A2=C2=99=C2=A5 Koha=/, "Content is not double encoded"; |
41 |
unlike $str, qr/I =C3=A2=C2=99=C2=A5 Koha=/, "Content is not double encoded"; |
|
|
42 |
$send_or_die_count++; |
41 |
warn "Fake send_or_die"; |
43 |
warn "Fake send_or_die"; |
42 |
} |
44 |
} |
43 |
); |
45 |
); |
Lines 55-63
use Koha::Acquisition::Booksellers;
Link Here
|
55 |
use Koha::Acquisition::Bookseller::Contacts; |
57 |
use Koha::Acquisition::Bookseller::Contacts; |
56 |
use Koha::Acquisition::Orders; |
58 |
use Koha::Acquisition::Orders; |
57 |
use Koha::Libraries; |
59 |
use Koha::Libraries; |
|
|
60 |
use Koha::Notice::Messages; |
58 |
use Koha::Notice::Templates; |
61 |
use Koha::Notice::Templates; |
|
|
62 |
use Koha::Notice::Util; |
59 |
use Koha::Patrons; |
63 |
use Koha::Patrons; |
60 |
use Koha::Subscriptions; |
64 |
use Koha::Subscriptions; |
|
|
65 |
|
61 |
my $schema = Koha::Database->schema; |
66 |
my $schema = Koha::Database->schema; |
62 |
$schema->storage->txn_begin(); |
67 |
$schema->storage->txn_begin(); |
63 |
|
68 |
|
Lines 156-162
Koha::Notice::Messages->find($messages->[0]->{message_id})->time_queued($yesterd
Link Here
|
156 |
my $messages_processed = C4::Letters::SendQueuedMessages( { type => 'email' }); |
161 |
my $messages_processed = C4::Letters::SendQueuedMessages( { type => 'email' }); |
157 |
is($messages_processed, 0, 'No queued messages processed if type limit passed with unused type'); |
162 |
is($messages_processed, 0, 'No queued messages processed if type limit passed with unused type'); |
158 |
$messages_processed = C4::Letters::SendQueuedMessages( { type => 'sms' }); |
163 |
$messages_processed = C4::Letters::SendQueuedMessages( { type => 'sms' }); |
159 |
is($messages_processed, 1, 'All queued messages processed, found correct number of messages with type limit'); |
164 |
is($messages_processed, 0, 'All queued messages processed, nothing sent'); |
160 |
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber }); |
165 |
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber }); |
161 |
is( |
166 |
is( |
162 |
$messages->[0]->{status}, |
167 |
$messages->[0]->{status}, |
Lines 958-964
EOF
Link Here
|
958 |
}; |
963 |
}; |
959 |
|
964 |
|
960 |
subtest 'Test where parameter for SendQueuedMessages' => sub { |
965 |
subtest 'Test where parameter for SendQueuedMessages' => sub { |
961 |
plan tests => 1; |
966 |
plan tests => 3; |
962 |
|
967 |
|
963 |
my $dbh = C4::Context->dbh; |
968 |
my $dbh = C4::Context->dbh; |
964 |
|
969 |
|
Lines 968-974
subtest 'Test where parameter for SendQueuedMessages' => sub {
Link Here
|
968 |
categorycode => $patron_category, |
973 |
categorycode => $patron_category, |
969 |
branchcode => $library->{branchcode}, |
974 |
branchcode => $library->{branchcode}, |
970 |
dateofbirth => $date, |
975 |
dateofbirth => $date, |
971 |
smsalertnumber => undef, |
|
|
972 |
})->store->borrowernumber; |
976 |
})->store->borrowernumber; |
973 |
|
977 |
|
974 |
$dbh->do(q|DELETE FROM message_queue|); |
978 |
$dbh->do(q|DELETE FROM message_queue|); |
Lines 1011-1025
subtest 'Test where parameter for SendQueuedMessages' => sub {
Link Here
|
1011 |
'message_transport_type' => 'sms', |
1015 |
'message_transport_type' => 'sms', |
1012 |
'from_address' => 'from@example.com' |
1016 |
'from_address' => 'from@example.com' |
1013 |
}; |
1017 |
}; |
1014 |
C4::Letters::EnqueueLetter($my_message); |
1018 |
my @id = ( C4::Letters::EnqueueLetter($my_message), |
1015 |
C4::Letters::EnqueueLetter($my_message2); |
1019 |
C4::Letters::EnqueueLetter($my_message2), |
1016 |
C4::Letters::EnqueueLetter($my_message3); |
1020 |
C4::Letters::EnqueueLetter($my_message3), |
1017 |
my $messages_processed = C4::Letters::SendQueuedMessages( { where => q{content NOT LIKE '%skipped%'} } ); |
1021 |
); |
1018 |
is( $messages_processed, 2, "Correctly skipped processing one message containing the work 'skipped' in contents" ); |
1022 |
C4::Letters::SendQueuedMessages({ |
|
|
1023 |
# Test scalar/arrayref in parameter too |
1024 |
letter_code => [ 'TEST_MESSAGE', 'SOMETHING_NOT_THERE' ], |
1025 |
type => 'sms', |
1026 |
where => q{content NOT LIKE '%skipped%'}, |
1027 |
}); |
1028 |
is( Koha::Notice::Messages->find( $id[0] )->status, 'failed', 'Processed but failed' ); |
1029 |
is( Koha::Notice::Messages->find( $id[1] )->status, 'failed', 'Processed but failed' ); |
1030 |
is( Koha::Notice::Messages->find( $id[2] )->status, 'pending', 'Skipped, still pending' ); |
1019 |
}; |
1031 |
}; |
1020 |
|
1032 |
|
1021 |
subtest 'Test limit parameter for SendQueuedMessages' => sub { |
1033 |
subtest 'Test limit parameter for SendQueuedMessages' => sub { |
1022 |
plan tests => 3; |
1034 |
plan tests => 18; |
1023 |
|
1035 |
|
1024 |
my $dbh = C4::Context->dbh; |
1036 |
my $dbh = C4::Context->dbh; |
1025 |
|
1037 |
|
Lines 1029-1035
subtest 'Test limit parameter for SendQueuedMessages' => sub {
Link Here
|
1029 |
categorycode => $patron_category, |
1041 |
categorycode => $patron_category, |
1030 |
branchcode => $library->{branchcode}, |
1042 |
branchcode => $library->{branchcode}, |
1031 |
dateofbirth => $date, |
1043 |
dateofbirth => $date, |
1032 |
smsalertnumber => undef, |
1044 |
email => 'shouldnotwork@wrong.net', |
1033 |
})->store->borrowernumber; |
1045 |
})->store->borrowernumber; |
1034 |
|
1046 |
|
1035 |
$dbh->do(q|DELETE FROM message_queue|); |
1047 |
$dbh->do(q|DELETE FROM message_queue|); |
Lines 1043-1070
subtest 'Test limit parameter for SendQueuedMessages' => sub {
Link Here
|
1043 |
}, |
1055 |
}, |
1044 |
'borrowernumber' => $borrowernumber, |
1056 |
'borrowernumber' => $borrowernumber, |
1045 |
'to_address' => undef, |
1057 |
'to_address' => undef, |
1046 |
'message_transport_type' => 'sms', |
1058 |
'message_transport_type' => 'email', |
1047 |
'from_address' => 'from@example.com' |
1059 |
'from_address' => 'from@example.com' |
1048 |
}; |
1060 |
}; |
1049 |
C4::Letters::EnqueueLetter($my_message); |
1061 |
C4::Letters::EnqueueLetter($my_message) for 1..5; |
1050 |
C4::Letters::EnqueueLetter($my_message); |
1062 |
|
1051 |
C4::Letters::EnqueueLetter($my_message); |
1063 |
$send_or_die_count = 0; # reset |
1052 |
C4::Letters::EnqueueLetter($my_message); |
1064 |
my $messages_sent; |
1053 |
C4::Letters::EnqueueLetter($my_message); |
1065 |
my $regex = qr|Fake send_or_die|; |
1054 |
my $messages_processed = C4::Letters::SendQueuedMessages( { limit => 1 } ); |
1066 |
warning_like { |
1055 |
is( $messages_processed, 1, |
1067 |
$messages_sent = C4::Letters::SendQueuedMessages( { limit => 1 } ) } |
1056 |
'Processed 1 message with limit of 1 and 5 unprocessed messages' ); |
1068 |
$regex, |
1057 |
$messages_processed = C4::Letters::SendQueuedMessages( { limit => 2 } ); |
1069 |
"SendQueuedMessages with limit 1"; |
1058 |
is( $messages_processed, 2, |
1070 |
is( $messages_sent, 1, |
1059 |
'Processed 2 message with limit of 2 and 4 unprocessed messages' ); |
1071 |
'Sent 1 message with limit of 1 and 5 unprocessed messages' ); |
1060 |
$messages_processed = C4::Letters::SendQueuedMessages( { limit => 3 } ); |
1072 |
|
1061 |
is( $messages_processed, 2, |
1073 |
warnings_like { |
1062 |
'Processed 2 message with limit of 3 and 2 unprocessed messages' ); |
1074 |
$messages_sent = C4::Letters::SendQueuedMessages( { limit => 2 } ) } |
|
|
1075 |
[ map { $regex } 1..2 ], |
1076 |
"SendQueuedMessages with limit 2"; |
1077 |
is( $messages_sent, 2, |
1078 |
'Sent 2 messages with limit of 2 and 4 unprocessed messages' ); |
1079 |
|
1080 |
warnings_like { |
1081 |
$messages_sent = C4::Letters::SendQueuedMessages( { limit => 3 } ) } |
1082 |
[ map { $regex } 1..2 ], |
1083 |
"SendQueuedMessages with limit 3"; |
1084 |
is( $messages_sent, 2, |
1085 |
'Sent 2 messages with limit of 3 and 2 unprocessed messages' ); |
1086 |
|
1087 |
is( $send_or_die_count, 5, '5 messages sent' ); |
1088 |
# Mimic correct status in queue for next tests |
1089 |
Koha::Notice::Messages->search({ to_address => { 'LIKE', '%wrong.net' }})->update({ status => 'sent' }); |
1090 |
|
1091 |
# Now add a few domain limits too, sending 2 more mails to wrongnet, 2 to fake1, 2 to fake2 |
1092 |
# Since we already sent 5 to wrong.net, we expect one deferral when limiting to 6 |
1093 |
# Similarly we arrange for 1 deferral for fake1, and 2 for fake2 |
1094 |
# We set therefore limit to 3 sent messages: we expect 2 sent, 4 deferred (so 6 processed) |
1095 |
t::lib::Mocks::mock_config( 'message_domain_limits', { domain => [ |
1096 |
{ name => 'wrong.net', limit => 6, unit => '1m' }, |
1097 |
{ name => 'fake1.domain', limit => 1, unit => '1m' }, |
1098 |
{ name => 'fake2.domain', limit => 0, unit => '1m' }, |
1099 |
]}); |
1100 |
C4::Letters::EnqueueLetter($my_message) for 1..2; |
1101 |
$my_message->{to_address} = 'someone@fake1.domain'; |
1102 |
C4::Letters::EnqueueLetter($my_message) for 1..2; |
1103 |
$my_message->{to_address} = 'another@fake2.domain'; |
1104 |
C4::Letters::EnqueueLetter($my_message) for 1..2; |
1105 |
my $mocked_util = Test::MockModule->new('Koha::Notice::Util'); |
1106 |
my $count_exceeds_calls = 0; |
1107 |
$mocked_util->mock( 'exceeds_limit', sub { |
1108 |
$count_exceeds_calls++; |
1109 |
$mocked_util->original('exceeds_limit')->(@_); |
1110 |
}); |
1111 |
warnings_like { |
1112 |
$messages_sent = C4::Letters::SendQueuedMessages({ limit => 3 }) } |
1113 |
[ qr/wrong.net reached limit/, $regex, qr/fake1.domain reached limit/, $regex ], |
1114 |
"SendQueuedMessages with limit 2 and domain limits"; |
1115 |
is( $messages_sent, 2, 'Only expecting 2 sent messages' ); |
1116 |
is( Koha::Notice::Messages->search({ status => 'pending' })->count, 4, 'Still 4 pending' ); |
1117 |
is( $count_exceeds_calls, 6, 'We saw 6 messages while checking domain limits: so we deferred 4' ); |
1063 |
}; |
1118 |
}; |
1064 |
|
1119 |
|
1065 |
subtest 'Test message_id parameter for SendQueuedMessages' => sub { |
1120 |
subtest 'Test message_id parameter for SendQueuedMessages' => sub { |
1066 |
|
1121 |
|
1067 |
plan tests => 7; |
1122 |
plan tests => 8; |
1068 |
|
1123 |
|
1069 |
my $dbh = C4::Context->dbh; |
1124 |
my $dbh = C4::Context->dbh; |
1070 |
|
1125 |
|
Lines 1092-1099
subtest 'Test message_id parameter for SendQueuedMessages' => sub {
Link Here
|
1092 |
'from_address' => '@example.com' # invalid from_address |
1147 |
'from_address' => '@example.com' # invalid from_address |
1093 |
}; |
1148 |
}; |
1094 |
my $message_id = C4::Letters::EnqueueLetter($my_message); |
1149 |
my $message_id = C4::Letters::EnqueueLetter($my_message); |
|
|
1150 |
$send_or_die_count = 0; # reset |
1095 |
my $processed = C4::Letters::SendQueuedMessages( { message_id => $message_id } ); |
1151 |
my $processed = C4::Letters::SendQueuedMessages( { message_id => $message_id } ); |
1096 |
is( $processed, 1, 'Processed 1 message when one message_id passed' ); |
1152 |
is( $send_or_die_count, 0, 'Nothing sent when one message_id passed' ); |
1097 |
my $message_1 = C4::Letters::GetMessage($message_id); |
1153 |
my $message_1 = C4::Letters::GetMessage($message_id); |
1098 |
is( $message_1->{status}, 'failed', 'Invalid from_address => status failed' ); |
1154 |
is( $message_1->{status}, 'failed', 'Invalid from_address => status failed' ); |
1099 |
is( $message_1->{failure_code}, 'INVALID_EMAIL:from', 'Failure code set correctly for invalid email parameter'); |
1155 |
is( $message_1->{failure_code}, 'INVALID_EMAIL:from', 'Failure code set correctly for invalid email parameter'); |
Lines 1103-1108
subtest 'Test message_id parameter for SendQueuedMessages' => sub {
Link Here
|
1103 |
warning_like { C4::Letters::SendQueuedMessages( { message_id => $message_id } ); } |
1159 |
warning_like { C4::Letters::SendQueuedMessages( { message_id => $message_id } ); } |
1104 |
qr|Fake send_or_die|, |
1160 |
qr|Fake send_or_die|, |
1105 |
"SendQueuedMessages is using the mocked send_or_die routine"; |
1161 |
"SendQueuedMessages is using the mocked send_or_die routine"; |
|
|
1162 |
is( $send_or_die_count, 1, 'One message passed through' ); |
1106 |
$message_1 = C4::Letters::GetMessage($message_1->{message_id}); |
1163 |
$message_1 = C4::Letters::GetMessage($message_1->{message_id}); |
1107 |
my $message_2 = C4::Letters::GetMessage($message_id); |
1164 |
my $message_2 = C4::Letters::GetMessage($message_id); |
1108 |
is( $message_1->{status}, 'failed', 'Message 1 status is unchanged' ); |
1165 |
is( $message_1->{status}, 'failed', 'Message 1 status is unchanged' ); |
1109 |
- |
|
|