22 : void
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 ]);
57 $mailOptionsById[$usrId] = $mailOptions;
58 }
59
60 $user = $this->getMockBuilder(ilObjUser::class)->disableOriginalConstructor()->getMock();
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) {
72 protected $loginToIdMap = [];
73 protected $address;
74
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
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();
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,
131 $mailFileData,
132 $mailOptions,
133 $mailBox,
135 function (
string $login) use ($loginToIdMap) {
136 return $loginToIdMap[
$login] ?? 0;
137 },
138 4711
139 );
140
142
143 $mailTransport = $this
144 ->getMockBuilder(ilMailMimeTransport::class)
145 ->getMock();
146 $mailTransport->expects($this->exactly(1))->method('send')->with($this->callback(function (
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);
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
172 }
setGlobalVariable(string $name, $value)
Class ilMailMimeSenderFactory.
static addUserToCache(int $usrId, ilObjUser $user)
Class ilMailRfc822AddressParserFactory.
static getDefaultTransport()
static setDefaultTransport(?ilMailMimeTransport $transport)
Interface ilMailAddressType.
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc