From ce9206f59e5f8d5658b7ba8f72e454d17c279281 Mon Sep 17 00:00:00 2001 From: Michael Jackson Date: Wed, 10 Jul 2019 13:24:27 -0700 Subject: [PATCH] Add tests for stats api --- jest.config.js | 5 +++-- modules/__mocks__/getStatsMock.js | 29 +++++++++++++++++++++++++++++ modules/__tests__/stats-test.js | 20 ++++++++++++++++++++ modules/actions/serveStats.js | 14 +++----------- modules/actions/utils/cloudflare.js | 2 +- 5 files changed, 56 insertions(+), 14 deletions(-) create mode 100644 modules/__mocks__/getStatsMock.js create mode 100644 modules/__tests__/stats-test.js diff --git a/jest.config.js b/jest.config.js index 7a8f4c7..7e67792 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,8 +1,9 @@ module.exports = { moduleNameMapper: { - 'entry-manifest': '/modules/__mocks__/entryManifest.js', + '\\.css$': '/modules/__mocks__/styleMock.js', '\\.png$': '/modules/__mocks__/imageMock.js', - '\\.css$': '/modules/__mocks__/styleMock.js' + 'entry-manifest': '/modules/__mocks__/entryManifest.js', + 'getStats\\.js': '/modules/__mocks__/getStatsMock.js' }, testMatch: ['**/__tests__/*-test.js'], testURL: 'http://localhost/' diff --git a/modules/__mocks__/getStatsMock.js b/modules/__mocks__/getStatsMock.js new file mode 100644 index 0000000..6f4b006 --- /dev/null +++ b/modules/__mocks__/getStatsMock.js @@ -0,0 +1,29 @@ +export default function getStats(since, until) { + const stats = { + since: since, + until: until, + requests: { + all: 0, + cached: 0, + country: 0, + status: 0 + }, + bandwidth: { + all: 0, + cached: 0, + country: 0 + }, + threats: { + all: 0, + country: 0 + }, + uniques: { + all: 0 + } + }; + + return Promise.resolve({ + timeseries: [stats], + totals: stats + }); +} diff --git a/modules/__tests__/stats-test.js b/modules/__tests__/stats-test.js new file mode 100644 index 0000000..6e090ad --- /dev/null +++ b/modules/__tests__/stats-test.js @@ -0,0 +1,20 @@ +import request from 'supertest'; + +import createServer from '../createServer.js'; + +describe('A request for stats', () => { + let server; + beforeEach(() => { + server = createServer(); + }); + + it('returns a 200 JSON response', done => { + request(server) + .get('/api/stats') + .end((err, res) => { + expect(res.statusCode).toBe(200); + expect(res.headers['content-type']).toMatch(/\bapplication\/json\b/); + done(); + }); + }); +}); diff --git a/modules/actions/serveStats.js b/modules/actions/serveStats.js index a51e2e5..f773a30 100644 --- a/modules/actions/serveStats.js +++ b/modules/actions/serveStats.js @@ -1,4 +1,4 @@ -import { subDays, startOfDay, startOfSecond } from 'date-fns'; +import { subDays, startOfDay } from 'date-fns'; import getStats from './utils/getStats.js'; @@ -20,18 +20,10 @@ export default function serveStats(req, res) { since = subDays(until, 30); } } else { - if (!req.query.since) { - return res.status(403).send({ error: 'Missing ?since query parameter' }); - } - - if (!req.query.until) { - return res.status(403).send({ error: 'Missing ?until query parameter' }); - } - - since = new Date(req.query.since); until = req.query.until ? new Date(req.query.until) - : startOfSecond(new Date()); + : startOfDay(new Date()); + since = req.query.since ? new Date(req.query.since) : subDays(until, 1); } if (isNaN(since.getTime())) { diff --git a/modules/actions/utils/cloudflare.js b/modules/actions/utils/cloudflare.js index c3ff2c2..f78e2a1 100644 --- a/modules/actions/utils/cloudflare.js +++ b/modules/actions/utils/cloudflare.js @@ -4,7 +4,7 @@ const cloudflareURL = 'https://api.cloudflare.com/client/v4'; const cloudflareEmail = process.env.CLOUDFLARE_EMAIL; const cloudflareKey = process.env.CLOUDFLARE_KEY; -if (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test') { +if (process.env.NODE_ENV !== 'production') { if (!cloudflareEmail) { throw new Error('Missing the $CLOUDFLARE_EMAIL environment variable'); }