diff --git a/scripts/published-package-smoke.mjs b/scripts/published-package-smoke.mjs index 9bd7329d..af1795bd 100644 --- a/scripts/published-package-smoke.mjs +++ b/scripts/published-package-smoke.mjs @@ -23,6 +23,26 @@ export { const execFileAsync = promisify(execFile); const SMOKE_TIMEOUT_MS = 180_000; +const VERSION_LABELS = new Set([ + 'published package npx version', + 'published package local version', + 'published package global version', +]); + +const SEMANTIC_QUERY_LABELS = new Set([ + 'published package npx sl query', + 'published package local sl query', + 'published package global sl query', +]); + +export function isPublishedPackageVersionLabel(label) { + return VERSION_LABELS.has(label); +} + +export function isPublishedPackageSemanticQueryLabel(label) { + return SEMANTIC_QUERY_LABELS.has(label); +} + function scriptRootDir() { return resolve(dirname(fileURLToPath(import.meta.url)), '..'); } @@ -77,14 +97,10 @@ export async function runPublishedPackageSmoke(config) { env: isGlobalCommand ? { ...globalEnv, ...command.env } : command.env, }); requireSuccess(command.label, result); - if ( - command.label === 'published package version' || - command.label === 'published package local binary' || - command.label === 'published package global binary' - ) { + if (isPublishedPackageVersionLabel(command.label)) { assert.match(result.stdout, /@kaelio\/ktx /); } - if (command.label === 'published package sl query') { + if (isPublishedPackageSemanticQueryLabel(command.label)) { assert.match(result.stdout, /SELECT/i); assert.match(result.stdout, /contracts/i); } diff --git a/scripts/published-package-smoke.test.mjs b/scripts/published-package-smoke.test.mjs index 8c7091c4..6852e237 100644 --- a/scripts/published-package-smoke.test.mjs +++ b/scripts/published-package-smoke.test.mjs @@ -5,6 +5,8 @@ import { describe, it } from 'node:test'; import { buildPublishedPackageNpxCommand, buildPublishedPackageSmokeCommands, + isPublishedPackageSemanticQueryLabel, + isPublishedPackageVersionLabel, publishedPackageSpec, readPublishedPackageSmokeConfig, } from './published-package-smoke.mjs'; @@ -146,6 +148,20 @@ describe('published package smoke config', () => { }); }); +describe('published package smoke output validation labels', () => { + it('classifies version and semantic query commands', () => { + assert.equal(isPublishedPackageVersionLabel('published package npx version'), true); + assert.equal(isPublishedPackageVersionLabel('published package local version'), true); + assert.equal(isPublishedPackageVersionLabel('published package global version'), true); + assert.equal(isPublishedPackageVersionLabel('published package setup demo'), false); + + assert.equal(isPublishedPackageSemanticQueryLabel('published package npx sl query'), true); + assert.equal(isPublishedPackageSemanticQueryLabel('published package local sl query'), true); + assert.equal(isPublishedPackageSemanticQueryLabel('published package global sl query'), true); + assert.equal(isPublishedPackageSemanticQueryLabel('published package local install'), false); + }); +}); + describe('published package smoke command construction', () => { const config = { enabled: true,