diff --git a/src/app.js b/src/app.js index 08b72a0..7ee2dc1 100644 --- a/src/app.js +++ b/src/app.js @@ -154,10 +154,7 @@ module.exports = (config) => { app.post(config['webhook']['endpoint'], (req, res) => { if (config['modules']['webhook']) { if (config['webhook']['signature_header'] && config['webhook']['secret']) { - const payload = JSON.stringify(req.body); - if (!payload) { - return res.sendStatus(403); - } + const payload = JSON.stringify(req.body) || ''; const hmac = crypto.createHmac('sha1', config['webhook']['secret']); const digest = 'sha1=' + hmac.update(payload).digest('hex'); const checksum = req.headers[config['webhook']['signature_header']]; diff --git a/test/app.test.js b/test/app.test.js index bea34ec..da9f2c7 100644 --- a/test/app.test.js +++ b/test/app.test.js @@ -13,19 +13,24 @@ const config = require('../src/config')(); config['test'] = true; config['data_dir'] = dataDir; +config['webhook']['endpoint'] = '/webhooktest'; +config['rss']['endpoint'] = '/rsstest'; +config['rss']['length'] = 2; config['home']['index'] = testIndex; config['home']['error'] = testError; config['article']['template'] = testTemplate; -config['home']['hidden'].push('.test'); -config['rss']['endpoint'] = '/rsstest'; -config['rss']['length'] = 2; -config['webhook']['endpoint'] = '/webhooktest'; -config['access_log'] = path.join(dataDir, 'access.log'); -config['error_log'] = path.join(dataDir, 'error.log'); const app = require('../src/app')(config); beforeEach((done, fail) => { + config['data_dir'] = dataDir; + config['article']['index'] = 'index.md'; + config['home']['hidden'] = ['.ejs', '.test']; + config['access_log'] = ''; + config['error_log'] = ''; + config['modules']['rss'] = true; + config['modules']['webhook'] = true; + utils.deleteFolderSync(dataDir); fs.mkdirSync(dataDir); app.reload(done, fail); @@ -37,17 +42,22 @@ afterAll(() => { } }); +describe('Test reload', () => { + test('reload fail', (done, fail) => { + config['data_dir'] = ''; + app.reload(fail, done); + }); +}); + describe('Test request logging', () => { test('test no log', (done) => { - const tmp = config['access_log']; - config['access_log'] = ''; request(app).get('/rsstest').then(() => { - config['access_log'] = tmp; expect(fs.existsSync(path.join(dataDir, 'access.log'))).toBe(false); done(); }); }); test('test get 200', (done) => { + config['access_log'] = path.join(dataDir, 'access.log'); request(app).get('/rsstest').then(() => { fs.readFile(path.join(dataDir, 'access.log'), {encoding: 'UTF-8'}, (err, data) => { expect(err).toBeNull(); @@ -57,6 +67,7 @@ describe('Test request logging', () => { }); }); test('test post 400', (done) => { + config['access_log'] = path.join(dataDir, 'access.log'); request(app).post('/rsstest').then(() => { fs.readFile(path.join(dataDir, 'access.log'), {encoding: 'UTF-8'}, (err, data) => { expect(err).toBeNull(); @@ -66,6 +77,7 @@ describe('Test request logging', () => { }); }); test('test 2 requests', (done) => { + config['access_log'] = path.join(dataDir, 'access.log'); request(app).get('/rss').then(() => { request(app).post('/rsstest').then(() => { fs.readFile(path.join(dataDir, 'access.log'), {encoding: 'UTF-8'}, (err, data) => { @@ -81,22 +93,16 @@ describe('Test request logging', () => { describe('Test error logging', () => { test('test no log', (done) => { - const tmp = config['home']['hidden']; config['home']['hidden'] = null; - const tmp2 = config['errpr_log']; - config['error_log'] = ''; request(app).get('/somefile.txt').then(() => { - config['home']['hidden'] = tmp; - config['error_log'] = tmp2; expect(fs.existsSync(path.join(dataDir, 'error.log'))).toBe(false); done(); }); }); test('test null error ', (done) => { - const tmp = config['home']['hidden']; config['home']['hidden'] = null; + config['error_log'] = path.join(dataDir, 'error.log'); request(app).get('/somefile.txt').then(() => { - config['home']['hidden'] = tmp; fs.readFile(path.join(dataDir, 'error.log'), {encoding: 'UTF-8'}, (err, data) => { expect(err).toBeNull(); const start = data.split('\n').slice(0, 2).join('\n'); @@ -123,6 +129,13 @@ describe('Test root path', () => { done(); }); }); + test('500 render error', (done) => { + fs.writeFileSync(path.join(dataDir, testIndex), 'articles <%= null.length %>'); + request(app).get('/').then((response) => { + expect(response.statusCode).toBe(500); + done(); + }); + }); test('200 no articles', (done) => { fs.writeFileSync(path.join(dataDir, testIndex), 'articles <%= articles.length %>'); request(app).get('/').then((response) => { @@ -156,7 +169,6 @@ describe('Test RSS feed', () => { config['modules']['rss'] = false; request(app).get('/rsstest').then((response) => { expect(response.statusCode).toBe(404); - config['modules']['rss'] = true; done(); }); }); @@ -168,6 +180,16 @@ describe('Test RSS feed', () => { done(); }); }); + test('200 rss cache', (done) => { + request(app).get('/rsstest').then(() => { + request(app).get('/rsstest').then((response) => { + expect(response.statusCode).toBe(200); + expect(response.text.length).toBeGreaterThan(0); + expect(response.text.split('').length).toBe(1); + done(); + }); + }); + }); test('200 2 rss items', (done, fail) => { utils.createEmptyDirs([ path.join(dataDir, '2019', '05', '05'), @@ -213,7 +235,6 @@ describe('Test webhook', () => { config['modules']['webhook'] = false; request(app).post('/webhooktest').then((response) => { expect(response.statusCode).toBe(400); - config['modules']['webhook'] = true; done(); }); }); @@ -244,14 +265,6 @@ describe('Test webhook', () => { done(); }); }); - test('403 no payload', (done) => { - config['webhook']['signature_header'] = 'testheader'; - config['webhook']['secret'] = 'testvalue'; - request(app).post('/webhooktest').then((response) => { - expect(response.statusCode).toBe(403); - done(); - }); - }); test('403 wrong secret', (done) => { config['webhook']['signature_header'] = 'testheader'; config['webhook']['secret'] = 'testvalue'; @@ -282,6 +295,19 @@ describe('Test articles rendering', () => { }); }); + test('500 no index', (done, fail) => { + utils.createEmptyDirs([path.join(dataDir, '2019', '05', '05'),]); + fs.writeFileSync(path.join(dataDir, '2019', '05', '05', 'index.md'), '# Hello'); + fs.writeFileSync(path.join(dataDir, testTemplate), '<%- article.content %><%- `reload` %>'); + app.reload(() => { + config['article']['index'] = 'invalid.md'; + request(app).get('/2019/05/05/hello/').then((response) => { + expect(response.statusCode).toBe(500); + done(); + }); + }, fail); + }); + test('500 no template', (done, fail) => { utils.createEmptyDirs([path.join(dataDir, '2019', '05', '05'),]); fs.writeFileSync(path.join(dataDir, '2019', '05', '05', 'index.md'), '# Hello'); diff --git a/test/file_walker.test.js b/test/file_walker.test.js index bf30e49..55ff7ce 100644 --- a/test/file_walker.test.js +++ b/test/file_walker.test.js @@ -22,6 +22,7 @@ const config = { const fw = require('../src/file_walker')(config); beforeEach(() => { + config['data_dir'] = dataDir; utils.deleteFolderSync(dataDir); fs.mkdirSync(dataDir); }); @@ -193,7 +194,6 @@ describe('Test article fetching', () => { fw.fetchArticles((err, list) => { expect(err).not.toBeNull(); expect(list).not.toBeDefined(); - config['data_dir'] = dataDir; done(); }); }); diff --git a/test/renderer.test.js b/test/renderer.test.js index c2912eb..fff5723 100644 --- a/test/renderer.test.js +++ b/test/renderer.test.js @@ -19,6 +19,7 @@ const config = { const renderer = require('../src/renderer')(config); beforeEach(() => { + config['modules']['prism'] = true; utils.deleteFolderSync(dataDir); fs.mkdirSync(dataDir); }); @@ -61,7 +62,6 @@ test('no prism', (done) => { renderer.render(file, (err, html) => { expect(err).toBeNull(); expect(html).toBe('
print("hello")\n
\n
print("hello")\n
'); - config['modules']['prism'] = true; done(); }); });