From 7167716c019d98f0160d5a3b65ebd809108f18fc Mon Sep 17 00:00:00 2001 From: avivkeller Date: Sun, 22 Jun 2025 16:09:32 -0400 Subject: [PATCH 1/3] feat(test): validate commands --- bin/commands/__tests__/index.test.mjs | 30 +++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 bin/commands/__tests__/index.test.mjs diff --git a/bin/commands/__tests__/index.test.mjs b/bin/commands/__tests__/index.test.mjs new file mode 100644 index 00000000..87287899 --- /dev/null +++ b/bin/commands/__tests__/index.test.mjs @@ -0,0 +1,30 @@ +import assert from 'node:assert/strict'; +import { describe, it } from 'node:test'; + +import { Option } from 'commander'; + +import commands from '../index.mjs'; + +describe('Commands', () => { + it('should have unique command names', () => { + const names = new Set(); + + commands.forEach(({ name }) => { + assert.equal(names.has(name), false, `Duplicate command name: "${name}"`); + names.add(name); + }); + }); + + it('should use correct option names', () => { + commands.forEach(({ name: cmdName, options }) => { + Object.entries(options).forEach(([optName, { flags }]) => { + const expectedName = new Option(flags.at(-1)).attributeName(); + assert.equal( + optName, + expectedName, + `In "${cmdName}" command: option "${flags}" should be named "${expectedName}", not "${optName}"` + ); + }); + }); + }); +}); From 725f2b44aacb30b8e002525922a8a2051e96a905 Mon Sep 17 00:00:00 2001 From: avivkeller Date: Sun, 22 Jun 2025 16:18:35 -0400 Subject: [PATCH 2/3] add generator validation --- src/generators/__tests__/index.test.mjs | 42 +++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/generators/__tests__/index.test.mjs diff --git a/src/generators/__tests__/index.test.mjs b/src/generators/__tests__/index.test.mjs new file mode 100644 index 00000000..abcb5851 --- /dev/null +++ b/src/generators/__tests__/index.test.mjs @@ -0,0 +1,42 @@ +import assert from 'node:assert/strict'; +import { describe, it } from 'node:test'; + +import semver from 'semver'; + +import { allGenerators } from '../index.mjs'; + +const validDependencies = [...Object.keys(allGenerators), 'ast']; +const generatorEntries = Object.entries(allGenerators); + +describe('All Generators', () => { + it('should have keys matching their name property', () => { + generatorEntries.forEach(([key, generator]) => { + assert.equal( + key, + generator.name, + `Generator key "${key}" does not match its name property "${generator.name}"` + ); + }); + }); + + it('should have valid semver versions', () => { + generatorEntries.forEach(([key, generator]) => { + const isValid = semver.valid(generator.version); + assert.ok( + isValid, + `Generator "${key}" has invalid semver version: "${generator.version}"` + ); + }); + }); + + it('should have valid dependsOn references', () => { + generatorEntries.forEach(([key, generator]) => { + if (generator.dependsOn) { + assert.ok( + validDependencies.includes(generator.dependsOn), + `Generator "${key}" depends on "${generator.dependsOn}" which is not a valid generator or 'ast'` + ); + } + }); + }); +}); From cf75f5a020acb4d37f6c56e5cf12d067ffd06232 Mon Sep 17 00:00:00 2001 From: avivkeller Date: Sun, 22 Jun 2025 16:19:38 -0400 Subject: [PATCH 3/3] increase to 60% --- codecov.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/codecov.yml b/codecov.yml index d452e834..9c52ddfb 100644 --- a/codecov.yml +++ b/codecov.yml @@ -9,9 +9,9 @@ coverage: target: 80% project: default: - # TODO(@avivkeller): Once our coverage > 50%, - # increase this to 50%, and increase on increments - target: 40% + # TODO(@avivkeller): Once our coverage > 70%, + # increase this to 70%, and increase on increments + target: 60% ignore: - 'eslint.config.mjs'