diff --git a/.eslintrc.js b/.eslintrc.js index 7140ff5ef..3bdba9801 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -64,6 +64,20 @@ module.exports = { skipWords, }, ], + 'no-lonely-if': 2, + 'sort-keys': [ + 1, + 'asc', + { + natural: true, + minKeys: 4, + }, + ], + 'no-unneeded-ternary': 2, + 'no-unused-expressions': 2, + 'no-useless-catch': 2, + 'no-duplicate-imports': 2, + 'max-params': [2, { max: 3 }], }, ignorePatterns: ['dist', 'node_modules', 'playground'], }; diff --git a/config/index.js b/config/index.js index dccb94780..877578d08 100644 --- a/config/index.js +++ b/config/index.js @@ -6,8 +6,8 @@ const PACKAGES_PATH = path.resolve(ROOT_PATH, 'packages'); const BABEL_CONFIG_PATH = path.resolve(CONFIG_PATH, 'babel', 'babel.config.js'); module.exports = { - ROOT_PATH, + BABEL_CONFIG_PATH, CONFIG_PATH, PACKAGES_PATH, - BABEL_CONFIG_PATH, + ROOT_PATH, }; diff --git a/docs/group.md b/docs/group.md index 6713b7178..f4dd3f55c 100644 --- a/docs/group.md +++ b/docs/group.md @@ -7,7 +7,7 @@ Similar to the `describe` and `context` features provided by unit testing framew import vest, { test, group, enforce } from 'vest'; vest.create('authentication_form', data => { - vest.skip(data.userExists ? 'newUser' : 'existingUser'); + vest.skip(data.userExists ? 'signUp' : 'signIn'); test('userName', "Can't be empty", () => { enforce(data.username).isNotEmpty(); @@ -16,14 +16,15 @@ vest.create('authentication_form', data => { enforce(data.password).isNotEmpty(); }); - group('existingUser', () => { + group('signIn', () => { test( 'userName', - 'User does not exist. Please check if you typed it correctly.' + 'User not found. Please check if you typed it correctly.', + findUserName(data.username) ); }); - group('newUser', () => { + group('signUp', () => { test('email', 'Email already registered', isEmailRegistered(data.email)); test('age', 'You must be at least 18 years old to join', () => { diff --git a/packages/eslint-plugin-vest/lib/constants/index.js b/packages/eslint-plugin-vest/lib/constants/index.js index a1e284f90..ba92d6592 100644 --- a/packages/eslint-plugin-vest/lib/constants/index.js +++ b/packages/eslint-plugin-vest/lib/constants/index.js @@ -1,10 +1,10 @@ const constants = { - VEST_HOOK_WARN: 'warn', + VEST_HOOK_DRAFT: 'draft', VEST_HOOK_ONLY: 'only', VEST_HOOK_SKIP: 'skip', - VEST_HOOK_DRAFT: 'draft', - VEST_IDENTIFIER_VALIDATE: 'validate', + VEST_HOOK_WARN: 'warn', VEST_IDENTIFIER_TEST: 'test', + VEST_IDENTIFIER_VALIDATE: 'validate', VEST_KEYWORD: 'vest', }; diff --git a/packages/eslint-plugin-vest/lib/rules/exclude-before-test/index.js b/packages/eslint-plugin-vest/lib/rules/exclude-before-test/index.js index 79d9c2377..3c3f2b698 100644 --- a/packages/eslint-plugin-vest/lib/rules/exclude-before-test/index.js +++ b/packages/eslint-plugin-vest/lib/rules/exclude-before-test/index.js @@ -5,11 +5,11 @@ const { isTestCall, looksLikeExclusion, errorMessage } = require('./helpers'); module.exports = { meta: { docs: { - type: 'problem', + category: 'Possible Errors', description: 'Makes sure vest exclusion hooks are not put before your test calls', - category: 'Possible Errors', recommended: true, + type: 'problem', }, fixable: 'code', }, diff --git a/packages/vest/src/core/createSuite/index.js b/packages/vest/src/core/createSuite/index.js index 5e33a0c6e..d1eb1f761 100644 --- a/packages/vest/src/core/createSuite/index.js +++ b/packages/vest/src/core/createSuite/index.js @@ -23,8 +23,8 @@ const createSuite = (name, tests) => { const ctxRef = singleton.useContext() ?? { name, - tests, operationMode: OPERATION_MODE_STATEFUL, + tests, ...(shouldCreateId && { suiteId: name, }), diff --git a/packages/vest/src/core/produce/getByGroup/index.js b/packages/vest/src/core/produce/getByGroup/index.js index 7d04d14fd..3e1614b75 100644 --- a/packages/vest/src/core/produce/getByGroup/index.js +++ b/packages/vest/src/core/produce/getByGroup/index.js @@ -1,3 +1,4 @@ +/* eslint-disable max-params */ import throwError from '../../../lib/throwError'; import collectFailureMessages from '../collectFailureMessages'; diff --git a/packages/vest/src/core/produce/hasByGroup/index.js b/packages/vest/src/core/produce/hasByGroup/index.js index 7afa07a8d..221e7d258 100644 --- a/packages/vest/src/core/produce/hasByGroup/index.js +++ b/packages/vest/src/core/produce/hasByGroup/index.js @@ -1,3 +1,4 @@ +/* eslint-disable max-params */ import { hasLogic } from '../has'; /** diff --git a/packages/vest/src/core/produce/index.js b/packages/vest/src/core/produce/index.js index 7a6a95a24..12f7f4d72 100644 --- a/packages/vest/src/core/produce/index.js +++ b/packages/vest/src/core/produce/index.js @@ -100,18 +100,15 @@ const produce = (state, { draft } = {}) => ], ] .concat(draft ? [] : [['done', done.bind(null, state)]]) - .reduce( - (properties, [name, value]) => - Object.assign(properties, { - [name]: { - value, - writeable: true, - configurable: true, - enumerable: true, - }, - }), - {} - ) + .reduce((properties, [name, value]) => { + properties[name] = { + configurable: true, + enumerable: true, + value, + writeable: true, + }; + return properties; + }, {}) )); export default produce; diff --git a/packages/vest/src/core/state/registerSuite/index.js b/packages/vest/src/core/state/registerSuite/index.js index 08a66ae24..9d18fc34a 100644 --- a/packages/vest/src/core/state/registerSuite/index.js +++ b/packages/vest/src/core/state/registerSuite/index.js @@ -7,16 +7,16 @@ import singleton from '../../../lib/singleton'; * @param {string} name Name of the validation suite. */ const INITIAL_SUITE_STATE = (suiteId, name) => ({ - name, - suiteId, - pending: [], - lagging: [], doneCallbacks: [], + exclusive: {}, fieldCallbacks: {}, - tests: {}, groups: {}, - exclusive: {}, + lagging: [], + name, + pending: [], + suiteId, testObjects: [], + tests: {}, }); /** @@ -50,11 +50,10 @@ const registerSuite = () => { suite.unshift(next); suite.length = 2; - setSuites(state => - Object.assign(state, { - [suiteId]: suite, - }) - ); + setSuites(state => { + state[suiteId] = suite; + return state; + }); }; export default registerSuite; diff --git a/packages/vest/src/core/state/reset/spec.js b/packages/vest/src/core/state/reset/spec.js index d821cef55..967054ffe 100644 --- a/packages/vest/src/core/state/reset/spec.js +++ b/packages/vest/src/core/state/reset/spec.js @@ -47,7 +47,6 @@ const spec = _vest => { }); describe('When suite does not exist in state', () => { - state; beforeEach(() => { runRegisterSuite({ name: suiteId, suiteId }); state = copy(getState()); diff --git a/packages/vest/src/core/test/index.js b/packages/vest/src/core/test/index.js index b51fbec3c..c9b478b57 100644 --- a/packages/vest/src/core/test/index.js +++ b/packages/vest/src/core/test/index.js @@ -69,10 +69,10 @@ const test = (fieldName, ...args) => { const ctx = singleton.useContext(); const testObject = new VestTest({ - group: ctx.groupName, - suiteId: ctx.suiteId, fieldName, + group: ctx.groupName, statement, + suiteId: ctx.suiteId, testFn, }); diff --git a/packages/vest/src/core/test/lib/VestTest/index.js b/packages/vest/src/core/test/lib/VestTest/index.js index 685ca34d1..014579f01 100644 --- a/packages/vest/src/core/test/lib/VestTest/index.js +++ b/packages/vest/src/core/test/lib/VestTest/index.js @@ -10,13 +10,13 @@ import id from '../../../../lib/id'; */ function VestTest({ suiteId, fieldName, statement, testFn, group }) { Object.assign(this, { - suiteId, - testFn, - fieldName, - statement, - isWarning: false, failed: false, + fieldName, id: id(), + isWarning: false, + statement, + suiteId, + testFn, }); if (group) { diff --git a/packages/vest/src/core/test/lib/VestTest/spec.js b/packages/vest/src/core/test/lib/VestTest/spec.js index 09c045152..a503b0175 100644 --- a/packages/vest/src/core/test/lib/VestTest/spec.js +++ b/packages/vest/src/core/test/lib/VestTest/spec.js @@ -10,9 +10,9 @@ describe('VestTest', () => { beforeEach(() => { testObject = new VestTest({ - suiteId, fieldName, statement, + suiteId, testFn: jest.fn(), }); }); @@ -24,7 +24,7 @@ describe('VestTest', () => { it('Should have a unique id', () => { Array.from( { length: 100 }, - () => new VestTest({ suiteId, fieldName, statement, testFn: jest.fn() }) + () => new VestTest({ fieldName, statement, suiteId, testFn: jest.fn() }) ).reduce((existing, { id }) => { expect(existing[id]).toBeUndefined(); existing[id] = true; @@ -51,9 +51,9 @@ describe('VestTest', () => { const VestTest = require('.'); testObject = new VestTest({ - suiteId, fieldName, statement, + suiteId, testFn: jest.fn(), }); }); diff --git a/packages/vest/src/core/test/lib/canceled/index.js b/packages/vest/src/core/test/lib/canceled/index.js index 3e8598936..16cc610be 100644 --- a/packages/vest/src/core/test/lib/canceled/index.js +++ b/packages/vest/src/core/test/lib/canceled/index.js @@ -12,10 +12,10 @@ export const setCanceled = (...testObjects) => { setState(state => ({ ...state, - [SYMBOL_CANCELED]: testObjects.reduce( - (ids, testObjects) => Object.assign(ids, { [testObjects.id]: true }), - state[SYMBOL_CANCELED] - ), + [SYMBOL_CANCELED]: testObjects.reduce((ids, testObjects) => { + ids[testObjects.id] = true; + return ids; + }, state[SYMBOL_CANCELED]), })); }; diff --git a/packages/vest/src/core/test/lib/canceled/spec.js b/packages/vest/src/core/test/lib/canceled/spec.js index c361fddf2..def33b480 100644 --- a/packages/vest/src/core/test/lib/canceled/spec.js +++ b/packages/vest/src/core/test/lib/canceled/spec.js @@ -9,9 +9,9 @@ const genTests = () => { length: 5 }, (_, i) => new VestTest({ - suite_id: 'suite_id', fieldName: `field_${i}`, statement: 'msg', + suite_id: 'suite_id', testFn: jest.fn(), }) ); diff --git a/packages/vest/src/core/test/lib/pending/spec.js b/packages/vest/src/core/test/lib/pending/spec.js index cd5ac0ab3..1a363f50c 100644 --- a/packages/vest/src/core/test/lib/pending/spec.js +++ b/packages/vest/src/core/test/lib/pending/spec.js @@ -18,9 +18,9 @@ describe('module: pending', () => { beforeEach(() => { state = _.cloneDeep(getSuiteState(suiteId)); testObject = new VestTest({ - suiteId, fieldName: 'field_1', statement: 'failure_message', + suiteId, testFn: jest.fn(), }); }); @@ -72,9 +72,9 @@ describe('module: pending', () => { { length: 5 }, (v, i) => new VestTest({ - suiteId, fieldName: `test_${i}`, statement: 'Some statement string', + suiteId, testFn: jest.fn(), }) ); diff --git a/packages/vest/src/core/test/runAsyncTest/spec.js b/packages/vest/src/core/test/runAsyncTest/spec.js index 321144b0b..25c6cccbb 100644 --- a/packages/vest/src/core/test/runAsyncTest/spec.js +++ b/packages/vest/src/core/test/runAsyncTest/spec.js @@ -46,9 +46,9 @@ describe.each([CASE_PASSING, CASE_FAILING])('runAsyncTest: %s', testCase => { })); testObject = new VestTest({ - suiteId, fieldName, statement: STATEMENT, + suiteId, testFn: testCase === CASE_PASSING ? Promise.resolve() : Promise.reject(), }); setPending(suiteId, testObject); @@ -162,9 +162,9 @@ describe.each([CASE_PASSING, CASE_FAILING])('runAsyncTest: %s', testCase => { setPending( suiteId, new VestTest({ - suiteId, fieldName: 'pending_field', statement: STATEMENT, + suiteId, testFn: jest.fn(), }) ); diff --git a/packages/vest/src/index.js b/packages/vest/src/index.js index 8a20fc426..60283d8c8 100644 --- a/packages/vest/src/index.js +++ b/packages/vest/src/index.js @@ -12,16 +12,15 @@ import singleton from './lib/singleton'; export default singleton.register( { - any, Enforce: enforce.Enforce, VERSION, - enforce, - + any, create: createSuite, - test, - validate, + enforce, reset, runWithContext, + test, + validate, ...hooks, }, state.register diff --git a/packages/vest/src/lib/singleton/index.js b/packages/vest/src/lib/singleton/index.js index 51f3c915a..14596a80b 100644 --- a/packages/vest/src/lib/singleton/index.js +++ b/packages/vest/src/lib/singleton/index.js @@ -49,8 +49,8 @@ const set = (key, value) => (go[SYMBOL_VEST][key] = value); const useContext = () => use().ctx; export default { - use, + register, set, + use, useContext, - register, }; diff --git a/packages/vest/testUtils/isDeepCopy/index.js b/packages/vest/testUtils/isDeepCopy/index.js index 5171333d8..3392fb4ea 100644 --- a/packages/vest/testUtils/isDeepCopy/index.js +++ b/packages/vest/testUtils/isDeepCopy/index.js @@ -1,7 +1,7 @@ const isDeepCopy = (source, clone) => { const queue = [[source, clone]]; - while (queue.length) { + outer: while (queue.length) { const [source, clone] = queue.shift(); if (!source || typeof source !== 'object') { @@ -21,7 +21,7 @@ const isDeepCopy = (source, clone) => { Object.keys(source).forEach(key => queue.push([source[key], clone[key]])); } - continue; + continue outer; } }; @@ -33,8 +33,8 @@ export const SAMPLE_DEEP_OBJECT = [ first: 'Velasquez', last: 'Lara', }, - tags: ['Lorem', 'ullamco', 'minim', 'ut', 'ad'], range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], + tags: ['Lorem', 'ullamco', 'minim', 'ut', 'ad'], }, { _id: '5eb4784e64618155ef167791', @@ -43,7 +43,6 @@ export const SAMPLE_DEEP_OBJECT = [ first: 'Mcconnell', last: 'Dennis', }, - tags: ['nulla', 'ex', 'et', 'sint', 'aliqua'], range: [ { a: 1, @@ -55,6 +54,7 @@ export const SAMPLE_DEEP_OBJECT = [ ], }, ], + tags: ['nulla', 'ex', 'et', 'sint', 'aliqua'], }, ]; diff --git a/packages/vest/testUtils/mock/index.js b/packages/vest/testUtils/mock/index.js index 83462ea33..911d3e647 100644 --- a/packages/vest/testUtils/mock/index.js +++ b/packages/vest/testUtils/mock/index.js @@ -2,12 +2,12 @@ const packagePath = require('../../../../util/packagePath'); const PATHS = { Context: 'core/Context', + cleanupCompletedSuite: 'core/state/cleanupCompletedSuite', createSuite: 'core/createSuite', - runWithContext: 'lib/runWithContext', - throwError: 'lib/throwError', id: 'lib/id', - cleanupCompletedSuite: 'core/state/cleanupCompletedSuite', patch: 'core/state/patch', + runWithContext: 'lib/runWithContext', + throwError: 'lib/throwError', validateSuiteParams: 'lib/validateSuiteParams', }; diff --git a/packages/vest/testUtils/testDummy/index.js b/packages/vest/testUtils/testDummy/index.js index f67c36927..e35fe8c99 100644 --- a/packages/vest/testUtils/testDummy/index.js +++ b/packages/vest/testUtils/testDummy/index.js @@ -112,11 +112,11 @@ const testDummy = (vestRef = vest) => { return { failing, - passing, failingAsync, - passingAsync, failingWarning, failingWarningAsync, + passing, + passingAsync, passingWarning, passingWarningAsync, }; diff --git a/scripts/constants.js b/scripts/constants.js index 2cbc81368..fd48c258f 100644 --- a/scripts/constants.js +++ b/scripts/constants.js @@ -33,17 +33,17 @@ const CHANGELOG_TITLES = { }; module.exports = { - KEYWORD_PATCH, - KEYWORD_MINOR, - KEYWORD_MAJOR, CHANGELOG_TITLES, - PACKAGES_DIR, - PACKAGE_NAMES, - PACKAGE_NAME_VEST, - KEYWORDS_PATCH, - KEYWORDS_MINOR, - KEYWORDS_MAJOR, - KEYWORD_DOCS, KEYWORD_CONF, + KEYWORD_DOCS, + KEYWORD_MAJOR, + KEYWORD_MINOR, + KEYWORD_PATCH, + KEYWORDS_MAJOR, + KEYWORDS_MINOR, + KEYWORDS_PATCH, + PACKAGE_NAME_VEST, + PACKAGE_NAMES, + PACKAGES_DIR, TAG_NEXT, }; diff --git a/scripts/util/generatePackageData.js b/scripts/util/generatePackageData.js index 042b87db4..0db5ef632 100644 --- a/scripts/util/generatePackageData.js +++ b/scripts/util/generatePackageData.js @@ -30,13 +30,13 @@ function generatePackageData(packageName, messages) { const tagId = pickTagId(nextVersion); const tag = tagId === nextVersion ? null : TAG_NEXT; return { - packageName, - messages, - version, changeLevel, + messages, nextVersion, - tagId, + packageName, tag, + tagId, + version, }; }