ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
All Data Structures Namespaces Files Functions Variables Modules Pages
ilMailTest.php
Go to the documentation of this file.
1 <?php declare(strict_types=1);
2 
3 /* Copyright (c) 1998-2019 ILIAS open source, Extended GPL, see docs/LICENSE */
4 
10 {
14  protected function setUp() : void
15  {
16  parent::setUp();
17  }
18 
23  {
24  $senderUsrId = 666;
25  $loginToIdMap = [
26  'phpunit1' => 1,
27  'phpunit2' => 2,
28  'phpunit3' => 3,
29  'phpunit4' => 4,
30  'phpunit5' => 5,
31  'phpunit6' => 6,
32  'phpunit7' => 7,
33  ];
34  $userInstanceById = [];
35  $mailOptionsById = [];
36  foreach ($loginToIdMap as $login => $usrId) {
37  $user = $this
38  ->getMockBuilder(ilObjUser::class)
39  ->disableOriginalConstructor()
40  ->setMethods(['getId', 'hasToAcceptTermsOfService', 'checkTimeLimit', 'getActive'])
41  ->getMock();
42  $user->expects($this->any())->method('getId')->willReturn($usrId);
43  $user->expects($this->any())->method('getActive')->willReturn(true);
44  $user->expects($this->any())->method('hasToAcceptTermsOfService')->willReturn(false);
45  $user->expects($this->any())->method('checkTimeLimit')->willReturn(true);
46  $userInstanceById[$usrId] = $user;
47 
48  $mailOptions = $this
49  ->getMockBuilder(ilMailOptions::class)
50  ->disableOriginalConstructor()
51  ->setMethods(['getExternalEmailAddresses', 'getIncomingType'])
52  ->getMock();
53  $mailOptions->expects($this->any())->method('getExternalEmailAddresses')->willReturn([
54  'phpunit' . $usrId . '@ilias.de',
55  ]);
56  $mailOptions->expects($this->any())->method('getIncomingType')->willReturn(ilMailOptions::INCOMING_EMAIL);
57  $mailOptionsById[$usrId] = $mailOptions;
58  }
59 
60  $user = $this->getMockBuilder(ilObjUser::class)->disableOriginalConstructor()->getMock();
61  ilMailMimeSenderUserById::addUserToCache($senderUsrId, $user);
62 
63  $addressTypeFactory = $this
64  ->getMockBuilder(ilMailAddressTypeFactory::class)
65  ->disableOriginalConstructor()
66  ->setMethods(['getByPrefix'])
67  ->getMock();
68  $addressTypeFactory->expects($this->any())
69  ->method('getByPrefix')
70  ->will($this->returnCallback(function ($arg) use ($loginToIdMap) {
71  return new class($arg, $loginToIdMap) implements ilMailAddressType {
72  protected $loginToIdMap = [];
73  protected $address;
74 
75  public function __construct(ilMailAddress $address, $loginToIdMap)
76  {
77  $this->address = $address;
78  $this->loginToIdMap = array_map(function ($usrId) {
79  return [$usrId];
80  }, $loginToIdMap);
81  }
82 
83  public function resolve() : array
84  {
85  return $this->loginToIdMap[$this->address->getMailbox()] ?? [];
86  }
87 
88  public function validate(int $senderId) : bool
89  {
90  return true;
91  }
92 
93  public function getErrors() : array
94  {
95  return [];
96  }
97 
98  public function getAddress() : ilMailAddress
99  {
100  return $this->address;
101  }
102  };
103  }));
104 
105  $db = $this->getMockBuilder(ilDBInterface::class)->getMock();
106  $nextId = 0;
107  $db->expects($this->any())->method('nextId')->will($this->returnCallback(function () use (&$nextId) {
108  ++$nextId;
109 
110  return $nextId;
111  }));
112 
113  $eventHandler = $this->getMockBuilder(ilAppEventHandler::class)->disableOriginalConstructor()->getMock();
114  $logger = $this->getMockBuilder(ilLogger::class)->disableOriginalConstructor()->getMock();
115  $lng = $this->getMockBuilder(ilLanguage::class)->disableOriginalConstructor()->getMock();
116  $settings = $this->getMockBuilder(ilSetting::class)->disableOriginalConstructor()->getMock();
117  $this->setGlobalVariable('ilSetting', $settings);
118 
119  $mailFileData = $this->getMockBuilder(ilFileDataMail::class)->disableOriginalConstructor()->getMock();
120  $mailOptions = $this->getMockBuilder(ilMailOptions::class)->disableOriginalConstructor()->getMock();
121  $mailBox = $this->getMockBuilder(ilMailbox::class)->disableOriginalConstructor()->getMock();
122 
123  $mailService = new ilMail(
124  $senderUsrId,
125  $addressTypeFactory,
127  $eventHandler,
128  $logger,
129  $db,
130  $lng,
131  $mailFileData,
132  $mailOptions,
133  $mailBox,
134  new ilMailMimeSenderFactory($settings),
135  function (string $login) use ($loginToIdMap) {
136  return $loginToIdMap[$login] ?? 0;
137  },
138  4711
139  );
140 
141  $oldTransport = ilMimeMail::getDefaultTransport();
142 
143  $mailTransport = $this
144  ->getMockBuilder(ilMailMimeTransport::class)
145  ->getMock();
146  $mailTransport->expects($this->exactly(1))->method('send')->with($this->callback(function (
147  ilMimeMail $mailer
148  ) use ($loginToIdMap) {
149  $totalBcc = [];
150  foreach ($mailer->getBcc() as $bcc) {
151  $totalBcc = array_filter(array_map('trim', explode(',', $bcc))) + $totalBcc;
152  }
153 
154  return count($totalBcc) === count($loginToIdMap);
155  }))->willReturn(true);
156  ilMimeMail::setDefaultTransport($mailTransport);
157 
158  $mailService->setUserInstanceById($userInstanceById);
159  $mailService->setMailOptionsByUserIdMap($mailOptionsById);
160 
161  $mailService->sendMail(
162  implode(',', array_slice(array_keys($loginToIdMap), 0, 3)),
163  implode(',', array_slice(array_keys($loginToIdMap), 3, 2)),
164  implode(',', array_slice(array_keys($loginToIdMap), 5, 2)),
165  'Subject',
166  'Message',
167  [],
168  false
169  );
170 
171  ilMimeMail::setDefaultTransport($oldTransport);
172  }
173 }
$login
Definition: cron.php:13
static addUserToCache(int $usrId, ilObjUser $user)
Class ilMailMimeSenderFactory.
testExternalMailDeliveryToLocalRecipientsWorksAsExpected()
Definition: ilMailTest.php:22
Class ilMailMimeTest.
Definition: ilMailTest.php:9
static setDefaultTransport(?ilMailMimeTransport $transport)
static getDefaultTransport()
Class ilMailBaseTest.
Interface ilMailAddressType.
Class ilMailRfc822AddressParserFactory.
setGlobalVariable(string $name, $value)
Class ilMimeMail.
$lng
__construct(Container $dic, ilPlugin $plugin)
Class ilMailAddress.