Skip to content

Commit d551921

Browse files
authored
Merge pull request #110 from Relewise/feature/api-1.228.1-release
Feature: Add support for setting an evaluation mode on object facets
2 parents 7a956c9 + 3f2f63b commit d551921

File tree

4 files changed

+50
-6
lines changed

4 files changed

+50
-6
lines changed

packages/client/src/builders/search/dataObjectFacetBuilder.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ export class DataObjectFacetBuilder {
2121
skip?: number,
2222
take?: number
2323
},
24-
facetSettings?: FacetSettings | ((facetSettingsBuilder: FacetSettingsBuilder) => void)): this {
24+
facetSettings?: FacetSettings | ((facetSettingsBuilder: FacetSettingsBuilder) => void),
25+
evaluationMode?: "And" | "Or"): this {
2526

2627
const facetBuilder = new DataObjectFacetBuilder();
2728
if (builder) {
@@ -43,7 +44,8 @@ export class DataObjectFacetBuilder {
4344
take: filter?.take,
4445
skip: filter?.skip,
4546
},
46-
settings: handleFacetSettings(facetSettings)
47+
settings: handleFacetSettings(facetSettings),
48+
evaluationMode: evaluationMode
4749
};
4850
this.facets.push(facet);
4951

packages/client/src/builders/search/facetBuilder.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,8 @@ export class FacetBuilder {
331331
skip?: number,
332332
take?: number
333333
},
334-
facetSettings?: FacetSettings | ((facetSettingsBuilder: FacetSettingsBuilder) => void)): this {
334+
facetSettings?: FacetSettings | ((facetSettingsBuilder: FacetSettingsBuilder) => void),
335+
evaluationMode?: "And" | "Or"): this {
335336

336337
const facetBuilder = new DataObjectFacetBuilder();
337338
if (builder) {
@@ -355,6 +356,7 @@ export class FacetBuilder {
355356
dataSelectionStrategy: selectionStrategy,
356357
settings: handleFacetSettings(facetSettings),
357358
key: key,
359+
evaluationMode: evaluationMode
358360
};
359361
this.facets.push(facet);
360362

@@ -486,7 +488,8 @@ export class FacetBuilder {
486488
skip?: number,
487489
take?: number
488490
},
489-
facetSettings?: FacetSettings | ((facetSettingsBuilder: FacetSettingsBuilder) => void)): this {
491+
facetSettings?: FacetSettings | ((facetSettingsBuilder: FacetSettingsBuilder) => void),
492+
evaluationMode?: "And" | "Or"): this {
490493

491494
const facetBuilder = new DataObjectFacetBuilder();
492495
if (builder) {
@@ -509,6 +512,7 @@ export class FacetBuilder {
509512
},
510513
settings: handleFacetSettings(facetSettings),
511514
key: key,
515+
evaluationMode: evaluationMode
512516
};
513517
this.facets.push(facet);
514518

@@ -621,7 +625,8 @@ export class FacetBuilder {
621625
skip?: number,
622626
take?: number
623627
},
624-
facetSettings?: FacetSettings | ((facetSettingsBuilder: FacetSettingsBuilder) => void)): this {
628+
facetSettings?: FacetSettings | ((facetSettingsBuilder: FacetSettingsBuilder) => void),
629+
evaluationMode?: "And" | "Or"): this {
625630

626631
const facetBuilder = new DataObjectFacetBuilder();
627632
if (builder) {
@@ -644,6 +649,7 @@ export class FacetBuilder {
644649
},
645650
settings: handleFacetSettings(facetSettings),
646651
key: key,
652+
evaluationMode: evaluationMode
647653
};
648654
this.facets.push(facet);
649655

packages/client/src/models/data-contracts.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1566,6 +1566,7 @@ export type DataObjectFacet = UtilRequiredKeys<Facet, "$type"> & {
15661566
| VariantSpecificationFacet
15671567
)[];
15681568
filter: DataObjectFilter;
1569+
evaluationMode?: "And" | "Or" | null;
15691570
};
15701571

15711572
export type DataObjectFacetResult = UtilRequiredKeys<FacetResult, "$type"> & {
@@ -1612,6 +1613,7 @@ export type DataObjectFacetResult = UtilRequiredKeys<FacetResult, "$type"> & {
16121613
)[]
16131614
| null;
16141615
filter?: DataObjectFilter | null;
1616+
evaluationMode: "And" | "Or";
16151617
};
16161618

16171619
export interface DataObjectFilter {

packages/client/tests/integration-tests/productSearch.integration.test.ts

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Searcher, ProductSearchBuilder, ProductSearchRequest, UserFactory, ValueSelectorFactory, DataValueFactory, GetProductFacet, ProductAssortmentFacet, ProductDataStringValueFacetResult, CategoryFacetResult, BrandFacetResult, Tracker } from '../../src';
1+
import { Searcher, ProductSearchBuilder, ProductSearchRequest, UserFactory, ValueSelectorFactory, DataValueFactory, GetProductFacet, ProductAssortmentFacet, ProductDataStringValueFacetResult, CategoryFacetResult, BrandFacetResult, Tracker, ProductDataObjectFacet } from '../../src';
22
import { Integrator, ProductUpdateBuilder, ProductVariantBuilder } from '@relewise/integrations';
33
import { test, expect } from '@jest/globals'
44
import { fail } from 'assert';
@@ -50,6 +50,40 @@ test('Product search - data object facets', async () => {
5050
expect(result?.hits).toBeGreaterThan(0);
5151
});
5252

53+
test('Product search - data object facets evaluation mode', async () => {
54+
55+
const product = new ProductUpdateBuilder({
56+
id: 'Object facet evaluation mode test product',
57+
productUpdateKind: 'ReplaceProvidedProperties',
58+
})
59+
.data({
60+
'ObjectForFacet': DataValueFactory.object({
61+
'Key': DataValueFactory.string('data')
62+
})
63+
});
64+
65+
await integrator.updateProduct(product.build());
66+
67+
const request: ProductSearchRequest = baseProductBuilder()
68+
.facets(f => f.addProductDataObjectFacet(
69+
'ObjectForFacet',
70+
'Product',
71+
f => f
72+
.addStringFacet('Key', [])
73+
.addStringFacet('Key2', []),
74+
undefined,
75+
undefined,
76+
'Or'))
77+
78+
.build();
79+
80+
const result = await searcher.searchProducts(request);
81+
const facet = result?.facets?.items?.find(x => x.$type.includes('ProductDataObjectFacetResult')) as ProductDataObjectFacet;
82+
83+
expect(facet).toBeDefined();
84+
expect(facet.evaluationMode).toBe('Or');
85+
});
86+
5387
test('Product search - with cleared facets', async () => {
5488
const request = baseProductBuilder()
5589
.facets(f => f.addBrandFacet());

0 commit comments

Comments
 (0)