134 lines
3.6 KiB
JavaScript
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);
|
|
});
|
|
|
|
});
|