Skip to content

Commit

Permalink
tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Haroenv committed Jul 19, 2023
1 parent 367e670 commit f7d7c3b
Show file tree
Hide file tree
Showing 3 changed files with 188 additions and 62 deletions.
130 changes: 69 additions & 61 deletions packages/algoliasearch-helper/src/requestBuilder.js
Original file line number Diff line number Diff line change
Expand Up @@ -273,85 +273,93 @@ var requestBuilder = {
var facetFilters = [];

var facetsRefinements = state.facetsRefinements || {};
Object.keys(facetsRefinements).forEach(function (facetName) {
var facetValues = facetsRefinements[facetName] || [];
facetValues.forEach(function (facetValue) {
facetFilters.push(facetName + ':' + facetValue);
Object.keys(facetsRefinements)
.sort()
.forEach(function (facetName) {
var facetValues = facetsRefinements[facetName] || [];
facetValues.sort().forEach(function (facetValue) {
facetFilters.push(facetName + ':' + facetValue);
});
});
});

var facetsExcludes = state.facetsExcludes || {};
Object.keys(facetsExcludes).forEach(function (facetName) {
var facetValues = facetsExcludes[facetName] || [];
facetValues.forEach(function (facetValue) {
facetFilters.push(facetName + ':-' + facetValue);
Object.keys(facetsExcludes)
.sort()
.forEach(function (facetName) {
var facetValues = facetsExcludes[facetName] || [];
facetValues.sort().forEach(function (facetValue) {
facetFilters.push(facetName + ':-' + facetValue);
});
});
});

var disjunctiveFacetsRefinements = state.disjunctiveFacetsRefinements || {};
Object.keys(disjunctiveFacetsRefinements).forEach(function (facetName) {
var facetValues = disjunctiveFacetsRefinements[facetName] || [];
if (facetName === facet || !facetValues || facetValues.length === 0) {
return;
}
var orFilters = [];
Object.keys(disjunctiveFacetsRefinements)
.sort()
.forEach(function (facetName) {
var facetValues = disjunctiveFacetsRefinements[facetName] || [];
if (facetName === facet || !facetValues || facetValues.length === 0) {
return;
}
var orFilters = [];

facetValues.forEach(function (facetValue) {
orFilters.push(facetName + ':' + facetValue);
});
facetValues.sort().forEach(function (facetValue) {
orFilters.push(facetName + ':' + facetValue);
});

facetFilters.push(orFilters);
});
facetFilters.push(orFilters);
});

var hierarchicalFacetsRefinements =
state.hierarchicalFacetsRefinements || {};
Object.keys(hierarchicalFacetsRefinements).forEach(function (facetName) {
var facetValues = hierarchicalFacetsRefinements[facetName] || [];
var facetValue = facetValues[0];
Object.keys(hierarchicalFacetsRefinements)
.sort()
.forEach(function (facetName) {
var facetValues = hierarchicalFacetsRefinements[facetName] || [];
var facetValue = facetValues[0];

if (facetValue === undefined) {
return;
}

var hierarchicalFacet = state.getHierarchicalFacetByName(facetName);
var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);
var rootPath = state._getHierarchicalRootPath(hierarchicalFacet);
var attributeToRefine;
var attributesIndex;

// we ask for parent facet values only when the `facet` is the current hierarchical facet
if (facet === facetName) {
// if we are at the root level already, no need to ask for facet values, we get them from
// the hits query
if (
facetValue.indexOf(separator) === -1 ||
(!rootPath && hierarchicalRootLevel === true) ||
(rootPath &&
rootPath.split(separator).length ===
facetValue.split(separator).length)
) {
if (facetValue === undefined) {
return;
}

if (!rootPath) {
attributesIndex = facetValue.split(separator).length - 2;
facetValue = facetValue.slice(0, facetValue.lastIndexOf(separator));
} else {
attributesIndex = rootPath.split(separator).length - 1;
facetValue = rootPath;
}
var hierarchicalFacet = state.getHierarchicalFacetByName(facetName);
var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);
var rootPath = state._getHierarchicalRootPath(hierarchicalFacet);
var attributeToRefine;
var attributesIndex;

// we ask for parent facet values only when the `facet` is the current hierarchical facet
if (facet === facetName) {
// if we are at the root level already, no need to ask for facet values, we get them from
// the hits query
if (
facetValue.indexOf(separator) === -1 ||
(!rootPath && hierarchicalRootLevel === true) ||
(rootPath &&
rootPath.split(separator).length ===
facetValue.split(separator).length)
) {
return;
}

attributeToRefine = hierarchicalFacet.attributes[attributesIndex];
} else {
attributesIndex = facetValue.split(separator).length - 1;
if (!rootPath) {
attributesIndex = facetValue.split(separator).length - 2;
facetValue = facetValue.slice(0, facetValue.lastIndexOf(separator));
} else {
attributesIndex = rootPath.split(separator).length - 1;
facetValue = rootPath;
}

attributeToRefine = hierarchicalFacet.attributes[attributesIndex];
}
attributeToRefine = hierarchicalFacet.attributes[attributesIndex];
} else {
attributesIndex = facetValue.split(separator).length - 1;

if (attributeToRefine) {
facetFilters.push([attributeToRefine + ':' + facetValue]);
}
});
attributeToRefine = hierarchicalFacet.attributes[attributesIndex];
}

if (attributeToRefine) {
facetFilters.push([attributeToRefine + ':' + facetValue]);
}
});

return facetFilters;
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ function getData() {
index: 'test_hotels-node',
disjunctiveFacets: ['city'],
disjunctiveFacetsRefinements: {
city: ['Paris', 'New York'],
city: ['New York', 'Paris'],
},
});

Expand Down
118 changes: 118 additions & 0 deletions packages/algoliasearch-helper/test/spec/requestBuilder.js
Original file line number Diff line number Diff line change
Expand Up @@ -269,3 +269,121 @@ describe('wildcard facets', function () {
expect(queries[1].params.facets).toEqual('test_disjunctive');
});
});

describe('request ordering', function () {
test('should order queries and facet values by name', function () {
// These facets are all sorted reverse-alphabetically
var searchParams = new SearchParameters({
facets: [
'c_test_conjunctive_2',
'c_conjunctive_1',
'd_exclude_2',
'd_exclude_1',
],
disjunctiveFacets: ['b_disjunctive_2', 'b_disjunctive_1'],
hierarchicalFacets: [
{
name: 'a_hierarchical_2',
attributes: ['a_hierarchical_2'],
},
{
name: 'a_hierarchical_1',
attributes: ['a_hierarchical_1'],
},
],
hierarchicalFacetsRefinements: {
a_hierarchical_2: ['beta'],
a_hierarchical_1: ['alpha'],
},
disjunctiveFacetsRefinements: {
b_disjunctive_2: ['beta', 'alpha'],
b_disjunctive_1: ['beta', 'alpha'],
},
facetsRefinements: {
c_conjunctive_2: ['beta', 'alpha'],
c_conjunctive_1: ['beta', 'alpha'],
},
facetsExcludes: {
d_exclude_2: ['beta', 'alpha'],
d_exclude_1: ['beta', 'alpha'],
},
});

var queries = getQueries(searchParams.index, searchParams);

// Order of filters is alphabetical within type
// Order of queries is alphabetical within type
expect(queries.length).toBe(5);
// Hits
expect(queries[0].params.facetFilters).toEqual([
'c_conjunctive_1:alpha',
'c_conjunctive_1:beta',
'c_conjunctive_2:alpha',
'c_conjunctive_2:beta',
'd_exclude_1:-alpha',
'd_exclude_1:-beta',
'd_exclude_2:-alpha',
'd_exclude_2:-beta',
['b_disjunctive_1:alpha', 'b_disjunctive_1:beta'],
['b_disjunctive_2:alpha', 'b_disjunctive_2:beta'],
['a_hierarchical_1:alpha'],
['a_hierarchical_2:beta'],
]);
// Hierarchical 1
expect(queries[1].params.facetFilters).toEqual([
'c_conjunctive_1:alpha',
'c_conjunctive_1:beta',
'c_conjunctive_2:alpha',
'c_conjunctive_2:beta',
'd_exclude_1:-alpha',
'd_exclude_1:-beta',
'd_exclude_2:-alpha',
'd_exclude_2:-beta',
['b_disjunctive_1:alpha', 'b_disjunctive_1:beta'],
['b_disjunctive_2:alpha', 'b_disjunctive_2:beta'],
['a_hierarchical_2:beta'],
]);
// Hierarchical 2
expect(queries[2].params.facetFilters).toEqual([
'c_conjunctive_1:alpha',
'c_conjunctive_1:beta',
'c_conjunctive_2:alpha',
'c_conjunctive_2:beta',
'd_exclude_1:-alpha',
'd_exclude_1:-beta',
'd_exclude_2:-alpha',
'd_exclude_2:-beta',
['b_disjunctive_1:alpha', 'b_disjunctive_1:beta'],
['b_disjunctive_2:alpha', 'b_disjunctive_2:beta'],
['a_hierarchical_1:alpha'],
]);
// Disjunctive 1
expect(queries[3].params.facetFilters).toEqual([
'c_conjunctive_1:alpha',
'c_conjunctive_1:beta',
'c_conjunctive_2:alpha',
'c_conjunctive_2:beta',
'd_exclude_1:-alpha',
'd_exclude_1:-beta',
'd_exclude_2:-alpha',
'd_exclude_2:-beta',
['b_disjunctive_2:alpha', 'b_disjunctive_2:beta'],
['a_hierarchical_1:alpha'],
['a_hierarchical_2:beta'],
]);
// Disjunctive 2
expect(queries[4].params.facetFilters).toEqual([
'c_conjunctive_1:alpha',
'c_conjunctive_1:beta',
'c_conjunctive_2:alpha',
'c_conjunctive_2:beta',
'd_exclude_1:-alpha',
'd_exclude_1:-beta',
'd_exclude_2:-alpha',
'd_exclude_2:-beta',
['b_disjunctive_1:alpha', 'b_disjunctive_1:beta'],
['a_hierarchical_1:alpha'],
['a_hierarchical_2:beta'],
]);
});
});

0 comments on commit f7d7c3b

Please sign in to comment.