ILIAS  trunk Revision v13.0_alpha-62-g3b72d83f2e5
ilMailMimeTest.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
23use PHPUnit\Framework\MockObject\Stub;
25
27{
28 private const int USER_ID = 6;
29
30 protected function setUp(): void
31 {
33 ilMailMimeSenderUserById::addUserToCache(self::USER_ID, $this->getUserById(self::USER_ID));
34
36 }
37
38 public function testMimMailDelegatesEmailDeliveryToThePassedTransporter(): void
39 {
40 $default_transport = $this->getMockBuilder(ilMailMimeTransport::class)->disableOriginalConstructor()->getMock();
41 $default_transport->expects($this->never())->method('send');
42
43 $transport = $this->getMockBuilder(ilMailMimeTransport::class)->getMock();
44 $transport->expects($this->once())->method('send');
45
47 $transport_factory = $this->getStubBuilder(ilMailMimeTransportFactory::class)->disableOriginalConstructor()->getStub();
48 $transport_factory->method('getTransport')->willReturn($default_transport);
49 $this->setGlobalVariable('mail.mime.transport.factory', $transport_factory);
50
51 $refinery = $this->getStubBuilder(Factory::class)->disableOriginalConstructor()->getStub();
52 $this->setGlobalVariable('refinery', $refinery);
53
55 $settings = $this->getStubBuilder(ilSetting::class)->disableOriginalConstructor()->onlyMethods([
56 'set',
57 'get',
58 ])->getStub();
59 $this->setGlobalVariable('ilSetting', $settings);
60
61 $refinery = $this->getStubBuilder(Factory::class)->disableOriginalConstructor()->getStub();
62 $this->setGlobalVariable('refinery', $refinery);
63
64 $mail = new ilMimeMail();
65 $mail->Send($transport);
66 }
67
68 public function testMimMailDelegatesEmailDeliveryToDefaultTransport(): void
69 {
70 $default_transport = $this->getMockBuilder(ilMailMimeTransport::class)->getMock();
71 $default_transport->expects($this->once())->method('send');
72
74 $transport_factory = $this->getStubBuilder(ilMailMimeTransportFactory::class)->disableOriginalConstructor()->getStub();
75 $transport_factory->method('getTransport')->willReturn($default_transport);
76 $this->setGlobalVariable('mail.mime.transport.factory', $transport_factory);
77
78 $refinery = $this->getStubBuilder(Factory::class)->disableOriginalConstructor()->getStub();
79 $this->setGlobalVariable('refinery', $refinery);
80
82 $settings = $this->getStubBuilder(ilSetting::class)->disableOriginalConstructor()->onlyMethods([
83 'set',
84 'get',
85 ])->getStub();
86 $this->setGlobalVariable('ilSetting', $settings);
87
88 $refinery = $this->getStubBuilder(Factory::class)->disableOriginalConstructor()->getStub();
89 $this->setGlobalVariable('refinery', $refinery);
90
91 $mail = new ilMimeMail();
92 $mail->Send();
93 }
94
95 public function testTransportFactoryWillReturnNullTransportIfExternalEmailDeliveryIsDisabled(): void
96 {
98 $settings = $this->getStubBuilder(ilSetting::class)->disableOriginalConstructor()->onlyMethods([
99 'set',
100 'get',
101 ])->getStub();
102 $settings->method('get')->willReturnCallback(static function ($key): ?string {
103 return (string) ('mail_allow_external' !== $key);
104 });
105 $this->setGlobalVariable('ilSetting', $settings);
106
108 $event_handler = $this->getStubBuilder(ilAppEventHandler::class)->disableOriginalConstructor()->onlyMethods([
109 'raise',
110 ])->getStub();
111
113 $irss = $this->createStub(Services::class);
114
115 $factory = new ilMailMimeTransportFactory($settings, $event_handler, $irss);
116 $this->assertInstanceOf(ilMailMimeTransportNull::class, $factory->getTransport());
117 }
118
119 public function testTransportFactoryWillReturnSmtpTransportIfEnabled(): void
120 {
122 $settings = $this->getStubBuilder(ilSetting::class)->disableOriginalConstructor()->onlyMethods([
123 'set',
124 'get',
125 ])->getStub();
126 $settings->method('get')->willReturnCallback(static fn($key): ?string => '1');
127 $this->setGlobalVariable('ilSetting', $settings);
128
130 $event_handler = $this->getStubBuilder(ilAppEventHandler::class)->disableOriginalConstructor()->onlyMethods([
131 'raise',
132 ])->getStub();
133
135 $irss = $this->createStub(Services::class);
136
137 $factory = new ilMailMimeTransportFactory($settings, $event_handler, $irss);
138 $this->assertInstanceOf(ilMailMimeTransportSmtp::class, $factory->getTransport());
139 }
140
141 public function testTransportFactoryWillReturnSendmailTransportIfSmtpTransportIsDisabled(): void
142 {
144 $settings = $this->getStubBuilder(ilSetting::class)->disableOriginalConstructor()->onlyMethods([
145 'set',
146 'get',
147 ])->getStub();
148
149 $settings->method('get')->willReturnCallback(static function ($key): ?string {
150 if ('mail_allow_external' === $key) {
151 return '1';
152 }
153
154
155 if ('mail_smtp_status' === $key) {
156 return '0';
157 }
158
159 return '1';
160 });
161 $this->setGlobalVariable('ilSetting', $settings);
162
164 $event_handler = $this->getStubBuilder(ilAppEventHandler::class)->disableOriginalConstructor()->onlyMethods([
165 'raise',
166 ])->getStub();
167
169 $irss = $this->createStub(Services::class);
170
171 $factory = new ilMailMimeTransportFactory($settings, $event_handler, $irss);
172 $this->assertInstanceOf(ilMailMimeTransportSendmail::class, $factory->getTransport());
173 }
174
175 public function testFactoryWillReturnSystemSenderForAnonymousUserId(): void
176 {
178 $settings = $this->getStubBuilder(ilSetting::class)->disableOriginalConstructor()->onlyMethods([
179 'set',
180 'get',
181 ])->getStub();
183 $template_engine_factory = $this->createStub(TemplateEngineFactoryInterface::class);
184
185 $factory = new ilMailMimeSenderFactory($settings, $template_engine_factory);
186 $this->assertInstanceOf(ilMailMimeSenderSystem::class, $factory->getSenderByUsrId(ANONYMOUS_USER_ID));
187 }
188
189 public function testFactoryWillReturnSystemSenderWhenExplicitlyRequested(): void
190 {
192 $settings = $this->getStubBuilder(ilSetting::class)->disableOriginalConstructor()->onlyMethods([
193 'set',
194 'get',
195 ])->getStub();
197 $template_engine_factory = $this->createStub(TemplateEngineFactoryInterface::class);
198
199 $factory = new ilMailMimeSenderFactory($settings, $template_engine_factory);
200 $this->assertInstanceOf(ilMailMimeSenderSystem::class, $factory->system());
201 }
202
203 protected function getUserById(int $usr_id): ilObjUser&Stub
204 {
206 $user = $this->getStubBuilder(ilObjUser::class)
207 ->disableOriginalConstructor()
208 ->onlyMethods(['getId'])
209 ->getStub();
210 $user->method('getId')->willReturn($usr_id);
211
212 return $user;
213 }
214
215 public function testFactoryWillReturnUserSenderForExistingUserId(): void
216 {
218 $settings = $this->getStubBuilder(ilSetting::class)->disableOriginalConstructor()->onlyMethods([
219 'set',
220 'get',
221 ])->getStub();
223 $template_engine_factory = $this->createStub(TemplateEngineFactoryInterface::class);
224
225 $factory = new ilMailMimeSenderFactory($settings, $template_engine_factory);
226 $this->assertInstanceOf(ilMailMimeSenderUser::class, $factory->getSenderByUsrId(self::USER_ID));
227 }
228
229 public function testFactoryWillReturnUserSenderWhenExplicitlyRequested(): void
230 {
232 $settings = $this->getStubBuilder(ilSetting::class)->disableOriginalConstructor()->onlyMethods([
233 'set',
234 'get',
235 ])->getStub();
237 $template_engine_factory = $this->createStub(TemplateEngineFactoryInterface::class);
238
239 $factory = new ilMailMimeSenderFactory($settings, $template_engine_factory);
240 $this->assertInstanceOf(ilMailMimeSenderUser::class, $factory->user(self::USER_ID));
241 }
242}
$settings
Definition: index.php:44
Builds data types.
Definition: Factory.php:36
setGlobalVariable(string $name, $value)
static addUserToCache(int $usr_id, ilObjUser $user)
const int USER_ID
static setDefaultTransport(?ilMailMimeTransport $transport)
User class.
const ANONYMOUS_USER_ID
Definition: constants.php:27
Factory interface for creating template engine instances.