import should from 'should/as-function'; import TestHelper from "../test/helper"; import HelpModel from '../models/help'; describe('/help', () => { let server; before(done => TestHelper.before(done)); beforeEach(done => server = TestHelper.beforeEach(server, done)); afterEach(done => TestHelper.afterEach(server, done)); after(done => TestHelper.after(done)); describe('GET /help/{key}', () => { it('returns the required text', done => { TestHelper.request(server, done, { method: 'get', url: '/help/%2Fsamples', auth: {basic: 'janedoe'}, httpStatus: 200, res: {text: 'Samples help', level: 'read'} }); }); it('returns the required text without authorization if allowed', done => { TestHelper.request(server, done, { method: 'get', url: '/help/%2Fdocumentation', auth: {basic: 'janedoe'}, httpStatus: 200, res: {text: 'Documentation help', level: 'none'} }); }); it('returns 404 for an invalid key', done => { TestHelper.request(server, done, { method: 'get', url: '/help/documentation/database', httpStatus: 404 }); }); it('returns 404 for an unknown key', done => { TestHelper.request(server, done, { method: 'get', url: '/help/xxx', auth: {basic: 'janedoe'}, httpStatus: 404 }); }); it('returns 403 for a text with a higher level than given', done => { TestHelper.request(server, done, { method: 'get', url: '/help/%2Fmodels', auth: {basic: 'janedoe'}, httpStatus: 403 }); }); it('rejects an API key', done => { TestHelper.request(server, done, { method: 'get', url: '/help/%2Fsamples', auth: {api: 'janedoe'}, httpStatus: 401, }); }); it('rejects an unauthorized request if a level is given', done => { TestHelper.request(server, done, { method: 'get', url: '/help/%2Fsamples', httpStatus: 401 }); }); }); describe('POST /help/{key}', () => { it('changes the required text', done => { TestHelper.request(server, done, { method: 'post', url: '/help/%2Fsamples', auth: {basic: 'admin'}, httpStatus: 200, req: {text: 'New samples help', level: 'write'} }).end((err, res) => { if (err) return done(err); should(res.body).be.eql({status: 'OK'}); HelpModel.find({key: '/samples'}).lean().exec((err, data) => { if (err) return done(err); should(data).have.lengthOf(1); should(data[0]).have.only.keys('_id', 'key', 'text', 'level'); should(data[0]).property('key', '/samples'); should(data[0]).property('text', 'New samples help'); should(data[0]).property('level', 'write'); done(); }); }); }); it('saves a new text', done => { TestHelper.request(server, done, { method: 'post', url: '/help/%2Fmaterials', auth: {basic: 'admin'}, httpStatus: 200, req: {text: 'Materials help', level: 'dev'} }).end((err, res) => { if (err) return done(err); should(res.body).be.eql({status: 'OK'}); HelpModel.find({key: '/materials'}).lean().exec((err, data) => { if (err) return done(err); should(data).have.lengthOf(1); should(data[0]).have.only.keys('_id', 'key', 'text', 'level', '__v'); should(data[0]).property('key', '/materials'); should(data[0]).property('text', 'Materials help'); should(data[0]).property('level', 'dev'); done(); }); }); }); it('rejects an API key', done => { TestHelper.request(server, done, { method: 'post', url: '/help/%2Fsamples', auth: {key: 'admin'}, httpStatus: 401, req: {text: 'New samples help', level: 'write'} }); }); it('rejects a write user', done => { TestHelper.request(server, done, { method: 'post', url: '/help/%2Fsamples', auth: {basic: 'janedoe'}, httpStatus: 403, req: {text: 'New samples help', level: 'write'} }); }); it('rejects an unauthorized request', done => { TestHelper.request(server, done, { method: 'post', url: '/help/%2Fsamples', httpStatus: 401, req: {text: 'New samples help', level: 'write'} }); }); }); describe('DELETE /help/{key}', () => { it('deletes the required entry', done => { TestHelper.request(server, done, { method: 'delete', url: '/help/%2Fsamples', auth: {basic: 'admin'}, httpStatus: 200 }).end((err, res) => { if (err) return done(err); should(res.body).be.eql({status: 'OK'}); HelpModel.find({key: '/materials'}).lean().exec((err, data) => { if (err) return done(err); should(data).have.lengthOf(0); done(); }); }); }); it('rejects an API key', done => { TestHelper.request(server, done, { method: 'delete', url: '/help/%2Fsamples', auth: {key: 'admin'}, httpStatus: 401 }); }); it('rejects a write user', done => { TestHelper.request(server, done, { method: 'delete', url: '/help/%2Fsamples', auth: {basic: 'janedoe'}, httpStatus: 403 }); }); it('rejects an unauthorized request', done => { TestHelper.request(server, done, { method: 'delete', url: '/help/%2Fsamples', httpStatus: 401 }); }); }); });