Skip to content

Commit cf0a1ab

Browse files
committed
PB-366: Templates Lower Level Test Coverage
- Add integration tests for Save and Delete controllers
1 parent 419bf98 commit cf0a1ab

File tree

6 files changed

+249
-3
lines changed

6 files changed

+249
-3
lines changed

app/code/Magento/PageBuilder/Controller/Adminhtml/Template/Delete.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public function __construct(
5151
}
5252

5353
/**
54-
* Save a template to the database
54+
* Delete a template from the database
5555
*
5656
* @return \Magento\Framework\App\ResponseInterface|\Magento\Framework\Controller\ResultInterface
5757
*/

app/code/Magento/PageBuilder/Controller/Adminhtml/Template/Save.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
use Magento\PageBuilder\Api\TemplateRepositoryInterface;
2424
use Magento\PageBuilder\Model\TemplateFactory;
2525
use Psr\Log\LoggerInterface;
26-
use \Magento\MediaStorage\Helper\File\Storage\Database;
26+
use Magento\MediaStorage\Helper\File\Storage\Database;
2727

2828
/**
2929
* Save a template within template manager

app/code/Magento/PageBuilder/Model/TemplateRepository.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ public function getList(SearchCriteriaInterface $criteria)
124124

125125
$items = [];
126126
foreach ($collection as $model) {
127-
$items[] = $model->getDataModel();
127+
$items[] = $model;
128128
}
129129

130130
$searchResults->setItems($items);
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
namespace Magento\PageBuilder\Controller\Adminhtml\Template;
10+
11+
use Magento\Framework\Api\SearchCriteriaBuilder;
12+
use Magento\Framework\App\Request\Http as HttpRequest;
13+
use Magento\PageBuilder\Api\TemplateRepositoryInterface;
14+
use Magento\TestFramework\Helper\Bootstrap;
15+
use Magento\TestFramework\ObjectManager;
16+
17+
/**
18+
* Perform tests upon Template save controller
19+
*
20+
* @magentoAppArea adminhtml
21+
*/
22+
class DeleteTest extends \Magento\TestFramework\TestCase\AbstractBackendController
23+
{
24+
/**
25+
* @var ObjectManager
26+
*/
27+
private $objectManager;
28+
29+
/**
30+
* @var \Magento\PageBuilder\Controller\Adminhtml\Template\Delete
31+
*/
32+
private $deleteController;
33+
34+
/**
35+
* @var TemplateRepositoryInterface
36+
*/
37+
private $templateRepository;
38+
39+
/**
40+
* @var SearchCriteriaBuilder
41+
*/
42+
private $searchCriteriaBuilder;
43+
44+
/**
45+
* @inheritDoc
46+
*/
47+
protected function setUp()
48+
{
49+
parent::setUp();
50+
$this->objectManager = Bootstrap::getObjectManager();
51+
$this->templateRepository = $this->objectManager->get(TemplateRepositoryInterface::class);
52+
$this->searchCriteriaBuilder = $this->objectManager->get(SearchCriteriaBuilder::class);
53+
54+
$this->deleteController = $this->objectManager->create(
55+
\Magento\PageBuilder\Controller\Adminhtml\Template\Delete::class
56+
);
57+
}
58+
59+
/**
60+
* Test deleting a content type
61+
*
62+
* @magentoDataFixture Magento/PageBuilder/_files/template/template.php
63+
*/
64+
public function testDeleteAction()
65+
{
66+
$findTemplate = $this->templateRepository->getList(
67+
$this->searchCriteriaBuilder->addFilter('name', 'Test Template')->create()
68+
);
69+
$this->assertEquals(1, $findTemplate->getTotalCount());
70+
$templateId = $findTemplate->getItems()[0]->getId();
71+
72+
$this->getRequest()->setPostValue(['template_id' => $templateId])->setMethod(HttpRequest::METHOD_GET);
73+
$this->deleteController->execute();
74+
75+
$this->expectExceptionMessage('Template with id "' . $templateId . '" does not exist.');
76+
$this->templateRepository->get($templateId);
77+
}
78+
}
Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
namespace Magento\PageBuilder\Controller\Adminhtml\Template;
10+
11+
use Magento\PageBuilder\Api\TemplateRepositoryInterface;
12+
use Magento\TestFramework\Helper\Bootstrap;
13+
use Magento\TestFramework\ObjectManager;
14+
use Magento\Framework\App\Request\Http as HttpRequest;
15+
use Magento\Framework\Serialize\Serializer\Json;
16+
use Magento\MediaStorage\Helper\File\Storage\Database;
17+
use Magento\Framework\Filesystem;
18+
use Magento\Framework\Filesystem\Directory\Write;
19+
20+
/**
21+
* Perform tests upon Template save controller
22+
*
23+
* @magentoAppArea adminhtml
24+
*/
25+
class SaveTest extends \Magento\TestFramework\TestCase\AbstractBackendController
26+
{
27+
/**
28+
* @var TemplateRepositoryInterface
29+
*/
30+
private $templateRepository;
31+
32+
/**
33+
* @var ObjectManager
34+
*/
35+
private $objectManager;
36+
37+
/**
38+
* @var Write|\PHPUnit_Framework_MockObject_MockObject
39+
*/
40+
private $directoryWrite;
41+
42+
/**
43+
* @var Filesystem|\PHPUnit_Framework_MockObject_MockObject
44+
*/
45+
private $filesystem;
46+
47+
/**
48+
* @var Database|\PHPUnit_Framework_MockObject_MockObject
49+
*/
50+
private $mediaStorage;
51+
52+
/**
53+
* @var \Magento\PageBuilder\Controller\Adminhtml\Template\Save
54+
*/
55+
private $saveController;
56+
57+
/**
58+
* @var Json
59+
*/
60+
private $serializer;
61+
62+
/**
63+
* @inheritDoc
64+
*/
65+
protected function setUp()
66+
{
67+
parent::setUp();
68+
$this->objectManager = Bootstrap::getObjectManager();
69+
$this->templateRepository = $this->objectManager->get(TemplateRepositoryInterface::class);
70+
71+
$this->directoryWrite = $this->getMockBuilder(Write::class)
72+
->setMethods(['writeFile'])
73+
->disableOriginalConstructor()
74+
->getMock();
75+
$this->filesystem = $this->getMockBuilder(Filesystem::class)
76+
->setMethods(['getDirectoryWrite'])
77+
->disableOriginalConstructor()
78+
->getMock();
79+
80+
$this->mediaStorage = $this->getMockBuilder(Database::class)
81+
->setMethods(['checkDbUsage', 'saveFile'])
82+
->disableOriginalConstructor()
83+
->getMock();
84+
85+
$this->saveController = $this->objectManager->create(
86+
\Magento\PageBuilder\Controller\Adminhtml\Template\Save::class,
87+
[
88+
'filesystem' => $this->filesystem,
89+
'mediaStorage' => $this->mediaStorage
90+
]
91+
);
92+
93+
$this->serializer = $this->objectManager->get(Json::class);
94+
}
95+
96+
/**
97+
* Test saving a template using the controller
98+
*
99+
* @magentoDbIsolation enabled
100+
*/
101+
public function testSaveAction()
102+
{
103+
// Disable DB media usage
104+
$this->mediaStorage->expects($this->once())
105+
->method('checkDbUsage')
106+
->willReturn(false);
107+
108+
// Verify that the system attempts to write the file with the current name
109+
$this->directoryWrite->expects($this->once())
110+
->method('writeFile')
111+
->with(
112+
$this->stringContains('.template-manager/automatedtemplate'),
113+
$this->anything()
114+
);
115+
116+
$this->filesystem->expects($this->once())
117+
->method('getDirectoryWrite')
118+
->willReturn($this->directoryWrite);
119+
120+
$post = [
121+
'name' => 'Automated Template',
122+
'template' => '<div data-content-type="row"></div>',
123+
'createdFor' => 'any',
124+
'previewImage' => 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAZABkDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAn/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AJVAAAAAAAA//9k='
125+
];
126+
$this->getRequest()->setPostValue($post)->setMethod(HttpRequest::METHOD_POST);
127+
$response = $this->saveController->execute();
128+
$response->renderResult($this->getResponse());
129+
130+
$this->assertEquals(
131+
'application/json',
132+
$this->getResponse()->getHeader('Content-Type')->getFieldValue()
133+
);
134+
135+
$response = $this->serializer->unserialize($this->getResponse()->getBody());
136+
$this->assertNotNull($response['status']);
137+
$this->assertEquals(
138+
'ok',
139+
$response['status'],
140+
isset($response['message']) ? $response['message'] : null
141+
);
142+
143+
$template = $this->templateRepository->get($response['data']['id']);
144+
$this->assertEquals('Automated Template', $template->getName());
145+
$this->assertEquals('<div data-content-type="row"></div>', $template->getTemplate());
146+
$this->assertEquals('any', $template->getCreatedFor());
147+
$this->assertContains('.template-manager/automatedtemplate', $template->getPreviewImage());
148+
}
149+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
10+
/* @var \Magento\PageBuilder\Model\Template $template */
11+
$template = $objectManager->create(\Magento\PageBuilder\Model\Template::class);
12+
$template->setName('Test Template')
13+
->setPreviewImage('preview-image.jpg')
14+
->setCreatedFor('any')
15+
->setTemplate('<div data-content-type"row"></div>');
16+
17+
/* @var \Magento\PageBuilder\Model\TemplateRepository $templateRepository */
18+
$templateRepository = $objectManager->create(\Magento\PageBuilder\Model\TemplateRepository::class);
19+
$templateRepository->save($template);

0 commit comments

Comments
 (0)