|
8 | 8 | use Dachcom\Codeception\Helper\PimcoreCore;
|
9 | 9 | use Dachcom\Codeception\Helper\PimcoreUser;
|
10 | 10 | use Dachcom\Codeception\Util\EditableHelper;
|
| 11 | +use Dachcom\Codeception\Util\VersionHelper; |
| 12 | +use Pimcore\Mail; |
11 | 13 | use Pimcore\Model\AbstractModel;
|
12 | 14 | use Pimcore\Model\Document\Email;
|
13 | 15 | use Pimcore\Model\User;
|
@@ -259,6 +261,137 @@ public function seeSentEmailHasPropertyValue(Email $email, string $property, str
|
259 | 261 | }
|
260 | 262 | }
|
261 | 263 |
|
| 264 | + /** |
| 265 | + * Actor Function to see if given email has been with specified address |
| 266 | + * Only works with PhpBrowser (Symfony Client) |
| 267 | + * |
| 268 | + * @param string $submissionType |
| 269 | + * @param Email $email |
| 270 | + * |
| 271 | + * @throws \ReflectionException |
| 272 | + */ |
| 273 | + public function seeEmailSubmissionType(string $submissionType, Email $email) |
| 274 | + { |
| 275 | + $collectedMessages = $this->getCollectedEmails($email); |
| 276 | + |
| 277 | + /** @var Mail $message */ |
| 278 | + foreach ($collectedMessages as $message) { |
| 279 | + if (method_exists($message, 'getBodyContentType')) { |
| 280 | + $contentType = $message->getBodyContentType(); |
| 281 | + } else { |
| 282 | + // swift mailer < 6.0 |
| 283 | + $reflectionClass = new \ReflectionClass($message); |
| 284 | + $contentTypeProperty = $reflectionClass->getProperty('_userContentType'); |
| 285 | + $contentTypeProperty->setAccessible(true); |
| 286 | + $contentType = $contentTypeProperty->getValue($message); |
| 287 | + } |
| 288 | + $this->assertEquals($submissionType, $contentType); |
| 289 | + } |
| 290 | + } |
| 291 | + |
| 292 | + /** |
| 293 | + * Actor Function to see if given string is in real submitted mail body |
| 294 | + * |
| 295 | + * @param string $string |
| 296 | + * @param Email $email |
| 297 | + */ |
| 298 | + public function seeInSubmittedEmailBody(string $string, Email $email) |
| 299 | + { |
| 300 | + $collectedMessages = $this->getCollectedEmails($email); |
| 301 | + |
| 302 | + /** @var Mail $message */ |
| 303 | + foreach ($collectedMessages as $message) { |
| 304 | + $this->assertContains($string, is_null($message->getBody()) ? '' : $message->getBody()); |
| 305 | + } |
| 306 | + } |
| 307 | + |
| 308 | + /** |
| 309 | + * Actor Function to see if given string is in real submitted mail body |
| 310 | + * |
| 311 | + * @param string $string |
| 312 | + * @param Email $email |
| 313 | + */ |
| 314 | + public function dontSeeInSubmittedEmailBody(string $string, Email $email) |
| 315 | + { |
| 316 | + $collectedMessages = $this->getCollectedEmails($email); |
| 317 | + |
| 318 | + /** @var Mail $message */ |
| 319 | + foreach ($collectedMessages as $message) { |
| 320 | + $this->assertNotContains($string, is_null($message->getBody()) ? '' : $message->getBody()); |
| 321 | + } |
| 322 | + } |
| 323 | + |
| 324 | + /** |
| 325 | + * Actor Function to see if message has children |
| 326 | + * |
| 327 | + * @param Email $email |
| 328 | + */ |
| 329 | + public function haveSubmittedEmailChildren(Email $email) |
| 330 | + { |
| 331 | + $collectedMessages = $this->getCollectedEmails($email); |
| 332 | + |
| 333 | + /** @var Mail $message */ |
| 334 | + foreach ($collectedMessages as $message) { |
| 335 | + $this->assertGreaterThan(0, count($message->getChildren())); |
| 336 | + } |
| 337 | + } |
| 338 | + |
| 339 | + /** |
| 340 | + * Actor Function to see if message has no children |
| 341 | + * |
| 342 | + * @param Email $email |
| 343 | + */ |
| 344 | + public function dontHaveSubmittedEmailChildren(Email $email) |
| 345 | + { |
| 346 | + $collectedMessages = $this->getCollectedEmails($email); |
| 347 | + |
| 348 | + /** @var Mail $message */ |
| 349 | + foreach ($collectedMessages as $message) { |
| 350 | + $this->assertEquals(0, count($message->getChildren())); |
| 351 | + } |
| 352 | + } |
| 353 | + |
| 354 | + /** |
| 355 | + * Actor Function to see if given string is in real submitted child body |
| 356 | + * |
| 357 | + * @param string $string |
| 358 | + * @param Email $email |
| 359 | + */ |
| 360 | + public function seeInSubmittedEmailChildrenBody(string $string, Email $email) |
| 361 | + { |
| 362 | + $collectedMessages = $this->getCollectedEmails($email); |
| 363 | + |
| 364 | + /** @var Mail $message */ |
| 365 | + foreach ($collectedMessages as $message) { |
| 366 | + |
| 367 | + $this->assertGreaterThan(0, count($message->getChildren())); |
| 368 | + |
| 369 | + /** @var \Swift_Mime_SimpleMimeEntity $child */ |
| 370 | + foreach ($message->getChildren() as $child) { |
| 371 | + $this->assertContains($string, is_null($child->getBody()) ? '' : $child->getBody()); |
| 372 | + } |
| 373 | + } |
| 374 | + } |
| 375 | + |
| 376 | + /** |
| 377 | + * Actor Function to see if given string is not in real submitted child body |
| 378 | + * |
| 379 | + * @param string $string |
| 380 | + * @param Email $email |
| 381 | + */ |
| 382 | + public function dontSeeInSubmittedEmailChildrenBody(string $string, Email $email) |
| 383 | + { |
| 384 | + $collectedMessages = $this->getCollectedEmails($email); |
| 385 | + |
| 386 | + /** @var Mail $message */ |
| 387 | + foreach ($collectedMessages as $message) { |
| 388 | + /** @var \Swift_Mime_SimpleMimeEntity $child */ |
| 389 | + foreach ($message->getChildren() as $child) { |
| 390 | + $this->assertNotContains($string, is_null($child->getBody()) ? '' : $child->getBody()); |
| 391 | + } |
| 392 | + } |
| 393 | + } |
| 394 | + |
262 | 395 | /**
|
263 | 396 | * Actor Function to login in FrontEnd
|
264 | 397 | *
|
@@ -319,6 +452,12 @@ public function amLoggedInAs($username)
|
319 | 452 | $token = new UsernamePasswordToken($user, null, $firewallName, $pimcoreUser->getRoles());
|
320 | 453 | $this->pimcoreCore->getContainer()->get('security.token_storage')->setToken($token);
|
321 | 454 |
|
| 455 | + if (VersionHelper::pimcoreVersionIsGreaterOrEqualThan('6.5.0')) { |
| 456 | + if ($session->isStarted()) { |
| 457 | + $session->save(); |
| 458 | + } |
| 459 | + } |
| 460 | + |
322 | 461 | \Pimcore\Tool\Session::useSession(function (AttributeBagInterface $adminSession) use ($pimcoreUser, $session) {
|
323 | 462 | $session->setId(\Pimcore\Tool\Session::getSessionId());
|
324 | 463 | $adminSession->set('user', $pimcoreUser);
|
@@ -350,51 +489,6 @@ public function sendTokenAjaxPostRequest(string $url, array $params = [])
|
350 | 489 | $this->pimcoreCore->sendAjaxPostRequest($url, $params);
|
351 | 490 | }
|
352 | 491 |
|
353 |
| - /** |
354 |
| - * @param Email $email |
355 |
| - * |
356 |
| - * @return array |
357 |
| - */ |
358 |
| - protected function getCollectedEmails(Email $email) |
359 |
| - { |
360 |
| - $this->assertInstanceOf(Email::class, $email); |
361 |
| - |
362 |
| - /** @var Profiler $profiler */ |
363 |
| - $profiler = $this->pimcoreCore->_getContainer()->get('profiler'); |
364 |
| - |
365 |
| - $tokens = $profiler->find('', '', 1, 'POST', '', ''); |
366 |
| - if (count($tokens) === 0) { |
367 |
| - throw new \RuntimeException('No profile found. Is the profiler data collector enabled?'); |
368 |
| - } |
369 |
| - |
370 |
| - $token = $tokens[0]['token']; |
371 |
| - /** @var Profile $profile */ |
372 |
| - $profile = $profiler->loadProfile($token); |
373 |
| - |
374 |
| - if (!$profile instanceof Profile) { |
375 |
| - throw new \RuntimeException(sprintf('Profile with token "%s" not found.', $token)); |
376 |
| - } |
377 |
| - |
378 |
| - /** @var MessageDataCollector $mailCollector */ |
379 |
| - $mailCollector = $profile->getCollector('swiftmailer'); |
380 |
| - |
381 |
| - $this->assertGreaterThan(0, $mailCollector->getMessageCount()); |
382 |
| - |
383 |
| - $collectedMessages = $mailCollector->getMessages(); |
384 |
| - |
385 |
| - $emails = []; |
386 |
| - /** @var \Pimcore\Mail $message */ |
387 |
| - foreach ($collectedMessages as $message) { |
388 |
| - if ($email->getProperty('test_identifier') !== $message->getDocument()->getProperty('test_identifier')) { |
389 |
| - continue; |
390 |
| - } |
391 |
| - $emails[] = $message; |
392 |
| - } |
393 |
| - |
394 |
| - return $emails; |
395 |
| - |
396 |
| - } |
397 |
| - |
398 | 492 | /**
|
399 | 493 | * Actor Function to see if last executed request is in given path
|
400 | 494 | *
|
@@ -506,4 +600,48 @@ public function seePropertiesInLastFragmentRequest(array $properties = [])
|
506 | 600 | $this->assertTrue($requestCollector->getRequestAttributes()->has($property), sprintf('"%s" not found in request collector.', $property));
|
507 | 601 | }
|
508 | 602 | }
|
| 603 | + |
| 604 | + /** |
| 605 | + * @param Email $email |
| 606 | + * |
| 607 | + * @return array |
| 608 | + */ |
| 609 | + protected function getCollectedEmails(Email $email) |
| 610 | + { |
| 611 | + $this->assertInstanceOf(Email::class, $email); |
| 612 | + |
| 613 | + /** @var Profiler $profiler */ |
| 614 | + $profiler = $this->pimcoreCore->_getContainer()->get('profiler'); |
| 615 | + |
| 616 | + $tokens = $profiler->find('', '', 1, 'POST', '', ''); |
| 617 | + if (count($tokens) === 0) { |
| 618 | + throw new \RuntimeException('No profile found. Is the profiler data collector enabled?'); |
| 619 | + } |
| 620 | + |
| 621 | + $token = $tokens[0]['token']; |
| 622 | + /** @var Profile $profile */ |
| 623 | + $profile = $profiler->loadProfile($token); |
| 624 | + |
| 625 | + if (!$profile instanceof Profile) { |
| 626 | + throw new \RuntimeException(sprintf('Profile with token "%s" not found.', $token)); |
| 627 | + } |
| 628 | + |
| 629 | + /** @var MessageDataCollector $mailCollector */ |
| 630 | + $mailCollector = $profile->getCollector('swiftmailer'); |
| 631 | + |
| 632 | + $this->assertGreaterThan(0, $mailCollector->getMessageCount()); |
| 633 | + |
| 634 | + $collectedMessages = $mailCollector->getMessages(); |
| 635 | + |
| 636 | + $emails = []; |
| 637 | + /** @var Mail $message */ |
| 638 | + foreach ($collectedMessages as $message) { |
| 639 | + if ($email->getProperty('test_identifier') !== $message->getDocument()->getProperty('test_identifier')) { |
| 640 | + continue; |
| 641 | + } |
| 642 | + $emails[] = $message; |
| 643 | + } |
| 644 | + |
| 645 | + return $emails; |
| 646 | + } |
509 | 647 | }
|
0 commit comments