From 477213e0b1ea7c5ab8b894d5d5e794fd89af2d62 Mon Sep 17 00:00:00 2001 From: Parth Shah Date: Thu, 2 Mar 2017 10:38:53 -0800 Subject: [PATCH] Revert "fix lint errors" --- .eslintignore | 5 --- .eslintrc | 15 ------- config/sample.local.js | 56 +++++++++++------------ migrations/sync.js | 16 +++---- newrelic.js | 16 +++---- package.json | 6 +-- src/events/projects/index.js | 4 +- src/index.js | 3 +- src/middlewares/checkRole.js | 3 +- src/mocks/addBillingAccount.js | 5 +-- src/mocks/addCopilot.js | 5 +-- src/mocks/createProject.js | 5 +-- src/mocks/direct.js | 57 +++++++++++------------- src/models/project.js | 16 +++---- src/permissions/project.delete.js | 4 +- src/permissions/project.edit.js | 5 +-- src/permissions/project.view.js | 6 +-- src/permissions/projectMember.delete.js | 7 ++- src/routes/attachments/create.js | 3 +- src/routes/attachments/create.spec.js | 9 ++-- src/routes/attachments/delete.js | 5 ++- src/routes/attachments/delete.spec.js | 37 ++++++++------- src/routes/attachments/update.js | 10 ++--- src/routes/attachments/update.spec.js | 37 ++++++++------- src/routes/index.js | 1 - src/routes/projectMembers/create.js | 8 ++-- src/routes/projectMembers/create.spec.js | 4 +- src/routes/projectMembers/delete.js | 6 +-- src/routes/projectMembers/delete.spec.js | 23 ++++------ src/routes/projectMembers/update.js | 18 ++++---- src/routes/projectMembers/update.spec.js | 11 +++-- src/routes/projects/create.spec.js | 3 +- src/routes/projects/delete.js | 7 ++- src/routes/projects/delete.spec.js | 18 ++++++-- src/routes/projects/get.js | 4 +- src/routes/projects/get.spec.js | 4 +- src/routes/projects/list.js | 2 +- src/routes/projects/list.spec.js | 22 ++++----- src/routes/projects/update.js | 6 +-- src/routes/projects/update.spec.js | 14 +++--- src/services/fileService.js | 14 +++--- src/services/index.js | 5 --- src/tests/seed.js | 6 +-- src/tests/util.js | 1 - src/util.js | 46 +++++++++---------- 45 files changed, 258 insertions(+), 300 deletions(-) delete mode 100644 .eslintignore diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index c7f96f7b..00000000 --- a/.eslintignore +++ /dev/null @@ -1,5 +0,0 @@ -node_modules -dist -.ebextensions -.elasticbeanstalk -coverage \ No newline at end of file diff --git a/.eslintrc b/.eslintrc index ad8484f2..348ce0f0 100644 --- a/.eslintrc +++ b/.eslintrc @@ -8,21 +8,6 @@ "mocha": true }, "rules": { - "no-param-reassign": 0, - "global-require": 0, - "func-names": 0, - "no-mixed-operators": 0, - "consistent-return": 0, - "no-unused-expressions": 0, - "newline-per-chained-call": 0, - "no-underscore-dangle": 0, - "import/no-extraneous-dependencies": ["error", {"devDependencies": true, "optionalDependencies": false, "peerDependencies": false}], - "max-len": ["error", { - "code": 120, - "ignoreComments": true, - "ignoreTrailingComments": true, - "tabWidth": 2 - }], "valid-jsdoc": ["error", { "requireReturn": true, "requireReturnType": true, diff --git a/config/sample.local.js b/config/sample.local.js index ae17f31e..19441b79 100644 --- a/config/sample.local.js +++ b/config/sample.local.js @@ -1,34 +1,34 @@ // force using test.json for unit tests -let config; +var config if (process.env.NODE_ENV === 'test') { - config = require('./test.json'); + config = require('./test.json') } else { config = { - authSecret: 'secret', - logLevel: 'debug', - captureLogs: 'false', - logentriesToken: '', - rabbitmqURL: 'amqp://dockerhost:5672', - fileServiceEndpoint: 'https://api.topcoder-dev.com/v3/files/', - topicServiceEndpoint: 'https://api.topcoder-dev.com/v4/topics/', - directProjectServiceEndpoint: 'https://api.topcoder-dev.com/v3/direct', - userServiceUrl: 'https://api.topcoder-dev.com/v3/users', - connectProjectsUrl: 'https://connect.topcoder-dev.com/projects/', - salesforceLead: { - webToLeadUrl: 'https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8', - orgId: '00D2C0000000dO6', - projectNameFieldId: 'title', - projectDescFieldId: 'description', - projectLinkFieldId: 'URL', - projectIdFieldId: '00N2C000000Vxxx', - }, - dbConfig: { - masterUrl: 'postgres://coder:mysecretpassword@dockerhost:5432/projectsdb', - maxPoolSize: 50, - minPoolSize: 4, - idleTimeout: 1000, - }, - }; + "authSecret": "secret", + "logLevel": "debug", + "captureLogs": "false", + "logentriesToken": "", + "rabbitmqURL": "amqp://dockerhost:5672", + "fileServiceEndpoint": "https://api.topcoder-dev.com/v3/files/", + "topicServiceEndpoint": "https://api.topcoder-dev.com/v4/topics/", + "directProjectServiceEndpoint": "https://api.topcoder-dev.com/v3/direct", + "userServiceUrl": "https://api.topcoder-dev.com/v3/users", + "connectProjectsUrl": "https://connect.topcoder-dev.com/projects/", + "salesforceLead" : { + "webToLeadUrl": 'https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8', + "orgId": "00D2C0000000dO6", + "projectNameFieldId": "title", + "projectDescFieldId": "description", + "projectLinkFieldId": "URL", + "projectIdFieldId" : "00N2C000000Vxxx" + }, + "dbConfig": { + "masterUrl": "postgres://coder:mysecretpassword@dockerhost:5432/projectsdb", + "maxPoolSize": 50, + "minPoolSize": 4, + "idleTimeout": 1000 + } + } } -module.exports = config; +module.exports = config diff --git a/migrations/sync.js b/migrations/sync.js index f682c6b0..5b6f79c1 100644 --- a/migrations/sync.js +++ b/migrations/sync.js @@ -1,20 +1,20 @@ +'use strict' + /** * Sync the database models to db tables. */ -import winston from 'winston'; - /** * Make sure we are in development mode * @type {String} */ // process.env.NODE_ENV = 'development' -require('../dist/models').default.sequelize.sync({ force: true }) +require('./dist/models').default.sequelize.sync({ force: true }) .then(() => { - winston.info('Database synced successfully'); - process.exit(); + console.log('Database synced successfully') + process.exit() }).catch((err) => { - winston.error('Error syncing database', err); - process.exit(1); - }); + console.error('Error syncing database', err) + process.exit(1) + }) diff --git a/newrelic.js b/newrelic.js index c207db64..2694e216 100644 --- a/newrelic.js +++ b/newrelic.js @@ -1,4 +1,4 @@ - +'use strict' /** * New Relic agent configuration. @@ -6,13 +6,13 @@ * See lib/config.defaults.js in the agent distribution for a more complete * description of configuration variables and their potential values. */ -let appName = 'tc-projects-service'; +var appName = "tc-projects-service" if (process.env.NODE_ENV === 'development') { - appName += '-dev'; + appName += "-dev" } else if (process.env.NODE_ENV === 'qa') { - appName += '-qa'; + appName += "-qa" } else { - appName += '-prod'; + appName += '-prod' } exports.config = { @@ -30,6 +30,6 @@ exports.config = { * issues with the agent, 'info' and higher will impose the least overhead on * production applications. */ - level: 'info', - }, -}; + level: 'info' + } +} diff --git a/package.json b/package.json index 81c6069e..62f41d39 100644 --- a/package.json +++ b/package.json @@ -9,8 +9,7 @@ "scripts": { "build": "babel src -d dist --presets es2015", "sync": "node migrations/sync.js", - "lint": "./node_modules/.bin/eslint .", - "lint:fix": "./node_modules/.bin/eslint . --fix || true", + "lint": "./node_modules/.bin/eslint src", "prestart": "npm run -s build", "start": "node dist", "start:dev": "NODE_ENV=local PORT=8001 nodemon -w src --exec \"babel-node src --presets es2015\" | ./node_modules/.bin/bunyan", @@ -48,8 +47,7 @@ "pg": "^4.5.5", "pg-native": "^1.10.0", "sequelize": "^3.23.0", - "tc-core-library-js": "^1.0.8", - "winston": "^2.3.1" + "tc-core-library-js": "^1.0.8" }, "devDependencies": { "babel-cli": "^6.9.0", diff --git a/src/events/projects/index.js b/src/events/projects/index.js index 1cf66edf..c2499b18 100644 --- a/src/events/projects/index.js +++ b/src/events/projects/index.js @@ -1,4 +1,6 @@ - +import config from 'config'; +import querystring from 'querystring'; +import util from '../../util'; /** * Creates a lead in salesforce for the connect project. diff --git a/src/index.js b/src/index.js index 41304c76..505da7a2 100644 --- a/src/index.js +++ b/src/index.js @@ -1,5 +1,7 @@ +import models from './models'; + // include newrelic if (process.env.NODE_ENV !== 'test' && process.env.NODE_ENV !== 'local') { require('newrelic'); @@ -9,7 +11,6 @@ const app = require('./app'); /** * Handle server shutdown gracefully - * @return {Void} This function returns void */ function gracefulShutdown() { app.services.pubsub.disconnect() diff --git a/src/middlewares/checkRole.js b/src/middlewares/checkRole.js index a903d896..1144e647 100644 --- a/src/middlewares/checkRole.js +++ b/src/middlewares/checkRole.js @@ -7,12 +7,11 @@ * @version 1.0 */ import config from 'config'; - const util = require('tc-core-library-js').util(config); module.exports = function (roleName) { return function (req, res, next) { - if (!req.authUser || !Array.isArray(req.authUser.roles) || req.authUser.roles.indexOf(roleName) === -1) { + if (!req.authUser || !Array.isArray(req.authUser.roles) || req.authUser.roles.indexOf(roleName) == -1) { return res.status(403) .json(util.wrapErrorResponse(req.id, 403, 'You are not allowed to perform this action.')); } diff --git a/src/mocks/addBillingAccount.js b/src/mocks/addBillingAccount.js index 615bb528..3af425e9 100644 --- a/src/mocks/addBillingAccount.js +++ b/src/mocks/addBillingAccount.js @@ -1,6 +1,3 @@ -/* eslint-disable max-len */ -import winston from 'winston'; - const http = require('https'); const options = { @@ -26,7 +23,7 @@ const req = http.request(options, (res) => { res.on('end', () => { const body = Buffer.concat(chunks); - winston.info(body.toString()); + console.log(body.toString()); }); }); req.write('{\n "billingAccountId": 123456789\n}'); diff --git a/src/mocks/addCopilot.js b/src/mocks/addCopilot.js index 622f5ed5..c6b17ec7 100644 --- a/src/mocks/addCopilot.js +++ b/src/mocks/addCopilot.js @@ -1,6 +1,3 @@ -/* eslint-disable max-len */ -import winston from 'winston'; - const http = require('https'); const options = { @@ -26,7 +23,7 @@ const req = http.request(options, (res) => { res.on('end', () => { const body = Buffer.concat(chunks); - winston.info(body.toString()); + console.log(body.toString()); }); }); req.write('{\n "copilotUserId": 123456789\n}'); diff --git a/src/mocks/createProject.js b/src/mocks/createProject.js index e232d61d..4aca9b40 100644 --- a/src/mocks/createProject.js +++ b/src/mocks/createProject.js @@ -1,6 +1,3 @@ -/* eslint-disable max-len */ -import winston from 'winston'; - const http = require('https'); const options = { @@ -26,7 +23,7 @@ const req = http.request(options, (res) => { res.on('end', () => { const body = Buffer.concat(chunks); - winston.info(body.toString()); + console.log(body.toString()); }); }); diff --git a/src/mocks/direct.js b/src/mocks/direct.js index 094fdfa8..4dabcfdc 100644 --- a/src/mocks/direct.js +++ b/src/mocks/direct.js @@ -1,20 +1,17 @@ -import express, { Router } from 'express'; +import express from 'express'; import _ from 'lodash'; import bodyParser from 'body-parser'; import config from 'config'; import coreLib from 'tc-core-library-js'; import expressRequestId from 'express-request-id'; +import Router from 'express'; import https from 'https'; import path from 'path'; import fs from 'fs'; - -const util = require('tc-core-library-js').util(config); -const jwtAuth = require('tc-core-library-js').middleware.jwtAuthenticator; - config.version = 'v3'; - +const util = require('tc-core-library-js').util(config); const app = express(); app.use(bodyParser.urlencoded({ extended: false, @@ -36,9 +33,10 @@ app.use(coreLib.middleware.logger(null, logger)); app.logger = logger; const router = Router(); +const jwtAuth = require('tc-core-library-js').middleware.jwtAuthenticator; router.all('/v3/direct/projects*', jwtAuth()); -const projectId = 2; +let projectId = 2; const projects = { 1: { projectName: 'test direct project1', @@ -57,7 +55,7 @@ router.route('/v3/direct/projects') }) .post((req, res) => { app.logger.info({ body: req.body }, 'create direct project'); - const newId = projectId + 1; + const newId = projectId++; req.body.id = newId; projects[newId] = req.body; res.json(util.wrapResponse(req.id, { projectId: newId })); @@ -65,48 +63,47 @@ router.route('/v3/direct/projects') router.route('/v3/direct/projects/:projectId(\\d+)/billingaccount') .post((req, res) => { - const pId = req.params.projectId; - app.logger.info({ body: req.body, pId }, 'add billingaccount to Project'); - if (projects[pId]) { - projects[pId] = _.merge(projects[pId], req.body); - res.json(util.wrapResponse(req.id, { billingAccountName: 'mock account name for ' + - `${req.body.billingAccountId}` })); + const projectId = req.params.projectId; + app.logger.info({ body: req.body, projectId }, 'add billingaccount to Project'); + if (projects[projectId]) { + projects[projectId] = _.merge(projects[projectId], req.body); + res.json(util.wrapResponse(req.id, { billingAccountName: `mock account name for ${req.body.billingAccountId}` })); } else { - res.json(util.wrapErrorResponse(req.id, 404, `Cannot find direct project ${pId}`)); + res.json(util.wrapErrorResponse(req.id, 404, `Cannot find direct project ${projectId}`)); } }); router.route('/v3/direct/projects/:projectId(\\d+)/copilot') .post((req, res) => { - const pId = req.params.projectId; - app.logger.info({ body: req.body, pId }, 'add copilot to Project'); - if (projects[pId]) { - projects[pId] = _.merge(projects[pId], req.body); - res.json(util.wrapResponse(req.id, { copilotProjectId: pId })); + const projectId = req.params.projectId; + app.logger.info({ body: req.body, projectId }, 'add copilot to Project'); + if (projects[projectId]) { + projects[projectId] = _.merge(projects[projectId], req.body); + res.json(util.wrapResponse(req.id, { copilotProjectId: projectId })); } else { - res.json(util.wrapErrorResponse(req.id, 404, `Cannot find direct project ${pId}`)); + res.json(util.wrapErrorResponse(req.id, 404, `Cannot find direct project ${projectId}`)); } }) .delete((req, res) => { - const pId = req.params.projectId; - app.logger.info({ body: req.body, pId }, 'remove copilot from Project'); - if (projects[pId]) { - projects[pId] = _.omit(projects[pId], 'copilotUserId'); + const projectId = req.params.projectId; + app.logger.info({ body: req.body, projectId }, 'remove copilot from Project'); + if (projects[projectId]) { + projects[projectId] = _.omit(projects[projectId], 'copilotUserId'); res.json(util.wrapResponse(req.id, true)); } else { - res.json(util.wrapErrorResponse(req.id, 404, `Cannot find direct project ${pId}`)); + res.json(util.wrapErrorResponse(req.id, 404, `Cannot find direct project ${projectId}`)); } }); router.route('/v3/direct/projects/:projectId(\\d+)/permissions') .post((req, res) => { - const pId = req.params.projectId; - app.logger.info({ body: req.body, pId }, 'add permissions to Project'); - if (projects[pId]) { + const projectId = req.params.projectId; + app.logger.info({ body: req.body, projectId }, 'add permissions to Project'); + if (projects[projectId]) { res.json(); } else { - res.json(util.wrapErrorResponse(req.id, 404, `Cannot find direct project ${pId}`)); + res.json(util.wrapErrorResponse(req.id, 404, `Cannot find direct project ${projectId}`)); } }); diff --git a/src/models/project.js b/src/models/project.js index d9462579..d565e72c 100644 --- a/src/models/project.js +++ b/src/models/project.js @@ -1,10 +1,9 @@ -/* eslint-disable valid-jsdoc */ -import _ from 'lodash'; import { PROJECT_TYPE, PROJECT_STATUS, PROJECT_MEMBER_ROLE } from '../constants'; +import _ from 'lodash'; module.exports = function (sequelize, DataTypes) { - const Project = sequelize.define('Project', { + var Project = sequelize.define('Project', { id: { type: DataTypes.BIGINT, primaryKey: true, autoIncrement: true }, directProjectId: DataTypes.BIGINT, billingAccountId: DataTypes.BIGINT, @@ -66,17 +65,15 @@ module.exports = function (sequelize, DataTypes) { return this.findAll({ where: { $or: [ - ['EXISTS(SELECT * FROM "project_members" WHERE "deletedAt" ' + - 'IS NULL AND "projectId" = "Project".id AND "userId" = ? )', userId], - ['"Project".status=? AND NOT EXISTS(SELECT * FROM "project_members" WHERE ' + - ' "deletedAt" IS NULL AND "projectId" = "Project".id AND "role" = ? )', + ['EXISTS(SELECT * FROM "project_members" WHERE "deletedAt" IS NULL AND "projectId" = "Project".id AND "userId" = ? )', userId], + ['"Project".status=? AND NOT EXISTS(SELECT * FROM "project_members" WHERE "deletedAt" IS NULL AND "projectId" = "Project".id AND "role" = ? )', PROJECT_STATUS.REVIEWED, PROJECT_MEMBER_ROLE.COPILOT], ], }, attributes: ['id'], raw: true, }) - .then(res => _.map(res, 'id')); + .then(res => _.map(res, 'id')); }, /** * Get direct project id @@ -145,8 +142,7 @@ module.exports = function (sequelize, DataTypes) { .then((count) => { count = count[0].count; // select project attributes - return sequelize.query(`SELECT ${attributesStr} FROM projects WHERE ${query} ORDER BY ` + - ` ${orderStr} LIMIT ${parameters.limit} OFFSET ${parameters.offset}`, + return sequelize.query(`SELECT ${attributesStr} FROM projects WHERE ${query} ORDER BY ${orderStr} LIMIT ${parameters.limit} OFFSET ${parameters.offset}`, { type: sequelize.QueryTypes.SELECT, logging: (str) => { log.debug(str); }, raw: true, diff --git a/src/permissions/project.delete.js b/src/permissions/project.delete.js index 27ece695..b532798c 100644 --- a/src/permissions/project.delete.js +++ b/src/permissions/project.delete.js @@ -1,16 +1,14 @@ /* globals Promise */ -import _ from 'lodash'; import util from '../util'; import models from '../models'; import { USER_ROLE, PROJECT_MEMBER_ROLE } from '../constants'; +import _ from 'lodash'; /** * Super admin, Topcoder Managers are allowed to edit any project * Rest can add members only if they are currently part of the project team. - * @param {Object} req the express request instance - * @return {Promise} Returns a promise */ module.exports = req => new Promise((resolve, reject) => { const projectId = _.parseInt(req.params.projectId); diff --git a/src/permissions/project.edit.js b/src/permissions/project.edit.js index f794353c..62854066 100644 --- a/src/permissions/project.edit.js +++ b/src/permissions/project.edit.js @@ -1,15 +1,14 @@ +/* globals Promise */ -import _ from 'lodash'; import util from '../util'; import models from '../models'; import { USER_ROLE } from '../constants'; +import _ from 'lodash'; /** * Super admin, Topcoder Managers are allowed to edit any project * Rest can add members only if they are currently part of the project team. - * @param {Object} req the express request instance - * @return {Promise} Returns a promise */ module.exports = req => new Promise((resolve, reject) => { const projectId = _.parseInt(req.params.projectId); diff --git a/src/permissions/project.view.js b/src/permissions/project.view.js index 4a70b116..26e64740 100644 --- a/src/permissions/project.view.js +++ b/src/permissions/project.view.js @@ -1,15 +1,15 @@ -import _ from 'lodash'; +/* globals Promise */ + import util from '../util'; import models from '../models'; import { USER_ROLE } from '../constants'; +import _ from 'lodash'; /** * Super admin, Topcoder Managers are allowed to view any projects * Co-pilots can view projects they are part of or if no other co-pilot has been * assigned. Others can only view projcets that they are part of. - * @param {Object} req the express request instance - * @return {Promise} Returns a promise */ module.exports = req => new Promise((resolve, reject) => { const projectId = _.parseInt(req.params.projectId); diff --git a/src/permissions/projectMember.delete.js b/src/permissions/projectMember.delete.js index 5541db18..9a07c185 100644 --- a/src/permissions/projectMember.delete.js +++ b/src/permissions/projectMember.delete.js @@ -1,15 +1,14 @@ -import _ from 'lodash'; +/* globals Promise */ + import util from '../util'; import models from '../models'; import { USER_ROLE, PROJECT_MEMBER_ROLE } from '../constants'; - +import _ from 'lodash'; /** * Super admin, Topcoder Managers are allowed to edit any project * Rest can add members only if they are currently part of the project team. - * @param {Object} req the express request instance - * @return {Promise} Returns a promise */ module.exports = req => new Promise((resolve, reject) => { diff --git a/src/routes/attachments/create.js b/src/routes/attachments/create.js index 43a1e8d0..53abd5a7 100644 --- a/src/routes/attachments/create.js +++ b/src/routes/attachments/create.js @@ -8,9 +8,10 @@ import _ from 'lodash'; import config from 'config'; import Joi from 'joi'; import path from 'path'; -import { middleware as tcMiddleware } from 'tc-core-library-js'; + import models from '../../models'; import util from '../../util'; +import { middleware as tcMiddleware } from 'tc-core-library-js'; const permissions = tcMiddleware.permissions; diff --git a/src/routes/attachments/create.spec.js b/src/routes/attachments/create.spec.js index b3a7532e..98617cb2 100644 --- a/src/routes/attachments/create.spec.js +++ b/src/routes/attachments/create.spec.js @@ -2,7 +2,7 @@ import chai from 'chai'; import sinon from 'sinon'; import request from 'supertest'; -import winston from 'winston'; + import server from '../../app'; import models from '../../models'; import util from '../../util'; @@ -100,7 +100,7 @@ describe('Project Attachments', () => { const stub = sinon.stub(util, 'getHttpClient', () => mockHttpClient); // mock util s3FileTransfer util.s3FileTransfer = (req, source, dest) => { - winston.info(`source is ${source}, dest is ${dest}`); + console.log(source, dest); return Promise.resolve(true); }; request(server) @@ -113,15 +113,18 @@ describe('Project Attachments', () => { .expect(201) .end((err, res) => { if (err) { - winston.error('unexpected error', err); + console.log(err); return done(err); } const resJson = res.body.result.content; should.exist(resJson); + + postSpy.should.have.been.calledOnce; getSpy.should.have.been.calledOnce; stub.restore(); + console.log(JSON.stringify(resJson, null, 2)); resJson.title.should.equal('Spec.pdf'); resJson.downloadUrl.should.exist; resJson.projectId.should.equal(project1.id); diff --git a/src/routes/attachments/delete.js b/src/routes/attachments/delete.js index b5aa452c..a76b918e 100644 --- a/src/routes/attachments/delete.js +++ b/src/routes/attachments/delete.js @@ -2,11 +2,12 @@ // import validate from 'express-validation' import _ from 'lodash'; + +import models from '../../models'; +import fileService from '../../services/fileService'; import { middleware as tcMiddleware, } from 'tc-core-library-js'; -import models from '../../models'; -import fileService from '../../services/fileService'; /** * API to delete a project member. diff --git a/src/routes/attachments/delete.spec.js b/src/routes/attachments/delete.spec.js index 0dc92d78..8634f941 100644 --- a/src/routes/attachments/delete.spec.js +++ b/src/routes/attachments/delete.spec.js @@ -1,5 +1,6 @@ import _ from 'lodash'; +import chai from 'chai'; import sinon from 'sinon'; import request from 'supertest'; @@ -10,8 +11,9 @@ import testUtil from '../../tests/util'; describe('Project Attachments delete', () => { - let project1; - let attachment; + let project1, + member1, + attachment; beforeEach((done) => { testUtil.clearDb() .then(() => { @@ -35,20 +37,23 @@ describe('Project Attachments delete', () => { isPrimary: true, createdBy: 1, updatedBy: 1, - }).then(() => models.ProjectAttachment.create({ - projectId: project1.id, - title: 'test.txt', - description: 'blah', - contentType: 'application/unknown', - size: 12312, - category: null, - filePath: 'https://media.topcoder.com/projects/1/test.txt', - createdBy: 1, - updatedBy: 1, - }).then((a1) => { - attachment = a1; - done(); - })); + }).then((pm) => { + member1 = pm; + return models.ProjectAttachment.create({ + projectId: project1.id, + title: 'test.txt', + description: 'blah', + contentType: 'application/unknown', + size: 12312, + category: null, + filePath: 'https://media.topcoder.com/projects/1/test.txt', + createdBy: 1, + updatedBy: 1, + }).then((a1) => { + attachment = a1; + done(); + }); + }); }); }); }); diff --git a/src/routes/attachments/update.js b/src/routes/attachments/update.js index 65ec5938..3cb7e40e 100644 --- a/src/routes/attachments/update.js +++ b/src/routes/attachments/update.js @@ -2,11 +2,12 @@ import validate from 'express-validation'; import _ from 'lodash'; import Joi from 'joi'; + +import models from '../../models'; +import util from '../../util'; import { middleware as tcMiddleware, } from 'tc-core-library-js'; -import models from '../../models'; -import util from '../../util'; /** * API to update a project member. @@ -44,10 +45,9 @@ module.exports = [ }) .then((resp) => { const affectedCount = resp.shift(); - if (affectedCount === 0) { + if (affectedCount == 0) { // handle 404 - const err = new Error('project attachment not found for project id ' + - `${projectId} and member id ${attachmentId}`); + const err = new Error(`project attachment not found for project id ${projectId} and member id ${attachmentId}`); err.status = 404; return Promise.reject(err); } diff --git a/src/routes/attachments/update.spec.js b/src/routes/attachments/update.spec.js index 4001dd95..abcf17fe 100644 --- a/src/routes/attachments/update.spec.js +++ b/src/routes/attachments/update.spec.js @@ -4,14 +4,16 @@ import sinon from 'sinon'; import request from 'supertest'; import models from '../../models'; +import util from '../../util'; import server from '../../app'; import testUtil from '../../tests/util'; const should = chai.should(); describe('Project Attachments update', () => { - let project1; - let attachment; + let project1, + member1, + attachment; beforeEach((done) => { testUtil.clearDb() .then(() => { @@ -35,20 +37,23 @@ describe('Project Attachments update', () => { isPrimary: true, createdBy: 1, updatedBy: 1, - }).then(() => models.ProjectAttachment.create({ - projectId: project1.id, - title: 'test.txt', - description: 'blah', - contentType: 'application/unknown', - size: 12312, - category: null, - filePath: 'https://media.topcoder.com/projects/1/test.txt', - createdBy: 1, - updatedBy: 1, - }).then((a1) => { - attachment = a1; - done(); - })); + }).then((pm) => { + member1 = pm; + return models.ProjectAttachment.create({ + projectId: project1.id, + title: 'test.txt', + description: 'blah', + contentType: 'application/unknown', + size: 12312, + category: null, + filePath: 'https://media.topcoder.com/projects/1/test.txt', + createdBy: 1, + updatedBy: 1, + }).then((a1) => { + attachment = a1; + done(); + }); + }); }); }); }); diff --git a/src/routes/index.js b/src/routes/index.js index 8db4fe11..8889c61b 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -21,7 +21,6 @@ router.get('/_health', (req, res) => { // All project service endpoints need authentication const jwtAuth = require('tc-core-library-js').middleware.jwtAuthenticator; - router.all('/v4/projects*', jwtAuth()); // Register all the routes diff --git a/src/routes/projectMembers/create.js b/src/routes/projectMembers/create.js index 64f2dfe7..805728f6 100644 --- a/src/routes/projectMembers/create.js +++ b/src/routes/projectMembers/create.js @@ -3,10 +3,11 @@ import validate from 'express-validation'; import _ from 'lodash'; import Joi from 'joi'; -import { middleware as tcMiddleware } from 'tc-core-library-js'; import models from '../../models'; import util from '../../util'; -import { PROJECT_MEMBER_ROLE, EVENT } from '../../constants'; +import { PROJECT_MEMBER_ROLE } from '../../constants'; +import { middleware as tcMiddleware } from 'tc-core-library-js'; +import { EVENT } from '../../constants'; /** * API to add a project member. @@ -19,8 +20,7 @@ const addMemberValidations = { param: Joi.object().keys({ userId: Joi.number().required(), isPrimary: Joi.boolean(), - role: Joi.any().valid(PROJECT_MEMBER_ROLE.CUSTOMER, PROJECT_MEMBER_ROLE.MANAGER, - PROJECT_MEMBER_ROLE.COPILOT).required(), + role: Joi.any().valid(PROJECT_MEMBER_ROLE.CUSTOMER, PROJECT_MEMBER_ROLE.MANAGER, PROJECT_MEMBER_ROLE.COPILOT).required(), }).required(), }, }; diff --git a/src/routes/projectMembers/create.spec.js b/src/routes/projectMembers/create.spec.js index b0893a03..bd25f5fe 100644 --- a/src/routes/projectMembers/create.spec.js +++ b/src/routes/projectMembers/create.spec.js @@ -12,8 +12,8 @@ import testUtil from '../../tests/util'; const should = chai.should(); describe('Project Members create', () => { - let project1; - let project2; + let project1, + project2; before((done) => { testUtil.clearDb() .then(() => { diff --git a/src/routes/projectMembers/delete.js b/src/routes/projectMembers/delete.js index e1b761b9..27e13f17 100644 --- a/src/routes/projectMembers/delete.js +++ b/src/routes/projectMembers/delete.js @@ -1,9 +1,9 @@ import _ from 'lodash'; -import winston from 'winston'; -import { middleware as tcMiddleware } from 'tc-core-library-js'; + import models from '../../models'; +import { middleware as tcMiddleware } from 'tc-core-library-js'; import { EVENT, PROJECT_MEMBER_ROLE } from '../../constants'; /** @@ -29,7 +29,7 @@ module.exports = [ err.status = 404; return Promise.reject(err); } - return member.destroy({ logging: winston.info }); + return member.destroy({ logging: console.log }); }) .then(member => member.save()) // if primary co-pilot is removed promote the next co-pilot to primary #43 diff --git a/src/routes/projectMembers/delete.spec.js b/src/routes/projectMembers/delete.spec.js index f34158c7..d209e63c 100644 --- a/src/routes/projectMembers/delete.spec.js +++ b/src/routes/projectMembers/delete.spec.js @@ -12,9 +12,9 @@ import testUtil from '../../tests/util'; const should = chai.should(); describe('Project members delete', () => { - let project1; - let member1; - let member2; + let project1, + member1, + member2; beforeEach((done) => { testUtil.clearDb() .then(() => { @@ -106,8 +106,7 @@ describe('Project members delete', () => { role: 'copilot', isPrimary: true, }; - server.services.pubsub.publish.calledWith('project.member.removed', - sinon.match(removedMember)).should.be.true; + server.services.pubsub.publish.calledWith('project.member.removed', sinon.match(removedMember)).should.be.true; done(); // models.ProjectMember // .count({where: { projectId: project1.id, deletedAt: { $eq: null } }}) @@ -165,13 +164,9 @@ describe('Project members delete', () => { role: 'copilot', isPrimary: true, }; - server.services.pubsub.publish.calledWith('project.member.removed', - sinon.match(removedMember)).should.be.true; + server.services.pubsub.publish.calledWith('project.member.removed', sinon.match(removedMember)).should.be.true; // validate the primary copilot - models.ProjectMember.findAll({ paranoid: true, - where: { projectId: project1.id, - role: 'copilot', - isPrimary: true } }) + models.ProjectMember.findAll({ paranoid: true, where: { projectId: project1.id, role: 'copilot', isPrimary: true } }) .then((members) => { should.exist(members); members.length.should.equal(1); @@ -218,8 +213,7 @@ describe('Project members delete', () => { role: 'manager', isPrimary: true, }; - server.services.pubsub.publish.calledWith('project.member.removed', - sinon.match(removedMember)).should.be.true; + server.services.pubsub.publish.calledWith('project.member.removed', sinon.match(removedMember)).should.be.true; postSpy.should.have.been.calledOnce; done(); }); @@ -260,8 +254,7 @@ describe('Project members delete', () => { role: 'manager', isPrimary: true, }; - server.services.pubsub.publish.calledWith('project.member.removed', - sinon.match(removedMember)).should.be.true; + server.services.pubsub.publish.calledWith('project.member.removed', sinon.match(removedMember)).should.be.true; postSpy.should.not.have.been.calledOnce; done(); }); diff --git a/src/routes/projectMembers/update.js b/src/routes/projectMembers/update.js index d4370fae..ac89f67c 100644 --- a/src/routes/projectMembers/update.js +++ b/src/routes/projectMembers/update.js @@ -2,10 +2,12 @@ import validate from 'express-validation'; import _ from 'lodash'; import Joi from 'joi'; -import { middleware as tcMiddleware } from 'tc-core-library-js'; + import models from '../../models'; import util from '../../util'; import { EVENT, PROJECT_MEMBER_ROLE } from '../../constants'; +import { middleware as tcMiddleware } from 'tc-core-library-js'; +import directProject from '../../services/directProject'; /** * API to update a project member. @@ -16,8 +18,7 @@ const updateProjectMemberValdiations = { body: { param: Joi.object().keys({ isPrimary: Joi.boolean(), - role: Joi.any().valid(PROJECT_MEMBER_ROLE.CUSTOMER, PROJECT_MEMBER_ROLE.MANAGER, - PROJECT_MEMBER_ROLE.COPILOT).required(), + role: Joi.any().valid(PROJECT_MEMBER_ROLE.CUSTOMER, PROJECT_MEMBER_ROLE.MANAGER, PROJECT_MEMBER_ROLE.COPILOT).required(), }), }, }; @@ -30,22 +31,21 @@ module.exports = [ * Update a projectMember if the user has access */ (req, res, next) => { - let projectMember; - let updatedProps = req.body.param; + let projectMember, + updatedProps = req.body.param; const projectId = _.parseInt(req.params.projectId); const memberRecordId = _.parseInt(req.params.id); updatedProps = _.pick(updatedProps, ['isPrimary', 'role']); let previousValue; - // let newValue; + let newValue; models.sequelize.transaction(() => models.ProjectMember.findOne({ where: { id: memberRecordId, projectId }, }) .then((_member) => { if (!_member) { // handle 404 - const err = new Error(`project member not found for project id ${projectId} ` + - `and member id ${memberRecordId}`); + const err = new Error(`project member not found for project id ${projectId} and member id ${memberRecordId}`); err.status = 404; return Promise.reject(err); } @@ -53,7 +53,7 @@ module.exports = [ projectMember = _member; previousValue = _.clone(projectMember.get({ plain: true })); _.assign(projectMember, updatedProps); - // newValue = projectMember.get({ plain: true }); + newValue = projectMember.get({ plain: true }); // no updates if no change if (updatedProps.role === previousValue.role && diff --git a/src/routes/projectMembers/update.spec.js b/src/routes/projectMembers/update.spec.js index 37fefadf..799a2d5d 100644 --- a/src/routes/projectMembers/update.spec.js +++ b/src/routes/projectMembers/update.spec.js @@ -11,10 +11,10 @@ import testUtil from '../../tests/util'; const should = chai.should(); describe('Project members update', () => { - let project1; - let member1; - let member2; - let member3; + let project1, + member1, + member2, + member3; beforeEach((done) => { testUtil.clearDb() .then(() => { @@ -156,8 +156,7 @@ describe('Project members update', () => { const result = res.body.result; result.success.should.be.false; result.status.should.equal(404); - result.content.message.should.equal('project member not found for project id' + - ` ${project1.id} and member id 999999`); + result.content.message.should.equal(`project member not found for project id ${project1.id} and member id 999999`); done(); }); }); diff --git a/src/routes/projects/create.spec.js b/src/routes/projects/create.spec.js index 0dd1784d..477e9ecb 100644 --- a/src/routes/projects/create.spec.js +++ b/src/routes/projects/create.spec.js @@ -3,7 +3,6 @@ import _ from 'lodash'; import chai from 'chai'; import sinon from 'sinon'; import request from 'supertest'; -import winston from 'winston'; import util from '../../util'; import server from '../../app'; @@ -14,7 +13,7 @@ const should = chai.should(); sinon.stub(RabbitMQService.prototype, 'init', () => {}); sinon.stub(RabbitMQService.prototype, 'publish', () => { - winston.info('publish called'); + console.log('publish called'); }); describe('Project create', () => { diff --git a/src/routes/projects/delete.js b/src/routes/projects/delete.js index a2ea2b19..d5f03aaa 100644 --- a/src/routes/projects/delete.js +++ b/src/routes/projects/delete.js @@ -1,8 +1,11 @@ + +// import validate from 'express-validation' import _ from 'lodash'; -import { middleware as tcMiddleware } from 'tc-core-library-js'; -import { EVENT } from '../../constants'; +import { EVENT } from '../../constants.js'; import models from '../../models'; +import fileService from '../../services/fileService'; +import { middleware as tcMiddleware } from 'tc-core-library-js'; /** * API to delete a project member. diff --git a/src/routes/projects/delete.spec.js b/src/routes/projects/delete.spec.js index aeae3e17..99587089 100644 --- a/src/routes/projects/delete.spec.js +++ b/src/routes/projects/delete.spec.js @@ -1,13 +1,21 @@ +import _ from 'lodash'; +import chai from 'chai'; +import sinon from 'sinon'; import request from 'supertest'; import models from '../../models'; +import util from '../../util'; import server from '../../app'; import testUtil from '../../tests/util'; describe('Project delete test', () => { - let project1; + let project1, + owner, + teamMember, + manager, + copilot; beforeEach((done) => { testUtil.clearDb() .then(() => { @@ -63,7 +71,11 @@ describe('Project delete test', () => { }), ]; Promise.all(promises) - .then(() => { + .then((res) => { + owner = res[0]; + manager = res[2]; + copilot = res[3]; + teamMember = res[4]; done(); }); }); @@ -91,7 +103,7 @@ describe('Project delete test', () => { Authorization: `Bearer ${testUtil.jwts.member}`, }) .expect(204) - .end((err) => { + .end((err, resp) => { if (err) { return done(err); } diff --git a/src/routes/projects/get.js b/src/routes/projects/get.js index 077f06e4..8150715c 100644 --- a/src/routes/projects/get.js +++ b/src/routes/projects/get.js @@ -2,9 +2,11 @@ /* globals Promise */ import _ from 'lodash'; -import { middleware as tcMiddleware } from 'tc-core-library-js'; + import models from '../../models'; import util from '../../util'; +import { middleware as tcMiddleware } from 'tc-core-library-js'; + /** /** diff --git a/src/routes/projects/get.spec.js b/src/routes/projects/get.spec.js index 73317b19..b8004a0c 100644 --- a/src/routes/projects/get.spec.js +++ b/src/routes/projects/get.spec.js @@ -11,8 +11,8 @@ import testUtil from '../../tests/util'; const should = chai.should(); describe('GET Project', () => { - let project1; - let project2; + let project1, + project2; before((done) => { testUtil.clearDb() .then(() => { diff --git a/src/routes/projects/list.js b/src/routes/projects/list.js index 5545b921..eeadb656 100755 --- a/src/routes/projects/list.js +++ b/src/routes/projects/list.js @@ -98,7 +98,7 @@ module.exports = [ // handle filters let filters = util.parseQueryFilter(req.query.filter); let sort = req.query.sort ? decodeURIComponent(req.query.sort) : 'createdAt'; - if (sort && sort.indexOf(' ') === -1) { + if (sort && sort.indexOf(' ') == -1) { sort += ' asc'; } const sortableProps = [ diff --git a/src/routes/projects/list.spec.js b/src/routes/projects/list.spec.js index 80739536..a69a8c2c 100644 --- a/src/routes/projects/list.spec.js +++ b/src/routes/projects/list.spec.js @@ -2,7 +2,6 @@ import chai from 'chai'; import request from 'supertest'; -import winston from 'winston'; import models from '../../models'; import server from '../../app'; @@ -12,11 +11,10 @@ const should = chai.should(); /** * Add full text index for projects. - * @return {Promise} returns the promise */ function addFullTextIndex() { if (models.sequelize.options.dialect !== 'postgres') { - winston.info('Not creating search index, must be using POSTGRES to do this'); + console.log('Not creating search index, must be using POSTGRES to do this'); return; } @@ -24,29 +22,26 @@ function addFullTextIndex() { .query('ALTER TABLE projects ADD COLUMN "projectFullText" text;') .then(() => models.sequelize .query('UPDATE projects SET "projectFullText" = lower(' + - 'name || \' \' || coalesce(description, \'\') || \' \' || coalesce(details#>>\'{utm, code}\', \'\'));')) - .then(() => models.sequelize + 'name || \' \' || coalesce(description, \'\') || \' \' || coalesce(details#>>\'{utm, code}\', \'\'));')).then(() => models.sequelize .query('CREATE EXTENSION IF NOT EXISTS pg_trgm;')).then(() => models.sequelize - .query('CREATE INDEX project_text_search_idx ON projects USING GIN("projectFullText" gin_trgm_ops);')) - .then(() => models.sequelize + .query('CREATE INDEX project_text_search_idx ON projects USING GIN("projectFullText" gin_trgm_ops);')).then(() => models.sequelize .query('CREATE OR REPLACE FUNCTION project_text_update_trigger() RETURNS trigger AS $$ ' + 'begin ' + 'new."projectFullText" := ' + - 'lower(new.name || \' \' || coalesce(new.description, \'\') || \' \' || ' + - ' coalesce(new.details#>>\'{utm, code}\', \'\')); ' + + 'lower(new.name || \' \' || coalesce(new.description, \'\') || \' \' || coalesce(new.details#>>\'{utm, code}\', \'\')); ' + 'return new; ' + 'end ' + '$$ LANGUAGE plpgsql;')).then(() => models.sequelize .query('DROP TRIGGER IF EXISTS project_text_update ON projects;')).then(() => models.sequelize .query('CREATE TRIGGER project_text_update BEFORE INSERT OR UPDATE ON projects' + ' FOR EACH ROW EXECUTE PROCEDURE project_text_update_trigger();')).catch((err) => { - winston.error('Failed: ', err); + console.log('Failed: ', err); }); } describe('LIST Project', () => { - let project1; - let project2; + let project1, + project2; before((done) => { testUtil.clearDb() .then(() => addFullTextIndex()) @@ -178,8 +173,7 @@ describe('LIST Project', () => { }); }); - it('should return the project when project that is in reviewed state AND does not yet' + - 'have a co-pilot assigned', (done) => { + it('should return the project when project that is in reviewed state AND does not yet have a co-pilot assigned', (done) => { request(server) .get('/v4/projects') .set({ diff --git a/src/routes/projects/update.js b/src/routes/projects/update.js index 9b4e391c..4c0aa7e8 100644 --- a/src/routes/projects/update.js +++ b/src/routes/projects/update.js @@ -112,8 +112,7 @@ module.exports = [ let updatedProps = req.body.param; const projectId = _.parseInt(req.params.projectId); // prune any fields that cannot be updated directly - updatedProps = _.omit(updatedProps, ['createdBy', 'createdAt', 'updatedBy', 'updatedAt', - 'id', 'directProjectId']); + updatedProps = _.omit(updatedProps, ['createdBy', 'createdAt', 'updatedBy', 'updatedAt', 'id', 'directProjectId']); let previousValue; models.sequelize.transaction(() => models.Project.findOne({ @@ -154,8 +153,7 @@ module.exports = [ _.isUndefined(_.find(members, m => m.userId === req.authUser.userId && matchRole(m.role))) ) { - const err = new Error('Only assigned topcoder-managers or topcoder admins should be allowed ' + - 'to launch a project'); + const err = new Error('Only assigned topcoder-managers or topcoder admins should be allowed to launch a project'); err.status = 403; return Promise.reject(err); } diff --git a/src/routes/projects/update.spec.js b/src/routes/projects/update.spec.js index e149dfc7..d27031af 100644 --- a/src/routes/projects/update.spec.js +++ b/src/routes/projects/update.spec.js @@ -13,9 +13,9 @@ import { PROJECT_STATUS } from '../../constants'; const should = chai.should(); describe('Project', () => { - let project1; - let project2; - let project3; + let project1, + project2, + project3; beforeEach((done) => { testUtil.clearDb(done); }); @@ -588,11 +588,11 @@ describe('Project', () => { }) .expect('Content-Type', /json/) .expect(200) - .end((error, resp) => { - if (error) { - return done(error); + .end((err, res) => { + if (err) { + return done(err); } - resJson = resp.body.result.content; + resJson = res.body.result.content; should.exist(resJson); should.not.exist(resJson.bookmarks); server.services.pubsub.publish.calledWith('project.updated').should.be.true; diff --git a/src/services/fileService.js b/src/services/fileService.js index f725e771..fdbc56cb 100644 --- a/src/services/fileService.js +++ b/src/services/fileService.js @@ -1,14 +1,14 @@ + +import util from '../util'; +import config from 'config'; /** * Service methods to handle direct project. */ -import config from 'config'; -import util from '../util'; - /** * Build custom http client for request - * @param {Object} req request - * @return {Object} custom http client + * @param req request + * @returns custom http client * @private */ function _getHttpClient(req) { @@ -31,10 +31,6 @@ function _getHttpClient(req) { export default { /** * Delete file from S3 using fileservice - * - * @param {Object} req the request - * @param {String} filePath the file path - * @return {Void} the function returns void */ deleteFile(req, filePath) { _getHttpClient(req).delete('', { params: { filter: `filePath%3D${filePath}` } }); diff --git a/src/services/index.js b/src/services/index.js index a24a17c8..9eaaabc6 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -6,11 +6,6 @@ import RabbitMQService from './rabbitmq'; /** * Responsible for establishing connections to all external services * Also has a hook to load mock services for unit testing. - * - * @param {Object} app the app object - * @param {Object} logger the logger to use - * - * @return {Void} the function returns void */ module.exports = (app, logger) => { app.services = app.service || {}; diff --git a/src/tests/seed.js b/src/tests/seed.js index a00dd433..54fb5100 100644 --- a/src/tests/seed.js +++ b/src/tests/seed.js @@ -1,6 +1,4 @@ -import winston from 'winston'; import models from '../models'; - models.sequelize.sync({ force: true }) .then(() => models.Project.bulkCreate([{ @@ -104,7 +102,7 @@ models.sequelize.sync({ force: true }) return Promise.all(operations); }) .then(() => { - winston.info('Success'); + console.log('Success'); process.exit(0); }) - .catch(err => winston.error('Failed: ', err)); + .catch(err => console.log('Failed: ', err)); diff --git a/src/tests/util.js b/src/tests/util.js index 3035a1bc..4387755b 100644 --- a/src/tests/util.js +++ b/src/tests/util.js @@ -1,4 +1,3 @@ -/* eslint-disable max-len */ import models from '../models'; diff --git a/src/util.js b/src/util.js index f1312396..463e5387 100644 --- a/src/util.js +++ b/src/util.js @@ -15,15 +15,13 @@ import querystring from 'querystring'; import config from 'config'; const util = _.cloneDeep(require('tc-core-library-js').util(config)); - _.assignIn(util, { /** * Handle error - * @param {String} msg the default error message - * @param {Error} err the err - * @param {Object} req the request - * @param {Function} next the next function - * @returns {Function} next function with error + * @param defaultMessage the default error message + * @param err the err + * @param next the next function + * @returns next function with error */ handleError: (msg, err, req, next) => { req.log.error({ @@ -39,9 +37,9 @@ _.assignIn(util, { }, /** * Validates if filters are valid - * @param {object} filters object with filters - * @param {array} validValues valid filter values - * @return {boolean} true if filters are valid otherwise false + * @param {object} filters object with filters + * @param {array} validValues valid filter values + * @return {boolean} */ isValidFilter: (filters, validValues) => { let valid = true; @@ -66,9 +64,8 @@ _.assignIn(util, { /** * Parses query fields and groups them per table - * @param {array} queryFields list of query fields - * @param {Object} allowedFields the allowed fields - * @return {object} the parsed fields + * @param {array} queryFields list of query fields + * @return {object} */ parseFields: (queryFields, allowedFields) => { const fields = _.cloneDeep(allowedFields); @@ -88,9 +85,9 @@ _.assignIn(util, { }, /** - * Parse the query filters - * @param {String} queryFilter the query filter string - * @return {Object} the parsed array + * [description] + * @param {[type]} queryFilter [description] + * @return {[type]} [description] */ parseQueryFilter: (queryFilter) => { queryFilter = querystring.parse(queryFilter); @@ -137,9 +134,9 @@ _.assignIn(util, { /** * retrieve download urls for all attachments - * @param {Object} req original request - * @param {String} filePath the file path - * @return {String} the download url + * @param {[type]} req original request + * @param {[type]} attachments list of attachments to retrieve urls for + * @return {[type]} [description] */ getFileDownloadUrl: (req, filePath) => { if (!filePath) { @@ -198,8 +195,7 @@ _.assignIn(util, { getSystemUserToken: (logger, id = 'system') => { const httpClient = util.getHttpClient({ id, log: logger }); const url = `${config.get('identityServiceEndpoint')}authorizations`; - const formData = `clientId=${config.get('systemUserClientId')}&` + - `secret=${encodeURIComponent(config.get('systemUserClientSecret'))}`; + const formData = `clientId=${config.get('systemUserClientId')}&secret=${encodeURIComponent(config.get('systemUserClientSecret'))}`; return httpClient.post(url, formData, { timeout: 4000, @@ -212,11 +208,11 @@ _.assignIn(util, { /** * Fetches the topcoder user details using the given JWT token. * - * @param {Number} userId id of the user to be fetched - * @param {String} jwtToken JWT token of the admin user or JWT token of the user to be fecthed - * @param {Object} logger logger to be used for logging purposes + * @param userId id of the user to be fetched + * @param jwtToken JWT token of the admin user or JWT token of the user to be fecthed + * @param logger logger to be used for logging purposes * - * @return {Promise} promise which resolves to the user's information + * @return promise which resolves to the user's information */ getTopcoderUser: (userId, jwtToken, logger) => { const httpClient = util.getHttpClient({ id: `userService_${userId}`, log: logger }); @@ -226,7 +222,7 @@ _.assignIn(util, { httpClient.defaults.headers.common.Authorization = `Bearer ${jwtToken}`; return httpClient.get(`${config.userServiceUrl}/${userId}`).then((response) => { if (response.data && response.data.result - && response.data.result.status === 200 && response.data.result.content) { + && response.data.result.status == 200 && response.data.result.content) { return response.data.result.content; } return null;