Skip to content

Commit 4226a6b

Browse files
committed
Merge remote-tracking branch 'origin/MAGETWO-53262' into BUGS
2 parents f175469 + 32a1d8a commit 4226a6b

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
@@ -261,7 +261,7 @@ public function testGetList()
261261
->willReturnSelf();
262262
$this->collection->expects($this->once())
263263
->method('addFieldToFilter')
264-
->with($field, [$condition => $value])
264+
->with([$field], [[$condition => $value]])
265265
->willReturnSelf();
266266
$this->blockSearchResult->expects($this->once())->method('setTotalCount')->with($total)->willReturnSelf();
267267
$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
@@ -258,7 +258,7 @@ public function testGetList()
258258
$this->pageSearchResult->expects($this->once())->method('setSearchCriteria')->with($criteria)->willReturnSelf();
259259
$this->collection->expects($this->once())
260260
->method('addFieldToFilter')
261-
->with($field, [$condition => $value])
261+
->with([$field], [[$condition => $value]])
262262
->willReturnSelf();
263263
$this->pageSearchResult->expects($this->once())->method('setTotalCount')->with($total)->willReturnSelf();
264264
$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
@@ -213,23 +213,26 @@ public function testDelete()
213213
*/
214214
public function testSearch()
215215
{
216-
$blockTitle = 'Block title';
217-
$blockIdentifier = 'block-title';
218-
/** @var \Magento\Cms\Api\Data\BlockInterface $blockDataObject */
219-
$blockDataObject = $this->blockFactory->create();
220-
$blockDataObject->setTitle($blockTitle)
221-
->setIdentifier($blockIdentifier);
222-
$this->currentBlock = $this->blockRepository->save($blockDataObject);
216+
$cmsBlocks = $this->prepareCmsBlocks();
223217

224218
$filterBuilder = Bootstrap::getObjectManager()->create('Magento\Framework\Api\FilterBuilder');
225219
/** @var \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder */
226220
$searchCriteriaBuilder = Bootstrap::getObjectManager()
227221
->create('Magento\Framework\Api\SearchCriteriaBuilder');
228-
$filter = $filterBuilder
222+
$filterIdentifier = $filterBuilder
229223
->setField(BlockInterface::IDENTIFIER)
230-
->setValue($blockIdentifier)
224+
->setValue($cmsBlocks['first']->getIdentifier())
225+
->create();
226+
$searchCriteriaBuilder->addFilters([$filterIdentifier]);
227+
$filterTitle = $filterBuilder
228+
->setField(BlockInterface::TITLE)
229+
->setValue($cmsBlocks['second']->getTitle())
230+
->create();
231+
$filterStatus = $filterBuilder
232+
->setField(BlockInterface::IS_ACTIVE)
233+
->setValue($cmsBlocks['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,36 @@ public function testSearch()
247250

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

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');
225219
/** @var \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder */
226220
$searchCriteriaBuilder = Bootstrap::getObjectManager()
227221
->create('Magento\Framework\Api\SearchCriteriaBuilder');
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)