From 37464d6f601420bbb316c29db17f9435346bd629 Mon Sep 17 00:00:00 2001 From: Sergey Peshkov Date: Thu, 6 Feb 2020 12:14:58 +0300 Subject: [PATCH] feat(test): testing login middleware --- test/api/logged-in.test.js | 73 ++++++++++++++++++++++++++++++++++++++ test/scripts/generator.js | 13 ++++++- 2 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 test/api/logged-in.test.js diff --git a/test/api/logged-in.test.js b/test/api/logged-in.test.js new file mode 100644 index 00000000..21563fb2 --- /dev/null +++ b/test/api/logged-in.test.js @@ -0,0 +1,73 @@ +const { startServer, stopServer } = require('../../lib/server.js'); +const { request } = require('../scripts/helpers'); +const generator = require('../scripts/generator'); + +describe('Logged in middleware', () => { + beforeAll(async () => { + await startServer(); + }); + + afterAll(async () => { + await stopServer(); + }); + + afterEach(async () => { + await generator.clearAll(); + }); + + test('should fail if the token is not provided', async () => { + const res = await request({ + uri: '/members/me', + method: 'GET' + }); + + expect(res.statusCode).toEqual(401); + expect(res.body.success).toEqual(false); + expect(res.body).not.toHaveProperty('data'); + expect(res.body).toHaveProperty('message'); + }); + + test('should fail if the token is invalid', async () => { + const res = await request({ + uri: '/members/me', + method: 'GET', + headers: { 'X-Auth-Token': 'blablabla' }, + }); + + expect(res.statusCode).toEqual(401); + expect(res.body.success).toEqual(false); + expect(res.body).not.toHaveProperty('data'); + expect(res.body).toHaveProperty('message'); + }); + + test('should fail if the token expires', async () => { + const user = await generator.createUser({ password: 'test', mail_confirmed_at: null }); + const token = await generator.createAccessToken({ expires_at: new Date() }, user); + const res = await request({ + uri: '/members/me', + method: 'GET', + headers: { 'X-Auth-Token': token.value }, + }); + + expect(res.statusCode).toEqual(401); + expect(res.body.success).toEqual(false); + expect(res.body).not.toHaveProperty('data'); + expect(res.body).toHaveProperty('message'); + }); + + test('should succeed if everything is okay', async () => { + const user = await generator.createUser({ password: 'test', mail_confirmed_at: new Date() }); + const token = await generator.createAccessToken({}, user); + + const res = await request({ + uri: '/members/me', + method: 'GET', + headers: { 'X-Auth-Token': token.value } + }); + + expect(res.statusCode).toEqual(200); + expect(res.body.success).toEqual(true); + expect(res.body).toHaveProperty('data'); + expect(res.body).not.toHaveProperty('errors'); + }); +}); diff --git a/test/scripts/generator.js b/test/scripts/generator.js index 45a6ae28..263af649 100644 --- a/test/scripts/generator.js +++ b/test/scripts/generator.js @@ -49,11 +49,22 @@ exports.generateRefreshToken = (options = {}, user) => { return options; }; - exports.createRefreshToken = (options = {}, user = null) => { return RefreshToken.create(exports.generateRefreshToken(options, user)); }; +exports.generateAccessToken = (options = {}, user) => { + if (notSet(options.value)) options.value = faker.random.alphaNumeric(16); + if (notSet(options.expires_at)) options.expires_at = faker.date.future(); + if (user) options.user_id = user.id; + + return options; +}; + +exports.createAccessToken = (options = {}, user = null) => { + return AccessToken.create(exports.generateAccessToken(options, user)); +}; + exports.clearAll = async () => { await AccessToken.destroy({ where: {}, truncate: { cascade: true } }); await RefreshToken.destroy({ where: {}, truncate: { cascade: true } });