diff --git a/.github/workflows/ci_compatibility-nodejs.yml b/.github/workflows/ci_compatibility-nodejs.yml index c2167628..927c8e5a 100644 --- a/.github/workflows/ci_compatibility-nodejs.yml +++ b/.github/workflows/ci_compatibility-nodejs.yml @@ -11,24 +11,7 @@ jobs: strategy: fail-fast: false matrix: - node-version: - [ - '08', - '09', - '10', - '11', - '12', - '13', - '14', - '15', - '16', - '17', - '18', - '19', - '20', - '21', - 'latest', - ] + node-version: ['08', '10', '12', '14', '16', '18', '20', 'latest'] name: Node.js ${{ matrix.node-version }} steps: - name: ➕ Actions - Checkout diff --git a/src/builders/assert.ts b/src/builders/assert.ts new file mode 100644 index 00000000..0a022c9d --- /dev/null +++ b/src/builders/assert.ts @@ -0,0 +1,335 @@ +import type { ProcessAssertionOptions } from '../@types/assert.js'; +import type assert from 'node:assert'; +import type { AssertPredicate } from 'node:assert'; +import { nodeVersion } from '../parsers/get-runtime.js'; +import { processAssert, processAsyncAssert } from '../services/assert.js'; + +export const createAssert = (nodeAssert: typeof assert) => { + const ok = ( + value: unknown, + message?: ProcessAssertionOptions['message'] + ): void => { + processAssert( + () => { + nodeAssert.ok(value); + }, + { message } + ); + }; + + const equal = ( + actual: unknown, + expected: unknown, + message?: ProcessAssertionOptions['message'] + ): void => { + processAssert( + () => { + nodeAssert.equal(actual, expected); + }, + { message } + ); + }; + + const deepEqual = ( + actual: unknown, + expected: unknown, + message?: ProcessAssertionOptions['message'] + ): void => { + processAssert(() => nodeAssert.deepEqual(actual, expected), { message }); + }; + + const strictEqual = ( + actual: unknown, + expected: unknown, + message?: ProcessAssertionOptions['message'] + ): void => { + processAssert(() => nodeAssert.strictEqual(actual, expected), { message }); + }; + + const deepStrictEqual = ( + actual: unknown, + expected: unknown, + message?: ProcessAssertionOptions['message'] + ): void => { + processAssert(() => nodeAssert.deepStrictEqual(actual, expected), { + message, + }); + }; + + const notEqual = ( + actual: unknown, + expected: unknown, + message?: ProcessAssertionOptions['message'] + ): void => { + processAssert(() => nodeAssert.notEqual(actual, expected), { + message, + }); + }; + + const notDeepEqual = ( + actual: unknown, + expected: unknown, + message?: ProcessAssertionOptions['message'] + ): void => { + processAssert(() => nodeAssert.notDeepEqual(actual, expected), { message }); + }; + + const notStrictEqual = ( + actual: unknown, + expected: unknown, + message?: ProcessAssertionOptions['message'] + ): void => { + processAssert(() => nodeAssert.notStrictEqual(actual, expected), { + message, + }); + }; + + const notDeepStrictEqual = ( + actual: unknown, + expected: unknown, + message?: ProcessAssertionOptions['message'] + ): void => { + processAssert(() => nodeAssert.notDeepStrictEqual(actual, expected), { + message, + }); + }; + + const ifError = ( + value: unknown, + message?: ProcessAssertionOptions['message'] + ): void => { + processAssert( + () => { + nodeAssert.ifError(value); + }, + { + message, + defaultMessage: 'Expected no error, but received an error', + hideDiff: true, + throw: true, + } + ); + }; + + const fail = (message?: ProcessAssertionOptions['message']): never => { + processAssert( + () => { + nodeAssert.fail(message); + }, + { + message, + defaultMessage: 'Test failed intentionally', + hideDiff: true, + } + ); + + process.exit(1); + }; + + function doesNotThrow( + block: () => unknown, + message?: string | ProcessAssertionOptions['message'] + ): void; + function doesNotThrow( + block: () => unknown, + error: AssertPredicate, + message?: ProcessAssertionOptions['message'] + ): void; + function doesNotThrow( + block: () => unknown, + errorOrMessage?: AssertPredicate | ProcessAssertionOptions['message'], + message?: ProcessAssertionOptions['message'] + ): void { + processAssert( + () => { + if ( + typeof errorOrMessage === 'function' || + errorOrMessage instanceof RegExp || + typeof errorOrMessage === 'object' + ) { + nodeAssert.doesNotThrow(block, errorOrMessage, message); + } else { + const msg = + typeof errorOrMessage === 'string' ? errorOrMessage : message; + nodeAssert.doesNotThrow(block, msg); + } + }, + { + message: typeof errorOrMessage === 'string' ? errorOrMessage : message, + defaultMessage: 'Expected function not to throw', + hideDiff: true, + throw: true, + } + ); + } + + function throws( + block: () => unknown, + message?: ProcessAssertionOptions['message'] + ): void; + function throws( + block: () => unknown, + error: AssertPredicate, + message?: ProcessAssertionOptions['message'] + ): void; + function throws( + block: () => unknown, + errorOrMessage?: AssertPredicate | ProcessAssertionOptions['message'], + message?: ProcessAssertionOptions['message'] + ): void { + if ( + typeof errorOrMessage === 'function' || + errorOrMessage instanceof RegExp || + typeof errorOrMessage === 'object' + ) { + processAssert(() => nodeAssert.throws(block, errorOrMessage), { + message, + defaultMessage: 'Expected function to throw', + hideDiff: true, + }); + } else { + const msg = + typeof errorOrMessage !== 'undefined' ? errorOrMessage : message; + + processAssert(() => nodeAssert.throws(block, message), { + message: msg, + defaultMessage: 'Expected function to throw', + hideDiff: true, + }); + } + } + + function rejects( + block: (() => Promise) | Promise, + message?: ProcessAssertionOptions['message'] + ): Promise; + function rejects( + block: (() => Promise) | Promise, + error: AssertPredicate, + message?: ProcessAssertionOptions['message'] + ): Promise; + async function rejects( + block: (() => Promise) | Promise, + errorOrMessage?: AssertPredicate | ProcessAssertionOptions['message'], + message?: ProcessAssertionOptions['message'] + ): Promise { + await processAsyncAssert( + async () => { + if ( + typeof errorOrMessage === 'function' || + errorOrMessage instanceof RegExp || + typeof errorOrMessage === 'object' + ) { + await nodeAssert.rejects(block, errorOrMessage, message); + } else { + const msg = + typeof errorOrMessage === 'string' ? errorOrMessage : message; + await nodeAssert.rejects(block, msg); + } + }, + { + message: typeof errorOrMessage === 'string' ? errorOrMessage : message, + defaultMessage: 'Expected promise to be rejected with specified error', + hideDiff: true, + throw: true, + } + ); + } + + function doesNotReject( + block: (() => Promise) | Promise, + message?: ProcessAssertionOptions['message'] + ): Promise; + function doesNotReject( + block: (() => Promise) | Promise, + error: AssertPredicate, + message?: ProcessAssertionOptions['message'] + ): Promise; + async function doesNotReject( + block: (() => Promise) | Promise, + errorOrMessage?: AssertPredicate | ProcessAssertionOptions['message'], + message?: ProcessAssertionOptions['message'] + ): Promise { + await processAsyncAssert( + async () => { + if ( + typeof errorOrMessage === 'function' || + errorOrMessage instanceof RegExp || + typeof errorOrMessage === 'object' + ) { + await nodeAssert.doesNotReject(block, errorOrMessage, message); + } else { + await nodeAssert.doesNotReject(block, message); + } + }, + { + message: typeof errorOrMessage === 'string' ? errorOrMessage : message, + defaultMessage: 'Got unwanted rejection', + hideDiff: true, + throw: true, + } + ); + } + + const match = ( + value: string, + regExp: RegExp, + message?: ProcessAssertionOptions['message'] + ): void => { + /* c8 ignore next 3 */ // Platform version + if (typeof nodeVersion === 'number' && nodeVersion < 12) { + throw new Error('match is available from Node.js 12 or higher'); + } + + processAssert(() => nodeAssert?.match(value, regExp), { + message, + actual: 'Value', + expected: 'RegExp', + defaultMessage: 'Value should match regExp', + }); + }; + + const doesNotMatch = ( + value: string, + regExp: RegExp, + message?: ProcessAssertionOptions['message'] + ): void => { + /* c8 ignore next 3 */ // Platform version + if (typeof nodeVersion === 'number' && nodeVersion < 12) { + throw new Error('doesNotMatch is available from Node.js 12 or higher'); + } + + processAssert(() => nodeAssert.doesNotMatch(value, regExp), { + message, + actual: 'Value', + expected: 'RegExp', + defaultMessage: 'Value should not match regExp', + }); + }; + + const assert = Object.assign( + (value: unknown, message?: ProcessAssertionOptions['message']) => + ok(value, message), + { + ok, + equal, + deepEqual, + strictEqual, + deepStrictEqual, + doesNotMatch, + doesNotReject, + throws, + doesNotThrow, + notEqual, + notDeepEqual, + notStrictEqual, + notDeepStrictEqual, + match, + ifError, + fail, + rejects, + } + ); + + return assert; +}; diff --git a/src/modules/essentials/assert.ts b/src/modules/essentials/assert.ts index dfb893a6..047b3c81 100644 --- a/src/modules/essentials/assert.ts +++ b/src/modules/essentials/assert.ts @@ -1,4 +1,4 @@ import nodeAssert from 'node:assert'; -import { createAssert } from '../../services/assert.js'; +import { createAssert } from '../../builders/assert.js'; export const assert = createAssert(nodeAssert); diff --git a/src/modules/essentials/poku.ts b/src/modules/essentials/poku.ts index 90d163c4..9cc5a764 100644 --- a/src/modules/essentials/poku.ts +++ b/src/modules/essentials/poku.ts @@ -61,6 +61,7 @@ export async function poku( showLogs && showTestResults(); exit(code, configs?.quiet); + return; } // Parallel diff --git a/src/modules/essentials/strict.ts b/src/modules/essentials/strict.ts index 43a82f10..322aab5c 100644 --- a/src/modules/essentials/strict.ts +++ b/src/modules/essentials/strict.ts @@ -1,4 +1,4 @@ import nodeAssert from 'node:assert/strict'; -import { createAssert } from '../../services/assert.js'; +import { createAssert } from '../../builders/assert.js'; export const strict = createAssert(nodeAssert); diff --git a/src/services/assert.ts b/src/services/assert.ts index 65afbcfe..d1a2c49e 100644 --- a/src/services/assert.ts +++ b/src/services/assert.ts @@ -1,12 +1,10 @@ import type { ProcessAssertionOptions } from '../@types/assert.js'; -import type assert from 'node:assert'; -import type { AssertPredicate } from 'node:assert'; import { AssertionError } from 'node:assert'; -import { cwd as processCWD, env, exit } from 'node:process'; +import process, { cwd as processCWD, env } from 'node:process'; import path from 'node:path'; import { findFile } from '../parsers/find-file-from-stack.js'; import { parseResultType } from '../parsers/assert.js'; -import { nodeVersion } from '../parsers/get-runtime.js'; + import { indentation } from '../configs/indentation.js'; import { format } from './format.js'; import { Write } from './write.js'; @@ -14,30 +12,22 @@ import { Write } from './write.js'; const cwd = processCWD(); const regexFile = /file:(\/\/)?/; -export const processAssert = async ( - cb: () => void | Promise, - options: ProcessAssertionOptions -) => { +const assertProcessor = () => { const isPoku = typeof env?.FILE === 'string' && env?.FILE.length > 0; const FILE = env.FILE; - let preIdentation = ''; - if (indentation.hasDescribe) { - preIdentation += ' '; - } - - if (indentation.hasItOrTest) { - preIdentation += ' '; - } + let preIdentation = ''; - try { - const cbResult = cb(); + const handleSuccess = (options: ProcessAssertionOptions) => { + if (typeof options.message === 'string') { + if (indentation.hasDescribe) { + preIdentation += ' '; + } - if (cbResult instanceof Promise) { - await cbResult; - } + if (indentation.hasItOrTest) { + preIdentation += ' '; + } - if (typeof options.message === 'string') { const message = isPoku && !indentation.hasDescribe && !indentation.hasItOrTest ? `${preIdentation}${format(`${format(`✔ ${options.message}`).bold()} ${format(`› ${FILE}`).success().dim()}`).success()}` @@ -45,12 +35,26 @@ export const processAssert = async ( Write.log(message); } - } catch (error) { + + preIdentation = ''; + }; + + const handleError = (error: unknown, options: ProcessAssertionOptions) => { + process.exitCode = 1; + if (error instanceof AssertionError) { const { code, actual, expected, operator } = error; const absolutePath = findFile(error).replace(regexFile, ''); const file = path.relative(path.resolve(cwd), absolutePath); + if (indentation.hasDescribe) { + preIdentation += ' '; + } + + if (indentation.hasItOrTest) { + preIdentation += ' '; + } + let message = ''; if (typeof options.message === 'string') { @@ -96,6 +100,8 @@ export const processAssert = async ( for (const line of splitExpected) { Write.log(`${preIdentation} ${format(line).success().bold()}`); } + + preIdentation = ''; } if (options.throw) { @@ -103,340 +109,37 @@ export const processAssert = async ( Write.hr(); } - exit(1); + if (isPoku) { + throw error; + } } - /* c8 ignore next 2 */ // Unknown external error + /* c8 ignore next */ // Unknown external error throw error; - } -}; - -export const createAssert = (nodeAssert: typeof assert) => { - const ok = ( - value: unknown, - message?: ProcessAssertionOptions['message'] - ): void => { - processAssert( - () => { - nodeAssert.ok(value); - }, - { message } - ); - }; - - const equal = ( - actual: unknown, - expected: unknown, - message?: ProcessAssertionOptions['message'] - ): void => { - processAssert( - () => { - nodeAssert.equal(actual, expected); - }, - { message } - ); - }; - - const deepEqual = ( - actual: unknown, - expected: unknown, - message?: ProcessAssertionOptions['message'] - ): void => { - processAssert(() => nodeAssert.deepEqual(actual, expected), { message }); - }; - - const strictEqual = ( - actual: unknown, - expected: unknown, - message?: ProcessAssertionOptions['message'] - ): void => { - processAssert(() => nodeAssert.strictEqual(actual, expected), { message }); - }; - - const deepStrictEqual = ( - actual: unknown, - expected: unknown, - message?: ProcessAssertionOptions['message'] - ): void => { - processAssert(() => nodeAssert.deepStrictEqual(actual, expected), { - message, - }); - }; - - const notEqual = ( - actual: unknown, - expected: unknown, - message?: ProcessAssertionOptions['message'] - ): void => { - processAssert(() => nodeAssert.notEqual(actual, expected), { - message, - }); }; - const notDeepEqual = ( - actual: unknown, - expected: unknown, - message?: ProcessAssertionOptions['message'] - ): void => { - processAssert(() => nodeAssert.notDeepEqual(actual, expected), { message }); - }; - - const notStrictEqual = ( - actual: unknown, - expected: unknown, - message?: ProcessAssertionOptions['message'] - ): void => { - processAssert(() => nodeAssert.notStrictEqual(actual, expected), { - message, - }); - }; - - const notDeepStrictEqual = ( - actual: unknown, - expected: unknown, - message?: ProcessAssertionOptions['message'] - ): void => { - processAssert(() => nodeAssert.notDeepStrictEqual(actual, expected), { - message, - }); - }; - - const ifError = ( - value: unknown, - message?: ProcessAssertionOptions['message'] - ): void => { - processAssert( - () => { - nodeAssert.ifError(value); - }, - { - message, - defaultMessage: 'Expected no error, but received an error', - hideDiff: true, - throw: true, - } - ); - }; - - const fail = (message?: ProcessAssertionOptions['message']): never => { - processAssert( - () => { - nodeAssert.fail(message); - }, - { - message, - defaultMessage: 'Test failed intentionally', - hideDiff: true, - } - ); - - process.exit(1); - }; - - function doesNotThrow( - block: () => unknown, - message?: string | ProcessAssertionOptions['message'] - ): void; - function doesNotThrow( - block: () => unknown, - error: AssertPredicate, - message?: ProcessAssertionOptions['message'] - ): void; - function doesNotThrow( - block: () => unknown, - errorOrMessage?: AssertPredicate | ProcessAssertionOptions['message'], - message?: ProcessAssertionOptions['message'] - ): void { - processAssert( - () => { - if ( - typeof errorOrMessage === 'function' || - errorOrMessage instanceof RegExp || - typeof errorOrMessage === 'object' - ) { - nodeAssert.doesNotThrow(block, errorOrMessage, message); - } else { - const msg = - typeof errorOrMessage === 'string' ? errorOrMessage : message; - nodeAssert.doesNotThrow(block, msg); - } - }, - { - message: typeof errorOrMessage === 'string' ? errorOrMessage : message, - defaultMessage: 'Expected function not to throw', - hideDiff: true, - throw: true, - } - ); - } - - function throws( - block: () => unknown, - message?: ProcessAssertionOptions['message'] - ): void; - function throws( - block: () => unknown, - error: AssertPredicate, - message?: ProcessAssertionOptions['message'] - ): void; - function throws( - block: () => unknown, - errorOrMessage?: AssertPredicate | ProcessAssertionOptions['message'], - message?: ProcessAssertionOptions['message'] - ): void { - if ( - typeof errorOrMessage === 'function' || - errorOrMessage instanceof RegExp || - typeof errorOrMessage === 'object' - ) { - processAssert(() => nodeAssert.throws(block, errorOrMessage), { - message, - defaultMessage: 'Expected function to throw', - hideDiff: true, - }); - } else { - const msg = - typeof errorOrMessage !== 'undefined' ? errorOrMessage : message; - - processAssert(() => nodeAssert.throws(block, message), { - message: msg, - defaultMessage: 'Expected function to throw', - hideDiff: true, - }); + const processAssert = (cb: () => void, options: ProcessAssertionOptions) => { + try { + cb(); + handleSuccess(options); + } catch (error) { + handleError(error, options); } - } - - function rejects( - block: (() => Promise) | Promise, - message?: ProcessAssertionOptions['message'] - ): Promise; - function rejects( - block: (() => Promise) | Promise, - error: AssertPredicate, - message?: ProcessAssertionOptions['message'] - ): Promise; - async function rejects( - block: (() => Promise) | Promise, - errorOrMessage?: AssertPredicate | ProcessAssertionOptions['message'], - message?: ProcessAssertionOptions['message'] - ): Promise { - await processAssert( - async () => { - if ( - typeof errorOrMessage === 'function' || - errorOrMessage instanceof RegExp || - typeof errorOrMessage === 'object' - ) { - await nodeAssert.rejects(block, errorOrMessage, message); - } else { - const msg = - typeof errorOrMessage === 'string' ? errorOrMessage : message; - await nodeAssert.rejects(block, msg); - } - }, - { - message: typeof errorOrMessage === 'string' ? errorOrMessage : message, - defaultMessage: 'Expected promise to be rejected with specified error', - hideDiff: true, - throw: true, - } - ); - } - - function doesNotReject( - block: (() => Promise) | Promise, - message?: ProcessAssertionOptions['message'] - ): Promise; - function doesNotReject( - block: (() => Promise) | Promise, - error: AssertPredicate, - message?: ProcessAssertionOptions['message'] - ): Promise; - async function doesNotReject( - block: (() => Promise) | Promise, - errorOrMessage?: AssertPredicate | ProcessAssertionOptions['message'], - message?: ProcessAssertionOptions['message'] - ): Promise { - await processAssert( - async () => { - if ( - typeof errorOrMessage === 'function' || - errorOrMessage instanceof RegExp || - typeof errorOrMessage === 'object' - ) { - await nodeAssert.doesNotReject(block, errorOrMessage, message); - } else { - await nodeAssert.doesNotReject(block, message); - } - }, - { - message: typeof errorOrMessage === 'string' ? errorOrMessage : message, - defaultMessage: 'Got unwanted rejection', - hideDiff: true, - throw: true, - } - ); - } - - const match = ( - value: string, - regExp: RegExp, - message?: ProcessAssertionOptions['message'] - ): void => { - /* c8 ignore next 3 */ // Platform version - if (typeof nodeVersion === 'number' && nodeVersion < 12) { - throw new Error('match is available from Node.js 12 or higher'); - } - - processAssert(() => nodeAssert?.match(value, regExp), { - message, - actual: 'Value', - expected: 'RegExp', - defaultMessage: 'Value should match regExp', - }); }; - const doesNotMatch = ( - value: string, - regExp: RegExp, - message?: ProcessAssertionOptions['message'] - ): void => { - /* c8 ignore next 3 */ // Platform version - if (typeof nodeVersion === 'number' && nodeVersion < 12) { - throw new Error('doesNotMatch is available from Node.js 12 or higher'); + const processAsyncAssert = async ( + cb: () => Promise, + options: ProcessAssertionOptions + ) => { + try { + await cb(); + handleSuccess(options); + } catch (error) { + handleError(error, options); } - - processAssert(() => nodeAssert.doesNotMatch(value, regExp), { - message, - actual: 'Value', - expected: 'RegExp', - defaultMessage: 'Value should not match regExp', - }); }; - const assert = Object.assign( - (value: unknown, message?: ProcessAssertionOptions['message']) => - ok(value, message), - { - ok, - equal, - deepEqual, - strictEqual, - deepStrictEqual, - doesNotMatch, - doesNotReject, - throws, - doesNotThrow, - notEqual, - notDeepEqual, - notStrictEqual, - notDeepStrictEqual, - match, - ifError, - fail, - rejects, - } - ); - - return assert; + return { processAssert, processAsyncAssert }; }; + +export const { processAssert, processAsyncAssert } = assertProcessor(); diff --git a/src/services/write.ts b/src/services/write.ts index adf48405..e3d0a9b0 100644 --- a/src/services/write.ts +++ b/src/services/write.ts @@ -6,7 +6,7 @@ export const Write = { stdout.write(`${String(data)}\n`); }, hr: () => { - const line = '⎯'.repeat(stdout.columns - 10 || 40); + const line = '─'.repeat(stdout.columns - 10 || 40); Write.log(`\n\x1b[2m\x1b[90m${line}\x1b[0m\n`); }, diff --git a/test/compatibility/node-09.test.ts b/test/compatibility/node-09.test.ts deleted file mode 100644 index fe290402..00000000 --- a/test/compatibility/node-09.test.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { test } from '../../src/modules/helpers/test.js'; -import { assert } from '../../src/modules/essentials/assert.js'; -import { docker } from '../../src/modules/helpers/container.js'; - -const projectName = 'poku'; -const serviceName = 'node-09'; - -test(`Compatibility Tests: ${serviceName}`, async () => { - const dockerfile = docker.dockerfile({ - containerName: serviceName, - tagName: `${projectName}-${serviceName}`, - }); - - await dockerfile.remove(); - - const compose = docker.compose({ - build: true, - cwd: './test/docker', - detach: false, - serviceName, - projectName, - // verbose: true, - }); - - const result = await compose.up(); - - if (!result) { - assert.fail(`See the logs by running \`docker logs ${serviceName}\``); - } - - await dockerfile.remove(); -}); diff --git a/test/compatibility/node-11.test.ts b/test/compatibility/node-11.test.ts deleted file mode 100644 index 16539b10..00000000 --- a/test/compatibility/node-11.test.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { test } from '../../src/modules/helpers/test.js'; -import { assert } from '../../src/modules/essentials/assert.js'; -import { docker } from '../../src/modules/helpers/container.js'; - -const projectName = 'poku'; -const serviceName = 'node-11'; - -test(`Compatibility Tests: ${serviceName}`, async () => { - const dockerfile = docker.dockerfile({ - containerName: serviceName, - tagName: `${projectName}-${serviceName}`, - }); - - await dockerfile.remove(); - - const compose = docker.compose({ - build: true, - cwd: './test/docker', - detach: false, - serviceName, - projectName, - // verbose: true, - }); - - const result = await compose.up(); - - if (!result) { - assert.fail(`See the logs by running \`docker logs ${serviceName}\``); - } - - await dockerfile.remove(); -}); diff --git a/test/compatibility/node-13.test.ts b/test/compatibility/node-13.test.ts deleted file mode 100644 index 5a6822ff..00000000 --- a/test/compatibility/node-13.test.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { test } from '../../src/modules/helpers/test.js'; -import { assert } from '../../src/modules/essentials/assert.js'; -import { docker } from '../../src/modules/helpers/container.js'; - -const projectName = 'poku'; -const serviceName = 'node-13'; - -test(`Compatibility Tests: ${serviceName}`, async () => { - const dockerfile = docker.dockerfile({ - containerName: serviceName, - tagName: `${projectName}-${serviceName}`, - }); - - await dockerfile.remove(); - - const compose = docker.compose({ - build: true, - cwd: './test/docker', - detach: false, - serviceName, - projectName, - // verbose: true, - }); - - const result = await compose.up(); - - if (!result) { - assert.fail(`See the logs by running \`docker logs ${serviceName}\``); - } - - await dockerfile.remove(); -}); diff --git a/test/compatibility/node-15.test.ts b/test/compatibility/node-15.test.ts deleted file mode 100644 index 002924c1..00000000 --- a/test/compatibility/node-15.test.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { test } from '../../src/modules/helpers/test.js'; -import { assert } from '../../src/modules/essentials/assert.js'; -import { docker } from '../../src/modules/helpers/container.js'; - -const projectName = 'poku'; -const serviceName = 'node-15'; - -test(`Compatibility Tests: ${serviceName}`, async () => { - const dockerfile = docker.dockerfile({ - containerName: serviceName, - tagName: `${projectName}-${serviceName}`, - }); - - await dockerfile.remove(); - - const compose = docker.compose({ - build: true, - cwd: './test/docker', - detach: false, - serviceName, - projectName, - // verbose: true, - }); - - const result = await compose.up(); - - if (!result) { - assert.fail(`See the logs by running \`docker logs ${serviceName}\``); - } - - await dockerfile.remove(); -}); diff --git a/test/compatibility/node-17.test.ts b/test/compatibility/node-17.test.ts deleted file mode 100644 index d45fa4b7..00000000 --- a/test/compatibility/node-17.test.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { test } from '../../src/modules/helpers/test.js'; -import { assert } from '../../src/modules/essentials/assert.js'; -import { docker } from '../../src/modules/helpers/container.js'; - -const projectName = 'poku'; -const serviceName = 'node-17'; - -test(`Compatibility Tests: ${serviceName}`, async () => { - const dockerfile = docker.dockerfile({ - containerName: serviceName, - tagName: `${projectName}-${serviceName}`, - }); - - await dockerfile.remove(); - - const compose = docker.compose({ - build: true, - cwd: './test/docker', - detach: false, - serviceName, - projectName, - // verbose: true, - }); - - const result = await compose.up(); - - if (!result) { - assert.fail(`See the logs by running \`docker logs ${serviceName}\``); - } - - await dockerfile.remove(); -}); diff --git a/test/compatibility/node-19.test.ts b/test/compatibility/node-19.test.ts deleted file mode 100644 index 78b3c79f..00000000 --- a/test/compatibility/node-19.test.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { test } from '../../src/modules/helpers/test.js'; -import { assert } from '../../src/modules/essentials/assert.js'; -import { docker } from '../../src/modules/helpers/container.js'; - -const projectName = 'poku'; -const serviceName = 'node-19'; - -test(`Compatibility Tests: ${serviceName}`, async () => { - const dockerfile = docker.dockerfile({ - containerName: serviceName, - tagName: `${projectName}-${serviceName}`, - }); - - await dockerfile.remove(); - - const compose = docker.compose({ - build: true, - cwd: './test/docker', - detach: false, - serviceName, - projectName, - // verbose: true, - }); - - const result = await compose.up(); - - if (!result) { - assert.fail(`See the logs by running \`docker logs ${serviceName}\``); - } - - await dockerfile.remove(); -}); diff --git a/test/compatibility/node-21.test.ts b/test/compatibility/node-21.test.ts deleted file mode 100644 index f5160694..00000000 --- a/test/compatibility/node-21.test.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { test } from '../../src/modules/helpers/test.js'; -import { assert } from '../../src/modules/essentials/assert.js'; -import { docker } from '../../src/modules/helpers/container.js'; - -const projectName = 'poku'; -const serviceName = 'node-21'; - -test(`Compatibility Tests: ${serviceName}`, async () => { - const dockerfile = docker.dockerfile({ - containerName: serviceName, - tagName: `${projectName}-${serviceName}`, - }); - - await dockerfile.remove(); - - const compose = docker.compose({ - build: true, - cwd: './test/docker', - detach: false, - serviceName, - projectName, - // verbose: true, - }); - - const result = await compose.up(); - - if (!result) { - assert.fail(`See the logs by running \`docker logs ${serviceName}\``); - } - - await dockerfile.remove(); -}); diff --git a/test/docker/docker-compose.yml b/test/docker/docker-compose.yml index 05d3e32c..427d5cfd 100644 --- a/test/docker/docker-compose.yml +++ b/test/docker/docker-compose.yml @@ -25,22 +25,6 @@ services: environment: NODE_ENV: production - node-06: - container_name: 'node-06' - build: - context: ../../ - dockerfile: ./test/docker/node/06.Dockerfile - environment: - NODE_ENV: production - - node-07: - container_name: 'node-07' - build: - context: ../../ - dockerfile: ./test/docker/node/07.Dockerfile - environment: - NODE_ENV: production - node-08: container_name: 'node-08' build: @@ -49,14 +33,6 @@ services: environment: NODE_ENV: production - node-09: - container_name: 'node-09' - build: - context: ../../ - dockerfile: ./test/docker/node/09.Dockerfile - environment: - NODE_ENV: production - node-10: container_name: 'node-10' build: @@ -65,14 +41,6 @@ services: environment: NODE_ENV: production - node-11: - container_name: 'node-11' - build: - context: ../../ - dockerfile: ./test/docker/node/11.Dockerfile - environment: - NODE_ENV: production - node-12: container_name: 'node-12' build: @@ -81,14 +49,6 @@ services: environment: NODE_ENV: production - node-13: - container_name: 'node-13' - build: - context: ../../ - dockerfile: ./test/docker/node/13.Dockerfile - environment: - NODE_ENV: production - node-14: container_name: 'node-14' build: @@ -97,14 +57,6 @@ services: environment: NODE_ENV: production - node-15: - container_name: 'node-15' - build: - context: ../../ - dockerfile: ./test/docker/node/15.Dockerfile - environment: - NODE_ENV: production - node-16: container_name: 'node-16' build: @@ -113,14 +65,6 @@ services: environment: NODE_ENV: production - node-17: - container_name: 'node-17' - build: - context: ../../ - dockerfile: ./test/docker/node/17.Dockerfile - environment: - NODE_ENV: production - node-18: container_name: 'node-18' build: @@ -129,14 +73,6 @@ services: environment: NODE_ENV: production - node-19: - container_name: 'node-19' - build: - context: ../../ - dockerfile: ./test/docker/node/19.Dockerfile - environment: - NODE_ENV: production - node-20: container_name: 'node-20' build: @@ -145,14 +81,6 @@ services: environment: NODE_ENV: production - node-21: - container_name: 'node-21' - build: - context: ../../ - dockerfile: ./test/docker/node/21.Dockerfile - environment: - NODE_ENV: production - node-latest: container_name: 'node-latest' build: diff --git a/test/docker/node/09.Dockerfile b/test/docker/node/09.Dockerfile deleted file mode 100644 index 74e471df..00000000 --- a/test/docker/node/09.Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM node:9-alpine - -WORKDIR /usr/app - -COPY ./ci ./ -COPY ./fixtures/server/package.json ./fixtures/server/package.json - -RUN apk update -RUN apk add lsof - -CMD ["node", "test/run.test.js"] diff --git a/test/docker/node/11.Dockerfile b/test/docker/node/11.Dockerfile deleted file mode 100644 index b4def7e7..00000000 --- a/test/docker/node/11.Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM node:11-alpine - -WORKDIR /usr/app - -COPY ./ci ./ -COPY ./fixtures/server/package.json ./fixtures/server/package.json - -RUN apk add lsof - -CMD ["node", "test/run.test.js"] diff --git a/test/docker/node/13.Dockerfile b/test/docker/node/13.Dockerfile deleted file mode 100644 index cc73d38d..00000000 --- a/test/docker/node/13.Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM node:13-alpine - -WORKDIR /usr/app - -COPY ./ci ./ -COPY ./fixtures/server/package.json ./fixtures/server/package.json - -RUN apk add lsof - -CMD ["node", "test/run.test.js"] diff --git a/test/docker/node/15.Dockerfile b/test/docker/node/15.Dockerfile deleted file mode 100644 index e4343564..00000000 --- a/test/docker/node/15.Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM node:15-alpine - -WORKDIR /usr/app - -COPY ./ci ./ -COPY ./fixtures/server/package.json ./fixtures/server/package.json - -RUN apk add lsof - -CMD ["node", "test/run.test.js"] diff --git a/test/docker/node/17.Dockerfile b/test/docker/node/17.Dockerfile deleted file mode 100644 index f986f499..00000000 --- a/test/docker/node/17.Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM node:17-alpine - -WORKDIR /usr/app - -COPY ./ci ./ -COPY ./fixtures/server/package.json ./fixtures/server/package.json - -RUN apk add lsof - -CMD ["node", "test/run.test.js"] diff --git a/test/docker/node/19.Dockerfile b/test/docker/node/19.Dockerfile deleted file mode 100644 index 7a97afba..00000000 --- a/test/docker/node/19.Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM node:19-alpine - -WORKDIR /usr/app - -COPY ./ci ./ -COPY ./fixtures/server/package.json ./fixtures/server/package.json - -RUN apk add lsof - -CMD ["node", "test/run.test.js"] diff --git a/test/docker/node/21.Dockerfile b/test/docker/node/21.Dockerfile deleted file mode 100644 index 7eb815b1..00000000 --- a/test/docker/node/21.Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM node:21-alpine - -WORKDIR /usr/app - -COPY ./ci ./ -COPY ./fixtures/server/package.json ./fixtures/server/package.json - -RUN apk add lsof - -CMD ["node", "test/run.test.js"]