View | Details | Raw Unified | Return to bug 27208
Collapse All | Expand All

(-)a/t/db_dependent/Letters.t (-2 / +35 lines)
Lines 19-25 Link Here
19
19
20
use Modern::Perl;
20
use Modern::Perl;
21
use File::Basename qw(dirname);
21
use File::Basename qw(dirname);
22
use Test::More tests => 105;
22
use Test::More tests => 111;
23
use Test::NoWarnings;
23
use Test::NoWarnings;
24
24
25
use Test::MockModule;
25
use Test::MockModule;
Lines 168-174 is( Link Here
168
    t::lib::Dates::compare( $messages->[0]->{updated_on}, $messages->[0]->{time_queued} ), 0,
168
    t::lib::Dates::compare( $messages->[0]->{updated_on}, $messages->[0]->{time_queued} ), 0,
169
    'Time status changed equals time queued when created in message_queue table'
169
    'Time status changed equals time queued when created in message_queue table'
170
);
170
);
171
is( $messages->[0]->{failure_code}, '', 'Failure code for successful message correctly empty' );
171
is( $messages->[0]->{failure_code}, '',    'Failure code for successful message correctly empty' );
172
is( $messages->[0]->{delay_until},  undef, 'Delay until should be undef if not set' );
172
173
173
# Setting time_queued to something else than now
174
# Setting time_queued to something else than now
174
my $yesterday = dt_from_string->subtract( days => 1 );
175
my $yesterday = dt_from_string->subtract( days => 1 );
Lines 227-232 isnt( Link Here
227
);
228
);
228
is( dt_from_string( $messages->[0]->{time_queued} ), $yesterday, 'Time queued remains inmutable' );
229
is( dt_from_string( $messages->[0]->{time_queued} ), $yesterday, 'Time queued remains inmutable' );
229
230
231
# Delayed message
232
my $tomorrow      = dt_from_string()->add( days => 1 );
233
my $delay_message = {
234
    borrowernumber         => $borrowernumber,
235
    message_transport_type => 'email',
236
    to_address             => 'to@example',
237
    from_address           => 'from@example.com',
238
    delay_until            => $tomorrow,
239
};
240
$delay_message->{letter} = {
241
    content      => 'I am waiting',
242
    title        => 'Patience is great',
243
    metadata     => 'metadata',
244
    code         => 'TEST_MESSAGE',
245
    content_type => 'text/plain',
246
};
247
248
my $delayed_message_id = C4::Letters::EnqueueLetter($delay_message);
249
250
my $delay_until = Koha::Notice::Messages->find($delayed_message_id)->delay_until;
251
is( dt_from_string($delay_until), $tomorrow, 'Delay_until is properly set' );
252
253
my $delayed_messages_processed = C4::Letters::SendQueuedMessages();
254
is( $delayed_messages_processed, 0, 'Message not processed if delay_until is set in the future' );
255
256
Koha::Notice::Messages->find($delayed_message_id)->delay_until($yesterday)->store;
257
warning_like { $delayed_messages_processed = C4::Letters::SendQueuedMessages(); }
258
qr|Fake send_or_die|,
259
    "SendQueuedMessages is using the mocked send_or_die routine";
