From b5b53b8f22661ef776805d91f40f0524e65d6f0d Mon Sep 17 00:00:00 2001 From: cha0s Date: Wed, 14 Feb 2024 20:16:31 -0600 Subject: [PATCH] test: simplify --- .github/workflows/ci.yml | 2 +- package.json | 4 +- packages/build/build/default.eslint.config.js | 2 +- packages/build/build/test.webpack.config.js | 15 +- packages/build/test/{server => }/build.js | 2 +- .../test/{server => }/cli-no-commands.js | 0 packages/build/test/e2e/lint.js | 8 +- packages/build/test/{server => }/explicate.js | 2 +- .../aliased-platforms}/package.json | 0 .../aliased-platforms/src}/index.js | 0 .../explicate/aliased-platforms/src/server.js | 0 .../fake_node_modules/dependency}/index.js | 0 .../dependency/server}/index.js | 0 .../build/flecks.bootstrap.js | 0 .../only-bootstrapped/package.json | 0 .../platformed/client}/index.js | 0 .../fake_node_modules/platformed}/index.js | 0 .../platformed/server}/index.js | 0 .../real-root/build/flecks.bootstrap.js | 0 .../fake_node_modules/real-root}/index.js | 0 .../fake_node_modules/real-root/package.json | 0 .../real-root/server}/index.js | 0 .../fake_node_modules/server-only/server.js | 0 .../modules-root}/index.js | 0 .../modules-root}/package.json | 0 .../explicate/src-root/package.json | 0 .../src-root/src}/index.js | 0 .../src-root/src/server}/index.js | 0 packages/build/test/{server => }/lint/fail.js | 0 packages/build/test/{server => }/lint/fine.js | 0 .../lint/root/build/default.eslint.config.js | 0 packages/build/test/{server => }/resolve.js | 10 +- .../test/{server => }/resolver-node-path.js | 0 .../{server/build => }/root/build/flecks.yml | 0 .../src-root/src/server => root/two}/index.js | 0 .../modules-root => root/two}/package.json | 0 packages/build/test/{server => }/yml.js | 6 +- .../test/{server => }/yml/build/flecks.yml | 0 packages/core/test/{server => }/resolve.js | 2 +- .../core/test/{server => }/resolve/bar/baz.js | 0 .../test/{server => }/resolve/bar/index.js | 0 .../core/test/{server => }/resolve/blah.js | 0 .../core/test/{server => }/resolve/boo.js | 0 .../core/test/{server => }/resolve/foo/baz.js | 0 .../test/{server => }/resolve/foo/index.js | 0 .../core/test/{server => }/resolve/moo.js | 0 .../core/test/{server => }/write-files.js | 0 .../create-app/test/{server => }/basics.js | 0 .../{server => }/failure-already-exists.js | 0 .../test/{server => }/failure-invalid-name.js | 0 packages/db/test/{server => }/models.js | 4 +- packages/db/test/{server => }/thing/index.js | 0 packages/dox/test/{server => }/parser.js | 2 +- .../{server => }/root/build/flecks.hooks.js | 0 .../dox/test/{server => }/root/src/index.js | 0 .../dox/test/{server => }/verified-root.js | 0 packages/dox/test/{server => }/visitors.js | 0 packages/fleck/build/commands.js | 10 +- .../server/test/{server => }/build-dev.js | 3 +- .../test/{server => }/build-production.js | 3 +- .../server/test/{server => }/config-fail.js | 2 +- .../test/{server => }/config-restart.js | 2 +- .../server/test/{server => }/config-update.js | 2 +- packages/server/test/helpers/build.js | 29 ++++ .../server/test/helpers/create-application.js | 16 ++ packages/server/test/helpers/listen.js | 0 .../listen.js => helpers/start-server.js} | 90 ++++++++++- packages/server/test/helpers/with-server.js | 35 ++++ .../{server => }/runtime-config-bootstrap.js | 2 +- .../{server => }/runtime-config-override.js | 2 +- .../{server => }/runtime-config-runtime.js | 2 +- .../test/{server => }/runtime-connect.js | 2 +- packages/server/test/server/build/build.js | 153 ------------------ .../test/{server => }/source-restart.js | 2 +- .../{server => }/template/build/flecks.yml | 0 .../{server => }/template/comm/package.json | 0 .../{server => }/template/comm/src/index.js | 0 .../{server => }/template/comm/src/server.js | 0 .../test/{server => }/template/package.json | 0 packages/socket/test/{server => }/packets.js | 2 +- .../socket/test/{server => }/thing/index.js | 2 +- packages/web/build/flecks.bootstrap.js | 27 +--- packages/web/test/helpers/connect-browser.js | 38 +++++ packages/web/test/helpers/with-web.js | 40 +---- .../{server => }/template/build/flecks.yml | 0 .../test/{server => }/template/package.json | 0 .../{server => }/template/test/package.json | 0 .../{server => }/template/test/src/client.js | 0 .../{server => }/template/test/src/index.js | 0 .../{server => }/template/test/src/server.js | 0 packages/web/test/{client => }/up.js | 2 +- 91 files changed, 259 insertions(+), 266 deletions(-) rename packages/build/test/{server => }/build.js (93%) rename packages/build/test/{server => }/cli-no-commands.js (100%) rename packages/build/test/{server => }/explicate.js (97%) rename packages/build/test/{server/build/root/two => explicate/aliased-platforms}/package.json (100%) rename packages/build/test/{server/build/root/two => explicate/aliased-platforms/src}/index.js (100%) rename packages/build/test/{server => }/explicate/aliased-platforms/src/server.js (100%) rename packages/build/test/{server/explicate/aliased-platforms/src => explicate/fake_node_modules/dependency}/index.js (100%) rename packages/build/test/{server/explicate/fake_node_modules/dependency => explicate/fake_node_modules/dependency/server}/index.js (100%) rename packages/build/test/{server => }/explicate/fake_node_modules/only-bootstrapped/build/flecks.bootstrap.js (100%) rename packages/build/test/{server => }/explicate/fake_node_modules/only-bootstrapped/package.json (100%) rename packages/build/test/{server/explicate/fake_node_modules/dependency/server => explicate/fake_node_modules/platformed/client}/index.js (100%) rename packages/build/test/{server/explicate/fake_node_modules/platformed/client => explicate/fake_node_modules/platformed}/index.js (100%) rename packages/build/test/{server/explicate/fake_node_modules/platformed => explicate/fake_node_modules/platformed/server}/index.js (100%) rename packages/build/test/{server => }/explicate/fake_node_modules/real-root/build/flecks.bootstrap.js (100%) rename packages/build/test/{server/explicate/fake_node_modules/platformed/server => explicate/fake_node_modules/real-root}/index.js (100%) rename packages/build/test/{server => }/explicate/fake_node_modules/real-root/package.json (100%) rename packages/build/test/{server/explicate/fake_node_modules/real-root => explicate/fake_node_modules/real-root/server}/index.js (100%) rename packages/build/test/{server => }/explicate/fake_node_modules/server-only/server.js (100%) rename packages/build/test/{server/explicate/fake_node_modules/real-root/server => explicate/modules-root}/index.js (100%) rename packages/build/test/{server/explicate/aliased-platforms => explicate/modules-root}/package.json (100%) rename packages/build/test/{server => }/explicate/src-root/package.json (100%) rename packages/build/test/{server/explicate/modules-root => explicate/src-root/src}/index.js (100%) rename packages/build/test/{server/explicate/src-root/src => explicate/src-root/src/server}/index.js (100%) rename packages/build/test/{server => }/lint/fail.js (100%) rename packages/build/test/{server => }/lint/fine.js (100%) rename packages/build/test/{server => }/lint/root/build/default.eslint.config.js (100%) rename packages/build/test/{server => }/resolve.js (55%) rename packages/build/test/{server => }/resolver-node-path.js (100%) rename packages/build/test/{server/build => }/root/build/flecks.yml (100%) rename packages/build/test/{server/explicate/src-root/src/server => root/two}/index.js (100%) rename packages/build/test/{server/explicate/modules-root => root/two}/package.json (100%) rename packages/build/test/{server => }/yml.js (65%) rename packages/build/test/{server => }/yml/build/flecks.yml (100%) rename packages/core/test/{server => }/resolve.js (93%) rename packages/core/test/{server => }/resolve/bar/baz.js (100%) rename packages/core/test/{server => }/resolve/bar/index.js (100%) rename packages/core/test/{server => }/resolve/blah.js (100%) rename packages/core/test/{server => }/resolve/boo.js (100%) rename packages/core/test/{server => }/resolve/foo/baz.js (100%) rename packages/core/test/{server => }/resolve/foo/index.js (100%) rename packages/core/test/{server => }/resolve/moo.js (100%) rename packages/core/test/{server => }/write-files.js (100%) rename packages/create-app/test/{server => }/basics.js (100%) rename packages/create-app/test/{server => }/failure-already-exists.js (100%) rename packages/create-app/test/{server => }/failure-invalid-name.js (100%) rename packages/db/test/{server => }/models.js (75%) rename packages/db/test/{server => }/thing/index.js (100%) rename packages/dox/test/{server => }/parser.js (96%) rename packages/dox/test/{server => }/root/build/flecks.hooks.js (100%) rename packages/dox/test/{server => }/root/src/index.js (100%) rename packages/dox/test/{server => }/verified-root.js (100%) rename packages/dox/test/{server => }/visitors.js (100%) rename packages/server/test/{server => }/build-dev.js (82%) rename packages/server/test/{server => }/build-production.js (82%) rename packages/server/test/{server => }/config-fail.js (96%) rename packages/server/test/{server => }/config-restart.js (95%) rename packages/server/test/{server => }/config-update.js (93%) create mode 100644 packages/server/test/helpers/build.js create mode 100644 packages/server/test/helpers/create-application.js create mode 100644 packages/server/test/helpers/listen.js rename packages/server/test/{server/build/listen.js => helpers/start-server.js} (51%) create mode 100644 packages/server/test/helpers/with-server.js rename packages/server/test/{server => }/runtime-config-bootstrap.js (96%) rename packages/server/test/{server => }/runtime-config-override.js (93%) rename packages/server/test/{server => }/runtime-config-runtime.js (83%) rename packages/server/test/{server => }/runtime-connect.js (86%) delete mode 100644 packages/server/test/server/build/build.js rename packages/server/test/{server => }/source-restart.js (92%) rename packages/server/test/{server => }/template/build/flecks.yml (100%) rename packages/server/test/{server => }/template/comm/package.json (100%) rename packages/server/test/{server => }/template/comm/src/index.js (100%) rename packages/server/test/{server => }/template/comm/src/server.js (100%) rename packages/server/test/{server => }/template/package.json (100%) rename packages/socket/test/{server => }/packets.js (86%) rename packages/socket/test/{server => }/thing/index.js (67%) create mode 100644 packages/web/test/helpers/connect-browser.js rename packages/web/test/{server => }/template/build/flecks.yml (100%) rename packages/web/test/{server => }/template/package.json (100%) rename packages/web/test/{server => }/template/test/package.json (100%) rename packages/web/test/{server => }/template/test/src/client.js (100%) rename packages/web/test/{server => }/template/test/src/index.js (100%) rename packages/web/test/{server => }/template/test/src/server.js (100%) rename packages/web/test/{client => }/up.js (95%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5effba7..6fa1fc8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,7 +38,7 @@ jobs: strategy: max-parallel: ${{ vars.CI_PARALLEL || 256 }} matrix: - test-platforms: ['-p default -p server', '-p e2e'] + test-platforms: ['', '-s e2e'] node-version: [16.x, 18.x, 20.x] steps: - uses: actions/checkout@v4 diff --git a/package.json b/package.json index 1b39225..79cd773 100644 --- a/package.json +++ b/package.json @@ -8,13 +8,13 @@ }, "scripts": { "build": "FORCE_COLOR=1 node build/tasks npm run -- build", + "ci": "act -W .github/workflows/ci.yml --matrix node-version:20.x", "dox": "flecks dox docusaurus && cd website && DOCUSAURUS_GENERATED_FILES_DIR_NAME=node_modules/.cache/docusaurus npx docusaurus", "dox:build": "flecks dox docusaurus && cd website && DOCUSAURUS_GENERATED_FILES_DIR_NAME=node_modules/.cache/docusaurus npx docusaurus build && cd .. && rm -rf gh-pages/* && mv website/build/* gh-pages && rm -rf website/build", "gh-pages": "cd gh-pages && git add . && git commit -m $(git -C ../website rev-parse HEAD) && git push origin gh-pages", "lint": "FORCE_COLOR=1 node build/tasks npm run -- lint", "publish": "node build/publish --provenance", - "test": "FORCE_COLOR=1 MOCHA_COLORS=1 node build/tasks npm run -- test", - "verify": "act -j test --matrix node-version:20.x" + "test": "FORCE_COLOR=1 MOCHA_COLORS=1 node build/tasks npm run -- test" }, "workspaces": [ "packages/*" diff --git a/packages/build/build/default.eslint.config.js b/packages/build/build/default.eslint.config.js index 79280bb..cb37c1b 100644 --- a/packages/build/build/default.eslint.config.js +++ b/packages/build/build/default.eslint.config.js @@ -22,7 +22,7 @@ module.exports = async (flecks) => ({ 'build/flecks.hooks.js', // Internal. ...!FLECKS_BUILD_TESTING_LINT - ? ['test/server/lint/fail.js'] + ? ['test/lint/fail.js'] : [], ], overrides: [ diff --git a/packages/build/build/test.webpack.config.js b/packages/build/build/test.webpack.config.js index 0ac3eac..5bad90e 100644 --- a/packages/build/build/test.webpack.config.js +++ b/packages/build/build/test.webpack.config.js @@ -12,7 +12,7 @@ const configFn = require('./common.webpack.config'); const { FLECKS_CORE_ROOT = process.cwd(), - FLECKS_CORE_TEST_PLATFORMS, + FLECKS_CORE_TEST_SUBDIRECTORIES, } = process.env; const tests = join(FLECKS_CORE_ROOT, 'test'); @@ -22,14 +22,13 @@ module.exports = async (env, argv, flecks) => { config.output.chunkFormat = false; config.output.path = join(FLECKS_CORE_ROOT, 'dist', 'test'); const testPaths = []; - const platforms = FLECKS_CORE_TEST_PLATFORMS - ? JSON.parse(FLECKS_CORE_TEST_PLATFORMS) - : [...new Set(['default', ...flecks.platforms])]; - if (platforms.includes('default')) { - testPaths.push(...await glob(join(tests, '*.js'))); - } + const subdirectories = JSON.parse(FLECKS_CORE_TEST_SUBDIRECTORIES); testPaths.push( - ...(await Promise.all(platforms.map((platform) => glob(join(tests, platform, '*.js'))))) + ...(await Promise.all( + subdirectories + .filter((subdirectory) => 'default' !== subdirectory) + .map((subdirectory) => glob(join(tests, subdirectory, '*.js'))), + )) .flat(), ); if (testPaths.length > 0) { diff --git a/packages/build/test/server/build.js b/packages/build/test/build.js similarity index 93% rename from packages/build/test/server/build.js rename to packages/build/test/build.js index 7720840..338824d 100644 --- a/packages/build/test/server/build.js +++ b/packages/build/test/build.js @@ -9,7 +9,7 @@ const { const Build = __non_webpack_require__(join(FLECKS_CORE_ROOT, 'build', 'build')); const loadConfig = __non_webpack_require__(join(FLECKS_CORE_ROOT, 'build', 'load-config')); -const buildRoot = join(FLECKS_CORE_ROOT, 'test', 'server', 'build', 'root'); +const buildRoot = join(FLECKS_CORE_ROOT, 'test', 'root'); it('defaults config', async () => { expect(await loadConfig(FLECKS_CORE_ROOT)) diff --git a/packages/build/test/server/cli-no-commands.js b/packages/build/test/cli-no-commands.js similarity index 100% rename from packages/build/test/server/cli-no-commands.js rename to packages/build/test/cli-no-commands.js diff --git a/packages/build/test/e2e/lint.js b/packages/build/test/e2e/lint.js index 72d5d14..85a91a0 100644 --- a/packages/build/test/e2e/lint.js +++ b/packages/build/test/e2e/lint.js @@ -4,7 +4,7 @@ import {expect} from 'chai'; it('can lint', async () => { expect( await processCode(await spawnWith( - ['npx', 'eslint', '--config', 'build/eslint.config.js', 'test/server/lint/fine.js'], + ['npx', 'eslint', '--config', 'build/eslint.config.js', 'test/lint/fine.js'], { env: { FLECKS_BUILD_ESLINT_NO_CACHE: true, @@ -19,7 +19,7 @@ it('can lint', async () => { it('can fail to lint', async () => { expect( await processCode(await spawnWith( - ['npx', 'eslint', '--config', 'build/eslint.config.js', 'test/server/lint/fail.js'], + ['npx', 'eslint', '--config', 'build/eslint.config.js', 'test/lint/fail.js'], { env: { FLECKS_BUILD_ESLINT_NO_CACHE: true, @@ -35,12 +35,12 @@ it('can fail to lint', async () => { it('can override lint', async () => { expect( await processCode(await spawnWith( - ['npx', 'eslint', '--config', 'build/eslint.config.js', 'test/server/lint/fine.js'], + ['npx', 'eslint', '--config', 'build/eslint.config.js', 'test/lint/fine.js'], { env: { FLECKS_BUILD_ESLINT_NO_CACHE: true, FLECKS_BUILD_TESTING_LINT: true, - FLECKS_CORE_ROOT: 'test/server/lint/root', + FLECKS_CORE_ROOT: 'test/lint/root', }, stdio: 'ignore', }, diff --git a/packages/build/test/server/explicate.js b/packages/build/test/explicate.js similarity index 97% rename from packages/build/test/server/explicate.js rename to packages/build/test/explicate.js index a902c7e..d0f813c 100644 --- a/packages/build/test/server/explicate.js +++ b/packages/build/test/explicate.js @@ -11,7 +11,7 @@ const { FLECKS_CORE_ROOT = process.cwd(), } = process.env; -const root = join(FLECKS_CORE_ROOT, 'test', 'server', 'explicate'); +const root = join(FLECKS_CORE_ROOT, 'test', 'explicate'); function createExplication(paths, platforms) { const resolver = new Resolver({ diff --git a/packages/build/test/server/build/root/two/package.json b/packages/build/test/explicate/aliased-platforms/package.json similarity index 100% rename from packages/build/test/server/build/root/two/package.json rename to packages/build/test/explicate/aliased-platforms/package.json diff --git a/packages/build/test/server/build/root/two/index.js b/packages/build/test/explicate/aliased-platforms/src/index.js similarity index 100% rename from packages/build/test/server/build/root/two/index.js rename to packages/build/test/explicate/aliased-platforms/src/index.js diff --git a/packages/build/test/server/explicate/aliased-platforms/src/server.js b/packages/build/test/explicate/aliased-platforms/src/server.js similarity index 100% rename from packages/build/test/server/explicate/aliased-platforms/src/server.js rename to packages/build/test/explicate/aliased-platforms/src/server.js diff --git a/packages/build/test/server/explicate/aliased-platforms/src/index.js b/packages/build/test/explicate/fake_node_modules/dependency/index.js similarity index 100% rename from packages/build/test/server/explicate/aliased-platforms/src/index.js rename to packages/build/test/explicate/fake_node_modules/dependency/index.js diff --git a/packages/build/test/server/explicate/fake_node_modules/dependency/index.js b/packages/build/test/explicate/fake_node_modules/dependency/server/index.js similarity index 100% rename from packages/build/test/server/explicate/fake_node_modules/dependency/index.js rename to packages/build/test/explicate/fake_node_modules/dependency/server/index.js diff --git a/packages/build/test/server/explicate/fake_node_modules/only-bootstrapped/build/flecks.bootstrap.js b/packages/build/test/explicate/fake_node_modules/only-bootstrapped/build/flecks.bootstrap.js similarity index 100% rename from packages/build/test/server/explicate/fake_node_modules/only-bootstrapped/build/flecks.bootstrap.js rename to packages/build/test/explicate/fake_node_modules/only-bootstrapped/build/flecks.bootstrap.js diff --git a/packages/build/test/server/explicate/fake_node_modules/only-bootstrapped/package.json b/packages/build/test/explicate/fake_node_modules/only-bootstrapped/package.json similarity index 100% rename from packages/build/test/server/explicate/fake_node_modules/only-bootstrapped/package.json rename to packages/build/test/explicate/fake_node_modules/only-bootstrapped/package.json diff --git a/packages/build/test/server/explicate/fake_node_modules/dependency/server/index.js b/packages/build/test/explicate/fake_node_modules/platformed/client/index.js similarity index 100% rename from packages/build/test/server/explicate/fake_node_modules/dependency/server/index.js rename to packages/build/test/explicate/fake_node_modules/platformed/client/index.js diff --git a/packages/build/test/server/explicate/fake_node_modules/platformed/client/index.js b/packages/build/test/explicate/fake_node_modules/platformed/index.js similarity index 100% rename from packages/build/test/server/explicate/fake_node_modules/platformed/client/index.js rename to packages/build/test/explicate/fake_node_modules/platformed/index.js diff --git a/packages/build/test/server/explicate/fake_node_modules/platformed/index.js b/packages/build/test/explicate/fake_node_modules/platformed/server/index.js similarity index 100% rename from packages/build/test/server/explicate/fake_node_modules/platformed/index.js rename to packages/build/test/explicate/fake_node_modules/platformed/server/index.js diff --git a/packages/build/test/server/explicate/fake_node_modules/real-root/build/flecks.bootstrap.js b/packages/build/test/explicate/fake_node_modules/real-root/build/flecks.bootstrap.js similarity index 100% rename from packages/build/test/server/explicate/fake_node_modules/real-root/build/flecks.bootstrap.js rename to packages/build/test/explicate/fake_node_modules/real-root/build/flecks.bootstrap.js diff --git a/packages/build/test/server/explicate/fake_node_modules/platformed/server/index.js b/packages/build/test/explicate/fake_node_modules/real-root/index.js similarity index 100% rename from packages/build/test/server/explicate/fake_node_modules/platformed/server/index.js rename to packages/build/test/explicate/fake_node_modules/real-root/index.js diff --git a/packages/build/test/server/explicate/fake_node_modules/real-root/package.json b/packages/build/test/explicate/fake_node_modules/real-root/package.json similarity index 100% rename from packages/build/test/server/explicate/fake_node_modules/real-root/package.json rename to packages/build/test/explicate/fake_node_modules/real-root/package.json diff --git a/packages/build/test/server/explicate/fake_node_modules/real-root/index.js b/packages/build/test/explicate/fake_node_modules/real-root/server/index.js similarity index 100% rename from packages/build/test/server/explicate/fake_node_modules/real-root/index.js rename to packages/build/test/explicate/fake_node_modules/real-root/server/index.js diff --git a/packages/build/test/server/explicate/fake_node_modules/server-only/server.js b/packages/build/test/explicate/fake_node_modules/server-only/server.js similarity index 100% rename from packages/build/test/server/explicate/fake_node_modules/server-only/server.js rename to packages/build/test/explicate/fake_node_modules/server-only/server.js diff --git a/packages/build/test/server/explicate/fake_node_modules/real-root/server/index.js b/packages/build/test/explicate/modules-root/index.js similarity index 100% rename from packages/build/test/server/explicate/fake_node_modules/real-root/server/index.js rename to packages/build/test/explicate/modules-root/index.js diff --git a/packages/build/test/server/explicate/aliased-platforms/package.json b/packages/build/test/explicate/modules-root/package.json similarity index 100% rename from packages/build/test/server/explicate/aliased-platforms/package.json rename to packages/build/test/explicate/modules-root/package.json diff --git a/packages/build/test/server/explicate/src-root/package.json b/packages/build/test/explicate/src-root/package.json similarity index 100% rename from packages/build/test/server/explicate/src-root/package.json rename to packages/build/test/explicate/src-root/package.json diff --git a/packages/build/test/server/explicate/modules-root/index.js b/packages/build/test/explicate/src-root/src/index.js similarity index 100% rename from packages/build/test/server/explicate/modules-root/index.js rename to packages/build/test/explicate/src-root/src/index.js diff --git a/packages/build/test/server/explicate/src-root/src/index.js b/packages/build/test/explicate/src-root/src/server/index.js similarity index 100% rename from packages/build/test/server/explicate/src-root/src/index.js rename to packages/build/test/explicate/src-root/src/server/index.js diff --git a/packages/build/test/server/lint/fail.js b/packages/build/test/lint/fail.js similarity index 100% rename from packages/build/test/server/lint/fail.js rename to packages/build/test/lint/fail.js diff --git a/packages/build/test/server/lint/fine.js b/packages/build/test/lint/fine.js similarity index 100% rename from packages/build/test/server/lint/fine.js rename to packages/build/test/lint/fine.js diff --git a/packages/build/test/server/lint/root/build/default.eslint.config.js b/packages/build/test/lint/root/build/default.eslint.config.js similarity index 100% rename from packages/build/test/server/lint/root/build/default.eslint.config.js rename to packages/build/test/lint/root/build/default.eslint.config.js diff --git a/packages/build/test/server/resolve.js b/packages/build/test/resolve.js similarity index 55% rename from packages/build/test/server/resolve.js rename to packages/build/test/resolve.js index 9069654..4866394 100644 --- a/packages/build/test/server/resolve.js +++ b/packages/build/test/resolve.js @@ -10,15 +10,15 @@ const { it('can resolve', async () => { const resolver = new Resolver(); - expect(await resolver.resolve('./test/server/resolve')) - .to.equal(join(FLECKS_CORE_ROOT, 'test', 'server', 'resolve.js')); + expect(await resolver.resolve('./test/resolve')) + .to.equal(join(FLECKS_CORE_ROOT, 'test', 'resolve.js')); }); it('can create aliases at runtime', async () => { const resolver = new Resolver(); - expect(await resolver.resolve('./test/server/foobar')) + expect(await resolver.resolve('./test/foobar')) .to.be.undefined; - resolver.addAlias('./test/server/foobar', './test/server/resolve'); - expect(await resolver.resolve('./test/server/foobar')) + resolver.addAlias('./test/foobar', './test/resolve'); + expect(await resolver.resolve('./test/foobar')) .to.not.be.undefined; }); diff --git a/packages/build/test/server/resolver-node-path.js b/packages/build/test/resolver-node-path.js similarity index 100% rename from packages/build/test/server/resolver-node-path.js rename to packages/build/test/resolver-node-path.js diff --git a/packages/build/test/server/build/root/build/flecks.yml b/packages/build/test/root/build/flecks.yml similarity index 100% rename from packages/build/test/server/build/root/build/flecks.yml rename to packages/build/test/root/build/flecks.yml diff --git a/packages/build/test/server/explicate/src-root/src/server/index.js b/packages/build/test/root/two/index.js similarity index 100% rename from packages/build/test/server/explicate/src-root/src/server/index.js rename to packages/build/test/root/two/index.js diff --git a/packages/build/test/server/explicate/modules-root/package.json b/packages/build/test/root/two/package.json similarity index 100% rename from packages/build/test/server/explicate/modules-root/package.json rename to packages/build/test/root/two/package.json diff --git a/packages/build/test/server/yml.js b/packages/build/test/yml.js similarity index 65% rename from packages/build/test/server/yml.js rename to packages/build/test/yml.js index c120b41..cd47dfa 100644 --- a/packages/build/test/server/yml.js +++ b/packages/build/test/yml.js @@ -5,13 +5,13 @@ import {readFile} from 'fs/promises'; it('can add paths to YML', async () => { await writeFile( - 'test/server/yml/build/flecks.yml', + 'test/yml/build/flecks.yml', ` bar: {} foo: {} `, ); - await addPathsToYml(['a', 'two'], 'test/server/yml'); - expect(Object.keys(await loadYml(await readFile('test/server/yml/build/flecks.yml')))) + await addPathsToYml(['a', 'two'], 'test/yml'); + expect(Object.keys(await loadYml(await readFile('test/yml/build/flecks.yml')))) .to.deep.equal(['a', 'bar', 'foo', 'two']); }); diff --git a/packages/build/test/server/yml/build/flecks.yml b/packages/build/test/yml/build/flecks.yml similarity index 100% rename from packages/build/test/server/yml/build/flecks.yml rename to packages/build/test/yml/build/flecks.yml diff --git a/packages/core/test/server/resolve.js b/packages/core/test/resolve.js similarity index 93% rename from packages/core/test/server/resolve.js rename to packages/core/test/resolve.js index 8c1fc6d..3932376 100644 --- a/packages/core/test/server/resolve.js +++ b/packages/core/test/resolve.js @@ -10,7 +10,7 @@ const { FLECKS_CORE_ROOT = process.cwd(), } = process.env; -const root = join(FLECKS_CORE_ROOT, 'test', 'server', 'resolve'); +const root = join(FLECKS_CORE_ROOT, 'test', 'resolve'); it('can resolve inexact', async () => { const clear = resolve({ diff --git a/packages/core/test/server/resolve/bar/baz.js b/packages/core/test/resolve/bar/baz.js similarity index 100% rename from packages/core/test/server/resolve/bar/baz.js rename to packages/core/test/resolve/bar/baz.js diff --git a/packages/core/test/server/resolve/bar/index.js b/packages/core/test/resolve/bar/index.js similarity index 100% rename from packages/core/test/server/resolve/bar/index.js rename to packages/core/test/resolve/bar/index.js diff --git a/packages/core/test/server/resolve/blah.js b/packages/core/test/resolve/blah.js similarity index 100% rename from packages/core/test/server/resolve/blah.js rename to packages/core/test/resolve/blah.js diff --git a/packages/core/test/server/resolve/boo.js b/packages/core/test/resolve/boo.js similarity index 100% rename from packages/core/test/server/resolve/boo.js rename to packages/core/test/resolve/boo.js diff --git a/packages/core/test/server/resolve/foo/baz.js b/packages/core/test/resolve/foo/baz.js similarity index 100% rename from packages/core/test/server/resolve/foo/baz.js rename to packages/core/test/resolve/foo/baz.js diff --git a/packages/core/test/server/resolve/foo/index.js b/packages/core/test/resolve/foo/index.js similarity index 100% rename from packages/core/test/server/resolve/foo/index.js rename to packages/core/test/resolve/foo/index.js diff --git a/packages/core/test/server/resolve/moo.js b/packages/core/test/resolve/moo.js similarity index 100% rename from packages/core/test/server/resolve/moo.js rename to packages/core/test/resolve/moo.js diff --git a/packages/core/test/server/write-files.js b/packages/core/test/write-files.js similarity index 100% rename from packages/core/test/server/write-files.js rename to packages/core/test/write-files.js diff --git a/packages/create-app/test/server/basics.js b/packages/create-app/test/basics.js similarity index 100% rename from packages/create-app/test/server/basics.js rename to packages/create-app/test/basics.js diff --git a/packages/create-app/test/server/failure-already-exists.js b/packages/create-app/test/failure-already-exists.js similarity index 100% rename from packages/create-app/test/server/failure-already-exists.js rename to packages/create-app/test/failure-already-exists.js diff --git a/packages/create-app/test/server/failure-invalid-name.js b/packages/create-app/test/failure-invalid-name.js similarity index 100% rename from packages/create-app/test/server/failure-invalid-name.js rename to packages/create-app/test/failure-invalid-name.js diff --git a/packages/db/test/server/models.js b/packages/db/test/models.js similarity index 75% rename from packages/db/test/server/models.js rename to packages/db/test/models.js index 19ab847..34ed440 100644 --- a/packages/db/test/server/models.js +++ b/packages/db/test/models.js @@ -5,8 +5,8 @@ it('automatically gathers models', async () => { const flecks = await Flecks.from({ flecks: { '@flecks/core': await import('@flecks/core'), - '@flecks/db': await import('../../src'), - '@flecks/db/server': await import('../../src/server'), + '@flecks/db': await import('@flecks/db'), + '@flecks/db/server': await import('@flecks/db/server'), '@test/thing': await import('./thing'), }, }); diff --git a/packages/db/test/server/thing/index.js b/packages/db/test/thing/index.js similarity index 100% rename from packages/db/test/server/thing/index.js rename to packages/db/test/thing/index.js diff --git a/packages/dox/test/server/parser.js b/packages/dox/test/parser.js similarity index 96% rename from packages/dox/test/server/parser.js rename to packages/dox/test/parser.js index 2c24244..7542516 100644 --- a/packages/dox/test/server/parser.js +++ b/packages/dox/test/parser.js @@ -84,6 +84,6 @@ it('parses todos', async () => { }); it('parses a root', async () => { - expect(await parseFleckRoot('@test/server', './test/server/root')) + expect(await parseFleckRoot('@test/server', './test/root')) .to.deep.equal(verifiedRoot); }); diff --git a/packages/dox/test/server/root/build/flecks.hooks.js b/packages/dox/test/root/build/flecks.hooks.js similarity index 100% rename from packages/dox/test/server/root/build/flecks.hooks.js rename to packages/dox/test/root/build/flecks.hooks.js diff --git a/packages/dox/test/server/root/src/index.js b/packages/dox/test/root/src/index.js similarity index 100% rename from packages/dox/test/server/root/src/index.js rename to packages/dox/test/root/src/index.js diff --git a/packages/dox/test/server/verified-root.js b/packages/dox/test/verified-root.js similarity index 100% rename from packages/dox/test/server/verified-root.js rename to packages/dox/test/verified-root.js diff --git a/packages/dox/test/server/visitors.js b/packages/dox/test/visitors.js similarity index 100% rename from packages/dox/test/server/visitors.js rename to packages/dox/test/visitors.js diff --git a/packages/fleck/build/commands.js b/packages/fleck/build/commands.js index 47cd088..218cf3c 100644 --- a/packages/fleck/build/commands.js +++ b/packages/fleck/build/commands.js @@ -23,7 +23,8 @@ module.exports = (program, flecks) => { ], options: [ program.createOption('-d, --no-production', 'dev build'), - program.createOption('-p, --platform [platforms...]', 'platforms to test'), + program.createOption('-s, --subdirectory [subdirectories...]', 'subdirectories to test') + .default(['.']), program.createOption('-t, --timeout ', 'timeout').default(2000), program.createOption('-v, --verbose', 'verbose output'), program.createOption('-w, --watch', 'watch for changes'), @@ -35,7 +36,7 @@ module.exports = (program, flecks) => { ].join('\n'), action: async (only, opts) => { const { - platform: platforms, + subdirectory: subdirectories, production, timeout, watch, @@ -43,9 +44,7 @@ module.exports = (program, flecks) => { const {build} = coreCommands(program, flecks); // Check for work. const [env, argv] = [{}, {mode: production ? 'production' : 'development'}]; - if (platforms) { - process.env.FLECKS_CORE_TEST_PLATFORMS = JSON.stringify(platforms); - } + process.env.FLECKS_CORE_TEST_SUBDIRECTORIES = JSON.stringify(subdirectories); const filename = await flecks.resolveBuildConfig('test.webpack.config.js', '@flecks/build'); const config = {test: await require(filename)(env, argv, flecks)}; await flecks.configureBuilds(config, env, argv); @@ -59,7 +58,6 @@ module.exports = (program, flecks) => { 'test', { env: { - FLECKS_CORE_TEST_PLATFORMS: platforms && JSON.stringify(platforms), FORCE_COLOR: 'dumb' !== TERM, }, production, diff --git a/packages/server/test/server/build-dev.js b/packages/server/test/build-dev.js similarity index 82% rename from packages/server/test/server/build-dev.js rename to packages/server/test/build-dev.js index f18b19d..03682a8 100644 --- a/packages/server/test/server/build-dev.js +++ b/packages/server/test/build-dev.js @@ -4,7 +4,8 @@ import {join} from 'path'; import {heavySetup} from '@flecks/core/build/testing'; import {expect} from 'chai'; -import {createApplication, build} from './build/build'; +import {build} from './helpers/build'; +import {createApplication} from './helpers/create-application'; let artifact; diff --git a/packages/server/test/server/build-production.js b/packages/server/test/build-production.js similarity index 82% rename from packages/server/test/server/build-production.js rename to packages/server/test/build-production.js index ac00241..87aa450 100644 --- a/packages/server/test/server/build-production.js +++ b/packages/server/test/build-production.js @@ -4,7 +4,8 @@ import {join} from 'path'; import {heavySetup} from '@flecks/core/build/testing'; import {expect} from 'chai'; -import {createApplication, build} from './build/build'; +import {build} from './helpers/build'; +import {createApplication} from './helpers/create-application'; let artifact; diff --git a/packages/server/test/server/config-fail.js b/packages/server/test/config-fail.js similarity index 96% rename from packages/server/test/server/config-fail.js rename to packages/server/test/config-fail.js index fe6dce6..483140e 100644 --- a/packages/server/test/server/config-fail.js +++ b/packages/server/test/config-fail.js @@ -3,7 +3,7 @@ import {join} from 'path'; import {writeFile} from '@flecks/core/server'; import {expect} from 'chai'; -import {withServer} from './build/build'; +import {withServer} from './helpers/with-server'; it('allows updates to fail', withServer(async ({server, socket}) => { expect((await socket.send({type: 'config.get', payload: 'comm.foo'})).payload) diff --git a/packages/server/test/server/config-restart.js b/packages/server/test/config-restart.js similarity index 95% rename from packages/server/test/server/config-restart.js rename to packages/server/test/config-restart.js index 00e007d..2524865 100644 --- a/packages/server/test/server/config-restart.js +++ b/packages/server/test/config-restart.js @@ -3,7 +3,7 @@ import {join} from 'path'; import {writeFile} from '@flecks/core/server'; import {expect} from 'chai'; -import {withServer} from './build/build'; +import {withServer} from './helpers/with-server'; it('restarts when config keys change', withServer(async ({server, socket}) => { let restarted; diff --git a/packages/server/test/server/config-update.js b/packages/server/test/config-update.js similarity index 93% rename from packages/server/test/server/config-update.js rename to packages/server/test/config-update.js index 9b80c75..5adcf60 100644 --- a/packages/server/test/server/config-update.js +++ b/packages/server/test/config-update.js @@ -3,7 +3,7 @@ import {join} from 'path'; import {writeFile} from '@flecks/core/server'; import {expect} from 'chai'; -import {withServer} from './build/build'; +import {withServer} from './helpers/with-server'; it('updates config', withServer(async ({server, socket}) => { expect((await socket.send({type: 'config.get', payload: '@flecks/core.id'})).payload) diff --git a/packages/server/test/helpers/build.js b/packages/server/test/helpers/build.js new file mode 100644 index 0000000..9ffd7ba --- /dev/null +++ b/packages/server/test/helpers/build.js @@ -0,0 +1,29 @@ +import {join} from 'path'; + +import { + binaryPath, + processCode, + spawnWith, +} from '@flecks/core/server'; + +const { + FLECKS_CORE_ROOT = process.cwd(), +} = process.env; + +export async function build(path, {args = [], opts = {}} = {}) { + return processCode(spawnWith( + [await binaryPath('flecks', '@flecks/build'), 'build', ...args], + { + stdio: 'ignore', + ...opts, + env: { + FLECKS_ENV__flecks_server__stats: '{"preset": "none"}', + FLECKS_ENV__flecks_server__start: 0, + FLECKS_CORE_ROOT: path, + NODE_ENV: 'test', + NODE_PATH: join(FLECKS_CORE_ROOT, '..', '..', 'node_modules'), + ...opts.env, + }, + }, + )); +} diff --git a/packages/server/test/helpers/create-application.js b/packages/server/test/helpers/create-application.js new file mode 100644 index 0000000..ba5bfca --- /dev/null +++ b/packages/server/test/helpers/create-application.js @@ -0,0 +1,16 @@ +import {cp} from 'fs/promises'; +import {join} from 'path'; + +import {createWorkspace} from '@flecks/core/build/testing'; + +const { + FLECKS_CORE_ROOT = process.cwd(), +} = process.env; + +export const templateDefaultPath = join(FLECKS_CORE_ROOT, 'test', 'template'); + +export async function createApplication(template = templateDefaultPath) { + const workspace = await createWorkspace(); + await cp(template, workspace, {recursive: true}); + return workspace; +} diff --git a/packages/server/test/helpers/listen.js b/packages/server/test/helpers/listen.js new file mode 100644 index 0000000..e69de29 diff --git a/packages/server/test/server/build/listen.js b/packages/server/test/helpers/start-server.js similarity index 51% rename from packages/server/test/server/build/listen.js rename to packages/server/test/helpers/start-server.js index 1de0909..79a69b9 100644 --- a/packages/server/test/server/build/listen.js +++ b/packages/server/test/helpers/start-server.js @@ -4,6 +4,17 @@ import {tmpdir} from 'os'; import {dirname, join} from 'path'; import {id} from '@flecks/core/build/testing'; +import { + binaryPath, + pipesink, + spawnWith, +} from '@flecks/core/server'; + +import {createApplication} from './create-application'; + +const { + FLECKS_CORE_ROOT = process.cwd(), +} = process.env; class SocketWrapper { @@ -47,7 +58,21 @@ class SocketWrapper { } -export async function socketListener() { +class TestingServer { + + constructor(path, child, socketServer) { + this.path = path; + this.child = child; + this.socketServer = socketServer; + } + + async waitForSocket(options) { + return this.socketServer.waitForSocket(options); + } + +} + +async function socketListener() { const path = join(tmpdir(), 'flecks', 'ci', await id()); await mkdir(dirname(path), {recursive: true}); const server = createServer(); @@ -83,3 +108,66 @@ export async function socketListener() { }); return {socketServer: server, socketPath: path}; } + +export async function startServer({ + args = ['-h'], + beforeBuild, + failOnErrorCode = true, + opts = {}, + path: request, + task, +} = {}) { + let previousTimeout; + const start = Date.now(); + if (task) { + previousTimeout = task.timeout(); + task.timeout(0); + } + const {socketPath, socketServer} = await socketListener(); + const path = request || await createApplication(); + if (beforeBuild) { + await beforeBuild({path, task}); + } + const server = spawnWith( + [await binaryPath('flecks', '@flecks/build'), 'build', ...args], + { + stdio: 'pipe', + ...opts, + env: { + FLECKS_ENV__flecks_server__stats: '{"preset": "none"}', + FLECKS_ENV__flecks_server__start: true, + FLECKS_CORE_ROOT: path, + FLECKS_SERVER_TEST_SOCKET: socketPath, + NODE_ENV: 'test', + NODE_PATH: join(FLECKS_CORE_ROOT, '..', '..', 'node_modules'), + ...opts.env, + }, + }, + ); + server.on('exit', async () => { + socketServer.close(); + }); + if (failOnErrorCode) { + const stderr = pipesink(server.stderr); + server.on('exit', async (code) => { + if (!server.done && 0 !== code) { + const buffer = await stderr; + if (!process.stderr.write(buffer)) { + await new Promise((resolve, reject) => { + process.stderr.on('error', reject); + process.stderr.on('drain', resolve); + }); + } + // eslint-disable-next-line no-console + console.error('\nserver process exited unexpectedly\n'); + process.exit(code); + } + }); + } + task?.timeout(previousTimeout + (Date.now() - start)); + return new TestingServer( + path, + server, + socketServer, + ); +} diff --git a/packages/server/test/helpers/with-server.js b/packages/server/test/helpers/with-server.js new file mode 100644 index 0000000..465d349 --- /dev/null +++ b/packages/server/test/helpers/with-server.js @@ -0,0 +1,35 @@ +import {startServer} from './start-server'; + +export function withServer(task, options) { + return async function withServer() { + const server = await startServer({...options, task: this}); + const socket = await server.waitForSocket({task: this}); + server.actions = async (actions) => { + const results = []; + await actions.reduce( + (p, action) => ( + p.then(() => ( + socket.send(action) + .then((result) => { + results.push(result); + }) + )) + ), + Promise.resolve(), + ); + return results; + }; + let taskError; + try { + await task({server, socket}); + } + catch (error) { + taskError = error; + } + server.child.done = true; + server.child.kill(); + if (taskError) { + throw taskError; + } + }; +} diff --git a/packages/server/test/server/runtime-config-bootstrap.js b/packages/server/test/runtime-config-bootstrap.js similarity index 96% rename from packages/server/test/server/runtime-config-bootstrap.js rename to packages/server/test/runtime-config-bootstrap.js index 3620995..7030c5b 100644 --- a/packages/server/test/server/runtime-config-bootstrap.js +++ b/packages/server/test/runtime-config-bootstrap.js @@ -4,7 +4,7 @@ import {join} from 'path'; import {writeFile} from '@flecks/core/server'; import {expect} from 'chai'; -import {withServer} from './build/build'; +import {withServer} from './helpers/with-server'; it('propagates bootstrap config', withServer( async ({server}) => { diff --git a/packages/server/test/server/runtime-config-override.js b/packages/server/test/runtime-config-override.js similarity index 93% rename from packages/server/test/server/runtime-config-override.js rename to packages/server/test/runtime-config-override.js index d42674b..12ba264 100644 --- a/packages/server/test/server/runtime-config-override.js +++ b/packages/server/test/runtime-config-override.js @@ -3,7 +3,7 @@ import {join} from 'path'; import {writeFile} from '@flecks/core/server'; import {expect} from 'chai'; -import {withServer} from './build/build'; +import {withServer} from './helpers/with-server'; it('propagates override config', withServer( async ({server}) => { diff --git a/packages/server/test/server/runtime-config-runtime.js b/packages/server/test/runtime-config-runtime.js similarity index 83% rename from packages/server/test/server/runtime-config-runtime.js rename to packages/server/test/runtime-config-runtime.js index 3b0ed41..1609945 100644 --- a/packages/server/test/server/runtime-config-runtime.js +++ b/packages/server/test/runtime-config-runtime.js @@ -1,6 +1,6 @@ import {expect} from 'chai'; -import {withServer} from './build/build'; +import {withServer} from './helpers/with-server'; it('propagates runtime config', withServer(async ({server}) => { const [{payload: foo}] = await server.actions([ diff --git a/packages/server/test/server/runtime-connect.js b/packages/server/test/runtime-connect.js similarity index 86% rename from packages/server/test/server/runtime-connect.js rename to packages/server/test/runtime-connect.js index f28a3b2..a452f6c 100644 --- a/packages/server/test/server/runtime-connect.js +++ b/packages/server/test/runtime-connect.js @@ -1,7 +1,7 @@ import {processCode} from '@flecks/core/src/server'; import {expect} from 'chai'; -import {withServer} from './build/build'; +import {withServer} from './helpers/with-server'; it('connects', withServer( async ({server}) => { diff --git a/packages/server/test/server/build/build.js b/packages/server/test/server/build/build.js deleted file mode 100644 index 7eef089..0000000 --- a/packages/server/test/server/build/build.js +++ /dev/null @@ -1,153 +0,0 @@ -import {cp} from 'fs/promises'; -import {join} from 'path'; - -import {createWorkspace} from '@flecks/core/build/testing'; -import { - binaryPath, - pipesink, - processCode, - spawnWith, -} from '@flecks/core/server'; - -import {socketListener} from './listen'; - -const { - FLECKS_CORE_ROOT = process.cwd(), -} = process.env; - -export const template = join(FLECKS_CORE_ROOT, 'test', 'server', 'template'); - -export async function createApplication() { - const workspace = await createWorkspace(); - await cp(template, workspace, {recursive: true}); - return workspace; -} - -class TestingServer { - - constructor(path, child, socketServer) { - this.path = path; - this.child = child; - this.socketServer = socketServer; - } - - async waitForSocket(options) { - return this.socketServer.waitForSocket(options); - } - -} - -export async function startServer({ - args = ['-h'], - beforeBuild, - failOnErrorCode = true, - opts = {}, - path: request, - task, -} = {}) { - let previousTimeout; - const start = Date.now(); - if (task) { - previousTimeout = task.timeout(); - task.timeout(0); - } - const {socketPath, socketServer} = await socketListener(); - const path = request || await createApplication(); - if (beforeBuild) { - await beforeBuild({path, task}); - } - const server = spawnWith( - [await binaryPath('flecks', '@flecks/build'), 'build', ...args], - { - stdio: 'pipe', - ...opts, - env: { - FLECKS_ENV__flecks_server__stats: '{"preset": "none"}', - FLECKS_ENV__flecks_server__start: true, - FLECKS_CORE_ROOT: path, - FLECKS_SERVER_TEST_SOCKET: socketPath, - NODE_ENV: 'test', - NODE_PATH: join(FLECKS_CORE_ROOT, '..', '..', 'node_modules'), - ...opts.env, - }, - }, - ); - server.on('exit', async () => { - socketServer.close(); - }); - if (failOnErrorCode) { - const stderr = pipesink(server.stderr); - server.on('exit', async (code) => { - if (!server.done && 0 !== code) { - const buffer = await stderr; - if (!process.stderr.write(buffer)) { - await new Promise((resolve, reject) => { - process.stderr.on('error', reject); - process.stderr.on('drain', resolve); - }); - } - // eslint-disable-next-line no-console - console.error('\nserver process exited unexpectedly\n'); - process.exit(code); - } - }); - } - task?.timeout(previousTimeout + (Date.now() - start)); - return new TestingServer( - path, - server, - socketServer, - ); -} - -export function withServer(task, options) { - return async function withServer() { - const server = await startServer({...options, task: this}); - const socket = await server.waitForSocket({task: this}); - server.actions = async (actions) => { - const results = []; - await actions.reduce( - (p, action) => ( - p.then(() => ( - socket.send(action) - .then((result) => { - results.push(result); - }) - )) - ), - Promise.resolve(), - ); - return results; - }; - let taskError; - try { - await task({server, socket}); - } - catch (error) { - taskError = error; - } - server.child.done = true; - server.child.kill(); - if (taskError) { - throw taskError; - } - }; -} - -export async function build(path, {args = [], opts = {}} = {}) { - return processCode(spawnWith( - [await binaryPath('flecks', '@flecks/build'), 'build', ...args], - { - stdio: 'ignore', - ...opts, - env: { - FLECKS_ENV__flecks_server__stats: '{"preset": "none"}', - FLECKS_ENV__flecks_server__start: 0, - FLECKS_CORE_ROOT: path, - NODE_ENV: 'test', - NODE_PATH: join(FLECKS_CORE_ROOT, '..', '..', 'node_modules'), - ...opts.env, - }, - }, - )); -} diff --git a/packages/server/test/server/source-restart.js b/packages/server/test/source-restart.js similarity index 92% rename from packages/server/test/server/source-restart.js rename to packages/server/test/source-restart.js index 0c93756..0853126 100644 --- a/packages/server/test/server/source-restart.js +++ b/packages/server/test/source-restart.js @@ -3,7 +3,7 @@ import {join} from 'path'; import {writeFile} from '@flecks/core/server'; import {expect} from 'chai'; -import {withServer} from './build/build'; +import {withServer} from './helpers/with-server'; it('restarts when root sources change', withServer(async ({server, socket}) => { let restarted; diff --git a/packages/server/test/server/template/build/flecks.yml b/packages/server/test/template/build/flecks.yml similarity index 100% rename from packages/server/test/server/template/build/flecks.yml rename to packages/server/test/template/build/flecks.yml diff --git a/packages/server/test/server/template/comm/package.json b/packages/server/test/template/comm/package.json similarity index 100% rename from packages/server/test/server/template/comm/package.json rename to packages/server/test/template/comm/package.json diff --git a/packages/server/test/server/template/comm/src/index.js b/packages/server/test/template/comm/src/index.js similarity index 100% rename from packages/server/test/server/template/comm/src/index.js rename to packages/server/test/template/comm/src/index.js diff --git a/packages/server/test/server/template/comm/src/server.js b/packages/server/test/template/comm/src/server.js similarity index 100% rename from packages/server/test/server/template/comm/src/server.js rename to packages/server/test/template/comm/src/server.js diff --git a/packages/server/test/server/template/package.json b/packages/server/test/template/package.json similarity index 100% rename from packages/server/test/server/template/package.json rename to packages/server/test/template/package.json diff --git a/packages/socket/test/server/packets.js b/packages/socket/test/packets.js similarity index 86% rename from packages/socket/test/server/packets.js rename to packages/socket/test/packets.js index 203cda7..23c3f4e 100644 --- a/packages/socket/test/server/packets.js +++ b/packages/socket/test/packets.js @@ -5,7 +5,7 @@ it('automatically gathers packets', async () => { const flecks = await Flecks.from({ flecks: { '@flecks/core': await import('@flecks/core'), - '@flecks/socket': await import('../../src'), + '@flecks/socket': await import('@flecks/socket'), '@test/thing': await import('./thing'), }, }); diff --git a/packages/socket/test/server/thing/index.js b/packages/socket/test/thing/index.js similarity index 67% rename from packages/socket/test/server/thing/index.js rename to packages/socket/test/thing/index.js index cfc5052..50fcf5c 100644 --- a/packages/socket/test/server/thing/index.js +++ b/packages/socket/test/thing/index.js @@ -1,4 +1,4 @@ -import Packet from '../../../src/packet/packet'; +import Packet from '@flecks/socket/packet/packet'; export const hooks = { '@flecks/socket.packets': () => ({ diff --git a/packages/web/build/flecks.bootstrap.js b/packages/web/build/flecks.bootstrap.js index 2b2240d..765bc31 100644 --- a/packages/web/build/flecks.bootstrap.js +++ b/packages/web/build/flecks.bootstrap.js @@ -1,24 +1,15 @@ const {stat, unlink} = require('fs/promises'); -const { - basename, - dirname, - extname, - join, - relative, -} = require('path'); +const {join} = require('path'); const Build = require('@flecks/build/build/build'); const {regexFromExtensions} = require('@flecks/build/src/server'); -const {binaryPath, glob, spawnWith} = require('@flecks/core/src/server'); +const {binaryPath, spawnWith} = require('@flecks/core/src/server'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const { FLECKS_CORE_ROOT = process.cwd(), - FLECKS_CORE_TEST_PLATFORMS, } = process.env; -const tests = join(FLECKS_CORE_ROOT, 'test'); - exports.hooks = { '@flecks/build.config': async (target, config, env, argv, flecks) => { const isProduction = 'production' === argv.mode; @@ -37,20 +28,6 @@ exports.hooks = { case 'test': { finalLoader = {loader: MiniCssExtractPlugin.loader}; config.plugins.push(new MiniCssExtractPlugin({filename: 'assets/[name].css'})); - if ( - FLECKS_CORE_TEST_PLATFORMS - ? JSON.parse(FLECKS_CORE_TEST_PLATFORMS).includes('client') - : true - ) { - (await glob(join(tests, 'client', '*.js'))) - .forEach((path) => { - const entry = relative(tests, path); - config.entry[join(dirname(entry), basename(entry, extname(entry)))] = [ - 'source-map-support/register', - path, - ]; - }); - } break; } case 'web': { diff --git a/packages/web/test/helpers/connect-browser.js b/packages/web/test/helpers/connect-browser.js new file mode 100644 index 0000000..88eecb4 --- /dev/null +++ b/packages/web/test/helpers/connect-browser.js @@ -0,0 +1,38 @@ +import puppeteer from 'puppeteer'; + +export async function connectBrowser(url, options = {}) { + let previousTimeout; + const start = Date.now(); + if (options.task) { + previousTimeout = options.task.timeout(); + options.task.timeout(0); + } + const {timeout = 30000} = options; + const browser = await puppeteer.launch({ + // For CI. + args: ['--no-sandbox'], + }); + const page = await browser.newPage(); + let response; + const handle = setTimeout(() => { + throw new Error(`timed out trying to connect browser to '${url}'!`); + }, timeout); + /* eslint-disable no-await-in-loop */ + while (!response) { + try { + response = await page.goto(url, {...options, timeout: timeout - (Date.now() - start)}); + if (response) { + break; + } + } + catch { + await new Promise((resolve) => { + setTimeout(resolve, 250); + }); + } + } + /* eslint-enable no-await-in-loop */ + clearTimeout(handle); + options.task?.timeout(previousTimeout + (Date.now() - start)); + return {browser, page, response}; +} diff --git a/packages/web/test/helpers/with-web.js b/packages/web/test/helpers/with-web.js index 8be0200..faa0bc0 100644 --- a/packages/web/test/helpers/with-web.js +++ b/packages/web/test/helpers/with-web.js @@ -1,42 +1,6 @@ -import {startServer} from '@flecks/server/test/server/build/build'; -import puppeteer from 'puppeteer'; +import {startServer} from '@flecks/server/test/helpers/start-server'; -export async function connectBrowser(url, options = {}) { - let previousTimeout; - const start = Date.now(); - if (options.task) { - previousTimeout = options.task.timeout(); - options.task.timeout(0); - } - const {timeout = 30000} = options; - const browser = await puppeteer.launch({ - // For CI. - args: ['--no-sandbox'], - }); - const page = await browser.newPage(); - let response; - const handle = setTimeout(() => { - throw new Error(`timed out trying to connect browser to '${url}'!`); - }, timeout); - /* eslint-disable no-await-in-loop */ - while (!response) { - try { - response = await page.goto(url, {...options, timeout: timeout - (Date.now() - start)}); - if (response) { - break; - } - } - catch { - await new Promise((resolve) => { - setTimeout(resolve, 250); - }); - } - } - /* eslint-enable no-await-in-loop */ - clearTimeout(handle); - options.task?.timeout(previousTimeout + (Date.now() - start)); - return {browser, page, response}; -} +import {connectBrowser} from './connect-browser'; export function withWeb(task, options) { return async function withWeb() { diff --git a/packages/web/test/server/template/build/flecks.yml b/packages/web/test/template/build/flecks.yml similarity index 100% rename from packages/web/test/server/template/build/flecks.yml rename to packages/web/test/template/build/flecks.yml diff --git a/packages/web/test/server/template/package.json b/packages/web/test/template/package.json similarity index 100% rename from packages/web/test/server/template/package.json rename to packages/web/test/template/package.json diff --git a/packages/web/test/server/template/test/package.json b/packages/web/test/template/test/package.json similarity index 100% rename from packages/web/test/server/template/test/package.json rename to packages/web/test/template/test/package.json diff --git a/packages/web/test/server/template/test/src/client.js b/packages/web/test/template/test/src/client.js similarity index 100% rename from packages/web/test/server/template/test/src/client.js rename to packages/web/test/template/test/src/client.js diff --git a/packages/web/test/server/template/test/src/index.js b/packages/web/test/template/test/src/index.js similarity index 100% rename from packages/web/test/server/template/test/src/index.js rename to packages/web/test/template/test/src/index.js diff --git a/packages/web/test/server/template/test/src/server.js b/packages/web/test/template/test/src/server.js similarity index 100% rename from packages/web/test/server/template/test/src/server.js rename to packages/web/test/template/test/src/server.js diff --git a/packages/web/test/client/up.js b/packages/web/test/up.js similarity index 95% rename from packages/web/test/client/up.js rename to packages/web/test/up.js index 9d2fbd5..a6fd8d8 100644 --- a/packages/web/test/client/up.js +++ b/packages/web/test/up.js @@ -1,6 +1,6 @@ import {expect} from 'chai'; -import {withWeb} from '../helpers/with-web'; +import {withWeb} from './helpers/with-web'; let report;