Skip to content

Commit f2d309a

Browse files
authored
Merge pull request #207 from magento-south/BUGS
[South] Bugfix
2 parents 2638640 + a904075 commit f2d309a

File tree

6 files changed

+153
-42
lines changed

6 files changed

+153
-42
lines changed

app/code/Magento/Cms/Model/BlockRepository.php

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -135,24 +135,19 @@ public function getById($blockId)
135135
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
136136
* @SuppressWarnings(PHPMD.NPathComplexity)
137137
* @param \Magento\Framework\Api\SearchCriteriaInterface $criteria
138-
* @return \Magento\Cms\Model\ResourceModel\Block\Collection
138+
* @return \Magento\Cms\Api\Data\BlockSearchResultsInterface
139139
*/
140140
public function getList(\Magento\Framework\Api\SearchCriteriaInterface $criteria)
141141
{
142142
$searchResults = $this->searchResultsFactory->create();
143143
$searchResults->setSearchCriteria($criteria);
144144

145+
/** @var \Magento\Cms\Model\ResourceModel\Block\Collection $collection */
145146
$collection = $this->blockCollectionFactory->create();
146147
foreach ($criteria->getFilterGroups() as $filterGroup) {
147-
foreach ($filterGroup->getFilters() as $filter) {
148-
if ($filter->getField() === 'store_id') {
149-
$collection->addStoreFilter($filter->getValue(), false);
150-
continue;
151-
}
152-
$condition = $filter->getConditionType() ?: 'eq';
153-
$collection->addFieldToFilter($filter->getField(), [$condition => $filter->getValue()]);
154-
}
148+
$this->addFilterGroupToCollection($filterGroup, $collection);
155149
}
150+
156151
$searchResults->setTotalCount($collection->getSize());
157152
$sortOrders = $criteria->getSortOrders();
158153
if ($sortOrders) {
@@ -212,4 +207,33 @@ public function deleteById($blockId)
212207
{
213208
return $this->delete($this->getById($blockId));
214209
}
210+
211+
/**
212+
* Helper function that adds a FilterGroup to the collection.
213+
*
214+
* @param \Magento\Framework\Api\Search\FilterGroup $filterGroup
215+
* @param \Magento\Cms\Model\ResourceModel\Block\Collection $collection
216+
* @return void
217+
* @throws \Magento\Framework\Exception\InputException
218+
*/
219+
private function addFilterGroupToCollection(
220+
\Magento\Framework\Api\Search\FilterGroup $filterGroup,
221+
\Magento\Cms\Model\ResourceModel\Block\Collection $collection
222+
) {
223+
$fields = [];
224+
$conditions = [];
225+
foreach ($filterGroup->getFilters() as $filter) {
226+
if ($filter->getField() === 'store_id') {
227+
$collection->addStoreFilter($filter->getValue(), false);
228+
continue;
229+
}
230+
$condition = $filter->getConditionType() ?: 'eq';
231+
$fields[] = $filter->getField();
232+
$conditions[] = [$condition => $filter->getValue()];
233+
}
234+
235+
if ($fields) {
236+
$collection->addFieldToFilter($fields, $conditions);
237+
}
238+
}
215239
}

app/code/Magento/Cms/Model/PageRepository.php

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -140,24 +140,19 @@ public function getById($pageId)
140140
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
141141
* @SuppressWarnings(PHPMD.NPathComplexity)
142142
* @param \Magento\Framework\Api\SearchCriteriaInterface $criteria
143-
* @return \Magento\Cms\Model\ResourceModel\Page\Collection
143+
* @return \Magento\Cms\Api\Data\PageSearchResultsInterface
144144
*/
145145
public function getList(\Magento\Framework\Api\SearchCriteriaInterface $criteria)
146146
{
147147
$searchResults = $this->searchResultsFactory->create();
148148
$searchResults->setSearchCriteria($criteria);
149149

150+
/** @var \Magento\Cms\Model\ResourceModel\Page\Collection $collection */
150151
$collection = $this->pageCollectionFactory->create();
151152
foreach ($criteria->getFilterGroups() as $filterGroup) {
152-
foreach ($filterGroup->getFilters() as $filter) {
153-
if ($filter->getField() === 'store_id') {
154-
$collection->addStoreFilter($filter->getValue(), false);
155-
continue;
156-
}
157-
$condition = $filter->getConditionType() ?: 'eq';
158-
$collection->addFieldToFilter($filter->getField(), [$condition => $filter->getValue()]);
159-
}
153+
$this->addFilterGroupToCollection($filterGroup, $collection);
160154
}
155+
161156
$searchResults->setTotalCount($collection->getSize());
162157
$sortOrders = $criteria->getSortOrders();
163158
if ($sortOrders) {
@@ -221,4 +216,33 @@ public function deleteById($pageId)
221216
{
222217
return $this->delete($this->getById($pageId));
223218
}
219+
220+
/**
221+
* Helper function that adds a FilterGroup to the collection.
222+
*
223+
* @param \Magento\Framework\Api\Search\FilterGroup $filterGroup
224+
* @param \Magento\Cms\Model\ResourceModel\Page\Collection $collection
225+
* @return void
226+
* @throws \Magento\Framework\Exception\InputException
227+
*/
228+
private function addFilterGroupToCollection(
229+
\Magento\Framework\Api\Search\FilterGroup $filterGroup,
230+
\Magento\Cms\Model\ResourceModel\Page\Collection $collection
231+
) {
232+
$fields = [];
233+
$conditions = [];
234+
foreach ($filterGroup->getFilters() as $filter) {
235+
if ($filter->getField() === 'store_id') {
236+
$collection->addStoreFilter($filter->getValue(), false);
237+
continue;
238+
}
239+
$condition = $filter->getConditionType() ?: 'eq';
240+
$fields[] = $filter->getField();
241+
$conditions[] = [$condition => $filter->getValue()];
242+
}
243+
244+
if ($fields) {
245+
$collection->addFieldToFilter($fields, $conditions);
246+
}
247+
}
224248
}

app/code/Magento/Cms/Test/Unit/Model/BlockRepositoryTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ public function testGetList()
265265
->willReturnSelf();
266266
$this->collection->expects($this->once())
267267
->method('addFieldToFilter')
268-
->with($field, [$condition => $value])
268+
->with([$field], [[$condition => $value]])
269269
->willReturnSelf();
270270
$this->blockSearchResult->expects($this->once())->method('setTotalCount')->with($total)->willReturnSelf();
271271
$this->collection->expects($this->once())->method('getSize')->willReturn($total);

app/code/Magento/Cms/Test/Unit/Model/PageRepositoryTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ public function testGetList()
260260
$this->pageSearchResult->expects($this->once())->method('setSearchCriteria')->with($criteria)->willReturnSelf();
261261
$this->collection->expects($this->once())
262262
->method('addFieldToFilter')
263-
->with($field, [$condition => $value])
263+
->with([$field], [[$condition => $value]])
264264
->willReturnSelf();
265265
$this->pageSearchResult->expects($this->once())->method('setTotalCount')->with($total)->willReturnSelf();
266266
$this->collection->expects($this->once())->method('getSize')->willReturn($total);

dev/tests/api-functional/testsuite/Magento/Cms/Api/BlockRepositoryTest.php

Lines changed: 44 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -214,23 +214,26 @@ public function testDelete()
214214
*/
215215
public function testSearch()
216216
{
217-
$blockTitle = 'Block title';
218-
$blockIdentifier = 'block-title';
219-
/** @var \Magento\Cms\Api\Data\BlockInterface $blockDataObject */
220-
$blockDataObject = $this->blockFactory->create();
221-
$blockDataObject->setTitle($blockTitle)
222-
->setIdentifier($blockIdentifier);
223-
$this->currentBlock = $this->blockRepository->save($blockDataObject);
217+
$cmsBlocks = $this->prepareCmsBlocks();
224218

225219
$filterBuilder = Bootstrap::getObjectManager()->create(\Magento\Framework\Api\FilterBuilder::class);
226220
/** @var \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder */
227221
$searchCriteriaBuilder = Bootstrap::getObjectManager()
228222
->create(\Magento\Framework\Api\SearchCriteriaBuilder::class);
229-
$filter = $filterBuilder
223+
$filterIdentifier = $filterBuilder
230224
->setField(BlockInterface::IDENTIFIER)
231-
->setValue($blockIdentifier)
225+
->setValue($cmsBlocks['first']->getIdentifier())
226+
->create();
227+
$searchCriteriaBuilder->addFilters([$filterIdentifier]);
228+
$filterTitle = $filterBuilder
229+
->setField(BlockInterface::TITLE)
230+
->setValue($cmsBlocks['second']->getTitle())
231+
->create();
232+
$filterStatus = $filterBuilder
233+
->setField(BlockInterface::IS_ACTIVE)
234+
->setValue($cmsBlocks['first']->isActive())
232235
->create();
233-
$searchCriteriaBuilder->addFilters([$filter]);
236+
$searchCriteriaBuilder->addFilters([$filterTitle, $filterStatus]);
234237

235238
$searchData = $searchCriteriaBuilder->create()->__toArray();
236239
$requestData = ['searchCriteria' => $searchData];
@@ -248,6 +251,36 @@ public function testSearch()
248251

249252
$searchResult = $this->_webApiCall($serviceInfo, $requestData);
250253
$this->assertEquals(1, $searchResult['total_count']);
251-
$this->assertEquals($searchResult['items'][0][BlockInterface::IDENTIFIER], $blockIdentifier);
254+
$this->assertEquals(
255+
$searchResult['items'][0][BlockInterface::IDENTIFIER],
256+
$cmsBlocks['first']->getIdentifier()
257+
);
258+
}
259+
260+
/**
261+
* @return BlockInterface[]
262+
*/
263+
private function prepareCmsBlocks()
264+
{
265+
$result = [];
266+
$blocksData['first'][BlockInterface::TITLE] = 'Block title 1';
267+
$blocksData['first'][BlockInterface::IDENTIFIER] = 'block-title-1' . uniqid();
268+
$blocksData['first'][BlockInterface::IS_ACTIVE] = true;
269+
$blocksData['second'][BlockInterface::TITLE] = 'Block title 2';
270+
$blocksData['second'][BlockInterface::IDENTIFIER] = 'block-title-2' . uniqid();
271+
$blocksData['second'][BlockInterface::IS_ACTIVE] = false;
272+
273+
foreach ($blocksData as $key => $blockData) {
274+
/** @var \Magento\Cms\Api\Data\BlockInterface $blockDataObject */
275+
$blockDataObject = $this->blockFactory->create();
276+
$this->dataObjectHelper->populateWithArray(
277+
$blockDataObject,
278+
$blockData,
279+
\Magento\Cms\Api\Data\BlockInterface::class
280+
);
281+
$result[$key] = $this->blockRepository->save($blockDataObject);
282+
}
283+
284+
return $result;
252285
}
253286
}

dev/tests/api-functional/testsuite/Magento/Cms/Api/PageRepositoryTest.php

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -213,23 +213,26 @@ public function testDelete()
213213
*/
214214
public function testSearch()
215215
{
216-
$pageTitle = 'Page title';
217-
$pageIdentifier = 'page-title' . uniqid();
218-
/** @var \Magento\Cms\Api\Data\PageInterface $pageDataObject */
219-
$pageDataObject = $this->pageFactory->create();
220-
$pageDataObject->setTitle($pageTitle)
221-
->setIdentifier($pageIdentifier);
222-
$this->currentPage = $this->pageRepository->save($pageDataObject);
216+
$cmsPages = $this->prepareCmsPages();
223217

224218
$filterBuilder = Bootstrap::getObjectManager()->create(\Magento\Framework\Api\FilterBuilder::class);
225219
/** @var \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder */
226220
$searchCriteriaBuilder = Bootstrap::getObjectManager()
227221
->create(\Magento\Framework\Api\SearchCriteriaBuilder::class);
228-
$filter = $filterBuilder
222+
$filterIdentifier = $filterBuilder
229223
->setField(PageInterface::IDENTIFIER)
230-
->setValue($pageIdentifier)
224+
->setValue($cmsPages['first']->getIdentifier())
225+
->create();
226+
$searchCriteriaBuilder->addFilters([$filterIdentifier]);
227+
$filterTitle = $filterBuilder
228+
->setField(PageInterface::TITLE)
229+
->setValue($cmsPages['second']->getTitle())
230+
->create();
231+
$filterStatus = $filterBuilder
232+
->setField(PageInterface::IS_ACTIVE)
233+
->setValue($cmsPages['first']->isActive())
231234
->create();
232-
$searchCriteriaBuilder->addFilters([$filter]);
235+
$searchCriteriaBuilder->addFilters([$filterTitle, $filterStatus]);
233236

234237
$searchData = $searchCriteriaBuilder->create()->__toArray();
235238
$requestData = ['searchCriteria' => $searchData];
@@ -247,6 +250,33 @@ public function testSearch()
247250

248251
$searchResult = $this->_webApiCall($serviceInfo, $requestData);
249252
$this->assertEquals(1, $searchResult['total_count']);
250-
$this->assertEquals($searchResult['items'][0][PageInterface::IDENTIFIER], $pageIdentifier);
253+
$this->assertEquals($searchResult['items'][0][PageInterface::IDENTIFIER], $cmsPages['first']->getIdentifier());
254+
}
255+
256+
/**
257+
* @return PageInterface[]
258+
*/
259+
private function prepareCmsPages()
260+
{
261+
$result = [];
262+
$pagesData['first'][PageInterface::TITLE] = 'Page title 1';
263+
$pagesData['first'][PageInterface::IDENTIFIER] = 'page-title-1' . uniqid();
264+
$pagesData['first'][PageInterface::IS_ACTIVE] = true;
265+
$pagesData['second'][PageInterface::TITLE] = 'Page title 2';
266+
$pagesData['second'][PageInterface::IDENTIFIER] = 'page-title-2' . uniqid();
267+
$pagesData['second'][PageInterface::IS_ACTIVE] = false;
268+
269+
foreach ($pagesData as $key => $pageData) {
270+
/** @var \Magento\Cms\Api\Data\PageInterface $pageDataObject */
271+
$pageDataObject = $this->pageFactory->create();
272+
$this->dataObjectHelper->populateWithArray(
273+
$pageDataObject,
274+
$pageData,
275+
\Magento\Cms\Api\Data\PageInterface::class
276+
);
277+
$result[$key] = $this->pageRepository->save($pageDataObject);
278+
}
279+
280+
return $result;
251281
}
252282
}

0 commit comments

Comments
 (0)