From 29a2e1388383ee49b5fcd7634d1ee6e6a3fda404 Mon Sep 17 00:00:00 2001 From: Karyna Tsymbal Date: Sun, 13 Oct 2019 09:41:11 +0300 Subject: [PATCH 1/2] #489 Cover \Magento\AdobeStockImage\Model\GetImageList with a unit test --- .../Test/Unit/Model/GetImageListTest.php | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 AdobeStockImage/Test/Unit/Model/GetImageListTest.php diff --git a/AdobeStockImage/Test/Unit/Model/GetImageListTest.php b/AdobeStockImage/Test/Unit/Model/GetImageListTest.php new file mode 100644 index 000000000000..1dffb0363d44 --- /dev/null +++ b/AdobeStockImage/Test/Unit/Model/GetImageListTest.php @@ -0,0 +1,86 @@ +getAssetListMock = $this->createMock(GetAssetListInterface::class); + $this->filterGroupBuilderMock = $this->createMock(FilterGroupBuilder::class); + $this->filterBuilderMock = $this->createMock(FilterBuilder::class); + + $this->getImageListModel = $objectManager->getObject( + GetImageList::class, + [ + 'getAssetList' => $this->getAssetListMock, + 'filterGroupBuilder' => $this->filterGroupBuilderMock, + 'filterBuilder' => $this->filterBuilderMock + ] + ); + } + + /** + * Test 'execute' method of GetImageList class. + * @throws LocalizedException + */ + public function testExecute() + { + /** @var MockObject|SearchCriteriaInterface $searchCriteriaMock */ + $searchCriteriaMock = $this->createMock(SearchCriteriaInterface::class); + $searchCriteriaMock + ->method('getFilterGroups') + ->willReturn([]); + + $searchResultMock = $this->createMock(SearchResultInterface::class); + + $this->getAssetListMock->expects($this->once()) + ->method('execute') + ->with($searchCriteriaMock) + ->willReturn($searchResultMock); + + $this->assertEquals($searchResultMock, $this->getImageListModel->execute($searchCriteriaMock)); + } +} From 6e24a0c24ba77a3ae15e19ea320f5cfb873ec5fa Mon Sep 17 00:00:00 2001 From: Sergii Ivashchenko Date: Sat, 19 Oct 2019 22:40:07 +0100 Subject: [PATCH 2/2] magento/adobe-stock-integration#538: Added default filters verification --- .../Test/Unit/Model/GetImageListTest.php | 150 ++++++++++++++++-- 1 file changed, 140 insertions(+), 10 deletions(-) diff --git a/AdobeStockImage/Test/Unit/Model/GetImageListTest.php b/AdobeStockImage/Test/Unit/Model/GetImageListTest.php index 1dffb0363d44..bc188852e390 100644 --- a/AdobeStockImage/Test/Unit/Model/GetImageListTest.php +++ b/AdobeStockImage/Test/Unit/Model/GetImageListTest.php @@ -3,6 +3,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); namespace Magento\AdobeStockImage\Test\Unit\Model; @@ -16,12 +17,32 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; +use Magento\Framework\Api\Search\FilterGroup; +use Magento\Framework\Api\Filter; /** * Test for Magento\AdobeStockImage\Model\GetImageList Model. */ class GetImageListTest extends TestCase { + private const DEFAULT_FILTERS = [ + 'illustration_filter' => [ + 'type' => 'content_type_filter', + 'condition' => 'or', + 'field' => 'illustration', + ], + 'photo_filter' => [ + 'type' => 'content_type_filter', + 'condition' => 'or', + 'field' => 'photo', + ], + 'premium_filter' => [ + 'type' => 'premium_price_filter', + 'condition' => 'eq', + 'field' => 'ALL', + ] + ]; + /** * @var GetAssetListInterface|MockObject */ @@ -57,30 +78,139 @@ public function setUp() [ 'getAssetList' => $this->getAssetListMock, 'filterGroupBuilder' => $this->filterGroupBuilderMock, - 'filterBuilder' => $this->filterBuilderMock + 'filterBuilder' => $this->filterBuilderMock, + 'defaultFilters' => self::DEFAULT_FILTERS ] ); } /** * Test 'execute' method of GetImageList class. + * + * @dataProvider appliedFilterNamesProvider * @throws LocalizedException */ - public function testExecute() + public function testWithDefaultFilters(array $appliedFilterNames) { - /** @var MockObject|SearchCriteriaInterface $searchCriteriaMock */ - $searchCriteriaMock = $this->createMock(SearchCriteriaInterface::class); - $searchCriteriaMock + $appliedFilterGroup = $this->getAppliedFilterGroup($appliedFilterNames); + + /** @var MockObject|SearchCriteriaInterface $searchCriteria */ + $searchCriteria = $this->getMockForAbstractClass(SearchCriteriaInterface::class); + $searchCriteria->expects($this->once()) ->method('getFilterGroups') - ->willReturn([]); + ->willReturn([$appliedFilterGroup]); + $searchCriteria->expects($this->once()) + ->method('setFilterGroups') + ->with([$appliedFilterGroup, $this->getDefaultFilterGroup($appliedFilterNames)]); - $searchResultMock = $this->createMock(SearchResultInterface::class); + $searchResult = $this->getMockForAbstractClass(SearchResultInterface::class); $this->getAssetListMock->expects($this->once()) ->method('execute') - ->with($searchCriteriaMock) - ->willReturn($searchResultMock); + ->with($searchCriteria) + ->willReturn($searchResult); + + $this->assertEquals($searchResult, $this->getImageListModel->execute($searchCriteria)); + } + + /** + * Data provider for testWithDefaultFilters + * + * @return array + */ + public function appliedFilterNamesProvider() + { + return [ + [ + ['content_type_filter'] + ], + [ + ['words'] + ], + [ + ['premium_price_filter'] + ], + [ + [] + ] + ]; + } + + /** + * Get filter group with applied filters + * + * @param array $appliedFilterNames + * @return FilterGroup + */ + private function getAppliedFilterGroup(array $appliedFilterNames): FilterGroup + { + $filters = []; + + foreach ($appliedFilterNames as $field) { + /** @var \Magento\Framework\Api\Filter|MockObject $filter */ + $filter = $this->createMock(Filter::class); + $filter->expects($this->once()) + ->method('getField') + ->willReturn($field); + $filters[] = $filter; + } + + /** @var FilterGroup|MockObject $filterGroup */ + $filterGroup = $this->createMock(FilterGroup::class); + $filterGroup->expects($this->once()) + ->method('getFilters') + ->willReturn($filters); + + return $filterGroup; + } + + /** + * Get filter group with default filters that should be applied + * + * @param array $appliedFilterNames + * @return FilterGroup + */ + private function getDefaultFilterGroup(array $appliedFilterNames): FilterGroup + { + $filters = []; + $filterBuilderCallIndex = 0; + + foreach (self::DEFAULT_FILTERS as $defaultFilter) { + if (!in_array($defaultFilter['type'], $appliedFilterNames)) { + $this->filterBuilderMock->expects($this->at($filterBuilderCallIndex++)) + ->method('setField') + ->with($defaultFilter['type']) + ->willReturnSelf(); + $this->filterBuilderMock->expects($this->at($filterBuilderCallIndex++)) + ->method('setConditionType') + ->with($defaultFilter['condition']) + ->willReturnSelf(); + $this->filterBuilderMock->expects($this->at($filterBuilderCallIndex++)) + ->method('setValue') + ->with($defaultFilter['field']) + ->willReturnSelf(); + + $filter = $this->createMock(Filter::class); + + $this->filterBuilderMock->expects($this->at($filterBuilderCallIndex++)) + ->method('create') + ->willReturn($filter); + + $filters[] = $filter; + } + } + + /** @var FilterGroup|MockObject $filterGroup */ + $filterGroup = $this->createMock(FilterGroup::class); + + $this->filterGroupBuilderMock->expects($this->once()) + ->method('setFilters') + ->with($filters) + ->willReturnSelf(); + $this->filterGroupBuilderMock->expects($this->once()) + ->method('create') + ->willReturn($filterGroup); - $this->assertEquals($searchResultMock, $this->getImageListModel->execute($searchCriteriaMock)); + return $filterGroup; } }