Skip to content

Commit 0679008

Browse files
committed
B2B-2469: Improve category children loading
1 parent 1eedb0e commit 0679008

File tree

3 files changed

+193
-0
lines changed

3 files changed

+193
-0
lines changed

app/code/Magento/CatalogGraphQl/etc/schema.graphqls

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ type Query {
1616
@resolver(class: "Magento\\CatalogGraphQl\\Model\\Resolver\\CategoryTree") @doc(description: "Search for categories that match the criteria specified in the `search` and `filter` attributes.") @deprecated(reason: "Use `categoryList` instead.") @cache(cacheIdentity: "Magento\\CatalogGraphQl\\Model\\Resolver\\Category\\CategoryTreeIdentity")
1717
categoryList(
1818
filters: CategoryFilterInput @doc(description: "Identifies which Category filter inputs to search for and return.")
19+
pageSize: Int = 20 @doc(description: "Specifies the maximum number of results to return at once. The default value is 20.")
20+
currentPage: Int = 1 @doc(description: "Specifies which page of results to return. The default value is 1.")
1921
): [CategoryTree] @doc(description: "Return an array of categories based on the specified filters.") @resolver(class: "Magento\\CatalogGraphQl\\Model\\Resolver\\CategoryList") @cache(cacheIdentity: "Magento\\CatalogGraphQl\\Model\\Resolver\\Category\\CategoriesIdentity")
2022
categories (
2123
filters: CategoryFilterInput @doc(description: "Identifies which Category filter inputs to search for and return.")

dev/tests/api-functional/testsuite/Magento/GraphQl/Catalog/CategoriesQuery/CategoriesPaginationTest.php

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,80 @@ public function testDefaultPagination()
4646
$this->assertEquals(1, $pageInfo['total_pages']);
4747
}
4848

49+
/**
50+
* @magentoApiDataFixture Magento/Catalog/_files/categories.php
51+
*/
52+
public function testDefaultPaginationNotAppliedToChildren()
53+
{
54+
$query = <<<QUERY
55+
{
56+
categories(
57+
filters: {ids: {in: ["3", "4", "5", "6", "7", "8", "9"]}}
58+
pageSize: 1
59+
currentPage: 1
60+
) {
61+
total_count
62+
page_info {
63+
current_page
64+
page_size
65+
total_pages
66+
}
67+
items {
68+
name
69+
children {
70+
name
71+
}
72+
}
73+
}
74+
}
75+
QUERY;
76+
77+
$response = $this->graphQlQuery($query);
78+
$this->assertArrayHasKey('page_info', $response['categories']);
79+
$this->assertEquals(6, $response['categories']['total_count']);
80+
$pageInfo = $response['categories']['page_info'];
81+
$this->assertEquals(1, $pageInfo['current_page']);
82+
$this->assertEquals(1, $pageInfo['page_size']);
83+
$this->assertEquals(6, $pageInfo['total_pages']);
84+
$this->assertEquals('Category 1', $response['categories']['items'][0]['name']);
85+
$this->assertCount(2, $response['categories']['items'][0]['children']);
86+
$this->assertEquals('Category 1.1', $response['categories']['items'][0]['children'][0]['name']);
87+
$this->assertEquals('Category 1.2', $response['categories']['items'][0]['children'][1]['name']);
88+
89+
$query2 = <<<QUERY
90+
{
91+
categories(
92+
filters: {ids: {in: ["3", "4", "5", "6", "7", "8", "9"]}}
93+
pageSize: 1
94+
currentPage: 2
95+
) {
96+
total_count
97+
page_info {
98+
current_page
99+
page_size
100+
total_pages
101+
}
102+
items {
103+
name
104+
children {
105+
name
106+
}
107+
}
108+
}
109+
}
110+
QUERY;
111+
$response = $this->graphQlQuery($query2);
112+
$this->assertEquals(6, $response['categories']['total_count']);
113+
$this->assertArrayHasKey('page_info', $response['categories']);
114+
$pageInfo = $response['categories']['page_info'];
115+
$this->assertEquals(2, $pageInfo['current_page']);
116+
$this->assertEquals(1, $pageInfo['page_size']);
117+
$this->assertEquals(6, $pageInfo['total_pages']);
118+
$this->assertEquals('Category 1.1', $response['categories']['items'][0]['name']);
119+
$this->assertCount(1, $response['categories']['items'][0]['children']);
120+
$this->assertEquals('Category 1.1.1', $response['categories']['items'][0]['children'][0]['name']);
121+
}
122+
49123
/**
50124
* @magentoApiDataFixture Magento/Catalog/_files/categories.php
51125
*/

dev/tests/api-functional/testsuite/Magento/GraphQl/Catalog/CategoryListTest.php

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -961,4 +961,121 @@ public function testQueryParentCategoriesProductCount()
961961
$baseCategory = $response['categoryList'][0];
962962
$this->assertEquals(3, $baseCategory['product_count']);
963963
}
964+
965+
/**
966+
* @magentoApiDataFixture Magento/Catalog/_files/categories.php
967+
*/
968+
public function testCategoryListPaginationLimitsNotAppliedToChildren()
969+
{
970+
$query = <<<QUERY
971+
{
972+
categoryList(
973+
filters: {parent_id: {in: ["2"]}}
974+
pageSize: 1
975+
currentPage: 1
976+
){
977+
id
978+
name
979+
level
980+
children{
981+
name
982+
level
983+
children{
984+
name
985+
level
986+
children{
987+
name
988+
level
989+
children {
990+
name
991+
level
992+
}
993+
}
994+
}
995+
}
996+
}
997+
}
998+
QUERY;
999+
$response = $this->graphQlQuery($query);
1000+
$this->assertArrayNotHasKey('errors', $response);
1001+
$this->assertArrayHasKey('categoryList', $response);
1002+
$baseCategory = $response['categoryList'][0];
1003+
$this->assertEquals('Category 1', $baseCategory['name']);
1004+
$this->assertCount(2, $baseCategory['children']);
1005+
$this->assertEquals('Category 1.1', $baseCategory['children'][0]['name']);
1006+
$this->assertEquals('Category 1.2', $baseCategory['children'][1]['name']);
1007+
$this->assertEquals('Category 1.1.1', $baseCategory['children'][0]['children'][0]['name']);
1008+
1009+
$query2 = <<<QUERY
1010+
{
1011+
categoryList(
1012+
filters: {parent_id: {in: ["2"]}}
1013+
pageSize: 1
1014+
currentPage: 2
1015+
){
1016+
id
1017+
name
1018+
level
1019+
children{
1020+
name
1021+
level
1022+
children{
1023+
name
1024+
level
1025+
children{
1026+
name
1027+
level
1028+
children {
1029+
name
1030+
level
1031+
}
1032+
}
1033+
}
1034+
}
1035+
}
1036+
}
1037+
QUERY;
1038+
$response = $this->graphQlQuery($query2);
1039+
$this->assertArrayNotHasKey('errors', $response);
1040+
$this->assertArrayHasKey('categoryList', $response);
1041+
$baseCategory = $response['categoryList'][0];
1042+
$this->assertEquals('Category 2', $baseCategory['name']);
1043+
$this->assertCount(0, $baseCategory['children']);
1044+
1045+
$query3 = <<<QUERY
1046+
{
1047+
categoryList(
1048+
filters: {parent_id: {in: ["2"]}}
1049+
pageSize: 1
1050+
currentPage: 3
1051+
){
1052+
id
1053+
name
1054+
level
1055+
children{
1056+
name
1057+
level
1058+
children{
1059+
name
1060+
level
1061+
children{
1062+
name
1063+
level
1064+
children {
1065+
name
1066+
level
1067+
}
1068+
}
1069+
}
1070+
}
1071+
}
1072+
}
1073+
QUERY;
1074+
$response = $this->graphQlQuery($query3);
1075+
$this->assertArrayNotHasKey('errors', $response);
1076+
$this->assertArrayHasKey('categoryList', $response);
1077+
$baseCategory = $response['categoryList'][0];
1078+
$this->assertEquals('Movable', $baseCategory['name']);
1079+
$this->assertCount(0, $baseCategory['children']);
1080+
}
9641081
}

0 commit comments

Comments
 (0)