260
is( $delayed_messages_processed, 1, 'Message processed if delay_until is set in the past' );
261
Koha::Notice::Messages->find($delayed_message_id)->delete;
262
230
# ResendMessage
263
# ResendMessage
231
my $resent = C4::Letters::ResendMessage( $messages->[0]->{message_id} );
264
my $resent = C4::Letters::ResendMessage( $messages->[0]->{message_id} );
232
$message = C4::Letters::GetMessage( $messages->[0]->{message_id} );
265
$message = C4::Letters::GetMessage( $messages->[0]->{message_id} );
(-)a/t/db_dependent/Reserves.t (-2 / +117 lines)
Lines 17-23 Link Here
17
17
18
use Modern::Perl;
18
use Modern::Perl;
19
19
20
use Test::More tests => 69;
20
use Test::More tests => 70;
21
use Test::NoWarnings;
21
use Test::NoWarnings;
22
use Test::MockModule;
22
use Test::MockModule;
23
use Test::Warn;
23
use Test::Warn;
Lines 1466-1471 subtest 'ModReserveAffect logging' => sub { Link Here
1466
    like( $log->info, qr{$expected}, 'Timestamp logged is the current one' );
1466
    like( $log->info, qr{$expected}, 'Timestamp logged is the current one' );
1467
};
1467
};
1468
1468
1469
subtest 'ModReserveAffect delayed notice' => sub {
1470
1471
    plan tests => 4;
1472
1473
    my $wants_hold_and_email = {
1474
        wants_digest => '0',
1475
        transports   => {
1476
            email => 'HOLD',
1477
        },
1478
        letter_code => 'HOLD'
1479
    };
1480
1481
    my $mp = Test::MockModule->new('C4::Members::Messaging');
1482
1483
    $mp->mock( "GetMessagingPreferences", $wants_hold_and_email );
1484
1485
    $dbh->do('DELETE FROM letter');
1486
    $dbh->do('DELETE FROM reserves');
1487
    $dbh->do('DELETE FROM message_queue');
1488
1489
    my $email_hold_notice = $builder->build(
1490
        {
1491
            source => 'Letter',
1492
            value  => {
1493
                message_transport_type => 'email',
1494
                branchcode             => '',
1495
                code                   => 'HOLD',
1496
                module                 => 'reserves',
1497
                lang                   => 'default',
1498
            }
1499
        }
1500
    );
1501
1502
    my $hold_borrower = $builder->build(
1503
        {
1504
            source => 'Borrower',
1505
            value  => {
1506
                email => 'ac@b.com',
1507
            }
1508
        }
1509
    )->{borrowernumber};
1510
1511
    my $hold = C4::Reserves::AddReserve(
1512
        {
1513
            branchcode     => $item->homebranch,
1514
            borrowernumber => $hold_borrower,
1515
            biblionumber   => $item->biblionumber,
1516
        }
1517
    );
1518
    t::lib::Mocks::mock_preference( 'PickupNoticeDelayMode',     'off' );
1519
    t::lib::Mocks::mock_preference( 'PickupNoticeDelayDuration', 1 );
1520
1521
    # No delay allowed
1522
    my $tomorrow = dt_from_string()->add( days => 1 );
1523
    ModReserveAffect( $item->itemnumber, $hold_borrower, 0, $hold, undef, undef, $tomorrow );
1524
    my $delay_until = $schema->resultset('MessageQueue')->search(
1525
        {
1526
            letter_code            => 'HOLD',
1527
            message_transport_type => 'email',
1528
            borrowernumber         => $hold_borrower,
1529
        },
1530
        { order_by => { -desc => 'message_id' } }
1531
    )->next()->delay_until();
1532
    is( $delay_until, undef, "No notice delay if PickupNoticeDelayMode is off even if delay is passed" );
1533
1534
    $dbh->do('DELETE FROM message_queue');
1535
    $dbh->do('DELETE FROM reserves');
1536
    $hold = C4::Reserves::AddReserve(
1537
        {
1538
            branchcode     => $item->homebranch,
1539
            borrowernumber => $hold_borrower,
1540
            biblionumber   => $item->biblionumber,
1541
        }
1542
    );
1543
1544
    t::lib::Mocks::mock_preference( 'PickupNoticeDelayMode', 'fixed' );
1545
    my $more_than_hour = dt_from_string()->add( minutes => 61 );
1546
    my $less_than_hour = dt_from_string()->add( minutes => 59 );
1547
    ModReserveAffect( $item->itemnumber, $hold_borrower, 0, $hold, undef, undef, undef );
1548
    $delay_until = $schema->resultset('MessageQueue')->search(
1549
        {
1550
            letter_code            => 'HOLD',
1551
            message_transport_type => 'email',
1552
            borrowernumber         => $hold_borrower,
1553
        },
1554
        { order_by => { -desc => 'message_id' } }
1555
    )->next()->delay_until();
1556
    cmp_ok(
1557
        dt_from_string($delay_until)->epoch, ">=", $less_than_hour->epoch,
1558
        "1h fixed delay_until is bigger than 59 min."
1559
    );
1560
    cmp_ok( dt_from_string($delay_until), "<=", $more_than_hour, "1h fixed delay_until is less than 61 min." );
1561
1562
    $dbh->do('DELETE FROM message_queue');
1563
    $dbh->do('DELETE FROM reserves');
1564
    $hold = C4::Reserves::AddReserve(
1565
        {
1566
            branchcode     => $item->homebranch,
1567
            borrowernumber => $hold_borrower,
1568
            biblionumber   => $item->biblionumber,
1569
        }
1570
    );
1571
1572
    t::lib::Mocks::mock_preference( 'PickupNoticeDelayMode', 'staff' );
1573
    ModReserveAffect( $item->itemnumber, $hold_borrower, 0, $hold, undef, undef, $tomorrow );
1574
    $delay_until = $schema->resultset('MessageQueue')->search(
1575
        {
1576
            letter_code            => 'HOLD',
1577
            message_transport_type => 'email',
1578
            borrowernumber         => $hold_borrower,
1579
        },
1580
        { order_by => { -desc => 'message_id' } }
1581
    )->next()->delay_until();
1582
    is( dt_from_string($delay_until), $tomorrow, "Delay_until is same as set in function call" );
1583
};
1584
1469
sub count_hold_print_messages {
1585
sub count_hold_print_messages {
1470
    my $message_count = $dbh->selectall_arrayref(
1586
    my $message_count = $dbh->selectall_arrayref(
1471
        q{
1587
        q{
1472
- 

Return to bug 27208