From 1b53445892e4904742d32c787aa86468ff2189cb Mon Sep 17 00:00:00 2001 From: Armano Date: Sat, 8 Feb 2020 17:46:46 +0100 Subject: [PATCH 1/3] test(config-lerna-scopes): add regression tests --- @commitlint/config-lerna-scopes/index.test.js | 15 +++++++++++++++ @packages/test/package.json | 1 + 2 files changed, 16 insertions(+) diff --git a/@commitlint/config-lerna-scopes/index.test.js b/@commitlint/config-lerna-scopes/index.test.js index 45df721bcd..4684f1999d 100644 --- a/@commitlint/config-lerna-scopes/index.test.js +++ b/@commitlint/config-lerna-scopes/index.test.js @@ -1,5 +1,6 @@ import {lerna} from '@commitlint/test'; import config from '.'; +import semver from 'semver'; test('exports rules key', () => { expect(config).toHaveProperty('rules'); @@ -28,47 +29,61 @@ test('scope-enum is function', () => { }); test('scope-enum does not throw for missing context', async () => { + const semverLt = jest.spyOn(semver, 'lt'); const {'scope-enum': fn} = config.rules; await expect(fn()).resolves.toBeTruthy(); + expect(semverLt).toHaveBeenLastCalledWith('3.20.2', '3.0.0'); }); test('scope-enum has expected severity', async () => { + const semverLt = jest.spyOn(semver, 'lt'); const {'scope-enum': fn} = config.rules; const [severity] = await fn(); expect(severity).toBe(2); + expect(semverLt).toHaveBeenLastCalledWith('3.20.2', '3.0.0'); }); test('scope-enum has expected modifier', async () => { + const semverLt = jest.spyOn(semver, 'lt'); const {'scope-enum': fn} = config.rules; const [, modifier] = await fn(); expect(modifier).toBe('always'); + expect(semverLt).toHaveBeenLastCalledWith('3.20.2', '3.0.0'); }); test('returns empty value for empty lerna repository', async () => { + const semverLt = jest.spyOn(semver, 'lt'); const {'scope-enum': fn} = config.rules; const cwd = await lerna.bootstrap('empty', __dirname); const [, , value] = await fn({cwd}); expect(value).toEqual([]); + expect(semverLt).toHaveBeenLastCalledWith('3.20.2', '3.0.0'); }); test('returns expected value for basic lerna repository', async () => { + const semverLt = jest.spyOn(semver, 'lt'); const {'scope-enum': fn} = config.rules; const cwd = await lerna.bootstrap('basic', __dirname); const [, , value] = await fn({cwd}); expect(value).toEqual(['a', 'b']); + expect(semverLt).toHaveBeenLastCalledWith('3.20.2', '3.0.0'); }); test('returns expected value for scoped lerna repository', async () => { + const semverLt = jest.spyOn(semver, 'lt'); const {'scope-enum': fn} = config.rules; const cwd = await lerna.bootstrap('scoped', __dirname); const [, , value] = await fn({cwd}); expect(value).toEqual(['a', 'b']); + expect(semverLt).toHaveBeenLastCalledWith('3.20.2', '3.0.0'); }); test('works with lerna version < 3', async () => { + const semverLt = jest.spyOn(semver, 'lt'); const {'scope-enum': fn} = config.rules; const cwd = await lerna.bootstrap('lerna-two', __dirname); await expect(fn({cwd})).resolves.toBeTruthy(); + expect(semverLt).toHaveBeenLastCalledWith('2.11.0', '3.0.0'); }); diff --git a/@packages/test/package.json b/@packages/test/package.json index 1dfacc6b26..0ed6f31c9c 100644 --- a/@packages/test/package.json +++ b/@packages/test/package.json @@ -35,6 +35,7 @@ "execa": "0.11.0", "fs-extra": "^8.1.0", "pkg-dir": "4.2.0", + "resolve-pkg": "2.0.0", "tmp": "0.1.0" } } From 74fedc5ec8a4176ce83e0dd566f25e211fabf5d7 Mon Sep 17 00:00:00 2001 From: Armano Date: Sat, 8 Feb 2020 20:55:07 +0100 Subject: [PATCH 2/3] test(config-lerna-scopes): do not break tests in case of lerna update --- @commitlint/config-lerna-scopes/index.test.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/@commitlint/config-lerna-scopes/index.test.js b/@commitlint/config-lerna-scopes/index.test.js index 4684f1999d..8f9800aca0 100644 --- a/@commitlint/config-lerna-scopes/index.test.js +++ b/@commitlint/config-lerna-scopes/index.test.js @@ -32,7 +32,7 @@ test('scope-enum does not throw for missing context', async () => { const semverLt = jest.spyOn(semver, 'lt'); const {'scope-enum': fn} = config.rules; await expect(fn()).resolves.toBeTruthy(); - expect(semverLt).toHaveBeenLastCalledWith('3.20.2', '3.0.0'); + expect(semverLt).toHaveLastReturnedWith(false); }); test('scope-enum has expected severity', async () => { @@ -40,7 +40,7 @@ test('scope-enum has expected severity', async () => { const {'scope-enum': fn} = config.rules; const [severity] = await fn(); expect(severity).toBe(2); - expect(semverLt).toHaveBeenLastCalledWith('3.20.2', '3.0.0'); + expect(semverLt).toHaveLastReturnedWith(false); }); test('scope-enum has expected modifier', async () => { @@ -48,7 +48,7 @@ test('scope-enum has expected modifier', async () => { const {'scope-enum': fn} = config.rules; const [, modifier] = await fn(); expect(modifier).toBe('always'); - expect(semverLt).toHaveBeenLastCalledWith('3.20.2', '3.0.0'); + expect(semverLt).toHaveLastReturnedWith(false); }); test('returns empty value for empty lerna repository', async () => { @@ -57,7 +57,7 @@ test('returns empty value for empty lerna repository', async () => { const cwd = await lerna.bootstrap('empty', __dirname); const [, , value] = await fn({cwd}); expect(value).toEqual([]); - expect(semverLt).toHaveBeenLastCalledWith('3.20.2', '3.0.0'); + expect(semverLt).toHaveLastReturnedWith(false); }); test('returns expected value for basic lerna repository', async () => { @@ -67,7 +67,7 @@ test('returns expected value for basic lerna repository', async () => { const [, , value] = await fn({cwd}); expect(value).toEqual(['a', 'b']); - expect(semverLt).toHaveBeenLastCalledWith('3.20.2', '3.0.0'); + expect(semverLt).toHaveLastReturnedWith(false); }); test('returns expected value for scoped lerna repository', async () => { @@ -77,7 +77,7 @@ test('returns expected value for scoped lerna repository', async () => { const [, , value] = await fn({cwd}); expect(value).toEqual(['a', 'b']); - expect(semverLt).toHaveBeenLastCalledWith('3.20.2', '3.0.0'); + expect(semverLt).toHaveLastReturnedWith(false); }); test('works with lerna version < 3', async () => { @@ -86,4 +86,5 @@ test('works with lerna version < 3', async () => { const cwd = await lerna.bootstrap('lerna-two', __dirname); await expect(fn({cwd})).resolves.toBeTruthy(); expect(semverLt).toHaveBeenLastCalledWith('2.11.0', '3.0.0'); + expect(semverLt).toHaveLastReturnedWith(true); }); From 4aee2eef8ec71fb2f994390cdba4c16c34cbda0c Mon Sep 17 00:00:00 2001 From: Armano Date: Sat, 8 Feb 2020 23:36:05 +0100 Subject: [PATCH 3/3] test(config-lerna-scopes): improve tests for lerna 2 and split tests --- .../lerna-two/packages/a2/package.json | 4 +++ .../lerna-two/packages/b2/package.json | 4 +++ @commitlint/config-lerna-scopes/index.test.js | 35 +++++++++++-------- 3 files changed, 29 insertions(+), 14 deletions(-) create mode 100644 @commitlint/config-lerna-scopes/fixtures/lerna-two/packages/a2/package.json create mode 100644 @commitlint/config-lerna-scopes/fixtures/lerna-two/packages/b2/package.json diff --git a/@commitlint/config-lerna-scopes/fixtures/lerna-two/packages/a2/package.json b/@commitlint/config-lerna-scopes/fixtures/lerna-two/packages/a2/package.json new file mode 100644 index 0000000000..caecf1e4fb --- /dev/null +++ b/@commitlint/config-lerna-scopes/fixtures/lerna-two/packages/a2/package.json @@ -0,0 +1,4 @@ +{ + "name": "a2", + "version": "1.0.0" +} diff --git a/@commitlint/config-lerna-scopes/fixtures/lerna-two/packages/b2/package.json b/@commitlint/config-lerna-scopes/fixtures/lerna-two/packages/b2/package.json new file mode 100644 index 0000000000..cb876f041e --- /dev/null +++ b/@commitlint/config-lerna-scopes/fixtures/lerna-two/packages/b2/package.json @@ -0,0 +1,4 @@ +{ + "name": "b2", + "version": "1.0.0" +} diff --git a/@commitlint/config-lerna-scopes/index.test.js b/@commitlint/config-lerna-scopes/index.test.js index 8f9800aca0..c7661b833e 100644 --- a/@commitlint/config-lerna-scopes/index.test.js +++ b/@commitlint/config-lerna-scopes/index.test.js @@ -29,62 +29,69 @@ test('scope-enum is function', () => { }); test('scope-enum does not throw for missing context', async () => { - const semverLt = jest.spyOn(semver, 'lt'); const {'scope-enum': fn} = config.rules; await expect(fn()).resolves.toBeTruthy(); - expect(semverLt).toHaveLastReturnedWith(false); }); test('scope-enum has expected severity', async () => { - const semverLt = jest.spyOn(semver, 'lt'); const {'scope-enum': fn} = config.rules; const [severity] = await fn(); expect(severity).toBe(2); - expect(semverLt).toHaveLastReturnedWith(false); }); test('scope-enum has expected modifier', async () => { - const semverLt = jest.spyOn(semver, 'lt'); const {'scope-enum': fn} = config.rules; const [, modifier] = await fn(); expect(modifier).toBe('always'); - expect(semverLt).toHaveLastReturnedWith(false); }); test('returns empty value for empty lerna repository', async () => { - const semverLt = jest.spyOn(semver, 'lt'); const {'scope-enum': fn} = config.rules; const cwd = await lerna.bootstrap('empty', __dirname); const [, , value] = await fn({cwd}); expect(value).toEqual([]); - expect(semverLt).toHaveLastReturnedWith(false); }); test('returns expected value for basic lerna repository', async () => { - const semverLt = jest.spyOn(semver, 'lt'); const {'scope-enum': fn} = config.rules; const cwd = await lerna.bootstrap('basic', __dirname); const [, , value] = await fn({cwd}); expect(value).toEqual(['a', 'b']); - expect(semverLt).toHaveLastReturnedWith(false); }); test('returns expected value for scoped lerna repository', async () => { - const semverLt = jest.spyOn(semver, 'lt'); const {'scope-enum': fn} = config.rules; const cwd = await lerna.bootstrap('scoped', __dirname); const [, , value] = await fn({cwd}); expect(value).toEqual(['a', 'b']); - expect(semverLt).toHaveLastReturnedWith(false); }); test('works with lerna version < 3', async () => { - const semverLt = jest.spyOn(semver, 'lt'); const {'scope-enum': fn} = config.rules; const cwd = await lerna.bootstrap('lerna-two', __dirname); - await expect(fn({cwd})).resolves.toBeTruthy(); + const [, , value] = await fn({cwd}); + expect(value).toEqual(['a2', 'b2']); +}); + +test('uses lerna version < 3 if installed', async () => { + const semverLt = jest.spyOn(semver, 'lt'); + const cwd = await lerna.bootstrap('lerna-two', __dirname); + const packages = await config.utils.getPackages({cwd}); + + expect(packages).toEqual(['a2', 'b2']); expect(semverLt).toHaveBeenLastCalledWith('2.11.0', '3.0.0'); expect(semverLt).toHaveLastReturnedWith(true); }); + +test('uses lerna version >= 3 if installed', async () => { + const semverLt = jest.spyOn(semver, 'lt'); + const cwd = await lerna.bootstrap('basic', __dirname); + + const packages = await config.utils.getPackages({cwd}); + + expect(packages).toEqual(['a', 'b']); + expect(semverLt).toHaveBeenLastCalledWith('3.20.2', '3.0.0'); + expect(semverLt).toHaveLastReturnedWith(false); +});