Skip to content

Commit a6f76f3

Browse files
committed
#26986 API Functional Test to cover Pagination issue
1 parent 90a479f commit a6f76f3

File tree

1 file changed

+90
-10
lines changed

1 file changed

+90
-10
lines changed

dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductRepositoryInterfaceTest.php

Lines changed: 90 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,26 +8,26 @@
88
namespace Magento\Catalog\Api;
99

1010
use Magento\Authorization\Model\Role;
11-
use Magento\Authorization\Model\Rules;
1211
use Magento\Authorization\Model\RoleFactory;
12+
use Magento\Authorization\Model\Rules;
1313
use Magento\Authorization\Model\RulesFactory;
1414
use Magento\Catalog\Api\Data\ProductInterface;
1515
use Magento\CatalogInventory\Api\Data\StockItemInterface;
1616
use Magento\Downloadable\Api\DomainManagerInterface;
1717
use Magento\Downloadable\Model\Link;
18-
use Magento\Integration\Api\AdminTokenServiceInterface;
19-
use Magento\Store\Model\Store;
20-
use Magento\Store\Model\Website;
21-
use Magento\Store\Model\WebsiteRepository;
22-
use Magento\TestFramework\Helper\Bootstrap;
23-
use Magento\TestFramework\TestCase\WebapiAbstract;
2418
use Magento\Framework\Api\ExtensibleDataInterface;
2519
use Magento\Framework\Api\FilterBuilder;
2620
use Magento\Framework\Api\SearchCriteriaBuilder;
2721
use Magento\Framework\Api\SortOrder;
2822
use Magento\Framework\Api\SortOrderBuilder;
2923
use Magento\Framework\Exception\NoSuchEntityException;
3024
use Magento\Framework\Webapi\Exception as HTTPExceptionCodes;
25+
use Magento\Integration\Api\AdminTokenServiceInterface;
26+
use Magento\Store\Model\Store;
27+
use Magento\Store\Model\Website;
28+
use Magento\Store\Model\WebsiteRepository;
29+
use Magento\TestFramework\Helper\Bootstrap;
30+
use Magento\TestFramework\TestCase\WebapiAbstract;
3131

3232
/**
3333
* Test for \Magento\Catalog\Api\ProductRepositoryInterface
@@ -280,7 +280,7 @@ public function testCreateWithMultipleWebsites()
280280
$websitesData = [
281281
'website_ids' => [
282282
1,
283-
(int) $website->getId(),
283+
(int)$website->getId(),
284284
]
285285
];
286286
$productBuilder[ProductInterface::EXTENSION_ATTRIBUTES_KEY] = $websitesData;
@@ -1096,6 +1096,86 @@ public function testGetListWithFilteringByStoreDataProvider()
10961096
];
10971097
}
10981098

1099+
/**
1100+
* Test getList() method with pagination
1101+
*
1102+
* @param int $pageSize
1103+
* @param int $currentPage
1104+
* @param int $expectedCount
1105+
*
1106+
* @magentoAppIsolation enabled
1107+
* @magentoApiDataFixture Magento/Catalog/_files/products_for_search.php
1108+
* @dataProvider productPaginationDataProvider
1109+
*/
1110+
public function testGetListPagination(int $pageSize, int $currentPage, int $expectedCount)
1111+
{
1112+
$fixtureProducts = 5;
1113+
1114+
/** @var FilterBuilder $filterBuilder */
1115+
$filterBuilder = Bootstrap::getObjectManager()->create(FilterBuilder::class);
1116+
1117+
$categoryFilter = $filterBuilder->setField('category_id')
1118+
->setValue(333)
1119+
->create();
1120+
1121+
/** @var SearchCriteriaBuilder $searchCriteriaBuilder */
1122+
$searchCriteriaBuilder = Bootstrap::getObjectManager()->create(SearchCriteriaBuilder::class);
1123+
1124+
$searchCriteriaBuilder->addFilters([$categoryFilter]);
1125+
$searchCriteriaBuilder->setPageSize($pageSize);
1126+
$searchCriteriaBuilder->setCurrentPage($currentPage);
1127+
1128+
$searchData = $searchCriteriaBuilder->create()->__toArray();
1129+
$requestData = ['searchCriteria' => $searchData];
1130+
$serviceInfo = [
1131+
'rest' => [
1132+
'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($requestData),
1133+
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
1134+
],
1135+
'soap' => [
1136+
'service' => self::SERVICE_NAME,
1137+
'serviceVersion' => self::SERVICE_VERSION,
1138+
'operation' => self::SERVICE_NAME . 'GetList',
1139+
],
1140+
];
1141+
1142+
$searchResult = $this->_webApiCall($serviceInfo, $requestData);
1143+
1144+
$this->assertEquals($fixtureProducts, $searchResult['total_count']);
1145+
$this->assertCount($expectedCount, $searchResult['items']);
1146+
}
1147+
1148+
/**
1149+
* Keep in mind: Fixture contains 5 products
1150+
*
1151+
* @return array
1152+
*/
1153+
public function productPaginationDataProvider()
1154+
{
1155+
return [
1156+
'expect-all-items' => [
1157+
'pageSize' => 10,
1158+
'currentPage' => 1,
1159+
'expectedCount' => 5
1160+
],
1161+
'expect-page=size-items' => [
1162+
'pageSize' => 2,
1163+
'currentPage' => 1,
1164+
'expectedCount' => 2
1165+
],
1166+
'expect-less-than-pagesize-elements' => [
1167+
'pageSize' => 3,
1168+
'currentPage' => 2,
1169+
'expectedCount' => 2
1170+
],
1171+
'expect-no-items' => [
1172+
'pageSize' => 100,
1173+
'currentPage' => 99,
1174+
'expectedCount' => 0
1175+
]
1176+
];
1177+
}
1178+
10991179
/**
11001180
* Test getList() method with multiple filter groups and sorting and pagination
11011181
*
@@ -1133,7 +1213,7 @@ public function testGetListWithMultipleFilterGroupsAndSortingAndPagination()
11331213
$sortOrder = $sortOrderBuilder->setField('meta_title')->setDirection(SortOrder::SORT_DESC)->create();
11341214

11351215
/** @var SearchCriteriaBuilder $searchCriteriaBuilder */
1136-
$searchCriteriaBuilder = Bootstrap::getObjectManager()->create(SearchCriteriaBuilder::class);
1216+
$searchCriteriaBuilder = Bootstrap::getObjectManager()->create(SearchCriteriaBuilder::class);
11371217

11381218
$searchCriteriaBuilder->addFilters([$filter1, $filter2, $filter3, $filter4]);
11391219
$searchCriteriaBuilder->addFilters([$filter5]);
@@ -1728,8 +1808,8 @@ private function assertMultiselectValue($productSku, $multiselectAttributeCode,
17281808
* Test design settings authorization
17291809
*
17301810
* @magentoApiDataFixture Magento/User/_files/user_with_custom_role.php
1731-
* @throws \Throwable
17321811
* @return void
1812+
* @throws \Throwable
17331813
*/
17341814
public function testSaveDesign(): void
17351815
{

0 commit comments

Comments
 (0)