Skip to content

Commit

Permalink
ECWID-157318 Negative promo targets - filter categories for exclusion…
Browse files Browse the repository at this point in the history
… list - apiclient

- added CategoriesSearchRequest::parentCategoryIds and CategoriesSearchRequest::withSubcategories fields
- updated CategoriesTest::testSearchByFilters to have more meaningful variable names and cases with new fields
  • Loading branch information
renat-ayzyatullen committed Feb 7, 2025
1 parent 946ce2b commit ffe3b1c
Show file tree
Hide file tree
Showing 3 changed files with 159 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@ import com.ecwid.apiclient.v3.responsefields.ResponseFields
data class CategoriesSearchRequest(
val keyword: String? = null,
val parentCategoryId: ParentCategory = ParentCategory.Any,
val parentCategoryIds: List<Long>? = null,
val categoryIds: List<Int>? = null,
val hiddenCategories: Boolean? = null,
val withSubcategories: Boolean = false,
val returnProductIds: Boolean? = null,
val baseUrl: String? = null,
val cleanUrls: Boolean? = null,
Expand Down Expand Up @@ -48,8 +50,10 @@ data class CategoriesSearchRequest(
return mutableMapOf<String, String>().apply {
request.keyword?.let { put("keyword", it) }
parentCategoryId?.let { put("parent", it.toString()) }
request.parentCategoryIds?.let { put("parentIds", it.joinToString(",")) }
request.categoryIds?.let { put("categoryIds", it.joinToString(",")) }
request.hiddenCategories?.let { put("hidden_categories", it.toString()) }
put("withSubcategories", request.withSubcategories.toString())
request.returnProductIds?.let { put("productIds", it.toString()) }
request.baseUrl?.let { put("baseUrl", it) }
request.cleanUrls?.let { put("cleanUrls", it.toString()) }
Expand Down
197 changes: 154 additions & 43 deletions src/test/kotlin/com/ecwid/apiclient/v3/entity/CategoriesTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -46,124 +46,235 @@ class CategoriesTest : BaseEntityTest() {
val productCreateResult2 = apiClient.createProduct(productCreateRequest2)
assertTrue(productCreateResult2.id > 0)

val productCreateRequest3 = ProductCreateRequest(
newProduct = generateTestProduct(nameSuffix = "testSearchByFilters", enabled = true)
)
val productCreateResult3 = apiClient.createProduct(productCreateRequest3)
assertTrue(productCreateResult3.id > 0)

// Creating some categories
val categoryCreateRequest1 = CategoryCreateRequest(
val requestTrunkA = CategoryCreateRequest(
newCategory = generateTestCategory(enabled = true)
)
val categoryCreateResult1 = apiClient.createCategory(categoryCreateRequest1)
assertTrue(categoryCreateResult1.id > 0)
val trunkA = apiClient.createCategory(requestTrunkA)
assertTrue(trunkA.id > 0)

val categoryCreateRequest2 = CategoryCreateRequest(
val requestBranchAA = CategoryCreateRequest(
newCategory = generateTestCategory(
parentCategoryId = trunkA.id,
enabled = true
)
)
val branchAA = apiClient.createCategory(requestBranchAA)
assertTrue(branchAA.id > 0)

val requestTrunkB = CategoryCreateRequest(
newCategory = generateTestCategory(enabled = false)
)
val categoryCreateResult2 = apiClient.createCategory(categoryCreateRequest2)
assertTrue(categoryCreateResult2.id > 0)
val trunkB = apiClient.createCategory(requestTrunkB)
assertTrue(trunkB.id > 0)

val categoryCreateRequest3 = CategoryCreateRequest(
val requestBranchBA = CategoryCreateRequest(
newCategory = generateTestCategory(
parentCategoryId = categoryCreateResult2.id,
parentCategoryId = trunkB.id,
productIds = listOf(productCreateResult1.id, productCreateResult2.id),
enabled = false
)
)
val categoryCreateResult3 = apiClient.createCategory(categoryCreateRequest3)
assertTrue(categoryCreateResult3.id > 0)
val branchBA = apiClient.createCategory(requestBranchBA)
assertTrue(branchBA.id > 0)

val requestLeafBAA = CategoryCreateRequest(
newCategory = generateTestCategory(
parentCategoryId = branchBA.id,
productIds = listOf(productCreateResult3.id),
enabled = false
)
)
val leafBAA = apiClient.createCategory(requestLeafBAA)
assertTrue(leafBAA.id > 0)

// Trying to search by different filters
val searchCategoriesResult1 = waitForIndexedCategories(
val searchDescendantsOfTrunkB = waitForIndexedCategories(
categoriesSearchRequest = CategoriesSearchRequest(
parentCategoryId = ParentCategory.WithId(categoryCreateResult2.id),
parentCategoryId = ParentCategory.WithId(trunkB.id),
hiddenCategories = true
),
desiredCategoriesCount = 1
)
assertEquals(1, searchCategoriesResult1.total)
assertEquals(1, searchDescendantsOfTrunkB.total)
assertCategory(
desiredId = categoryCreateResult3.id,
desiredId = branchBA.id,
desiredProductIds = null,
categoriesSearchResult = searchCategoriesResult1
categoriesSearchResult = searchDescendantsOfTrunkB
)

val searchCategoriesResult2 = waitForIndexedCategories(
val searchRootCategories = waitForIndexedCategories(
categoriesSearchRequest = CategoriesSearchRequest(
parentCategoryId = ParentCategory.Root,
hiddenCategories = true
),
desiredCategoriesCount = 2
)
assertEquals(2, searchCategoriesResult2.total)
assertEquals(2, searchRootCategories.total)
assertCategory(
desiredId = categoryCreateResult1.id,
desiredId = trunkA.id,
desiredProductIds = null,
categoriesSearchResult = searchCategoriesResult2
categoriesSearchResult = searchRootCategories
)
assertCategory(
desiredId = categoryCreateResult2.id,
desiredId = trunkB.id,
desiredProductIds = null,
categoriesSearchResult = searchCategoriesResult2
categoriesSearchResult = searchRootCategories
)

val searchCategoriesResult3 = waitForIndexedCategories(
val searchAllCategoriesWithProducts = waitForIndexedCategories(
categoriesSearchRequest = CategoriesSearchRequest(
parentCategoryId = ParentCategory.Any,
hiddenCategories = true,
returnProductIds = true
),
desiredCategoriesCount = 3
desiredCategoriesCount = 5
)
assertEquals(3, searchCategoriesResult3.total)
assertEquals(5, searchAllCategoriesWithProducts.total)
assertCategory(
desiredId = categoryCreateResult1.id,
desiredId = trunkA.id,
desiredProductIds = null,
categoriesSearchResult = searchCategoriesResult3
categoriesSearchResult = searchAllCategoriesWithProducts
)
assertCategory(
desiredId = categoryCreateResult2.id,
desiredId = branchAA.id,
desiredProductIds = null,
categoriesSearchResult = searchCategoriesResult3
categoriesSearchResult = searchAllCategoriesWithProducts
)
assertCategory(
desiredId = categoryCreateResult3.id,
desiredId = trunkB.id,
desiredProductIds = null,
categoriesSearchResult = searchAllCategoriesWithProducts
)
assertCategory(
desiredId = branchBA.id,
desiredProductIds = listOf(productCreateResult1.id, productCreateResult2.id),
categoriesSearchResult = searchCategoriesResult3
categoriesSearchResult = searchAllCategoriesWithProducts
)
assertCategory(
desiredId = leafBAA.id,
desiredProductIds = listOf(productCreateResult3.id),
categoriesSearchResult = searchAllCategoriesWithProducts
)

val searchCategoriesResult4 = waitForIndexedCategories(
val searchAllCategories = waitForIndexedCategories(
categoriesSearchRequest = CategoriesSearchRequest(
parentCategoryId = ParentCategory.Any,
hiddenCategories = true
),
desiredCategoriesCount = 3
desiredCategoriesCount = 5
)
assertEquals(3, searchCategoriesResult3.total)
assertEquals(5, searchAllCategoriesWithProducts.total)
assertCategory(
desiredId = categoryCreateResult1.id,
desiredId = trunkA.id,
desiredProductIds = null,
categoriesSearchResult = searchCategoriesResult4
categoriesSearchResult = searchAllCategories
)
assertCategory(
desiredId = categoryCreateResult2.id,
desiredId = branchAA.id,
desiredProductIds = null,
categoriesSearchResult = searchCategoriesResult4
categoriesSearchResult = searchAllCategories
)
assertCategory(
desiredId = categoryCreateResult3.id,
desiredId = trunkB.id,
desiredProductIds = null,
categoriesSearchResult = searchCategoriesResult4
categoriesSearchResult = searchAllCategories
)
assertCategory(
desiredId = branchBA.id,
desiredProductIds = null,
categoriesSearchResult = searchAllCategories
)
assertCategory(
desiredId = leafBAA.id,
desiredProductIds = null,
categoriesSearchResult = searchAllCategories
)

val searchCategoriesResult5 = waitForIndexedCategories(
val searchActiveCategories = waitForIndexedCategories(
categoriesSearchRequest = CategoriesSearchRequest(
parentCategoryId = ParentCategory.Any,
hiddenCategories = false
),
desiredCategoriesCount = 2
)
assertEquals(2, searchActiveCategories.total)
assertCategory(
desiredId = trunkA.id,
desiredProductIds = null,
categoriesSearchResult = searchActiveCategories
)
assertCategory(
desiredId = branchAA.id,
desiredProductIds = null,
categoriesSearchResult = searchActiveCategories
)

val searchDirectDescendantsOfTrunkB = waitForIndexedCategories(
categoriesSearchRequest = CategoriesSearchRequest(
parentCategoryIds = listOf(trunkB.id.toLong()),
withSubcategories = false,
hiddenCategories = true,
),
desiredCategoriesCount = 1
)
assertEquals(1, searchCategoriesResult5.total)
assertEquals(1, searchDirectDescendantsOfTrunkB.total)
assertCategory(
desiredId = branchBA.id,
desiredProductIds = null,
categoriesSearchResult = searchDirectDescendantsOfTrunkB
)

val searchAllDescendantsOfTrunkB = waitForIndexedCategories(
categoriesSearchRequest = CategoriesSearchRequest(
parentCategoryIds = listOf(trunkB.id.toLong()),
withSubcategories = true,
hiddenCategories = true,
),
desiredCategoriesCount = 2
)
assertEquals(2, searchAllDescendantsOfTrunkB.total)
assertCategory(
desiredId = branchBA.id,
desiredProductIds = null,
categoriesSearchResult = searchAllDescendantsOfTrunkB
)
assertCategory(
desiredId = leafBAA.id,
desiredProductIds = null,
categoriesSearchResult = searchAllDescendantsOfTrunkB
)

val searchDescendantsViaTwoFields = waitForIndexedCategories(
categoriesSearchRequest = CategoriesSearchRequest(
parentCategoryId = ParentCategory.WithId(trunkA.id),
parentCategoryIds = listOf(trunkB.id.toLong()),
withSubcategories = true,
hiddenCategories = true,
),
desiredCategoriesCount = 3
)
assertEquals(3, searchDescendantsViaTwoFields.total)
assertCategory(
desiredId = branchAA.id,
desiredProductIds = null,
categoriesSearchResult = searchDescendantsViaTwoFields
)
assertCategory(
desiredId = branchBA.id,
desiredProductIds = null,
categoriesSearchResult = searchDescendantsViaTwoFields
)
assertCategory(
desiredId = categoryCreateResult1.id,
desiredId = leafBAA.id,
desiredProductIds = null,
categoriesSearchResult = searchCategoriesResult5
categoriesSearchResult = searchDescendantsViaTwoFields
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import com.ecwid.apiclient.v3.rule.NullablePropertyRule.AllowNullable
val categoriesSearchRequestNullablePropertyRules: List<NullablePropertyRule<*, *>> = listOf(
AllowNullable(CategoriesSearchRequest::baseUrl),
AllowNullable(CategoriesSearchRequest::categoryIds),
AllowNullable(CategoriesSearchRequest::parentCategoryIds),
AllowNullable(CategoriesSearchRequest::cleanUrls),
AllowNullable(CategoriesSearchRequest::slugsWithoutIds),
AllowNullable(CategoriesSearchRequest::hiddenCategories),
Expand Down

0 comments on commit ffe3b1c

Please sign in to comment.