2021-02-11 21:31:41 +08:00

134 lines
3.6 KiB
JavaScript

'use strict';
/* eslint-env mocha, jasmine */
describe('popularIn', function() {
require('../../src/common/dom.js').element = require('jquery');
require('../../src/jquery/plugin.js');
var popularIn = require('../../src/sources/popularIn.js');
beforeEach(function() {
});
function build(options) {
var queries = {
as: {
_ua: 'javascript wrong agent',
},
search: function(q, params, cb) {
cb(false, {
hits: [
{ value: 'q1' },
{ value: 'q2' },
{ value: 'q3' }
]
});
}
};
var products = {
as: {
_ua: 'javascript wrong agent',
},
search: function(q, params, cb) {
cb(false, {
facets: {
category: {
c1: 42,
c2: 21,
c3: 2
}
}
})
}
};
var f = popularIn(queries, { hitsPerPage: 3 }, {
source: 'value',
index: products,
facets: 'category',
maxValuesPerFacet: 3
}, options);
var suggestions = [];
function cb(hits) {
suggestions = suggestions.concat(hits);
}
f('q', cb);
return suggestions;
}
it('should query 2 indices and build the combinatory', function() {
var suggestions = build();
expect(suggestions.length).toEqual(5);
expect(suggestions[0].value).toEqual('q1');
expect(suggestions[0].facet.value).toEqual('c1');
expect(suggestions[1].value).toEqual('q1');
expect(suggestions[1].facet.value).toEqual('c2');
expect(suggestions[2].value).toEqual('q1');
expect(suggestions[2].facet.value).toEqual('c3');
expect(suggestions[3].value).toEqual('q2');
expect(suggestions[3].facet).toBe(undefined);
expect(suggestions[4].value).toEqual('q3');
expect(suggestions[4].facet).toBe(undefined);
});
it('should include the all department entry', function() {
var suggestions = build({includeAll: true});
expect(suggestions.length).toEqual(6);
expect(suggestions[0].value).toEqual('q1');
expect(suggestions[0].facet.value).toEqual('All departments');
expect(suggestions[1].value).toEqual('q1');
expect(suggestions[1].facet.value).toEqual('c1');
expect(suggestions[2].value).toEqual('q1');
expect(suggestions[2].facet.value).toEqual('c2');
expect(suggestions[3].value).toEqual('q1');
expect(suggestions[3].facet.value).toEqual('c3');
expect(suggestions[4].value).toEqual('q2');
expect(suggestions[4].facet).toBe(undefined);
expect(suggestions[5].value).toEqual('q3');
expect(suggestions[5].facet).toBe(undefined);
});
it('should include the all department entry with a custom title', function() {
var suggestions = build({includeAll: true, allTitle: 'ALL'});
expect(suggestions.length).toEqual(6);
expect(suggestions[0].value).toEqual('q1');
expect(suggestions[0].facet.value).toEqual('ALL');
});
it('should not include the all department entry when no results', function() {
var queries = {
as: {
_ua: 'Algolia for vanilla JavaScript 4.3.6'
},
search: function(q, params, cb) {
cb(false, {
hits: []
});
}
};
var products = {
as: {
_ua: 'javascript wrong agent',
},
search: function(q, params, cb) {
throw new Error('Never reached');
}
};
var f = popularIn(queries, { hitsPerPage: 3 }, {
source: 'value',
index: products
}, {
includeAll: true
});
var suggestions = [];
function cb(hits) {
suggestions = suggestions.concat(hits);
}
f('q', cb);
expect(suggestions.length).toEqual(0);
});
});