Skip to content

Commit 34a83f8

Browse files
authored
Merge pull request #98 from Relewise/fix/get-facets
Fix: get facets helper methods would not find correct facet
2 parents 2acba33 + ca47f21 commit 34a83f8

File tree

9 files changed

+233
-63
lines changed

9 files changed

+233
-63
lines changed

packages/client/jest.config.cjs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ module.exports = {
55
extensionsToTreatAsEsm: ['.ts'],
66
moduleDirectories: ['node_modules'],
77
transform: {
8-
'^.+\\.[tj]s$': ['ts-jest', {
9-
'ts-jest': {
10-
tsconfig: {
11-
allowJs: true,
12-
},
13-
},
8+
'^.+\\.[tj]sx?$': ['ts-jest', {
9+
useESM: true,
10+
tsconfig: {
11+
allowJs: true,
12+
esModuleInterop: true
13+
}
1414
}]
1515
},
1616
transformIgnorePatterns: [

packages/client/package-lock.json

Lines changed: 19 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/client/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,15 @@
3838
},
3939
"devDependencies": {
4040
"@microsoft/api-extractor": "^7.47.9",
41+
"@relewise/integrations": "^1.0.3",
4142
"@rollup/plugin-commonjs": "^28.0.0",
4243
"@rollup/plugin-json": "^6.1.0",
4344
"@rollup/plugin-node-resolve": "^15.3.0",
4445
"@rollup/plugin-terser": "^0.4.4",
4546
"@rollup/plugin-typescript": "^12.1.0",
4647
"@types/jest": "^29.5.13",
4748
"@types/node": "^22.7.4",
49+
"@typescript-eslint/parser": "^8.7.0",
4850
"eslint": "^9.11.1",
4951
"jest": "^29.7.0",
5052
"prettier": "^3.3.3",
@@ -54,7 +56,6 @@
5456
"ts-jest": "^29.2.5",
5557
"ts-node": "^10.9.2",
5658
"tslib": "^2.7.0",
57-
"typescript": "^5.6.2",
58-
"@typescript-eslint/parser": "^8.7.0"
59+
"typescript": "^5.6.2"
5960
}
6061
}

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export class GetContentFacet {
2727

2828
return facets.items.find((item): item is CategoryFacetResult =>
2929
item.field === 'Category' &&
30-
item.$type === 'CategoryFacetResult' &&
30+
item.$type === 'Relewise.Client.DataTypes.Search.Facets.Result.CategoryFacetResult, Relewise.Client' &&
3131
'categorySelectionStrategy' in item &&
3232
item.categorySelectionStrategy === selectionStrategy,
3333
) || null;
@@ -41,7 +41,7 @@ export class GetContentFacet {
4141

4242
return facets.items.find((item): item is CategoryHierarchyFacetResult =>
4343
item.field === 'Category' &&
44-
item.$type === 'CategoryHierarchyFacetResult' &&
44+
item.$type === 'Relewise.Client.DataTypes.Search.Facets.Result.CategoryHierarchyFacetResult, Relewise.Client' &&
4545
'categorySelectionStrategy' in item &&
4646
item.categorySelectionStrategy === selectionStrategy,
4747
) || null;
@@ -54,7 +54,7 @@ export class GetContentFacet {
5454

5555
return facets.items.find((item): item is ContentAssortmentFacetResult =>
5656
item.field === 'Assortment' &&
57-
item.$type === 'ContentAssortmentFacetResult',
57+
item.$type === 'Relewise.Client.DataTypes.Search.Facets.Result.ContentAssortmentFacetResult, Relewise.Client',
5858
) || null;
5959
}
6060

@@ -66,7 +66,7 @@ export class GetContentFacet {
6666

6767
return facets.items.find((item): item is ContentDataDoubleRangeFacetResult =>
6868
item.field === 'Data' &&
69-
item.$type === 'ContentDataDoubleRangeFacetResult' &&
69+
item.$type === 'Relewise.Client.DataTypes.Search.Facets.Result.ContentDataDoubleRangeFacetResult, Relewise.Client' &&
7070
'key' in item &&
7171
item.key === key,
7272
) || null;
@@ -80,7 +80,7 @@ export class GetContentFacet {
8080

8181
return facets.items.find((item): item is ContentDataDoubleRangesFacetResult =>
8282
item.field === 'Data' &&
83-
item.$type === 'ContentDataDoubleRangesFacetResult' &&
83+
item.$type === 'Relewise.Client.DataTypes.Search.Facets.Result.ProductDataDoubleRangesFacetResult, Relewise.Client' &&
8484
'key' in item &&
8585
item.key === key,
8686
) || null;
@@ -115,7 +115,7 @@ export class GetContentFacet {
115115

116116
return facets.items.find((item): item is ContentDataObjectFacetResult =>
117117
item.field === 'Data' &&
118-
item.$type === 'ContentDataObjectFacetResult' &&
118+
item.$type === 'Relewise.Client.DataTypes.Search.Facets.Result.ContentDataObjectFacetResult, Relewise.Client' &&
119119
'key' in item &&
120120
item.key === key,
121121
) || null;

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import {
22
ProductCategoryAssortmentFacetResult,
3-
CategoryFacetResult,
4-
CategoryHierarchyFacetResult,
53
ProductCategoryDataDoubleRangeFacetResult,
64
ProductCategoryDataDoubleRangesFacetResult,
75
ProductCategoryDataStringValueFacetResult,
@@ -26,7 +24,7 @@ export class GetProductCategoryFacet {
2624

2725
return facets.items.find((item): item is ProductCategoryAssortmentFacetResult =>
2826
item.field === 'Assortment' &&
29-
item.$type === 'ProductCategoryAssortmentFacetResult',
27+
item.$type === 'Relewise.Client.DataTypes.Search.Facets.Result.ProductCategoryAssortmentFacetResult, Relewise.Client',
3028
) || null;
3129
}
3230

@@ -38,7 +36,7 @@ export class GetProductCategoryFacet {
3836

3937
return facets.items.find((item): item is ProductCategoryDataDoubleRangeFacetResult =>
4038
item.field === 'Data' &&
41-
item.$type === 'ProductCategoryDataDoubleRangeFacetResult' &&
39+
item.$type === 'Relewise.Client.DataTypes.Search.Facets.Result.ProductCategoryDataDoubleRangeFacetResult, Relewise.Client' &&
4240
'key' in item &&
4341
item.key === key,
4442
) || null;
@@ -52,7 +50,7 @@ export class GetProductCategoryFacet {
5250

5351
return facets.items.find((item): item is ProductCategoryDataDoubleRangesFacetResult =>
5452
item.field === 'Data' &&
55-
item.$type === 'ProductCategoryDataDoubleRangesFacetResult' &&
53+
item.$type === 'Relewise.Client.DataTypes.Search.Facets.Result.ProductDataDoubleRangesFacetResult, Relewise.Client' &&
5654
'key' in item &&
5755
item.key === key,
5856
) || null;
@@ -87,7 +85,7 @@ export class GetProductCategoryFacet {
8785

8886
return facets.items.find((item): item is ProductCategoryDataObjectFacetResult =>
8987
item.field === 'Data' &&
90-
item.$type === 'ProductCategoryDataObjectFacetResult' &&
88+
item.$type === 'Relewise.Client.DataTypes.Search.Facets.Result.ProductCategoryDataObjectFacetResult, Relewise.Client' &&
9189
'key' in item &&
9290
item.key === key,
9391
) || null;

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

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export class GetProductFacet {
2525
.items
2626
.find((item): item is BrandFacetResult =>
2727
'$type' in item &&
28-
item.$type === 'Relewise.Client.DataTypes.Search.items.Result.BrandFacetResult, Relewise.Client' &&
28+
item.$type === 'Relewise.Client.DataTypes.Search.Facets.Result.BrandFacetResult, Relewise.Client' &&
2929
'field' in item &&
3030
item.field === 'Brand') || null;
3131
}
@@ -37,7 +37,7 @@ export class GetProductFacet {
3737
.items
3838
.find((item): item is CategoryFacetResult =>
3939
'$type' in item &&
40-
item.$type === 'Relewise.Client.DataTypes.Search.items.Result.CategoryFacetResult, Relewise.Client' &&
40+
item.$type === 'Relewise.Client.DataTypes.Search.Facets.Result.CategoryFacetResult, Relewise.Client' &&
4141
'categorySelectionStrategy' in item
4242
&& item.categorySelectionStrategy === selectionStrategy) || null;
4343
}
@@ -49,7 +49,7 @@ export class GetProductFacet {
4949
.items
5050
.find((item): item is CategoryHierarchyFacetResult =>
5151
'$type' in item &&
52-
item.$type === 'Relewise.Client.DataTypes.Search.items.Result.CategoryHierarchyFacet, Relewise.Client' &&
52+
item.$type === 'Relewise.Client.DataTypes.Search.Facets.Result.CategoryHierarchyFacetResult, Relewise.Client' &&
5353
'categorySelectionStrategy' in item &&
5454
item.categorySelectionStrategy === selectionStrategy) || null;
5555
}
@@ -62,7 +62,7 @@ export class GetProductFacet {
6262

6363
return facets.items.find((item): item is PriceRangeFacetResult =>
6464
item.field === 'ListPrice' &&
65-
item.$type === 'Relewise.Client.DataTypes.Search.items.Result.PriceRangeFacetResult, Relewise.Client' &&
65+
item.$type === 'Relewise.Client.DataTypes.Search.Facets.Result.PriceRangeFacetResult, Relewise.Client' &&
6666
'priceSelectionStrategy' in item &&
6767
item.priceSelectionStrategy === selectionStrategy,
6868
) || null;
@@ -76,7 +76,7 @@ export class GetProductFacet {
7676

7777
return facets.items.find((item): item is PriceRangeFacetResult =>
7878
item.field === 'SalesPrice' &&
79-
item.$type === 'Relewise.Client.DataTypes.Search.items.Result.PriceRangeFacetResult, Relewise.Client' &&
79+
item.$type === 'Relewise.Client.DataTypes.Search.Facets.Result.PriceRangeFacetResult, Relewise.Client' &&
8080
'priceSelectionStrategy' in item &&
8181
item.priceSelectionStrategy === selectionStrategy,
8282
) || null;
@@ -90,7 +90,7 @@ export class GetProductFacet {
9090

9191
return facets.items.find((item): item is PriceRangesFacetResult =>
9292
item.field === 'ListPrice' &&
93-
item.$type === 'Relewise.Client.DataTypes.Search.items.Result.PriceRangesFacetResult, Relewise.Client' &&
93+
item.$type === 'Relewise.Client.DataTypes.Search.Facets.Result.PriceRangesFacetResult, Relewise.Client' &&
9494
'priceSelectionStrategy' in item &&
9595
item.priceSelectionStrategy === selectionStrategy,
9696
) || null;
@@ -105,7 +105,7 @@ export class GetProductFacet {
105105

106106
return facets.items.find((item): item is PriceRangesFacetResult =>
107107
item.field === 'ListPrice' &&
108-
item.$type === 'Relewise.Client.DataTypes.Search.items.Result.PriceRangesFacetResult, Relewise.Client' &&
108+
item.$type === 'Relewise.Client.DataTypes.Search.Facets.Result.PriceRangesFacetResult, Relewise.Client' &&
109109
'priceSelectionStrategy' in item &&
110110
item.priceSelectionStrategy === selectionStrategy &&
111111
'expandedRangeSize' in item &&
@@ -121,7 +121,7 @@ export class GetProductFacet {
121121

122122
return facets.items.find((item): item is PriceRangesFacetResult =>
123123
item.field === 'SalesPrice' &&
124-
item.$type === 'Relewise.Client.DataTypes.Search.items.Result.PriceRangesFacetResult, Relewise.Client' &&
124+
item.$type === 'Relewise.Client.DataTypes.Search.Facets.Result.PriceRangesFacetResult, Relewise.Client' &&
125125
'priceSelectionStrategy' in item &&
126126
item.priceSelectionStrategy === selectionStrategy,
127127
) || null;
@@ -136,7 +136,7 @@ export class GetProductFacet {
136136

137137
return facets.items.find((item): item is PriceRangesFacetResult =>
138138
item.field === 'SalesPrice' &&
139-
item.$type === 'Relewise.Client.DataTypes.Search.items.Result.PriceRangesFacetResult, Relewise.Client' &&
139+
item.$type === 'Relewise.Client.DataTypes.Search.Facets.Result.PriceRangesFacetResult, Relewise.Client' &&
140140
'priceSelectionStrategy' in item &&
141141
item.priceSelectionStrategy === selectionStrategy &&
142142
'expandedRangeSize' in item &&
@@ -153,7 +153,7 @@ export class GetProductFacet {
153153

154154
return facets.items.find((item): item is ProductDataDoubleRangeFacetResult =>
155155
item.field === 'Data' &&
156-
item.$type === 'Relewise.Client.DataTypes.Search.items.Result.ProductDataDoubleRangeFacetResult, Relewise.Client' &&
156+
item.$type === 'Relewise.Client.DataTypes.Search.Facets.Result.ProductDataDoubleRangeFacetResult, Relewise.Client' &&
157157
'dataSelectionStrategy' in item &&
158158
item.dataSelectionStrategy === selectionStrategy &&
159159
'key' in item &&
@@ -170,7 +170,7 @@ export class GetProductFacet {
170170

171171
return facets.items.find((item): item is ProductDataDoubleRangesFacetResult =>
172172
item.field === 'Data' &&
173-
item.$type === 'Relewise.Client.DataTypes.Search.items.Result.ProductDataDoubleRangesFacetResult, Relewise.Client' &&
173+
item.$type === 'Relewise.Client.DataTypes.Search.Facets.Result.ProductDataDoubleRangesFacetResult, Relewise.Client' &&
174174
'dataSelectionStrategy' in item &&
175175
item.dataSelectionStrategy === selectionStrategy &&
176176
'key' in item &&
@@ -185,7 +185,7 @@ export class GetProductFacet {
185185
.items
186186
.find((item): item is VariantSpecificationFacetResult =>
187187
'$type' in item &&
188-
item.$type === 'Relewise.Client.DataTypes.Search.items.Result.VariantSpecificationFacetResult, Relewise.Client' &&
188+
item.$type === 'Relewise.Client.DataTypes.Search.Facets.Result.VariantSpecificationFacetResult, Relewise.Client' &&
189189
'field' in item &&
190190
item.field === 'VariantSpecification' &&
191191
'key' in item && item.key === key) || null;

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

Lines changed: 52 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
import { Searcher, GetContentFacet, UserFactory, CategoryFacetResult, ContentSearchBuilder, ContentSearchRequest, ContentAssortmentFacet, ContentDataStringValueFacetResult } from '../../src';
1+
import { ContentUpdateBuilder, Integrator } from '@relewise/integrations';
2+
import { Searcher, GetContentFacet, UserFactory, CategoryFacetResult, ContentSearchBuilder, ContentSearchRequest, ContentAssortmentFacet, ContentDataStringValueFacetResult, DataValueFactory } from '../../src';
23
import { test, expect } from '@jest/globals'
34

45
const { npm_config_API_KEY: API_KEY, npm_config_DATASET_ID: DATASET_ID, npm_config_SERVER_URL: SERVER_URL } = process.env;
56

67
const searcher = new Searcher(DATASET_ID!, API_KEY!, { serverUrl: SERVER_URL });
8+
const integrator = new Integrator(DATASET_ID!, API_KEY!, { serverUrl: SERVER_URL });
79

810
function baseContentBuilder() {
911
return new ContentSearchBuilder({
@@ -15,23 +17,62 @@ function baseContentBuilder() {
1517
};
1618

1719
test('Facet result', async() => {
20+
const content = new ContentUpdateBuilder({
21+
id: 'GetContentFacet test content',
22+
updateKind: 'ReplaceProvidedProperties'
23+
})
24+
.data({
25+
'SomeString': DataValueFactory.string('Really nice product'),
26+
'SomeDouble': DataValueFactory.number(1),
27+
'SomeBoolean': DataValueFactory.boolean(true),
28+
'SomeObject': DataValueFactory.object({ })
29+
})
30+
.assortments([1, 2, 3]);
31+
32+
await integrator.updateContent(content.build());
33+
1834
const request: ContentSearchRequest = baseContentBuilder()
19-
.facets(f => f.addContentAssortmentFacet())
20-
.facets(f => f.addContentDataStringValueFacet('AnyString'))
21-
.facets(f => f.addCategoryFacet('ImmediateParent'))
35+
.facets(f => f
36+
.addContentAssortmentFacet()
37+
.addContentDataStringValueFacet('SomeString')
38+
.addContentDataBooleanValueFacet('SomeBoolean')
39+
.addContentDataDoubleValueFacet('SomeDouble')
40+
.addCategoryFacet('ImmediateParent')
41+
.addContentCategoryHierarchyFacet('Ancestors')
42+
.addContentDataDoubleRangeFacet('SomeDouble')
43+
.addContentDataDoubleRangesFacet('SomeDouble')
44+
.addContentDataObjectFacet('SomeObject'))
2245
.build();
2346

2447
const result = await searcher.searchContents(request);
2548

26-
if (result && result.facets) {
27-
const facet: ContentAssortmentFacet | null = GetContentFacet.assortment(result.facets);
28-
expect(facet).toBeDefined();
49+
if (result?.facets) {
50+
const assortmentFacet = GetContentFacet.assortment(result.facets);
51+
expect(assortmentFacet).not.toBeNull();
52+
53+
const dataStringFacet = GetContentFacet.dataString(result.facets, 'SomeString');
54+
expect(dataStringFacet).not.toBeNull();
55+
56+
const dataBooleanFacet = GetContentFacet.dataBoolean(result.facets, 'SomeBoolean');
57+
expect(dataBooleanFacet).not.toBeNull();
58+
59+
const dataNumberFacet = GetContentFacet.dataNumber(result.facets, 'SomeDouble');
60+
expect(dataNumberFacet).not.toBeNull();
61+
62+
const categoryFacet = GetContentFacet.category(result.facets, 'ImmediateParent');
63+
expect(categoryFacet).not.toBeNull();
64+
65+
const categoryHierarchyFacet = GetContentFacet.categoryHierarchy(result.facets, 'Ancestors');
66+
expect(categoryHierarchyFacet).not.toBeNull();
67+
68+
const dataDoubleRangeFacet = GetContentFacet.dataDoubleRange(result.facets, 'SomeDouble');
69+
expect(dataDoubleRangeFacet).not.toBeNull();
2970

30-
const facet2: ContentDataStringValueFacetResult | null = GetContentFacet.dataString(result.facets, 'AnyString');
31-
expect(facet2).toBeDefined();
71+
const dataDoubleRangesFacet = GetContentFacet.dataDoubleRanges(result.facets, 'SomeDouble');
72+
expect(dataDoubleRangesFacet).not.toBeNull();
3273

33-
const facet3: CategoryFacetResult | null = GetContentFacet.category(result.facets, 'ImmediateParent');
34-
expect(facet3).toBeDefined();
74+
const dataObjectFacet = GetContentFacet.dataObject(result.facets, 'SomeObject');
75+
expect(dataObjectFacet).not.toBeNull();
3576
}
3677

3778
expect(result?.hits).toBeGreaterThan(0);

0 commit comments

Comments
 (0)