19 declare(strict_types=1);
46 $refineryMock = $this->getMockBuilder(Factory::class)->disableOriginalConstructor()->getMock();
59 $userInstanceById = [];
60 $mailOptionsById = [];
61 foreach ($loginToIdMap as $login => $usrId) {
63 ->getMockBuilder(ilObjUser::class)
64 ->disableOriginalConstructor()
65 ->onlyMethods([
'getId',
'hasToAcceptTermsOfService',
'checkTimeLimit',
'getActive'])
67 $user->method(
'getId')->willReturn($usrId);
68 $user->method(
'getActive')->willReturn(
true);
69 $user->method(
'hasToAcceptTermsOfService')->willReturn(
false);
70 $user->method(
'checkTimeLimit')->willReturn(
true);
71 $userInstanceById[$usrId] = $user;
74 ->getMockBuilder(ilMailOptions::class)
75 ->disableOriginalConstructor()
76 ->onlyMethods([
'getExternalEmailAddresses',
'getIncomingType'])
78 $mailOptions->method(
'getExternalEmailAddresses')->willReturn([
79 'phpunit' . $usrId .
'@ilias.de',
82 $mailOptionsById[$usrId] = $mailOptions;
85 $user = $this->getMockBuilder(ilObjUser::class)->disableOriginalConstructor()->getMock();
88 $addressTypeFactory = $this
89 ->getMockBuilder(ilMailAddressTypeFactory::class)
90 ->disableOriginalConstructor()
91 ->onlyMethods([
'getByPrefix'])
94 ->method(
'getByPrefix')
95 ->willReturnCallback(
function ($arg) use ($loginToIdMap) {
97 protected array $loginToIdMap = [];
102 $this->address = $address;
103 $this->loginToIdMap = array_map(
static function (
int $usrId): array {
108 public function resolve(): array
110 return $this->loginToIdMap[$this->address->getMailbox()] ?? [];
113 public function validate(
int $senderId):
bool 118 public function getErrors(): array
125 return $this->address;
130 $db = $this->getMockBuilder(ilDBInterface::class)->getMock();
132 $db->method(
'nextId')->willReturnCallback(
function () use (&$nextId):
int {
138 $eventHandler = $this->getMockBuilder(ilAppEventHandler::class)->disableOriginalConstructor()->getMock();
139 $logger = $this->getMockBuilder(ilLogger::class)->disableOriginalConstructor()->getMock();
140 $lng = $this->getMockBuilder(ilLanguage::class)->disableOriginalConstructor()->getMock();
141 $settings = $this->getMockBuilder(ilSetting::class)->disableOriginalConstructor()->getMock();
144 $mailFileData = $this->getMockBuilder(ilFileDataMail::class)->disableOriginalConstructor()->getMock();
145 $mailOptions = $this->getMockBuilder(ilMailOptions::class)->disableOriginalConstructor()->getMock();
146 $mailBox = $this->getMockBuilder(ilMailbox::class)->disableOriginalConstructor()->getMock();
147 $actor = $this->getMockBuilder(ilObjUser::class)->disableOriginalConstructor()->getMock();
149 $mailService =
new ilMail(
161 static function (
string $login) use ($loginToIdMap):
int {
162 return $loginToIdMap[$login] ?? 0;
170 $mailTransport = $this
171 ->getMockBuilder(ilMailMimeTransport::class)
173 $mailTransport->expects($this->once())->method(
'send')->with($this->callback(
function (
175 ) use ($loginToIdMap):
bool {
177 foreach ($mailer->
getBcc() as $bcc) {
178 $totalBcc = array_filter(array_map(
'trim', explode(
',', $bcc))) + $totalBcc;
181 return count($totalBcc) === count($loginToIdMap);
182 }))->willReturn(
true);
185 $mailService->setUserInstanceById($userInstanceById);
186 $mailService->setMailOptionsByUserIdMap($mailOptionsById);
188 $mailService->sendMail(
189 implode(
',', array_slice(array_keys($loginToIdMap), 0, 3)),
190 implode(
',', array_slice(array_keys($loginToIdMap), 3, 2)),
191 implode(
',', array_slice(array_keys($loginToIdMap), 5, 2)),
206 $this->assertSame(
$refId, $instance->getMailObjectReferenceId());
211 $instance = $this->
create();
213 $this->mockLanguage->expects(self::once())->method(
'txt')->with(
'not_available')->willReturn(
'not_available');
215 $this->assertSame(
'not_available', $instance->formatNamesForOutput(
''));
216 $this->assertSame(
'', $instance->formatNamesForOutput(
','));
226 $this->mockDatabase->expects(self::once())->method(
'setLimit')->with(1, 0);
227 $instance->getPreviousMail($mailId);
239 'tpl_ctx_params' =>
'[]',
240 'use_placeholders' =>
'',
247 'use_placeholders' =>
'',
257 $this->mockDatabase->expects(self::once())->method(
'setLimit')->with(1, 0);
258 $instance->getNextMail($mailId);
263 $filter = [
'status' =>
'yes'];
264 $rowData = [
'mail_id' => 8908];
267 'tpl_ctx_params' => [],
274 $expected = [$one, $one];
277 $instance = $this->
create(234, $userId);
278 $mockStatement = $this->getMockBuilder(ilDBStatement::class)->getMock();
279 $this->mockDatabase->expects(self::never())->method(
'setLimit');
280 $this->mockDatabase->expects(self::exactly(3))->method(
'fetchAssoc')->with($mockStatement)->willReturnOnConsecutiveCalls($rowData, $rowData, null);
281 $this->mockDatabase->expects(self::once())->method(
'queryF')->willReturnCallback($this->
queryCallback($mockStatement, [
'integer',
'integer'], [$userId, $folderId]));
283 $this->mockDatabase->expects(self::once())->method(
'quote')->with($filter[
'status'],
'text')->willReturn($filter[
'status']);
285 $this->assertEquals($expected, $instance->getMailsOfFolder($folderId, $filter));
293 $instance = $this->
create(345, $userId);
294 $mockStatement = $this->getMockBuilder(ilDBStatement::class)->getMock();
295 $this->mockDatabase->expects(self::once())->method(
'queryF')->willReturnCallback($this->
queryCallback($mockStatement, [
'integer',
'integer'], [$userId, $folderId]));
296 $this->mockDatabase->expects(self::once())->method(
'numRows')->with($mockStatement)->willReturn($numRows);
298 $this->assertSame($numRows, $instance->countMailsOfFolder($folderId));
305 $instance->getMail($mailId);
310 $mailIds = [1, 2, 3, 4, 5, 6];
312 $instance = $this->
create(567, $userId);
313 $mockStatement = $this->getMockBuilder(ilDBStatement::class)->getMock();
314 $this->mockDatabase->expects(self::once())->method(
'in')->with(
'mail_id', $mailIds,
false,
'integer')->willReturn(
'');
315 $this->mockDatabase->expects(self::once())->method(
'manipulateF')->willReturnCallback($this->
queryCallback(0, [
'text',
'integer'], [
'read', $userId]));
317 $instance->markRead($mailIds);
322 $mailIds = [1, 2, 3, 4, 5, 6];
324 $instance = $this->
create(567, $userId);
325 $mockStatement = $this->getMockBuilder(ilDBStatement::class)->getMock();
326 $this->mockDatabase->expects(self::once())->method(
'in')->with(
'mail_id', $mailIds,
false,
'integer')->willReturn(
'');
327 $this->mockDatabase->expects(self::once())->method(
'manipulateF')->willReturnCallback($this->
queryCallback(0, [
'text',
'integer'], [
'unread', $userId]));
329 $instance->markUnread($mailIds);
334 $mailIds = [1, 2, 3, 4, 5, 6];
337 $instance = $this->
create(567, $userId);
338 $this->mockDatabase->expects(self::once())->method(
'in')->with(
'mail_id', $mailIds,
false,
'integer')->willReturn(
'');
339 $this->mockDatabase->expects(self::once())->method(
'manipulateF')->willReturnCallback($this->
queryCallback(1, [
'integer',
'integer',
'integer'], [$folderId, $userId, $userId]));
341 $this->assertTrue($instance->moveMailsToFolder($mailIds, $folderId));
347 $instance = $this->
create();
348 $this->mockDatabase->expects(self::never())->method(
'in');
349 $this->mockDatabase->expects(self::never())->method(
'manipulateF');
351 $this->assertFalse($instance->moveMailsToFolder($mailIds, 892));
359 $instance = $this->
create(4749, $userId);
361 $this->mockDatabase->expects(self::once())->method(
'nextId')->with(
'mail')->willReturn($nextId);
362 $this->mockDatabase->expects(self::once())->method(
'insert')->with(
'mail', [
363 'mail_id' => [
'integer', $nextId],
364 'user_id' => [
'integer', $userId],
365 'folder_id' => [
'integer', $folderId],
366 'sender_id' => [
'integer', $userId],
369 $this->assertSame($nextId, $instance->getNewDraftId($folderId));
375 $instance = $this->
create();
381 $usePlaceholders =
true;
386 $this->mockDatabase->expects(self::once())->method(
'update')->with(
'mail', [
387 'folder_id' => [
'integer', $folderId],
388 'attachments' => [
'clob', serialize([])],
389 'send_time' => [
'timestamp', date(
'Y-m-d H:i:s')],
390 'rcp_to' => [
'clob', $to],
391 'rcp_cc' => [
'clob', $cc],
392 'rcp_bcc' => [
'clob', $bcc],
393 'm_status' => [
'text',
'read'],
394 'm_subject' => [
'text', $subject],
396 'use_placeholders' => [
'integer', (
int) $usePlaceholders],
397 'tpl_ctx_id' => [
'text', $contextId],
398 'tpl_ctx_params' => [
'blob', json_encode(
$params, JSON_THROW_ON_ERROR)],
400 'mail_id' => [
'integer', $draftId],
403 $this->assertSame($draftId, $instance->updateDraft($folderId, [], $to, $cc, $bcc, $subject,
$message, $draftId, $usePlaceholders, $contextId,
$params));
415 $usePlaceholders =
false;
419 $instance = $this->
create(789, $userId);
421 $this->mockDatabase->expects(self::once())->method(
'replace')->with(
'mail_saved', [
422 'user_id' => [
'integer', $userId],
424 'attachments' => [
'clob', serialize($attachments)],
425 'rcp_to' => [
'clob', $rcpTo],
426 'rcp_cc' => [
'clob', $rcpCc],
427 'rcp_bcc' => [
'clob', $rcpBcc],
428 'm_subject' => [
'text', $subject],
430 'use_placeholders' => [
'integer', (
int) $usePlaceholders],
431 'tpl_ctx_id' => [
'text', $contextId],
432 'tpl_ctx_params' => [
'blob', json_encode(
$params, JSON_THROW_ON_ERROR)],
435 $mockStatement = $this->getMockBuilder(ilDBStatement::class)->disableOriginalConstructor()->getMock();
436 $this->mockDatabase->expects(self::once())->method(
'queryF')->willReturnCallback($this->
queryCallback($mockStatement, [
'integer'], [$userId]));
437 $this->mockDatabase->expects(self::once())->method(
'fetchAssoc')->with($mockStatement)->willReturn([
438 'rcp_to' =>
'phpunit' 441 $instance->persistToStage(
458 $instance = $this->
create(67, $userId);
459 $mockStatement = $this->getMockBuilder(ilDBStatement::class)->disableOriginalConstructor()->getMock();
460 $this->mockDatabase->expects(self::once())->method(
'queryF')->willReturnCallback($this->
queryCallback($mockStatement, [
'integer'], [$userId]));
461 $this->mockDatabase->expects(self::once())->method(
'fetchAssoc')->with($mockStatement)->willReturn([
462 'rcp_to' =>
'phpunit' 465 $mail_data = $instance->retrieveFromStage();
467 $this->assertIsArray($mail_data);
468 $this->assertEquals(
'phpunit', $mail_data[
'rcp_to']);
477 $instance = $this->
create();
478 $this->mockLog->expects(self::exactly(6))->method(
'debug')->withConsecutive(
479 [
'Started parsing of recipient string: ' . $to],
480 [
'Parsed addresses: hello'],
481 [
'Started parsing of recipient string: ' . $cc],
482 [
'Parsed addresses: hello'],
483 [
'Started parsing of recipient string: ' . $bcc],
484 [
'Parsed addresses: hello']
487 $mockAddress = $this->getMockBuilder(ilMailAddress::class)->disableOriginalConstructor()->getMock();
488 $mockAddress->expects(self::exactly(3))->method(
'__toString')->willReturn(
'hello');
489 $mockParser = $this->getMockBuilder(ilMailRecipientParser::class)->disableOriginalConstructor()->getMock();
490 $mockParser->expects(self::exactly(3))->method(
'parse')->willReturn([$mockAddress]);
491 $this->mockParserFactory->expects(self::exactly(3))->method(
'getParser')->withConsecutive([$to], [$cc], [$bcc])->willReturn($mockParser);
493 $mockAddressType = $this->getMockBuilder(ilMailAddressType::class)->disableOriginalConstructor()->getMock();
494 $mockAddressType->expects(self::exactly(3))->method(
'validate')->willReturn(empty(
$errors));
495 $mockAddressType->expects(self::exactly(empty(
$errors) ? 0 : 3))->method(
'getErrors')->willReturn(
$errors);
496 $this->mockAddressTypeFactory->expects(self::exactly(3))->method(
'getByPrefix')->with($mockAddress)->willReturn($mockAddressType);
498 $this->assertSame([], $instance->validateRecipients($to, $cc, $bcc));
511 $expected =
'Phasellus lacus';
512 $mockSystem = $this->getMockBuilder(ilMailMimeSenderSystem::class)->disableOriginalConstructor()->getMock();
513 $mockSystem->expects(self::once())->method(
'getFromName')->willReturn($expected);
514 $mockFactory = $this->getMockBuilder(ilMailMimeSenderFactory::class)->disableOriginalConstructor()->getMock();
515 $mockFactory->expects(self::once())->method(
'system')->willReturn($mockSystem);
518 $this->assertSame($expected, ilMail::_getIliasMailerName());
524 $attachments = [
'aaa',
'bb',
'cc',
'rrr'];
525 $instance = $this->
create(789, $userId);
527 $this->mockDatabase->expects(self::once())->method(
'update')->with(
530 'attachments' => [
'clob', serialize($attachments)],
533 'user_id' => [
'integer', $userId],
537 $instance->saveAttachments($attachments);
542 return function (
string $query, array $types, array $values) use ($expectedTypes, $expectedValues, $returnValue) {
543 $this->assertEquals($expectedTypes, $types);
544 $this->assertEquals($expectedValues, $values);
553 $instance = $this->
create(234, $userId);
554 $mockStatement = $this->getMockBuilder(ilDBStatement::class)->getMock();
555 $this->mockDatabase->expects(self::once())->method(
'fetchAssoc')->with($mockStatement)->willReturn($rowData);
556 $this->mockDatabase->expects(self::once())->method(
'queryF')->willReturnCallback($this->
queryCallback($mockStatement, [
'integer',
'integer'], [$userId, $someMailId]));
565 ($this->mockAddressTypeFactory = $this->getMockBuilder(ilMailAddressTypeFactory::class)->disableOriginalConstructor()->getMock()),
566 ($this->mockParserFactory = $this->getMockBuilder(ilMailRfc822AddressParserFactory::class)->disableOriginalConstructor()->getMock()),
567 $this->getMockBuilder(ilAppEventHandler::class)->disableOriginalConstructor()->getMock(),
568 ($this->mockLog = $this->getMockBuilder(ilLogger::class)->disableOriginalConstructor()->getMock()),
569 ($this->mockDatabase = $this->getMockBuilder(ilDBInterface::class)->disableOriginalConstructor()->getMock()),
570 ($this->mockLanguage = $this->getMockBuilder(ilLanguage::class)->disableOriginalConstructor()->getMock()),
571 $this->getMockBuilder(ilFileDataMail::class)->disableOriginalConstructor()->getMock(),
572 $this->getMockBuilder(ilMailOptions::class)->disableOriginalConstructor()->getMock(),
573 $this->getMockBuilder(ilMailbox::class)->disableOriginalConstructor()->getMock(),
574 $this->getMockBuilder(ilMailMimeSenderFactory::class)->disableOriginalConstructor()->getMock(),
575 static function (
string $login):
int {
579 $this->getMockBuilder(ilObjUser::class)->disableOriginalConstructor()->getMock()
static addUserToCache(int $usrId, ilObjUser $user)
Class ilMailMimeSenderFactory.
testValidateRecipients($errors=[])
if(! $DIC->user() ->getId()||!ilLTIConsumerAccess::hasCustomProviderCreationAccess()) $params
testExternalMailDeliveryToLocalRecipientsWorksAsExpected()
static setDefaultTransport(?ilMailMimeTransport $transport)
static getDefaultTransport()
Interface ilMailAddressType.
Class ilMailRfc822AddressParserFactory.
testGetPreviousMail(array $rowData)
provideGetPreviousMail
setGlobalVariable(string $name, $value)
ilDBInterface $mockDatabase
create(int $refId=234, int $userId=123)
testMoveMailsToFolderFalse()
createAndExpectDatabaseCall(int $someMailId, array $rowData)
queryCallback($returnValue, array $expectedTypes, array $expectedValues)
testGetMailObjectReferenceId()
provideValidateRecipients()
testFormatNamesForOutput()
__construct(Container $dic, ilPlugin $plugin)