184 lines
5.6 KiB
TypeScript
184 lines
5.6 KiB
TypeScript
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
|
|
});
|
|
});
|
|
});
|
|
}); |