From 26bcb3395a495fb307e735c3bed11055ef4ef28e Mon Sep 17 00:00:00 2001 From: Scott Tolksdorf Date: Fri, 27 Jan 2017 19:47:45 -0500 Subject: [PATCH] Fixing edge cases in the search tests --- server/brew.search.js | 24 ++++++++------- server/middleware.js | 2 +- test/admin.test.js | 9 +++--- test/api.test.js | 6 ++-- test/brew.gen.js | 4 +-- test/middleware.test.js | 6 ++-- test/search.test.js | 66 ++++++++++++++++++++++++++++++----------- test/test.init.js | 6 +++- 8 files changed, 80 insertions(+), 43 deletions(-) diff --git a/server/brew.search.js b/server/brew.search.js index 99e993e..611b1bc 100644 --- a/server/brew.search.js +++ b/server/brew.search.js @@ -21,29 +21,31 @@ module.exports = (Brew) => { return cmds.search(query, opts, fullAccess); }, - search : (queryObj={}, opts={}, fullAccess = true) => { - const pagination = _.defaults(opts.pagination, { + search : (queryObj={}, options={}, fullAccess = true) => { + const opts = _.merge({ limit : 25, - page : 0 - }); - const sorting = _.defaults(opts.sorting, { - 'views' : 1 - }); + page : 0, + sort : {} + }, options); + let filter = { text : 0 }; + if(!fullAccess){ filter.editId = 0; - queryObj.published = false; + queryObj.published = true; } const searchQuery = Brew .find(queryObj) - .sort(sorting) + .sort(opts.sort) .select(filter) - .limit(pagination.limit) - .skip(pagination.page * pagination.limit) + .limit(opts.limit) + .skip(opts.page * opts.limit) + .lean() .exec(); + const countQuery = Brew.count(queryObj).exec(); return Promise.all([searchQuery, countQuery]) diff --git a/server/middleware.js b/server/middleware.js index cc2a535..fb19fb1 100644 --- a/server/middleware.js +++ b/server/middleware.js @@ -16,7 +16,7 @@ const Middleware = { return next(); }, admin : (req, res, next) => { - if(req.query.admin_key === config.get('admin:key')){ + if(req.headers['x-homebrew-admin'] === config.get('admin:key')){ req.admin = true; } return next(); diff --git a/test/admin.test.js b/test/admin.test.js index 6d2ccce..b2590ca 100644 --- a/test/admin.test.js +++ b/test/admin.test.js @@ -15,6 +15,7 @@ let brewA = { authors : ['your_dm'] }; + describe('Admin API', ()=>{ before('Connect DB', DB.connect); @@ -35,7 +36,7 @@ describe('Admin API', ()=>{ it('looks up a brew based on the share id', () => { return request(app) .get(`/admin/lookup/${brewA.shareId}`) - .query({ admin_key : config.get('admin:key') }) + .set('x-homebrew-admin', config.get('admin:key')) .expect(200) .then((res) => { const brew = res.body; @@ -47,7 +48,7 @@ describe('Admin API', ()=>{ it('looks up a brew based on the edit id', () => { return request(app) .get(`/admin/lookup/${brewA.editId}`) - .query({ admin_key : config.get('admin:key') }) + .set('x-homebrew-admin', config.get('admin:key')) .expect(200) .then((res) => { const brew = res.body; @@ -60,7 +61,7 @@ describe('Admin API', ()=>{ const query = brewA.editId.substring(0, brewA.editId.length -2); return request(app) .get(`/admin/lookup/${query}`) - .query({ admin_key : config.get('admin:key') }) + .set('x-homebrew-admin', config.get('admin:key')) .expect(200) .then((res) => { const brew = res.body; @@ -72,7 +73,7 @@ describe('Admin API', ()=>{ it('throws an error if it can not find a brew', ()=>{ return request(app) .get(`/admin/lookup/BADID`) - .query({ admin_key : config.get('admin:key') }) + .set('x-homebrew-admin', config.get('admin:key')) .expect(404); }); }); diff --git a/test/api.test.js b/test/api.test.js index 31330e5..8017c8c 100644 --- a/test/api.test.js +++ b/test/api.test.js @@ -1,6 +1,6 @@ -const testing = require('./test.init.js'); +const Test = require('./test.init.js'); const request = require('supertest-as-promised'); -const jwt = require('jwt-simple'); + const config = require('nconf'); const app = require('app.js'); @@ -24,7 +24,7 @@ describe('Brew API', () => { before('Connect DB', DB.connect); before('Clear DB', BrewData.removeAll); before('Create session token', () => { - session_token = jwt.encode(test_user, config.get('jwt_secret')); + session_token = Test.getSessionToken(test_user); }); before('Create brew', ()=>{ return BrewData.create(storedBrew) diff --git a/test/brew.gen.js b/test/brew.gen.js index fa67643..0d1fc13 100644 --- a/test/brew.gen.js +++ b/test/brew.gen.js @@ -56,6 +56,7 @@ module.exports = { }, populateDB : (brewCollection)=>{ + PopulatedBrews = {}; return Promise.all(_.map(brewCollection, (brewData, id) => { return BrewData.create(brewData) .then((brew)=>{ @@ -72,8 +73,7 @@ module.exports = { const storedBrew = PopulatedBrews[brewId]; if(!storedBrew) return false; return _.some(this._obj, (brew)=>{ - return brew.editId == storedBrew.editId && - brew.shareId == storedBrew.shareId && + return brew.shareId == storedBrew.shareId && brew.title == storedBrew.title && brew.views == storedBrew.views; }); diff --git a/test/middleware.test.js b/test/middleware.test.js index 44c822d..c407516 100644 --- a/test/middleware.test.js +++ b/test/middleware.test.js @@ -15,8 +15,6 @@ const requestHandler = (req, res) => { }; -console.log(config.get('admin:key')); - const test_user = { username : 'cool guy' }; @@ -106,7 +104,7 @@ describe('Middleware', () => { app.use(mw.admin); app.use(requestHandler) return request(app).get('/') - .query({ admin_key : config.get('admin:key') }) + .set('x-homebrew-admin', config.get('admin:key')) .expect(200) .then((res) => { const req = res.body; @@ -119,7 +117,7 @@ describe('Middleware', () => { app.get(requestHandler); app.use(Error.expressHandler); return request(app).get('/') - .query({ admin_key : 'BADUSER' }) + .set('x-homebrew-admin', 'BADADMIN') .send() .expect(401); }); diff --git a/test/search.test.js b/test/search.test.js index 058199e..04c30d9 100644 --- a/test/search.test.js +++ b/test/search.test.js @@ -17,8 +17,12 @@ describe('Brew Search', () => { describe('Searching', ()=>{ - it.skip('should return a total and a brew array', ()=>{ - + it('should return a total and a brew array', ()=>{ + return BrewData.search() + .then((result) => { + result.total.should.be.a('number'); + result.brews.should.be.an('array'); + }) }); it('should be able to search for all brews', ()=>{ @@ -32,16 +36,35 @@ describe('Brew Search', () => { }); describe('Pagniation', () => { - it.skip('should return the exact number of brews based on limit', () => { - + it('should return the exact number of brews based on limit', () => { + return BrewData.search({}, { + limit : 2 + }) + .then((result) => { + result.total.should.be.equal(_.size(BrewGen.static())); + result.brews.length.should.be.equal(2); + }) }); - it.skip('should return the correct pages when specified', () => { - + it('should return the correct pages when specified', () => { + return BrewData.search({}, { + limit : 2, + page : 1, + sort : { views : 1 } + }) + .then((result) => { + result.brews.should.have.brews('BrewA', 'BrewB'); + }) }); - it.skip('should return a partial list if on the last page', () => { - + it('should return a partial list if on the last page', () => { + return BrewData.search({}, { + limit : 3, + page : 1 + }) + .then((result) => { + result.brews.length.should.be.equal(1); + }); }); }); @@ -59,17 +82,26 @@ describe('Brew Search', () => { }); describe('Permissions', () => { - it.skip('should only fetch published brews', () => { - + it('should only fetch published brews', () => { + return BrewData.search({}, {}, false) + .then((result) => { + result.total.should.be.equal(2); + result.brews.should.have.brews('BrewB', 'BrewD'); + }) }); - it.skip('fetched brews should not have text or editId', () => { - + it('fetched brews should not have text or editId', () => { + return BrewData.search({}, {}, false) + .then((result) => { + result.brews[0].should.not.have.property('text'); + result.brews[0].should.not.have.property('editId'); + }) }); - it.skip('if admin, fetches also non-published brews, with editid', () => { - - }); - it.skip('if author, fetches also non-published brews, with editid', ()=>{ - + it('if full access, brews should have editid, but no text', () => { + return BrewData.search({}, {}, true) + .then((result) => { + result.brews[0].should.not.have.property('text'); + result.brews[0].should.have.property('editId'); + }) }); }); diff --git a/test/test.init.js b/test/test.init.js index ca80e7f..ab1567a 100644 --- a/test/test.init.js +++ b/test/test.init.js @@ -15,6 +15,10 @@ const Chai = require('chai') const log = require('loglevel'); log.setLevel(config.get('log_level')); +const jwt = require('jwt-simple'); module.exports = { - should: Chai.should() + should: Chai.should(), + getSessionToken : (userInfo) => { + return jwt.encode(userInfo, config.get('jwt_secret')); + } };