diff --git a/.env.example b/.env.example index 0f69e86..544b511 100644 --- a/.env.example +++ b/.env.example @@ -1,12 +1,5 @@ -DEV_APP_PORT = +APP_PORT = -DEV_DB_HOST = -DEV_DB_PORT = -DEV_DB_NAME = +DB_URI = - -TEST_APP_PORT = - -TEST_DB_HOST = -TEST_DB_PORT = -TEST_DB_NAME = \ No newline at end of file +SECRET = \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json index e438593..f5ebd81 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,6 +1,6 @@ { - "extends": ["airbnb-base", "plugin:jest/recommended"], - "plugins": ["jest"], + "extends": ["airbnb-base", "plugin:jest/recommended", "prettier"], + "plugins": ["jest", "prettier"], "rules": { "linebreak-style": "off", "no-unused-expressions": [ @@ -9,8 +9,17 @@ "allowTernary": true } ], - "no-console": "off", - "no-underscore-dangle": ["warn", { "allow": ["_id"] }], + "prettier/prettier": "error", + "no-console": "warn", + "no-underscore-dangle": [ + "warn", + { + "allow": ["_id"] + } + ], "func-names": "off" + }, + "env": { + "node": true } } diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..0d7aef7 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "react"] + path = react + url = https://usaatyuk@bitbucket.org/usaatyuk/todolist-web.git diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..a20502b --- /dev/null +++ b/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "trailingComma": "all" +} diff --git a/app.js b/app.js index 2f2f3a8..cd4318a 100644 --- a/app.js +++ b/app.js @@ -5,6 +5,7 @@ const morgan = require('morgan'); const cors = require('cors'); const config = require('./config'); const db = require('./config/db'); +const path = require('path'); require('./models/TodoList'); require('./models/User'); @@ -27,6 +28,10 @@ const auth = require('./routes/auth'); app.use('/api/lists', auth.required, require('./routes/lists')); app.use('/api/todos', auth.required, require('./routes/todos')); +if (process.env.NODE_ENV === 'prod') { + app.use('/*', express.static(path.join(__dirname, '/react/build'))); +} + // 404 route app.use((req, res) => { res.status(404); @@ -73,6 +78,7 @@ let server; if (process.env.NODE_ENV !== 'test') { db.connect(); server = app.listen(config.app.port, () => { + console.log(`Listening on port ${config.app.port}`); console.log('Started!'); }); } else { diff --git a/config/index.js b/config/index.js index 8414994..8decc31 100644 --- a/config/index.js +++ b/config/index.js @@ -1,5 +1,15 @@ const env = process.env.NODE_ENV; +const prod = { + app: { + port: process.env.APP_PORT, + }, + db: { + uri: process.env.DB_URI, + }, + secret: process.env.SECRET, +}; + const dev = { app: { port: process.env.DEV_APP_PORT || 4000, @@ -15,8 +25,9 @@ const test = { }; const config = { + prod, dev, test, }; -module.exports = config[env] || config.dev; +module.exports = config[env] || config.prod; diff --git a/models/Todo.js b/models/Todo.js index 47b028d..5340fb2 100644 --- a/models/Todo.js +++ b/models/Todo.js @@ -15,7 +15,7 @@ const TodoSchema = Schema({ completed: { type: Boolean, default: false }, }); -TodoSchema.pre('save', async function () { +TodoSchema.pre('save', async function() { if (this.isNew) { const user = await this.model('User').findById(this.user); user.todos.push(this._id); @@ -27,7 +27,7 @@ TodoSchema.pre('save', async function () { } }); -TodoSchema.pre('remove', async function () { +TodoSchema.pre('remove', async function() { const user = await this.model('User').findById(this.user); user.todos.splice(user.todos.indexOf(this._id), 1); await user.save(); @@ -37,7 +37,7 @@ TodoSchema.pre('remove', async function () { await list.save(); }); -TodoSchema.methods.toJson = function () { +TodoSchema.methods.toJson = function() { return { id: this._id.toString(), text: this.text, diff --git a/models/TodoList.js b/models/TodoList.js index f596a2a..0e264f3 100644 --- a/models/TodoList.js +++ b/models/TodoList.js @@ -14,7 +14,7 @@ const TodoListSchema = Schema({ user: { type: Schema.Types.ObjectId, ref: 'User', required: true }, }); -TodoListSchema.pre('save', async function () { +TodoListSchema.pre('save', async function() { if (this.isNew) { const user = await this.model('User').findById(this.user); user.lists.push(this._id); @@ -22,7 +22,7 @@ TodoListSchema.pre('save', async function () { } }); -TodoListSchema.pre('remove', async function () { +TodoListSchema.pre('remove', async function() { const user = await this.model('User').findById(this.user); user.lists.splice(user.lists.indexOf(this._id), 1); @@ -41,8 +41,10 @@ TodoListSchema.pre('remove', async function () { .exec(); }); -TodoListSchema.methods.toJson = function () { - const todos = this.populated('todos') ? this.todos.map(todo => todo.toJson()) : this.todos; +TodoListSchema.methods.toJson = function() { + const todos = this.populated('todos') + ? this.todos.map(todo => todo.toJson()) + : this.todos; return { id: this._id.toString(), user: this.user.toString(), diff --git a/models/User.js b/models/User.js index 6f8ecfa..2f4e107 100644 --- a/models/User.js +++ b/models/User.js @@ -24,7 +24,7 @@ const UserSchema = Schema({ UserSchema.plugin(passportLocalMongoose); UserSchema.plugin(uniqueValidator); -UserSchema.pre('remove', async function () { +UserSchema.pre('remove', async function() { await this.model('TodoList') .find({ user: this._id }) .remove() @@ -35,18 +35,20 @@ UserSchema.pre('remove', async function () { .exec(); }); -UserSchema.methods.generateJwt = function () { - return jwt.sign({ id: this._id, username: this.username }, secret, { expiresIn: '120d' }); +UserSchema.methods.generateJwt = function() { + return jwt.sign({ id: this._id, username: this.username }, secret, { + expiresIn: '120d', + }); }; -UserSchema.methods.toJson = function () { +UserSchema.methods.toJson = function() { return { id: this._id, username: this.username, }; }; -UserSchema.methods.toAuthJson = function () { +UserSchema.methods.toAuthJson = function() { return { id: this._id, username: this.username, diff --git a/package-lock.json b/package-lock.json index 03c2315..ac80b9d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1618,6 +1618,12 @@ "graceful-readlink": ">= 1.0.0" } }, + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", + "dev": true + }, "compare-versions": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.2.1.tgz", @@ -1736,6 +1742,16 @@ "capture-stack-trace": "^1.0.0" } }, + "cross-env": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.1.6.tgz", + "integrity": "sha512-VWTDq+G4v383SzgRS7jsAVWqEWF0aKZpDz1GVjhONvPRgHB1LnxP2sXUVFKbykHkPSnfRKS8YdiDevWFwZmQ9g==", + "dev": true, + "requires": { + "cross-spawn": "^5.1.0", + "is-windows": "^1.0.0" + } + }, "cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", @@ -2064,6 +2080,12 @@ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, + "dlv": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.1.tgz", + "integrity": "sha512-b/kUB0D6RgRGG69h5ExsLnUAwfs5Jndfk1pU2ao7/9mVdsxpUBlkFdTkNJThXw1jrLXpUbIIg+h3um5zXi6sFA==", + "dev": true + }, "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -2305,6 +2327,15 @@ "eslint-config-esnext": "^2.0.0" } }, + "eslint-config-prettier": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz", + "integrity": "sha512-ag8YEyBXsm3nmOv1Hz991VtNNDMRa+MNy8cY47Pl4bw6iuzqKbJajXdqUpiw13STdLLrznxgm1hj9NhxeOYq0A==", + "dev": true, + "requires": { + "get-stdin": "^5.0.1" + } + }, "eslint-import-resolver-node": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", @@ -2367,6 +2398,24 @@ "integrity": "sha512-XX0/g2F2iDnX36Ez4j5Sd8IzJj2dbDBqOxitfGD+uXyiEVECJAoRnf9eQnkzyXFVKB7DALx82ZqgqCEfeLpY7w==", "dev": true }, + "eslint-plugin-prettier": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.0.tgz", + "integrity": "sha512-floiaI4F7hRkTrFe8V2ItOK97QYrX75DjmdzmVITZoAP6Cn06oEDPQRsO6MlHEP/u2SxI3xQ52Kpjw6j5WGfeQ==", + "dev": true, + "requires": { + "fast-diff": "^1.1.1", + "jest-docblock": "^21.0.0" + }, + "dependencies": { + "jest-docblock": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz", + "integrity": "sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==", + "dev": true + } + } + }, "eslint-restricted-globals": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz", @@ -2715,6 +2764,12 @@ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", "dev": true }, + "fast-diff": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz", + "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==", + "dev": true + }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", @@ -2975,14 +3030,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2997,20 +3050,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -3127,8 +3177,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -3140,7 +3189,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -3155,7 +3203,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -3163,14 +3210,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -3189,7 +3234,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -3270,8 +3314,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -3283,7 +3326,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -3405,7 +3447,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -3506,6 +3547,12 @@ "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=", "dev": true }, + "get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", + "dev": true + }, "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", @@ -3908,6 +3955,12 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -5115,6 +5168,12 @@ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" }, + "lodash.merge": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", + "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==", + "dev": true + }, "lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", @@ -5131,6 +5190,52 @@ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", "dev": true }, + "lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", + "dev": true + }, + "loglevel": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", + "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", + "dev": true + }, + "loglevel-colored-level-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz", + "integrity": "sha1-akAhj9x64V/HbD0PPmdsRlOIYD4=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "loglevel": "^1.4.1" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, "longest": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", @@ -6100,6 +6205,32 @@ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", "dev": true }, + "prettier": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.4.tgz", + "integrity": "sha512-emsEZ2bAigL1lq6ssgkpPm1MIBqgeTvcp90NxOP5XDqprub/V/WS2Hfgih3mS7/1dqTUvhG+sxx1Dv8crnVexA==", + "dev": true + }, + "prettier-eslint": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-8.8.1.tgz", + "integrity": "sha512-8YMkJZnA+XVfEW6fPet05jpNmSQbD+Htbh/QyOxQcVf2GIUEZsnGP7ZScaM9Mq2Ra2261eCu60E7/TRIy9coXQ==", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "common-tags": "^1.4.0", + "dlv": "^1.1.0", + "eslint": "^4.0.0", + "indent-string": "^3.2.0", + "lodash.merge": "^4.6.0", + "loglevel-colored-level-prefix": "^1.0.0", + "prettier": "^1.7.0", + "pretty-format": "^22.0.3", + "require-relative": "^0.8.7", + "typescript": "^2.5.1", + "typescript-eslint-parser": "^11.0.0" + } + }, "pretty-format": { "version": "22.4.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-22.4.3.tgz", @@ -6473,6 +6604,12 @@ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", "dev": true }, + "require-relative": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", + "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", + "dev": true + }, "require-uncached": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", @@ -8037,6 +8174,30 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "typescript": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.1.tgz", + "integrity": "sha512-h6pM2f/GDchCFlldnriOhs1QHuwbnmj6/v7499eMHqPeW4V2G0elua2eIc2nu8v2NdHV0Gm+tzX83Hr6nUFjQA==", + "dev": true + }, + "typescript-eslint-parser": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/typescript-eslint-parser/-/typescript-eslint-parser-11.0.0.tgz", + "integrity": "sha512-/fBHTBRBSorWQGKWOOjeMPkzd3o8cOPtFjTRwU5JLNGgVtmMa3KDkiw0R2n+H6ovo9y3OX30/5usm6YTqY44PQ==", + "dev": true, + "requires": { + "lodash.unescape": "4.0.1", + "semver": "5.4.1" + }, + "dependencies": { + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "dev": true + } + } + }, "uglify-js": { "version": "2.8.29", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", diff --git a/package.json b/package.json index f961e98..fefef00 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,8 @@ "main": "app.js", "scripts": { "start": "node ./app.js", - "debug": "npx nodemon --inspect ./app.js", - "test": "jest" + "debug": "cross-env NODE_ENV=dev npx nodemon --inspect ./app.js", + "test": "cross-env NODE_ENV=test jest" }, "author": "", "dependencies": { @@ -25,14 +25,18 @@ "passport-local-mongoose": "^5.0.0" }, "devDependencies": { + "cross-env": "^5.1.6", "eslint": "^4.19.1", "eslint-config-airbnb-base": "^12.1.0", "eslint-config-node": "^2.0.0", + "eslint-config-prettier": "^2.9.0", "eslint-plugin-import": "^2.12.0", "eslint-plugin-jest": "^21.15.2", + "eslint-plugin-prettier": "^2.6.0", "jest": "^22.4.4", "mongodb-memory-server": "^1.7.4", "nodemon": "^1.17.5", + "prettier-eslint": "^8.8.1", "supertest": "^3.1.0" }, "jest": { diff --git a/react b/react new file mode 160000 index 0000000..da32e44 --- /dev/null +++ b/react @@ -0,0 +1 @@ +Subproject commit da32e44ec9eb1c4f1c0970da67912b35d8251a80 diff --git a/routes/lists.js b/routes/lists.js index 22994b0..ac3d511 100644 --- a/routes/lists.js +++ b/routes/lists.js @@ -35,7 +35,10 @@ router.delete( '/:listId', asyncHelper(async (req, res) => { const { listId } = req.params; - const list = await TodoList.findOne({ _id: listId, user: req.user.id }).exec(); + const list = await TodoList.findOne({ + _id: listId, + user: req.user.id, + }).exec(); await list.remove(); res.json({ success: true }); }), diff --git a/routes/users.js b/routes/users.js index 87f9d76..8da1e6b 100644 --- a/routes/users.js +++ b/routes/users.js @@ -47,7 +47,9 @@ router.patch( { runValidators: true, context: 'query', new: true }, ).exec(); if (!user) { - throw new NotFoundError(`can't find user with username ${req.user.username}`); + throw new NotFoundError( + `can't find user with username ${req.user.username}`, + ); } if (password !== undefined) { await user.setPassword(password); diff --git a/tests/integration/lists.test.js b/tests/integration/lists.test.js index 1e89a4f..bb6acdf 100644 --- a/tests/integration/lists.test.js +++ b/tests/integration/lists.test.js @@ -24,9 +24,7 @@ beforeAll(async () => { }); beforeEach(async () => { - ({ - user, token, list, todo, - } = await seed()); + ({ user, token, list, todo } = await seed()); }); afterEach(async () => { diff --git a/tests/integration/todos.test.js b/tests/integration/todos.test.js index e8a910a..fd075b9 100644 --- a/tests/integration/todos.test.js +++ b/tests/integration/todos.test.js @@ -24,9 +24,7 @@ beforeAll(async () => { }); beforeEach(async () => { - ({ - user, token, list, todo, - } = await seed()); + ({ user, token, list, todo } = await seed()); }); afterEach(async () => {