Skip to content

Commit 070d558

Browse files
committed
add admin csv module + improvements
1 parent 57fddbf commit 070d558

File tree

4 files changed

+368
-62
lines changed

4 files changed

+368
-62
lines changed

src/_support/Helper/Browser/PhpBrowser.php

+183-45
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
use Dachcom\Codeception\Helper\PimcoreCore;
99
use Dachcom\Codeception\Helper\PimcoreUser;
1010
use Dachcom\Codeception\Util\EditableHelper;
11+
use Dachcom\Codeception\Util\VersionHelper;
12+
use Pimcore\Mail;
1113
use Pimcore\Model\AbstractModel;
1214
use Pimcore\Model\Document\Email;
1315
use Pimcore\Model\User;
@@ -259,6 +261,137 @@ public function seeSentEmailHasPropertyValue(Email $email, string $property, str
259261
}
260262
}
261263

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+
262395
/**
263396
* Actor Function to login in FrontEnd
264397
*
@@ -319,6 +452,12 @@ public function amLoggedInAs($username)
319452
$token = new UsernamePasswordToken($user, null, $firewallName, $pimcoreUser->getRoles());
320453
$this->pimcoreCore->getContainer()->get('security.token_storage')->setToken($token);
321454

455+
if (VersionHelper::pimcoreVersionIsGreaterOrEqualThan('6.5.0')) {
456+
if ($session->isStarted()) {
457+
$session->save();
458+
}
459+
}
460+
322461
\Pimcore\Tool\Session::useSession(function (AttributeBagInterface $adminSession) use ($pimcoreUser, $session) {
323462
$session->setId(\Pimcore\Tool\Session::getSessionId());
324463
$adminSession->set('user', $pimcoreUser);
@@ -350,51 +489,6 @@ public function sendTokenAjaxPostRequest(string $url, array $params = [])
350489
$this->pimcoreCore->sendAjaxPostRequest($url, $params);
351490
}
352491

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-
398492
/**
399493
* Actor Function to see if last executed request is in given path
400494
*
@@ -506,4 +600,48 @@ public function seePropertiesInLastFragmentRequest(array $properties = [])
506600
$this->assertTrue($requestCollector->getRequestAttributes()->has($property), sprintf('"%s" not found in request collector.', $property));
507601
}
508602
}
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+
}
509647
}
+114
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
<?php
2+
3+
namespace Dachcom\Codeception\Helper;
4+
5+
use Codeception\Lib\InnerBrowser;
6+
use Codeception\Lib\Interfaces\DependsOnModule;
7+
use Codeception\Module;
8+
9+
class PimcoreAdminCsv extends Module implements DependsOnModule
10+
{
11+
/**
12+
* @var InnerBrowser
13+
*/
14+
protected $connectionModule;
15+
16+
/**
17+
* @return array|mixed
18+
*/
19+
public function _depends()
20+
{
21+
return ['Codeception\Lib\InnerBrowser' => 'PimcoreAdminCsv needs a valid browser to work.'];
22+
}
23+
24+
/**
25+
* @param InnerBrowser $connection
26+
*/
27+
public function _inject(InnerBrowser $connection)
28+
{
29+
$this->connectionModule = $connection;
30+
}
31+
32+
/**
33+
* @param array $headerValues
34+
*
35+
* @throws \Codeception\Exception\ModuleException
36+
*/
37+
public function seeResponseCsvHeaderHasValues(array $headerValues)
38+
{
39+
$responseContent = $this->connectionModule->_getResponseContent();
40+
41+
$rows = [];
42+
foreach (str_getcsv($responseContent, "\n") as $row) {
43+
$rows[] = str_getcsv($row);
44+
}
45+
46+
foreach ($headerValues as $value) {
47+
\PHPUnit_Framework_Assert::assertContains($value, $rows[0]);
48+
}
49+
}
50+
51+
/**
52+
* @param int $index
53+
* @param array $values
54+
*
55+
* @throws \Codeception\Exception\ModuleException
56+
*/
57+
public function seeResponseCsvRowValues(int $index, array $values)
58+
{
59+
$responseContent = $this->connectionModule->_getResponseContent();
60+
61+
$rows = [];
62+
foreach (str_getcsv($responseContent, "\n") as $row) {
63+
$rows[] = str_getcsv($row);
64+
}
65+
66+
\PHPUnit_Framework_Assert::assertArrayHasKey($index, $rows, 'index not available in csv data');
67+
$data = $rows[$index];
68+
69+
foreach ($values as $key => $value) {
70+
if (is_numeric($key)) {
71+
$csvValue = $data[$key];
72+
} else {
73+
// index of header
74+
$headerKey = array_search($key, $rows[0]);
75+
$csvValue = $data[$headerKey];
76+
}
77+
\PHPUnit_Framework_Assert::assertEquals($value, $csvValue);
78+
}
79+
}
80+
81+
/**
82+
* @param int $length
83+
*
84+
* @throws \Codeception\Exception\ModuleException
85+
*/
86+
public function seeResponseCsvLength(int $length)
87+
{
88+
$responseContent = $this->connectionModule->_getResponseContent();
89+
90+
$rows = [];
91+
foreach (str_getcsv($responseContent, "\n") as $row) {
92+
$rows[] = str_getcsv($row);
93+
}
94+
95+
\PHPUnit_Framework_Assert::assertCount($length, $rows);
96+
}
97+
98+
/***
99+
* @throws \Codeception\Exception\ModuleException
100+
*/
101+
public function seeResponseIsCsv()
102+
{
103+
$responseContent = $this->connectionModule->_getResponseContent();
104+
\PHPUnit_Framework_Assert::assertNotEquals('', $responseContent, 'response is empty');
105+
106+
$data = str_getcsv($responseContent, "\n");
107+
\PHPUnit_Framework_Assert::assertInternalType('array', $data);
108+
\PHPUnit_Framework_Assert::assertGreaterThanOrEqual(1, count($data), 'csv data is empty');
109+
110+
foreach ($data as $row) {
111+
\PHPUnit_Framework_Assert::assertInternalType('array', str_getcsv($row));
112+
}
113+
}
114+
}

0 commit comments

Comments
 (0)