ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
ilMailTemplateContextTest.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
23 
29 {
30  public function getAnonymousTemplateContext(
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  ): string {
62  return '';
63  }
64  };
65  }
66 
70  private function generateOrgUnitUsers(int $amount): array
71  {
72  $users = [];
73 
74  for ($i = 1; $i <= $amount; $i++) {
75  $user = $this->getMockBuilder(ilOrgUnitUser::class)
76  ->disableOriginalConstructor()
77  ->onlyMethods(['getUserId',])
78  ->getMock();
79  $user->expects($this->atLeastOnce())->method('getUserId')->willReturn($i);
80 
81  $users[$i] = $user;
82  }
83 
84  return $users;
85  }
86 
90  public function userProvider(): array
91  {
92  $testUsers = [];
93 
94  foreach ([
95  ['gender' => 'm', 'num_superiors' => 2,],
96  ['gender' => 'n', 'num_superiors' => 1,],
97  ['gender' => 'f', 'num_superiors' => 0,],
98  ['gender' => '', 'num_superiors' => 3,],
99  ] as $definition) {
100  $user = $this->getMockBuilder(ilObjUser::class)
101  ->disableOriginalConstructor()
102  ->onlyMethods([
103  'getLanguage',
104  'getUTitle',
105  'getLogin',
106  'getLastname',
107  'getFirstname',
108  'getGender',
109  'getId',
110  ])
111  ->getMock();
112 
113  $user->expects($this->atLeastOnce())->method('getLanguage')->willReturn('de');
114  $user->expects($this->atLeastOnce())->method('getUTitle')->willReturn('###Dr. Ing###');
115  $user->expects($this->atLeastOnce())->method('getLogin')->willReturn('###phpunit###');
116  $user->expects($this->atLeastOnce())->method('getLastname')->willReturn('###Unit###');
117  $user->expects($this->atLeastOnce())->method('getFirstname')->willReturn('###PHP###');
118  $user->expects($this->atLeastOnce())->method('getGender')->willReturn($definition['gender']);
119  $user->expects($this->atLeastOnce())->method('getId')->willReturn(4711);
120 
121  $ouUser = $this->getMockBuilder(ilOrgUnitUser::class)
122  ->disableOriginalConstructor()
123  ->onlyMethods(['getSuperiors',])
124  ->getMock();
125 
126  $superiors = $this->generateOrgUnitUsers($definition['num_superiors']);
127  $ouUser->expects($this->atLeastOnce())->method('getSuperiors')->willReturn($superiors);
128 
129  $testUsers[sprintf(
130  'User with gender "%s" and %s superiors',
131  $definition['gender'],
132  $definition['num_superiors']
133  )] = [$user, $ouUser, $superiors,];
134  }
135 
136  return $testUsers;
137  }
138 
145  ilObjUser $user,
146  ilOrgUnitUser $ouUser,
147  array $superiors
148  ): void {
149  $ouService = $this->getMockBuilder(OrgUnitUserService::class)
150  ->disableOriginalConstructor()
151  ->onlyMethods(['getUsers',])
152  ->getMock();
153 
154  $lng = $this->getMockBuilder(ilLanguage::class)
155  ->disableOriginalConstructor()
156  ->onlyMethods(['txt', 'loadLanguageModule',])
157  ->getMock();
158 
159  $envHelper = $this->getMockBuilder(ilMailEnvironmentHelper::class)
160  ->disableOriginalConstructor()
161  ->onlyMethods(['getClientId', 'getHttpPath',])
162  ->getMock();
163 
164  $lngHelper = $this->getMockBuilder(ilMailLanguageHelper::class)
165  ->disableOriginalConstructor()
166  ->onlyMethods(['getLanguageByIsoCode', 'getCurrentLanguage',])
167  ->getMock();
168 
169  $userHelper = $this->getMockBuilder(ilMailUserHelper::class)
170  ->disableOriginalConstructor()
171  ->onlyMethods(['getUsernameMapForIds',])
172  ->getMock();
173 
174  $ouService->expects($this->atLeastOnce())->method('getUsers')->willReturn([$ouUser,]);
175  $lng->expects($this->atLeastOnce())->method('txt')->will($this->returnArgument(0));
176  $envHelper->expects($this->atLeastOnce())->method('getClientId')->willReturn('###phpunit_client###');
177  $envHelper->expects($this->atLeastOnce())->method('getHttpPath')->willReturn('###http_ilias###');
178  $lngHelper->expects($this->atLeastOnce())->method('getLanguageByIsoCode')->willReturn($lng);
179  $lngHelper->expects($this->atLeastOnce())->method('getCurrentLanguage')->willReturn($lng);
180 
181  if ($superiors === []) {
182  $expectedIdsConstraint = [];
183  } else {
184  $expectedIdsConstraint = self::logicalAnd(...array_map(static function (ilOrgUnitUser $user): \PHPUnit\Framework\Constraint\TraversableContainsEqual {
185  return self::containsEqual($user->getUserId());
186  }, $superiors));
187  }
188 
189  $firstAndLastnames = array_map(static function (ilOrgUnitUser $user, int $key): string {
190  return "PhpSup$key UnitSup$key";
191  }, $superiors, array_keys($superiors));
192 
193  $userHelper->expects($this->atLeastOnce())->method('getUsernameMapForIds')
194  ->with($expectedIdsConstraint)
195  ->willReturn($firstAndLastnames);
196 
198  $ouService,
199  $envHelper,
200  $userHelper,
201  $lngHelper
202  );
203 
204  $mustache = new Mustache_Engine();
205  $placeholderResolver = new ilMailTemplatePlaceholderResolver($mustache);
206 
207  $message = implode('', [
208  '{{MAIL_SALUTATION}}',
209  '{{FIRST_NAME}}',
210  '{{LAST_NAME}}',
211  '{{LOGIN}}',
212  '{{TITLE}}',
213  '{{FIRSTNAME_LASTNAME_SUPERIOR}}',
214  '{{ILIAS_URL}}',
215  '{{INSTALLATION_NAME}}',
216  ]);
217  $replaceMessage = $placeholderResolver->resolve($context, $message, $user);
218 
219  $this->assertStringContainsString('###Dr. Ing###', $replaceMessage);
220  $this->assertStringContainsString('###phpunit###', $replaceMessage);
221  $this->assertStringContainsString('###Unit###', $replaceMessage);
222  $this->assertStringContainsString('###PHP###', $replaceMessage);
223  $this->assertStringContainsString('###phpunit_client###', $replaceMessage);
224  $this->assertStringContainsString('###http_ilias###', $replaceMessage);
225  $this->assertStringContainsString('mail_salutation_' . $user->getGender(), $replaceMessage);
226 
227  foreach ($firstAndLastnames as $firstAndLastname) {
228  $this->assertStringContainsString($firstAndLastname, $replaceMessage);
229  }
230  }
231 }
$context
Definition: webdav.php:31
testGlobalPlaceholdersCanBeResolvedWithCorrespondingValues(ilObjUser $user, ilOrgUnitUser $ouUser, array $superiors)
userProvider
Class ilMailEnvironmentHelper.
Class ilMailUserHelper.
Class ilMailBaseTest.
$lng
Class ilMailLanguageHelper.
string $key
Consumer key/client ID value.
Definition: System.php:193
Class ilMailTemplateContext.
Class ilMailTemplatePlaceholderResolver.
$message
Definition: xapiexit.php:32
Class ilMailTemplateContextTest.
getAnonymousTemplateContext(OrgUnitUserService $orgUnitUserService, ilMailEnvironmentHelper $envHelper, ilMailUserHelper $usernameHelper, ilMailLanguageHelper $languageHelper)