ILIAS  release_8 Revision v8.24
ilMailTemplateContextTest.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
23
29{
31 OrgUnitUserService $orgUnitUserService,
32 ilMailEnvironmentHelper $envHelper,
33 ilMailUserHelper $usernameHelper,
34 ilMailLanguageHelper $languageHelper
36 return new class ($orgUnitUserService, $envHelper, $usernameHelper, $languageHelper) extends ilMailTemplateContext {
37 public function getId(): string
38 {
39 return 'phpunuit';
40 }
41
42 public function getTitle(): string
43 {
44 return 'phpunuit';
45 }
46
47 public function getDescription(): string
48 {
49 return 'phpunuit';
50 }
51
52 public function getSpecificPlaceholders(): array
53 {
54 return [];
55 }
56
57 public function resolveSpecificPlaceholder(
58 string $placeholder_id,
59 array $context_parameters,
60 ilObjUser $recipient = null,
61 bool $html_markup = false
62 ): string {
63 return '';
64 }
65 };
66 }
67
71 private function generateOrgUnitUsers(int $amount): array
72 {
73 $users = [];
74
75 for ($i = 1; $i <= $amount; $i++) {
76 $user = $this->getMockBuilder(ilOrgUnitUser::class)
77 ->disableOriginalConstructor()
78 ->onlyMethods(['getUserId',])
79 ->getMock();
80 $user->expects($this->atLeastOnce())->method('getUserId')->willReturn($i);
81
82 $users[$i] = $user;
83 }
84
85 return $users;
86 }
87
91 public function userProvider(): array
92 {
93 $testUsers = [];
94
95 foreach ([
96 ['gender' => 'm', 'num_superiors' => 2,],
97 ['gender' => 'n', 'num_superiors' => 1,],
98 ['gender' => 'f', 'num_superiors' => 0,],
99 ['gender' => '', 'num_superiors' => 3,],
100 ] as $definition) {
101 $user = $this->getMockBuilder(ilObjUser::class)
102 ->disableOriginalConstructor()
103 ->onlyMethods([
104 'getLanguage',
105 'getUTitle',
106 'getLogin',
107 'getLastname',
108 'getFirstname',
109 'getGender',
110 'getId',
111 ])
112 ->getMock();
113
114 $user->expects($this->atLeastOnce())->method('getLanguage')->willReturn('de');
115 $user->expects($this->atLeastOnce())->method('getUTitle')->willReturn('###Dr. Ing###');
116 $user->expects($this->atLeastOnce())->method('getLogin')->willReturn('###phpunit###');
117 $user->expects($this->atLeastOnce())->method('getLastname')->willReturn('###Unit###');
118 $user->expects($this->atLeastOnce())->method('getFirstname')->willReturn('###PHP###');
119 $user->expects($this->atLeastOnce())->method('getGender')->willReturn($definition['gender']);
120 $user->expects($this->atLeastOnce())->method('getId')->willReturn(4711);
121
122 $ouUser = $this->getMockBuilder(ilOrgUnitUser::class)
123 ->disableOriginalConstructor()
124 ->onlyMethods(['getSuperiors',])
125 ->getMock();
126
127 $superiors = $this->generateOrgUnitUsers($definition['num_superiors']);
128 $ouUser->expects($this->atLeastOnce())->method('getSuperiors')->willReturn($superiors);
129
130 $testUsers[sprintf(
131 'User with gender "%s" and %s superiors',
132 $definition['gender'],
133 $definition['num_superiors']
134 )] = [$user, $ouUser, $superiors,];
135 }
136
137 return $testUsers;
138 }
139
146 ilObjUser $user,
147 ilOrgUnitUser $ouUser,
148 array $superiors
149 ): void {
150 $ouService = $this->getMockBuilder(OrgUnitUserService::class)
151 ->disableOriginalConstructor()
152 ->onlyMethods(['getUsers',])
153 ->getMock();
154
155 $lng = $this->getMockBuilder(ilLanguage::class)
156 ->disableOriginalConstructor()
157 ->onlyMethods(['txt', 'loadLanguageModule',])
158 ->getMock();
159
160 $envHelper = $this->getMockBuilder(ilMailEnvironmentHelper::class)
161 ->disableOriginalConstructor()
162 ->onlyMethods(['getClientId', 'getHttpPath',])
163 ->getMock();
164
165 $lngHelper = $this->getMockBuilder(ilMailLanguageHelper::class)
166 ->disableOriginalConstructor()
167 ->onlyMethods(['getLanguageByIsoCode', 'getCurrentLanguage',])
168 ->getMock();
169
170 $userHelper = $this->getMockBuilder(ilMailUserHelper::class)
171 ->disableOriginalConstructor()
172 ->onlyMethods(['getUsernameMapForIds',])
173 ->getMock();
174
175 $ouService->expects($this->atLeastOnce())->method('getUsers')->willReturn([$ouUser,]);
176 $lng->expects($this->atLeastOnce())->method('txt')->will($this->returnArgument(0));
177 $envHelper->expects($this->atLeastOnce())->method('getClientId')->willReturn('###phpunit_client###');
178 $envHelper->expects($this->atLeastOnce())->method('getHttpPath')->willReturn('###http_ilias###');
179 $lngHelper->expects($this->atLeastOnce())->method('getLanguageByIsoCode')->willReturn($lng);
180 $lngHelper->expects($this->atLeastOnce())->method('getCurrentLanguage')->willReturn($lng);
181
182 if ($superiors === []) {
183 $expectedIdsConstraint = [];
184 } else {
185 $expectedIdsConstraint = self::logicalAnd(...array_map(static function (ilOrgUnitUser $user) {
186 return self::containsEqual($user->getUserId());
187 }, $superiors));
188 }
189
190 $firstAndLastnames = array_map(static function (ilOrgUnitUser $user, int $key): string {
191 return "PhpSup$key UnitSup$key";
192 }, $superiors, array_keys($superiors));
193
194 $userHelper->expects($this->atLeastOnce())->method('getUsernameMapForIds')
195 ->with($expectedIdsConstraint)
196 ->willReturn($firstAndLastnames);
197
198 $context = $this->getAnonymousTemplateContext(
199 $ouService,
200 $envHelper,
201 $userHelper,
202 $lngHelper
203 );
204
205 $placeholderResolver = new ilMailTemplatePlaceholderResolver($context, implode('', [
206 '[MAIL_SALUTATION]',
207 '[FIRST_NAME]',
208 '[LAST_NAME]',
209 '[LOGIN]',
210 '[TITLE]',
211 '[FIRSTNAME_LASTNAME_SUPERIOR]',
212 '[ILIAS_URL]',
213 '[INSTALLATION_NAME]',
214 ]));
215
216 $replaceMessage = $placeholderResolver->resolve($user);
217
218 $this->assertStringContainsString('###Dr. Ing###', $replaceMessage);
219 $this->assertStringContainsString('###phpunit###', $replaceMessage);
220 $this->assertStringContainsString('###Unit###', $replaceMessage);
221 $this->assertStringContainsString('###PHP###', $replaceMessage);
222 $this->assertStringContainsString('###phpunit_client###', $replaceMessage);
223 $this->assertStringContainsString('###http_ilias###', $replaceMessage);
224 $this->assertStringContainsString('mail_salutation_' . $user->getGender(), $replaceMessage);
225
226 foreach ($firstAndLastnames as $firstAndLastname) {
227 $this->assertStringContainsString($firstAndLastname, $replaceMessage);
228 }
229 }
230}
static return function(ContainerConfigurator $containerConfigurator)
Definition: basic_rector.php:9
Class ilMailBaseTest.
Class ilMailEnvironmentHelper.
Class ilMailLanguageHelper.
Class ilMailTemplateContextTest.
getAnonymousTemplateContext(OrgUnitUserService $orgUnitUserService, ilMailEnvironmentHelper $envHelper, ilMailUserHelper $usernameHelper, ilMailLanguageHelper $languageHelper)
testGlobalPlaceholdersCanBeResolvedWithCorrespondingValues(ilObjUser $user, ilOrgUnitUser $ouUser, array $superiors)
@dataProvider userProvider
Class ilMailTemplateContext.
Class ilMailUserHelper.
User class.
return['3gp', '7z', 'ai', 'aif', 'aifc', 'aiff', 'au', 'arw', 'avi', 'backup', 'bak', 'bas', 'bpmn', 'bpmn2', 'bmp', 'bib', 'bibtex', 'bz', 'bz2', 'c', 'c++', 'cc', 'cct', 'cdf', 'cer', 'class', 'cls', 'conf', 'cpp', 'crt', 'crs', 'crw', 'cr2', 'css', 'cst', 'csv', 'cur', 'db', 'dcr', 'des', 'dng', 'doc', 'docx', 'dot', 'dotx', 'dtd', 'dvi', 'el', 'eps', 'epub', 'f', 'f77', 'f90', 'flv', 'for', 'g3', 'gif', 'gl', 'gan', 'ggb', 'gsd', 'gsm', 'gtar', 'gz', 'gzip', 'h', 'hpp', 'htm', 'html', 'htmls', 'ibooks', 'ico', 'ics', 'ini', 'ipynb', 'java', 'jbf', 'jpeg', 'jpg', 'js', 'jsf', 'jso', 'json', 'latex', 'lang', 'less', 'log', 'lsp', 'ltx', 'm1v', 'm2a', 'm2v', 'm3u', 'm4a', 'm4v', 'markdown', 'm', 'mat', 'md', 'mdl', 'mdown', 'mid', 'min', 'midi', 'mobi', 'mod', 'mov', 'movie', 'mp2', 'mp3', 'mp4', 'mpa', 'mpeg', 'mpg', 'mph', 'mpga', 'mpp', 'mpt', 'mpv', 'mpx', 'mv', 'mw', 'mv4', 'nb', 'nbp', 'nef', 'nif', 'niff', 'obj', 'obm', 'odt', 'ods', 'odp', 'odg', 'odf', 'oga', 'ogg', 'ogv', 'old', 'p', 'pas', 'pbm', 'pcl', 'pct', 'pcx', 'pdf', 'pgm', 'pic', 'pict', 'png', 'por', 'pov', 'project', 'properties', 'ppa', 'ppm', 'pps', 'ppsx', 'ppt', 'pptx', 'ppz', 'ps', 'psd', 'pwz', 'qt', 'qtc', 'qti', 'qtif', 'r', 'ra', 'ram', 'rar', 'rast', 'rda', 'rev', 'rexx', 'ris', 'rf', 'rgb', 'rm', 'rmd', 'rmi', 'rmm', 'rmp', 'rt', 'rtf', 'rtx', 'rv', 's', 's3m', 'sav', 'sbs', 'sec', 'sdml', 'sgm', 'sgml', 'smi', 'smil', 'srt', 'sps', 'spv', 'stl', 'svg', 'swa', 'swf', 'swz', 'tar', 'tex', 'texi', 'texinfo', 'text', 'tgz', 'tif', 'tiff', 'ttf', 'txt', 'tmp', 'uvproj', 'vdf', 'vimeo', 'viv', 'vivo', 'vrml', 'vsdx', 'wav', 'webm', 'wmv', 'wmx', 'wmz', 'woff', 'wwd', 'xhtml', 'xif', 'xls', 'xlsx', 'xmind', 'xml', 'xsl', 'xsd', 'zip']
$i
Definition: metadata.php:41
string $key
Consumer key/client ID value.
Definition: System.php:193
$lng
$context
Definition: webdav.php:29