19 declare(strict_types=1);
33 #[DataProvider('autoresponderProvider')] 38 bool $expects_active_auto_responder
40 $clock = $this->createMock(ClockInterface::class);
41 $clock->method(
'now')->willReturn($faked_now);
43 $repository = $this->createMock(AutoresponderRepository::class);
45 if ($last_auto_responder_time ===
null) {
46 $repository->expects($this->once())->method(
'exists')->willReturn(
false);
47 $repository->expects($this->never())->method(
'findBySenderIdAndReceiverId');
50 self::MAIL_SENDER_USER_ID,
51 self::MAIL_RECEIVER_USER_ID,
56 self::MAIL_SENDER_USER_ID,
57 self::MAIL_RECEIVER_USER_ID,
58 $last_auto_responder_time
61 $repository->expects($this->once())->method(
'exists')->willReturn(
true);
62 $repository->expects($this->once())->method(
'findBySenderIdAndReceiverId')->willReturn($auto_responder_record);
65 if ($expects_active_auto_responder) {
66 $repository->expects($this->once())->method(
'store')->with(
69 $actual->
getReceiverId() === $auto_responder_record->getReceiverId() &&
70 $actual->
getSenderId() === $auto_responder_record->getSenderId()
71 ) && $faked_now->format(
'Y-m-d H:i:s') === $actual->
getSentTime()->format(
'Y-m-d H:i:s'))
74 $repository->expects($this->never())->method(
'store');
77 $mail_receiver_options = $this->getMockBuilder(ilMailOptions::class)->disableOriginalConstructor()->getMock();
78 $mail_receiver_options->method(
'getUsrId')->willReturn(self::MAIL_RECEIVER_USER_ID);
79 $mail_receiver_options->method(
'isAbsent')->willReturn(
true);
81 $mail_options = $this->getMockBuilder(ilMailOptions::class)->disableOriginalConstructor()->getMock();
82 $mail_options->method(
'getUsrId')->willReturn(self::MAIL_SENDER_USER_ID);
83 $mail_options->method(
'isAbsent')->willReturn(
false);
92 $auto_responder_service->enqueueAutoresponderIfEnabled(self::MAIL_SENDER_USER_ID, $mail_receiver_options, $mail_options);
94 $auto_responder_service->handleAutoresponderMails(self::MAIL_RECEIVER_USER_ID);
98 int $global_idle_time_interval,
103 $global_idle_time_interval,
105 $auto_responder_repository,
117 int $auto_responder_sender_usr_id,
118 int $auto_responder_receiver_id,
122 $auto_responder_sender_usr_id,
123 $auto_responder_receiver_id,
132 yield
'Last Sent Date is 1 Second in Future with Disabled Idle Time Interval' => [
133 $now->modify(
'+1 seconds'),
139 yield
'Last Sent Date is -1 Day in Past with Disabled Idle Time Interval' => [
146 yield
'Last Sent Date is -1 Day + 1 Second in Past with Idle Time Interval being 1 Day' => [
147 $now->sub(
new DateInterval(
'P1D'))->modify(
'+1 second'),
153 yield
'Last Sent Date is -1 Day in Past with Idle Time Interval being 1 Day' => [
160 yield
'Last Sent Date is -1 Day in Past with an Added Idle Time Interval Exceeding Now' => [
167 yield
'No autoresponder sent, yet' => [
testAutoresponderDeliveryWillBeHandledCorrectlyDependingOnLastSentTime(?DateTimeImmutable $last_auto_responder_time, DateTimeImmutable $faked_now, int $interval, bool $expects_active_auto_responder)
static autoresponderProvider()
createAutoresponderRecord(int $auto_responder_sender_usr_id, int $auto_responder_receiver_id, DateTimeImmutable $sender_time)
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
const int MAIL_SENDER_USER_ID
const int MAIL_RECEIVER_USER_ID
createService(int $global_idle_time_interval, AutoresponderRepository $auto_responder_repository, ClockInterface $clock)