19 declare(strict_types=1);
    39         bool $expects_active_auto_responder
    41         $clock = $this->createMock(ClockInterface::class);
    42         $clock->method(
'now')->willReturn($faked_now);
    44         $repository = $this->createMock(AutoresponderRepository::class);
    46         if ($last_auto_responder_time === null) {
    47             $repository->expects($this->once())->method(
'exists')->willReturn(
false);
    48             $repository->expects($this->never())->method(
'findBySenderIdAndReceiverId');
    51                 self::MAIL_SENDER_USER_ID,
    52                 self::MAIL_RECEIVER_USER_ID,
    57                 self::MAIL_SENDER_USER_ID,
    58                 self::MAIL_RECEIVER_USER_ID,
    59                 $last_auto_responder_time
    62             $repository->expects($this->once())->method(
'exists')->willReturn(
true);
    63             $repository->expects($this->once())->method(
'findBySenderIdAndReceiverId')->willReturn($auto_responder_record);
    66         if ($expects_active_auto_responder) {
    67             $repository->expects($this->once())->method(
'store')->with(
    68                 $this->callback(
static function (
AutoresponderDto $actual) use ($faked_now, $auto_responder_record): 
bool {
    71                         $actual->
getReceiverId() === $auto_responder_record->getReceiverId() &&
    72                         $actual->
getSenderId() === $auto_responder_record->getSenderId()
    73                     ) && $faked_now->format(
'Y-m-d H:i:s') === $actual->
getSentTime()->format(
'Y-m-d H:i:s');
    77             $repository->expects($this->never())->method(
'store');
    80         $mail_receiver_options = $this->getMockBuilder(ilMailOptions::class)->disableOriginalConstructor()->getMock();
    81         $mail_receiver_options->method(
'getUsrId')->willReturn(self::MAIL_RECEIVER_USER_ID);
    82         $mail_receiver_options->method(
'isAbsent')->willReturn(
true);
    84         $mail_options = $this->getMockBuilder(ilMailOptions::class)->disableOriginalConstructor()->getMock();
    85         $mail_options->method(
'getUsrId')->willReturn(self::MAIL_SENDER_USER_ID);
    86         $mail_options->method(
'isAbsent')->willReturn(
false);
    95         $auto_responder_service->enqueueAutoresponderIfEnabled(self::MAIL_SENDER_USER_ID, $mail_receiver_options, $mail_options);
    97         $auto_responder_service->handleAutoresponderMails(self::MAIL_RECEIVER_USER_ID);
   101         int $global_idle_time_interval,
   106             $global_idle_time_interval,
   108             $auto_responder_repository,
   120         int $auto_responder_sender_usr_id,
   121         int $auto_responder_receiver_id,
   125             $auto_responder_sender_usr_id,
   126             $auto_responder_receiver_id,
   135         yield 
'Last Sent Date is 1 Second in Future with Disabled Idle Time Interval' => [
   136             $now->modify(
'+1 seconds'),
   142         yield 
'Last Sent Date is -1 Day in Past with Disabled Idle Time Interval' => [
   149         yield 
'Last Sent Date is -1 Day + 1 Second in Past with Idle Time Interval being 1 Day' => [
   150             $now->sub(
new DateInterval(
'P1D'))->modify(
'+1 second'),
   156         yield 
'Last Sent Date is -1 Day in Past with Idle Time Interval being 1 Day' => [
   163         yield 
'Last Sent Date is -1 Day in Past with an Added Idle Time Interval Exceeding Now' => [
   170         yield 
'No autoresponder sent, yet' => [
 
testAutoresponderDeliveryWillBeHandledCorrectlyDependingOnLastSentTime(?DateTimeImmutable $last_auto_responder_time, DateTimeImmutable $faked_now, int $interval, bool $expects_active_auto_responder)
autoresponderProvider 
 
static autoresponderProvider()
 
createAutoresponderRecord(int $auto_responder_sender_usr_id, int $auto_responder_receiver_id, DateTimeImmutable $sender_time)
 
const MAIL_SENDER_USER_ID
 
createService(int $global_idle_time_interval, AutoresponderRepository $auto_responder_repository, ClockInterface $clock)
 
const MAIL_RECEIVER_USER_ID