fix test lint

This commit is contained in:
Matteo Pagliazzi
2019-10-08 20:45:38 +02:00
parent e37f4467f8
commit 85fb5f33aa
367 changed files with 6635 additions and 6080 deletions

View File

@@ -1,17 +1,18 @@
/* eslint-disable no-use-before-define */
/* eslint-disable max-classes-per-file */
import moment from 'moment';
import { requester } from './requester';
import {
getDocument as getDocumentFromMongo,
updateDocument as updateDocumentInMongo,
unsetDocument as unsetDocumentInMongo,
} from '../mongo';
import {
assign,
each,
isEmpty,
set,
} from 'lodash';
import { requester } from './requester';
import {
getDocument as getDocumentFromMongo,
updateDocument as updateDocumentInMongo,
unsetDocument as unsetDocumentInMongo,
} from '../mongo';
class ApiObject {
constructor (options) {
@@ -20,7 +21,7 @@ class ApiObject {
async update (options) {
if (isEmpty(options)) {
return;
return null;
}
await updateDocumentInMongo(this._docType, this, options);
@@ -32,7 +33,7 @@ class ApiObject {
async unset (options) {
if (isEmpty(options)) {
return;
return null;
}
await unsetDocumentInMongo(this._docType, this, options);
@@ -43,7 +44,7 @@ class ApiObject {
}
async sync () {
let updatedDoc = await getDocumentFromMongo(this._docType, this);
const updatedDoc = await getDocumentFromMongo(this._docType, this);
assign(this, updatedDoc);
@@ -57,7 +58,7 @@ export class ApiUser extends ApiObject {
this._docType = 'users';
let _requester = requester(this);
const _requester = requester(this);
this.get = _requester.get;
this.post = _requester.post;
@@ -74,10 +75,10 @@ export class ApiGroup extends ApiObject {
}
async addChat (chat) {
let group = this;
const group = this;
if (!chat) {
chat = {
chat = { // eslint-disable-line no-param-reassign
id: 'Test_ID',
text: 'Test message',
flagCount: 0,
@@ -91,13 +92,13 @@ export class ApiGroup extends ApiObject {
};
}
let update = { chat };
const update = { chat };
return await this.update(update);
return this.update(update);
}
async createCancelledSubscription () {
let update = {
const update = {
purchased: {
plan: {
customerId: 'example-customer',
@@ -106,7 +107,7 @@ export class ApiGroup extends ApiObject {
},
};
return await this.update(update);
return this.update(update);
}
}

View File

@@ -1,22 +1,22 @@
'use strict';
let express = require('express');
let uuid = require('uuid');
let bodyParser = require('body-parser');
let app = express();
let server = require('http').createServer(app);
const express = require('express');
const uuid = require('uuid');
const bodyParser = require('body-parser');
const app = express();
const server = require('http').createServer(app);
const PORT = process.env.TEST_WEBHOOK_APP_PORT || 3099; // eslint-disable-line no-process-env
let webhookData = {};
const webhookData = {};
app.use(bodyParser.urlencoded({
extended: true,
}));
app.use(bodyParser.json());
app.post('/webhooks/:id', function (req, res) {
let id = req.params.id;
app.post('/webhooks/:id', (req, res) => {
const { id } = req.params;
if (!webhookData[id]) {
webhookData[id] = [];
@@ -29,9 +29,9 @@ app.post('/webhooks/:id', function (req, res) {
// Helps close down server from within mocha test
// See http://stackoverflow.com/a/37054753/2601552
let sockets = {};
server.on('connection', (socket) => {
let id = uuid.v4();
const sockets = {};
server.on('connection', socket => {
const id = uuid.v4();
sockets[id] = socket;
socket.once('close', () => {
@@ -40,16 +40,16 @@ server.on('connection', (socket) => {
});
function start () {
return new Promise((resolve) => {
return new Promise(resolve => {
server.listen(PORT, resolve);
});
}
function close () {
return new Promise((resolve) => {
return new Promise(resolve => {
server.close(resolve);
Object.keys(sockets).forEach((socket) => {
Object.keys(sockets).forEach(socket => {
sockets[socket].end();
});
});

View File

@@ -10,8 +10,9 @@ let apiVersion;
// Sets up an object that can make all REST requests
// If a user is passed in, the uuid and api token of
// the user are used to make the requests
export function requester (user = {}, additionalSets = {}) {
additionalSets = cloneDeep(additionalSets); // cloning because it could be modified later to set cookie
export function requester (user = {}, additionalSets = {}) { // eslint-disable-line import/prefer-default-export, max-len
// cloning because it could be modified later to set cookie
additionalSets = cloneDeep(additionalSets); // eslint-disable-line no-param-reassign
return {
get: _requestMaker(user, 'get', additionalSets),
@@ -21,58 +22,64 @@ export function requester (user = {}, additionalSets = {}) {
};
}
requester.setApiVersion = (version) => {
requester.setApiVersion = version => {
apiVersion = version;
};
function _requestMaker (user, method, additionalSets = {}) {
if (!apiVersion) throw new Error('apiVersion not set');
return (route, send, query) => {
return new Promise((resolve, reject) => {
let url = `http://localhost:${API_TEST_SERVER_PORT}`;
return (route, send, query) => new Promise((resolve, reject) => {
let url = `http://localhost:${API_TEST_SERVER_PORT}`;
// do not prefix with api/apiVersion requests to top level routes like dataexport, payments and emails
if (route.indexOf('/email') === 0 || route.indexOf('/export') === 0 || route.indexOf('/paypal') === 0 || route.indexOf('/amazon') === 0 || route.indexOf('/stripe') === 0 || route.indexOf('/qr-code') === 0) {
url += `${route}`;
} else {
url += `/api/${apiVersion}${route}`;
}
// do not prefix with api/apiVersion requests to top level routes
// like dataexport, payments and emails
if (
route.indexOf('/email') === 0
|| route.indexOf('/export') === 0
|| route.indexOf('/paypal') === 0
|| route.indexOf('/amazon') === 0
|| route.indexOf('/stripe') === 0
|| route.indexOf('/qr-code') === 0
) {
url += `${route}`;
} else {
url += `/api/${apiVersion}${route}`;
}
let request = superagent[method](url)
.accept('application/json');
if (user && user._id && user.apiToken) {
request
.set('x-api-user', user._id)
.set('x-api-key', user.apiToken);
}
if (!isEmpty(additionalSets)) {
request.set(additionalSets);
}
const request = superagent[method](url)
.accept('application/json');
if (user && user._id && user.apiToken) {
request
.query(query)
.send(send)
.end((err, response) => {
if (err) {
if (!err.response) return reject(err);
.set('x-api-user', user._id)
.set('x-api-key', user.apiToken);
}
let parsedError = _parseError(err);
if (!isEmpty(additionalSets)) {
request.set(additionalSets);
}
return reject(parsedError);
}
request
.query(query)
.send(send)
.end((err, response) => {
if (err) {
if (!err.response) return reject(err);
resolve(_parseRes(response));
});
});
};
const parsedError = _parseError(err);
return reject(parsedError);
}
return resolve(_parseRes(response));
});
});
}
function _parseRes (res) {
let contentType = res.headers['content-type'] || '';
let contentDisposition = res.headers['content-disposition'] || '';
const contentType = res.headers['content-type'] || '';
const contentDisposition = res.headers['content-disposition'] || '';
if (contentType.indexOf('json') === -1) { // not a json response
return res.text;
@@ -84,16 +91,17 @@ function _parseRes (res) {
if (apiVersion === 'v2') {
return res.body;
} else if (apiVersion === 'v3' || apiVersion === 'v4') {
} if (apiVersion === 'v3' || apiVersion === 'v4') {
if (res.body.message) {
return {
data: res.body.data,
message: res.body.message,
};
} else {
return res.body.data;
}
return res.body.data;
}
return null;
}
function _parseError (err) {

View File

@@ -1,13 +1,14 @@
/* eslint-disable no-use-before-define */
// Import requester function, set it up for v3, export it
import { requester } from '../requester';
requester.setApiVersion('v3');
export { requester };
import server from '../external-server';
requester.setApiVersion('v3');
export { requester };
export { server };
export { translate } from '../../translate';
export { checkExistence, getProperty, resetHabiticaDB } from '../../mongo';
export * from './object-generators';
export * from './object-generators';
export { sleep } from '../../sleep';

View File

@@ -20,18 +20,18 @@ import * as Tasks from '../../../../website/server/models/task';
// Example: generateUser({}, { username: 'TestName' }) adds user
// with the 'TestName' username.
export async function generateUser (update = {}, overrides = {}) {
let username = overrides.username || (Date.now() + generateUUID()).substring(0, 20);
let password = overrides.password || 'password';
let email = overrides.email || `${username}@example.com`;
const username = overrides.username || (Date.now() + generateUUID()).substring(0, 20);
const password = overrides.password || 'password';
const email = overrides.email || `${username}@example.com`;
let user = await requester().post('/user/auth/local/register', {
const user = await requester().post('/user/auth/local/register', {
username,
email,
password,
confirmPassword: password,
});
let apiUser = new ApiUser(user);
const apiUser = new ApiUser(user);
await apiUser.update(update);
@@ -39,29 +39,29 @@ export async function generateUser (update = {}, overrides = {}) {
}
export async function generateHabit (update = {}) {
let type = 'habit';
let task = new Tasks[type](update);
const type = 'habit';
const task = new Tasks[type](update);
await task.save({ validateBeforeSave: false });
return task;
}
export async function generateDaily (update = {}) {
let type = 'daily';
let task = new Tasks[type](update);
const type = 'daily';
const task = new Tasks[type](update);
await task.save({ validateBeforeSave: false });
return task;
}
export async function generateReward (update = {}) {
let type = 'reward';
let task = new Tasks[type](update);
const type = 'reward';
const task = new Tasks[type](update);
await task.save({ validateBeforeSave: false });
return task;
}
export async function generateTodo (update = {}) {
let type = 'todo';
let task = new Tasks[type](update);
const type = 'todo';
const task = new Tasks[type](update);
await task.save({ validateBeforeSave: false });
return task;
}
@@ -75,8 +75,8 @@ export async function generateGroup (leader, details = {}, update = {}) {
details.privacy = details.privacy || 'private';
details.name = details.name || 'test group';
let group = await leader.post('/groups', details);
let apiGroup = new ApiGroup(group);
const group = await leader.post('/groups', details);
const apiGroup = new ApiGroup(group);
await apiGroup.update(update);
@@ -86,7 +86,8 @@ export async function generateGroup (leader, details = {}, update = {}) {
// This is generate group + the ability to create
// real users to populate it. The settings object
// takes in:
// members: Number - the number of group members to create. Defaults to 0. Does not include group leader.
// members: Number - the number of group members to create.
// Defaults to 0. Does not include group leader.
// inivtes: Number - the number of users to create and invite to the group. Defaults to 0.
// groupDetails: Object - how to initialize the group
// leaderDetails: Object - defaults for the leader, defaults with a gem balance so the user
@@ -98,42 +99,36 @@ export async function generateGroup (leader, details = {}, update = {}) {
// leader: the leader user object
// group: the group object
export async function createAndPopulateGroup (settings = {}) {
let numberOfMembers = settings.members || 0;
let numberOfInvites = settings.invites || 0;
let groupDetails = settings.groupDetails;
let leaderDetails = settings.leaderDetails || { balance: 10 };
const numberOfMembers = settings.members || 0;
const numberOfInvites = settings.invites || 0;
const { groupDetails } = settings;
const leaderDetails = settings.leaderDetails || { balance: 10 };
let groupLeader = await generateUser(leaderDetails);
let group = await generateGroup(groupLeader, groupDetails);
const groupLeader = await generateUser(leaderDetails);
const group = await generateGroup(groupLeader, groupDetails);
const groupMembershipTypes = {
party: { 'party._id': group._id},
party: { 'party._id': group._id },
guild: { guilds: [group._id] },
};
let members = await Promise.all(
times(numberOfMembers, () => {
return generateUser(groupMembershipTypes[group.type]);
})
const members = await Promise.all(
times(numberOfMembers, () => generateUser(groupMembershipTypes[group.type])),
);
await group.update({ memberCount: numberOfMembers + 1});
await group.update({ memberCount: numberOfMembers + 1 });
let invitees = await Promise.all(
times(numberOfInvites, () => {
return generateUser();
})
const invitees = await Promise.all(
times(numberOfInvites, () => generateUser()),
);
let invitationPromises = invitees.map((invitee) => {
return groupLeader.post(`/groups/${group._id}/invite`, {
uuids: [invitee._id],
});
});
const invitationPromises = invitees.map(invitee => groupLeader.post(`/groups/${group._id}/invite`, {
uuids: [invitee._id],
}));
await Promise.all(invitationPromises);
await Promise.all(invitees.map((invitee) => invitee.sync()));
await Promise.all(invitees.map(invitee => invitee.sync()));
return {
groupLeader,
@@ -155,8 +150,8 @@ export async function generateChallenge (challengeCreator, group, details = {},
details.prize = details.prize || 0;
details.official = details.official || false;
let challenge = await challengeCreator.post('/challenges', details);
let apiChallenge = new ApiChallenge(challenge);
const challenge = await challengeCreator.post('/challenges', details);
const apiChallenge = new ApiChallenge(challenge);
await apiChallenge.update(update);

View File

@@ -1,13 +1,14 @@
/* eslint-disable no-use-before-define */
// Import requester function, set it up for v4, export it
import { requester } from '../requester';
requester.setApiVersion('v4');
export { requester };
import server from '../external-server';
requester.setApiVersion('v4');
export { requester };
export { server };
export { translate } from '../../translate';
export { checkExistence, getProperty, resetHabiticaDB } from '../../mongo';
export * from './object-generators';
export * from './object-generators';
export { sleep } from '../../sleep';

View File

@@ -14,18 +14,18 @@ import * as Tasks from '../../../../website/server/models/task';
// , you can do so by passing in the full path as a string:
// { 'items.eggs.Wolf': 10 }
export async function generateUser (update = {}) {
let username = (Date.now() + generateUUID()).substring(0, 20);
let password = 'password';
let email = `${username}@example.com`;
const username = (Date.now() + generateUUID()).substring(0, 20);
const password = 'password';
const email = `${username}@example.com`;
let user = await requester().post('/user/auth/local/register', {
const user = await requester().post('/user/auth/local/register', {
username,
email,
password,
confirmPassword: password,
});
let apiUser = new ApiUser(user);
const apiUser = new ApiUser(user);
await apiUser.update(update);
@@ -33,29 +33,29 @@ export async function generateUser (update = {}) {
}
export async function generateHabit (update = {}) {
let type = 'habit';
let task = new Tasks[type](update);
const type = 'habit';
const task = new Tasks[type](update);
await task.save({ validateBeforeSave: false });
return task;
}
export async function generateDaily (update = {}) {
let type = 'daily';
let task = new Tasks[type](update);
const type = 'daily';
const task = new Tasks[type](update);
await task.save({ validateBeforeSave: false });
return task;
}
export async function generateReward (update = {}) {
let type = 'reward';
let task = new Tasks[type](update);
const type = 'reward';
const task = new Tasks[type](update);
await task.save({ validateBeforeSave: false });
return task;
}
export async function generateTodo (update = {}) {
let type = 'todo';
let task = new Tasks[type](update);
const type = 'todo';
const task = new Tasks[type](update);
await task.save({ validateBeforeSave: false });
return task;
}
@@ -69,8 +69,8 @@ export async function generateGroup (leader, details = {}, update = {}) {
details.privacy = details.privacy || 'private';
details.name = details.name || 'test group';
let group = await leader.post('/groups', details);
let apiGroup = new ApiGroup(group);
const group = await leader.post('/groups', details);
const apiGroup = new ApiGroup(group);
await apiGroup.update(update);
@@ -80,7 +80,8 @@ export async function generateGroup (leader, details = {}, update = {}) {
// This is generate group + the ability to create
// real users to populate it. The settings object
// takes in:
// members: Number - the number of group members to create. Defaults to 0. Does not include group leader.
// members: Number - the number of group members to create.
// Defaults to 0. Does not include group leader.
// inivtes: Number - the number of users to create and invite to the group. Defaults to 0.
// groupDetails: Object - how to initialize the group
// leaderDetails: Object - defaults for the leader, defaults with a gem balance so the user
@@ -92,42 +93,36 @@ export async function generateGroup (leader, details = {}, update = {}) {
// leader: the leader user object
// group: the group object
export async function createAndPopulateGroup (settings = {}) {
let numberOfMembers = settings.members || 0;
let numberOfInvites = settings.invites || 0;
let groupDetails = settings.groupDetails;
let leaderDetails = settings.leaderDetails || { balance: 10 };
const numberOfMembers = settings.members || 0;
const numberOfInvites = settings.invites || 0;
const { groupDetails } = settings;
const leaderDetails = settings.leaderDetails || { balance: 10 };
let groupLeader = await generateUser(leaderDetails);
let group = await generateGroup(groupLeader, groupDetails);
const groupLeader = await generateUser(leaderDetails);
const group = await generateGroup(groupLeader, groupDetails);
const groupMembershipTypes = {
party: { 'party._id': group._id},
party: { 'party._id': group._id },
guild: { guilds: [group._id] },
};
let members = await Promise.all(
times(numberOfMembers, () => {
return generateUser(groupMembershipTypes[group.type]);
})
const members = await Promise.all(
times(numberOfMembers, () => generateUser(groupMembershipTypes[group.type])),
);
await group.update({ memberCount: numberOfMembers + 1});
await group.update({ memberCount: numberOfMembers + 1 });
let invitees = await Promise.all(
times(numberOfInvites, () => {
return generateUser();
})
const invitees = await Promise.all(
times(numberOfInvites, () => generateUser()),
);
let invitationPromises = invitees.map((invitee) => {
return groupLeader.post(`/groups/${group._id}/invite`, {
uuids: [invitee._id],
});
});
const invitationPromises = invitees.map(invitee => groupLeader.post(`/groups/${group._id}/invite`, {
uuids: [invitee._id],
}));
await Promise.all(invitationPromises);
await Promise.all(invitees.map((invitee) => invitee.sync()));
await Promise.all(invitees.map(invitee => invitee.sync()));
return {
groupLeader,
@@ -149,8 +144,8 @@ export async function generateChallenge (challengeCreator, group, details = {},
details.prize = details.prize || 0;
details.official = details.official || false;
let challenge = await challengeCreator.post('/challenges', details);
let apiChallenge = new ApiChallenge(challenge);
const challenge = await challengeCreator.post('/challenges', details);
const apiChallenge = new ApiChallenge(challenge);
await apiChallenge.update(update);