diff --git a/.eslintrc.js b/.eslintrc.js index 2a113f5..79b103e 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -24,6 +24,8 @@ module.exports = { rules: { + 'arrow-parens': [ 'error', 'always' ], + 'arrow-spacing': [ 'error' ], 'array-bracket-newline': [ 'error', 'consistent' ], 'array-element-newline': [ 'error', 'consistent' ], @@ -62,6 +64,7 @@ module.exports = { 'no-multi-str': [ 'off' ], 'no-var': [ 'error' ], + 'object-shorthand': [ 'warn' ], 'prefer-const': [ 'error' ] } // Rules. diff --git a/src/app.js b/src/app.js index c834a1a..3a20811 100644 --- a/src/app.js +++ b/src/app.js @@ -8,6 +8,8 @@ * @author Tim Malone */ +/* global jest */ + 'use strict'; const pg = require( 'pg' ), @@ -94,7 +96,7 @@ const isValidEvent = ( event ) => { * 'operation' being done on it - expressed as a valid mathematical operation * (i.e. + or -). */ -const extractEventData = ( text => { +const extractEventData = ( ( text ) => { const data = text.match( /@([A-Za-z0-9]+?)>?\s*([-+]{2}|—{1})/ ); if ( ! data ) { @@ -232,7 +234,7 @@ const handleEvent = async( event ) => { * @param {express.req} request An Express request. See https://expressjs.com/en/4x/api.html#req. * @return {void} */ -const logRequest = request => { +const logRequest = ( request ) => { console.log( request.ip + ' ' + request.method + ' ' + request.path + ' ' + request.headers['user-agent'] ); @@ -252,7 +254,7 @@ const logRequest = request => { * @return {object|bool} If invalid, an error object containing an 'error' with HTTP status code * and a 'message' to return to the user; otherwise, if valid, returns true. */ -const validateToken = ( suppliedToken, serverToken ) =>{ +const validateToken = ( suppliedToken, serverToken ) => { // Sanity check for bad values on the server side - either empty, or still set to the default. if ( ! serverToken.trim() || 'xxxxxxxxxxxxxxxxxxxxxxxx' === serverToken ) { @@ -335,14 +337,14 @@ const handlePost = ( request, response ) => { }; // HandlePost. module.exports = { - setSlackClient: setSlackClient, - isValidEvent: isValidEvent, - extractEventData: extractEventData, - respondToUser: respondToUser, - updateScore: updateScore, - handleEvent: handleEvent, - logRequest: logRequest, - validateToken: validateToken, - handleGet: handleGet, - handlePost: handlePost + setSlackClient, + isValidEvent, + extractEventData, + respondToUser, + updateScore, + handleEvent, + logRequest, + validateToken, + handleGet, + handlePost }; diff --git a/src/messages.js b/src/messages.js index 81ae66c..3621077 100644 --- a/src/messages.js +++ b/src/messages.js @@ -147,6 +147,6 @@ const getRandomMessage = ( operation, item, score ) => { }; // GetRandomMessage. module.exports = { - getRandomMessage: getRandomMessage, - messages: messages + getRandomMessage, + messages }; diff --git a/tests/_config.js b/tests/_config.js index 10519fb..ec939ff 100644 --- a/tests/_config.js +++ b/tests/_config.js @@ -10,7 +10,7 @@ const PORT = process.env.PORT || 80, module.exports = { - PORT: PORT, + PORT, scoresTableName: 'scores', diff --git a/tests/_runner.js b/tests/_runner.js index d9a31e1..934c212 100644 --- a/tests/_runner.js +++ b/tests/_runner.js @@ -5,6 +5,8 @@ * @author Tim Malone */ +/* global jest */ + 'use strict'; const objectAssignDeep = require( 'object-assign-deep' ), @@ -53,7 +55,7 @@ const runner = async( text, options, callback ) => { token: SLACK_VERIFICATION_TOKEN, event: { type: 'message', - text: text + text } }; @@ -61,14 +63,14 @@ const runner = async( text, options, callback ) => { body = objectAssignDeep( body, options.extraBody ); } - const request = http.request( config.defaultRequestOptions, response => { + const request = http.request( config.defaultRequestOptions, ( response ) => { response .on( 'data', () => {}) .on( 'end', async() => { // Wait for the operations after the HTTP requests returns to be completed before testing. - await new Promise( resolve => setTimeout( resolve, HTTP_RETURN_DELAY ) ); + await new Promise( ( resolve ) => setTimeout( resolve, HTTP_RETURN_DELAY ) ); // If we weren't provided with an itemToCheck, return to the callback now, passing it an // instance of a dbClient if it accepts at least one argument. diff --git a/tests/app.js b/tests/app.js index 609dade..5fdfb37 100644 --- a/tests/app.js +++ b/tests/app.js @@ -5,6 +5,8 @@ * @author Tim Malone */ +/* global jest */ + 'use strict'; const app = require( '../src/app' ), @@ -196,7 +198,7 @@ describe( 'handleEvent', () => { expect.hasAssertions(); - return app.handleEvent( event ).then( data => { + return app.handleEvent( event ).then( ( data ) => { expect( data ).toBe( false ); }); }); diff --git a/tests/e2e-tests.js b/tests/e2e-tests.js index 78c76ab..6e781e5 100644 --- a/tests/e2e-tests.js +++ b/tests/e2e-tests.js @@ -5,6 +5,8 @@ * @author Tim Malone */ +/* global jest */ + 'use strict'; /**************************************************************** @@ -40,7 +42,7 @@ beforeAll( async() => { await dbClient.query( 'DROP TABLE IF EXISTS ' + config.scoresTableName ); await dbClient.release(); - return new Promise( resolve => { + return new Promise( ( resolve ) => { listener = require( '../' )({ slack: slackClientMock }); listener.on( 'listening', () => { resolve(); @@ -137,7 +139,7 @@ describe( 'The database', () => { const user = 'U00000100', options = { itemToCheck: user, - extraBody: { event: { user: user } } + extraBody: { event: { user } } }; runner( '<@' + user + '>++', options, ( result ) => { @@ -152,7 +154,7 @@ describe( 'The database', () => { const user = 'U00000300', options = { itemToCheck: user, - extraBody: { event: { user: user } } + extraBody: { event: { user } } }; runner( '<@' + user + '>++', options, ( result ) => { @@ -167,7 +169,7 @@ describe( 'The database', () => { const user = 'U00000200', options = { itemToCheck: user, - extraBody: { event: { user: user } } + extraBody: { event: { user } } }; runner( '<@' + user + '>--', options, ( result ) => { @@ -182,7 +184,7 @@ describe( 'The database', () => { const user = 'U00000400', options = { itemToCheck: user, - extraBody: { event: { user: user } } + extraBody: { event: { user } } }; runner( '<@' + user + '>--', options, ( result ) => { @@ -234,7 +236,7 @@ describe( 'Slack messaging', () => { expect.hasAssertions(); const user = 'U00000100', options = { - extraBody: { event: { user: user } } + extraBody: { event: { user } } }; slackClientMock.chat.postMessage.mockClear(); @@ -447,14 +449,14 @@ describe( 'Slack messaging', () => { expect.hasAssertions(); const channel = 'C00000000', - options = { extraBody: { event: { channel: channel } } }; + options = { extraBody: { event: { channel } } }; slackClientMock.chat.postMessage.mockClear(); runner( '@SomeRandom++', options, () => { expect( slackClientMock.chat.postMessage ) .toHaveBeenCalledTimes( 1 ) - .toHaveBeenCalledWith( expect.objectContaining({ channel: channel }) ); + .toHaveBeenCalledWith( expect.objectContaining({ channel }) ); done(); diff --git a/tests/integration-tests.js b/tests/integration-tests.js index 97869e6..700eb08 100644 --- a/tests/integration-tests.js +++ b/tests/integration-tests.js @@ -7,6 +7,8 @@ * @author Tim Malone */ +/* global jest */ + 'use strict'; /**************************************************************** @@ -53,13 +55,13 @@ beforeEach( () => { describe( 'The Express server', () => { - it( 'returns HTTP 200 for GET operations', done => { + it( 'returns HTTP 200 for GET operations', ( done ) => { expect.hasAssertions(); const listener = require( '../' )(); listener.on( 'listening', () => { - http.get( 'http://localhost:' + config.PORT, response => { + http.get( 'http://localhost:' + config.PORT, ( response ) => { listener.close(); expect( response.statusCode ).toBe( 200 ); done(); @@ -68,17 +70,17 @@ describe( 'The Express server', () => { }); - it( 'correctly returns the Slack event challenge value', done => { + it( 'correctly returns the Slack event challenge value', ( done ) => { expect.assertions( 2 ); const listener = require( '../' )(); const requestBody = { challenge: Math.random().toString() }; listener.on( 'listening', () => { - const request = http.request( config.defaultRequestOptions, response => { + const request = http.request( config.defaultRequestOptions, ( response ) => { let data = ''; - response.on( 'data', chunk => { + response.on( 'data', ( chunk ) => { data += chunk; }).on( 'end', () => { listener.close(); @@ -94,14 +96,14 @@ describe( 'The Express server', () => { }); }); - it( 'returns HTTP 500 when no verification token is set', done => { + it( 'returns HTTP 500 when no verification token is set', ( done ) => { expect.hasAssertions(); delete process.env.SLACK_VERIFICATION_TOKEN; const listener = require( '../' )(); listener.on( 'listening', () => { - http.request( config.defaultRequestOptions, response => { + http.request( config.defaultRequestOptions, ( response ) => { listener.close(); expect( response.statusCode ).toBe( 500 ); done(); @@ -110,14 +112,14 @@ describe( 'The Express server', () => { }); - it( 'returns HTTP 500 when verification token is still set to the default', done => { + it( 'returns HTTP 500 when verification token is still set to the default', ( done ) => { expect.hasAssertions(); process.env.SLACK_VERIFICATION_TOKEN = 'xxxxxxxxxxxxxxxxxxxxxxxx'; const listener = require( '../' )(); listener.on( 'listening', () => { - http.request( config.defaultRequestOptions, response => { + http.request( config.defaultRequestOptions, ( response ) => { listener.close(); expect( response.statusCode ).toBe( 500 ); done(); @@ -126,7 +128,7 @@ describe( 'The Express server', () => { }); - it( 'returns HTTP 403 when verification token is incorrect', done => { + it( 'returns HTTP 403 when verification token is incorrect', ( done ) => { expect.hasAssertions(); const listener = require( '../' )(); @@ -134,7 +136,7 @@ describe( 'The Express server', () => { listener.on( 'listening', () => { - const request = http.request( config.defaultRequestOptions, response => { + const request = http.request( config.defaultRequestOptions, ( response ) => { listener.close(); expect( response.statusCode ).toBe( 403 ); done(); diff --git a/tests/messages.js b/tests/messages.js index b087336..2e233d5 100644 --- a/tests/messages.js +++ b/tests/messages.js @@ -7,6 +7,8 @@ * @author Tim Malone */ +/* global jest */ + 'use strict'; const messages = require( '../src/messages' );