1
0
mirror of https://github.com/stolksdorf/homebrewery.git synced 2026-01-02 06:39:14 +00:00
Files
homebrewery/test/search.test.js
2017-01-23 00:35:30 -05:00

142 lines
3.1 KiB
JavaScript

const testing = require('./test.init.js');
const _ = require('lodash');
const DB = require('db.js');
const BrewData = require('brew.data.js');
const Error = require('error.js');
const ids = (brewIds) => {
return _.map(brewIds, (brewId) => {
return { editId : brews[brewId].editId };
});
}
const brews = {
BrewA : {
title : 'BrewA',
description : 'fancy',
authors : [],
systems : [],
views : 12,
published : false
},
BrewB : {
title : 'BrewB',
description : 'very fancy',
authors : [],
systems : [],
views : 7,
published : true
},
BrewC : {
title : 'BrewC',
description : 'test',
authors : [],
systems : [],
views : 0,
published : false
},
BrewD : {
title : 'BrewD',
description : 'test super amazing brew for 5e. Geared for Rangers.',
authors : [],
systems : [],
views : 1,
published : true
}
};
describe('Brew Search', () => {
before('Connect DB', DB.connect);
before('Clear DB', BrewData.removeAll);
before('Populate brews', ()=>{
return Promise.all(_.map(brews, (brewData, id) => {
return BrewData.create(brewData)
.then((brew)=>{ brews[id] = brew; });
}));
});
describe('Searching', ()=>{
it('should be able to search for all brews', ()=>{
return BrewData.search()
.then((result) => {
result.total.should.be.equal(_.size(brews));
result.brews.length.should.be.equal(_.size(brews));
})
});
it('should search brews based on title', () => {
return BrewData.search('BrewC')
.then((result) => {
result.total.should.be.equal(1);
result.brews.should.containSubset(ids(['BrewC']));
})
});
it('should search brews based on description', () => {
return BrewData.search('fancy')
.then((result) => {
result.total.should.be.equal(2);
result.brews.should.containSubset(ids(['BrewA', 'BrewB']));
})
});
it('should search brews based on multiple terms', () => {
return BrewData.search('ranger 5e')
.then((result) => {
result.total.should.be.equal(1);
result.brews.should.containSubset(ids(['BrewD']));
})
});
it('should perform an AND operation on the provided terms', () => {
return BrewData.search('BrewD GARBAGE')
.then((result) => {
result.total.should.be.equal(0);
});
});
it('should search brews based on a combination of both', () => {
return BrewData.search('BrewB fancy')
.then((result) => {
result.total.should.be.equal(1);
result.brews.should.containSubset(ids(['BrewB']));
});
});
it.skip('should be able to search for a specific system', ()=>{
});
it.skip('should be able to search for a specifc user', ()=>{
});
})
describe('Permissions', () => {
it.skip('should only fetch published brews', () => {
});
it.skip('fetched brews should not have text or editId', () => {
});
it.skip('if admin, fetches also non-published brews, with editid', () => {
});
it.skip('if author, fetches also non-published brews, with editid', ()=>{
});
});
describe('Pagniation', () => {
it.skip('should return the exact number of brews based on limit', () => {
});
});
describe('Sorting', ()=>{
});
});