diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index e02a3fe3f..f649b7977 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -128,8 +128,8 @@ $ yarn test Below are some tips to help with running / debugging tests: - `describe.only` / `it.only`: only runs this block - `xdescribe` / `xit`: dont run this block -- Uncomment `setup.teardownTestBed()` in a case to see the build output without it getting cleaned up post test run -- Use `new TestBed(true)` get debug output from Greenwood when running tests +- Uncomment `runner.teardown()` in a case to see the build output without it getting cleaned up post test run +- Use `new Runner(true)` get debug output from Greenwood when running tests > **PLEASE DO NOT COMMIT ANY OF THESE ABOVE CHANGES THOUGH** diff --git a/package.json b/package.json index cfbc38af2..c035fe9bb 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "@ls-lint/ls-lint": "^1.9.2", "chai": "^4.2.0", "eslint": "^6.8.0", + "gallinago": "^0.3.0", "glob-promise": "^3.4.0", "jsdom": "^14.0.0", "lerna": "^3.16.4", diff --git a/packages/cli/test/cases/build.config.default/build.config.default.spec.js b/packages/cli/test/cases/build.config.default/build.config.default.spec.js index 7445bb1ea..301dcbe5d 100644 --- a/packages/cli/test/cases/build.config.default/build.config.default.spec.js +++ b/packages/cli/test/cases/build.config.default/build.config.default.spec.js @@ -14,27 +14,34 @@ * User Workspace * Greenwood default (src/) */ +const path = require('path'); const runSmokeTest = require('../../../../../test/smoke-test'); -const TestBed = require('../../../../../test/test-bed'); +const { getSetupFiles, getOutputTeardownFiles } = require('../../../../../test/utils'); +const Runner = require('gallinago').Runner; describe('Build Greenwood With: ', function() { - const LABEL = 'Empty User Configuration and No Workspace'; - let setup; + const LABEL = 'Empty Configuration and Default Workspace'; + const cliPath = path.join(process.cwd(), 'packages/cli/src/index.js'); + const outputPath = __dirname; + let runner; - before(async function() { - setup = new TestBed(); - this.context = await setup.setupTestBed(__dirname); + before(function() { + this.context = { + publicDir: path.join(outputPath, 'public') + }; + runner = new Runner(); }); describe(LABEL, function() { before(async function() { - await setup.runGreenwoodCommand('build'); + await runner.setup(outputPath, getSetupFiles(outputPath)); + await runner.runCommand(cliPath, 'build'); }); runSmokeTest(['public', 'index'], LABEL); }); after(function() { - setup.teardownTestBed(); + runner.teardown(getOutputTeardownFiles(outputPath)); }); }); \ No newline at end of file diff --git a/packages/cli/test/cases/build.config.default/greenwood.config.js b/packages/cli/test/cases/build.config.default/greenwood.config.js deleted file mode 100644 index a09954537..000000000 --- a/packages/cli/test/cases/build.config.default/greenwood.config.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = {}; \ No newline at end of file diff --git a/packages/cli/test/cases/build.config.error-mode/build.config.error-mode.spec.js b/packages/cli/test/cases/build.config.error-mode/build.config.error-mode.spec.js index bd291dbe6..b81a05ab4 100644 --- a/packages/cli/test/cases/build.config.error-mode/build.config.error-mode.spec.js +++ b/packages/cli/test/cases/build.config.error-mode/build.config.error-mode.spec.js @@ -17,28 +17,30 @@ * Greenwood default */ const expect = require('chai').expect; -const TestBed = require('../../../../../test/test-bed'); +const path = require('path'); +const Runner = require('gallinago').Runner; describe('Build Greenwood With: ', function() { - let setup; + const cliPath = path.join(process.cwd(), 'packages/cli/src/index.js'); + const outputPath = __dirname; + let runner; - before(async function() { - setup = new TestBed(); - await setup.setupTestBed(__dirname); + before(function() { + this.context = { + publicDir: path.join(outputPath, 'public') + }; + runner = new Runner(); }); describe('Custom Configuration with a bad value for mode', function() { it('should throw an error that provided mode is not valid', async function() { try { - await setup.runGreenwoodCommand('build'); + await runner.setup(outputPath); + await runner.runCommand(cliPath, 'build'); } catch (err) { expect(err).to.contain('Error: provided mode "loremipsum" is not supported. Please use one of: ssg, mpa.'); } }); }); - after(function() { - setup.teardownTestBed(); - }); - }); \ No newline at end of file diff --git a/packages/cli/test/cases/build.config.error-optimization/build.config.error-optimization.spec.js b/packages/cli/test/cases/build.config.error-optimization/build.config.error-optimization.spec.js index cfb4dbbe5..b6efe40c7 100644 --- a/packages/cli/test/cases/build.config.error-optimization/build.config.error-optimization.spec.js +++ b/packages/cli/test/cases/build.config.error-optimization/build.config.error-optimization.spec.js @@ -17,28 +17,30 @@ * Greenwood default */ const expect = require('chai').expect; -const TestBed = require('../../../../../test/test-bed'); +const path = require('path'); +const Runner = require('gallinago').Runner; describe('Build Greenwood With: ', function() { - let setup; + const cliPath = path.join(process.cwd(), 'packages/cli/src/index.js'); + const outputPath = __dirname; + let runner; before(async function() { - setup = new TestBed(); - await setup.setupTestBed(__dirname); + this.context = { + publicDir: path.join(outputPath, 'public') + }; + runner = new Runner(); }); describe('Custom Configuration with a bad value for optimization', function() { it('should throw an error that provided optimization is not valid', async function() { try { - await setup.runGreenwoodCommand('build'); + await runner.setup(outputPath); + await runner.runCommand(cliPath, 'build'); } catch (err) { expect(err).to.contain('Error: provided optimization "loremipsum" is not supported. Please use one of: default, none, static, inline.'); } }); }); - after(function() { - setup.teardownTestBed(); - }); - }); \ No newline at end of file diff --git a/packages/cli/test/cases/build.config.error-title/build.config.error-title.spec.js b/packages/cli/test/cases/build.config.error-title/build.config.error-title.spec.js index dabbf19e2..09274efee 100644 --- a/packages/cli/test/cases/build.config.error-title/build.config.error-title.spec.js +++ b/packages/cli/test/cases/build.config.error-title/build.config.error-title.spec.js @@ -17,28 +17,30 @@ * Greenwood default */ const expect = require('chai').expect; -const TestBed = require('../../../../../test/test-bed'); +const path = require('path'); +const Runner = require('gallinago').Runner; describe('Build Greenwood With: ', function() { - let setup; + const cliPath = path.join(process.cwd(), 'packages/cli/src/index.js'); + const outputPath = __dirname; + let runner; before(async function() { - setup = new TestBed(); - await setup.setupTestBed(__dirname); + this.context = { + publicDir: path.join(outputPath, 'public') + }; + runner = new Runner(); }); describe('Custom Configuration with a bad value for Title', function() { it('should throw an error that title must be a string', async function() { try { - await setup.runGreenwoodCommand('build'); + await runner.setup(outputPath); + await runner.runCommand(cliPath, 'build'); } catch (err) { expect(err).to.contain('greenwood.config.js title must be a string'); } }); }); - after(function() { - setup.teardownTestBed(); - }); - }); \ No newline at end of file diff --git a/packages/cli/test/cases/build.config.error-workspace-absolute/build.config.error-workspace-absolute.spec.js b/packages/cli/test/cases/build.config.error-workspace-absolute/build.config.error-workspace-absolute.spec.js index 2992a1fb1..6c1357d21 100644 --- a/packages/cli/test/cases/build.config.error-workspace-absolute/build.config.error-workspace-absolute.spec.js +++ b/packages/cli/test/cases/build.config.error-workspace-absolute/build.config.error-workspace-absolute.spec.js @@ -17,28 +17,30 @@ * Greenwood default */ const expect = require('chai').expect; -const TestBed = require('../../../../../test/test-bed'); +const path = require('path'); +const Runner = require('gallinago').Runner; describe('Build Greenwood With: ', function() { - let setup; + const cliPath = path.join(process.cwd(), 'packages/cli/src/index.js'); + const outputPath = __dirname; + let runner; before(async function() { - setup = new TestBed(); - await setup.setupTestBed(__dirname); + this.context = { + publicDir: path.join(outputPath, 'public') + }; + runner = new Runner(); }); describe('Custom Configuration with a bad value (absolute path) for Workspace', function() { it('should throw an error that workspace path must exist', async function() { try { - await setup.runGreenwoodCommand('build'); + await runner.setup(outputPath); + await runner.runCommand(cliPath, 'build'); } catch (err) { expect(err).to.contain('greenwood.config.js workspace doesn\'t exist!'); } }); }); - after(function() { - setup.teardownTestBed(); - }); - }); \ No newline at end of file diff --git a/packages/cli/test/cases/build.config.error-workspace/build.config.error-workspace.spec.js b/packages/cli/test/cases/build.config.error-workspace/build.config.error-workspace.spec.js index b5faf8bd6..cc7a7ef0f 100644 --- a/packages/cli/test/cases/build.config.error-workspace/build.config.error-workspace.spec.js +++ b/packages/cli/test/cases/build.config.error-workspace/build.config.error-workspace.spec.js @@ -17,28 +17,30 @@ * Greenwood default */ const expect = require('chai').expect; -const TestBed = require('../../../../../test/test-bed'); +const path = require('path'); +const Runner = require('gallinago').Runner; describe('Build Greenwood With: ', function() { - let setup; + const cliPath = path.join(process.cwd(), 'packages/cli/src/index.js'); + const outputPath = __dirname; + let runner; before(async function() { - setup = new TestBed(); - await setup.setupTestBed(__dirname); + this.context = { + publicDir: path.join(outputPath, 'public') + }; + runner = new Runner(); }); describe('Custom Configuration with a bad value for Workspace', function() { it('should throw an error that workspace path must be a string', async function() { try { - await setup.runGreenwoodCommand('build'); + await runner.setup(outputPath); + await runner.runCommand(cliPath, 'build'); } catch (err) { expect(err).to.contain('greenwood.config.js workspace path must be a string'); } }); }); - after(function() { - setup.teardownTestBed(); - }); - }); \ No newline at end of file diff --git a/packages/cli/test/cases/build.config.markdown-custom.plugins/build.config.markdown-custom.spec.js b/packages/cli/test/cases/build.config.markdown-custom.plugins/build.config.markdown-custom.spec.js index 831473367..c95c095ce 100644 --- a/packages/cli/test/cases/build.config.markdown-custom.plugins/build.config.markdown-custom.spec.js +++ b/packages/cli/test/cases/build.config.markdown-custom.plugins/build.config.markdown-custom.spec.js @@ -24,21 +24,26 @@ const { JSDOM } = require('jsdom'); const path = require('path'); const expect = require('chai').expect; const runSmokeTest = require('../../../../../test/smoke-test'); -const TestBed = require('../../../../../test/test-bed'); +const { getSetupFiles, getOutputTeardownFiles } = require('../../../../../test/utils'); +const Runner = require('gallinago').Runner; describe('Build Greenwood With: ', function() { const LABEL = 'Custom Markdown Configuration and Default Workspace'; - let setup; + const cliPath = path.join(process.cwd(), 'packages/cli/src/index.js'); + const outputPath = __dirname; + let runner; - before(async function() { - setup = new TestBed(); - - this.context = await setup.setupTestBed(__dirname); + before(function() { + this.context = { + publicDir: path.join(outputPath, 'public') + }; + runner = new Runner(); }); describe(LABEL, function() { before(async function() { - await setup.runGreenwoodCommand('build'); + await runner.setup(outputPath, getSetupFiles(outputPath)); + await runner.runCommand(cliPath, 'build'); }); runSmokeTest(['public', 'index'], LABEL); @@ -77,7 +82,7 @@ describe('Build Greenwood With: ', function() { }); after(function() { - setup.teardownTestBed(); + runner.teardown(getOutputTeardownFiles(outputPath)); }); }); \ No newline at end of file diff --git a/packages/cli/test/cases/build.config.markdown-custom.settings/build.config.markdown-custom.settings.spec.js b/packages/cli/test/cases/build.config.markdown-custom.settings/build.config.markdown-custom.settings.spec.js index eaffca661..425d92bee 100644 --- a/packages/cli/test/cases/build.config.markdown-custom.settings/build.config.markdown-custom.settings.spec.js +++ b/packages/cli/test/cases/build.config.markdown-custom.settings/build.config.markdown-custom.settings.spec.js @@ -19,24 +19,29 @@ * index.md */ const { JSDOM } = require('jsdom'); -const path = require('path'); const expect = require('chai').expect; -const TestBed = require('../../../../../test/test-bed'); +const path = require('path'); +const { getSetupFiles, getOutputTeardownFiles } = require('../../../../../test/utils'); +const Runner = require('gallinago').Runner; describe('Build Greenwood With: ', function() { const LABEL = 'Custom Markdown Configuration and Custom Workspace'; - let setup; + const cliPath = path.join(process.cwd(), 'packages/cli/src/index.js'); + const outputPath = __dirname; + let runner; before(async function() { - setup = new TestBed(); - - this.context = await setup.setupTestBed(__dirname); + this.context = { + publicDir: path.join(outputPath, 'public') + }; + runner = new Runner(); }); describe(LABEL, function() { before(async function() { - await setup.runGreenwoodCommand('build'); + await runner.setup(outputPath, getSetupFiles(outputPath)); + await runner.runCommand(cliPath, 'build'); }); describe('Custom Markdown Presets', function() { @@ -58,7 +63,7 @@ describe('Build Greenwood With: ', function() { }); after(function() { - setup.teardownTestBed(); + runner.teardown(getOutputTeardownFiles(outputPath)); }); }); \ No newline at end of file diff --git a/packages/cli/test/cases/build.config.meta/build.config.meta.spec.js b/packages/cli/test/cases/build.config.meta/build.config.meta.spec.js index ff99f4bc1..338e97e4b 100644 --- a/packages/cli/test/cases/build.config.meta/build.config.meta.spec.js +++ b/packages/cli/test/cases/build.config.meta/build.config.meta.spec.js @@ -35,16 +35,21 @@ const { JSDOM } = require('jsdom'); const path = require('path'); const expect = require('chai').expect; const runSmokeTest = require('../../../../../test/smoke-test'); -const TestBed = require('../../../../../test/test-bed'); +const { getSetupFiles, getOutputTeardownFiles } = require('../../../../../test/utils'); +const Runner = require('gallinago').Runner; describe('Build Greenwood With: ', function() { const LABEL = 'Custom Meta Configuration and Nested Workspace'; const meta = greenwoodConfig.meta; - let setup; + const cliPath = path.join(process.cwd(), 'packages/cli/src/index.js'); + const outputPath = __dirname; + let runner; - before(async function() { - setup = new TestBed(); - this.context = await setup.setupTestBed(__dirname); + before(function() { + this.context = { + publicDir: path.join(outputPath, 'public') + }; + runner = new Runner(); }); describe(LABEL, function() { @@ -57,7 +62,8 @@ describe('Build Greenwood With: ', function() { }; before(async function() { - await setup.runGreenwoodCommand('build'); + await runner.setup(outputPath, getSetupFiles(outputPath)); + await runner.runCommand(cliPath, 'build'); }); runSmokeTest(['public', 'index'], LABEL); @@ -168,7 +174,7 @@ describe('Build Greenwood With: ', function() { }); after(function() { - setup.teardownTestBed(); + runner.teardown(getOutputTeardownFiles(outputPath)); }); }); \ No newline at end of file diff --git a/packages/cli/test/cases/build.config.mode-mpa/build.config.mode-mpa.spec.js b/packages/cli/test/cases/build.config.mode-mpa/build.config.mode-mpa.spec.js index 63e6439d6..5b711b4d6 100644 --- a/packages/cli/test/cases/build.config.mode-mpa/build.config.mode-mpa.spec.js +++ b/packages/cli/test/cases/build.config.mode-mpa/build.config.mode-mpa.spec.js @@ -25,31 +25,35 @@ const fs = require('fs'); const glob = require('glob-promise'); const { JSDOM } = require('jsdom'); const path = require('path'); -const TestBed = require('../../../../../test/test-bed'); +const { getSetupFiles, getDependencyFiles, getOutputTeardownFiles } = require('../../../../../test/utils'); +const Runner = require('gallinago').Runner; describe('Build Greenwood With: ', function() { const LABEL = 'Custom Mode'; - let setup; + const cliPath = path.join(process.cwd(), 'packages/cli/src/index.js'); + const outputPath = __dirname; + let runner; before(async function() { - setup = new TestBed(); - - const greenwoodRouterLibs = (await glob(`${process.cwd()}/packages/cli/src/lib/router.js`)).map((lib) => { - return { - dir: 'node_modules/@greenwood/cli/src/lib/', - name: path.basename(lib) - }; - }); - - this.context = await setup.setupTestBed(__dirname, [ - ...greenwoodRouterLibs - ]); + this.context = { + publicDir: path.join(outputPath, 'public') + }; + runner = new Runner(); }); describe(LABEL, function() { before(async function() { - await setup.runGreenwoodCommand('build'); + const greenwoodRouterLibs = await getDependencyFiles( + `${process.cwd()}/packages/cli/src/lib/router.js`, + `${outputPath}/node_modules/@greenwood/cli/src/lib` + ); + + await runner.setup(outputPath, [ + ...getSetupFiles(outputPath), + ...greenwoodRouterLibs + ]); + await runner.runCommand(cliPath, 'build'); }); describe('MPA (Multi Page Application)', function() { @@ -143,7 +147,7 @@ describe('Build Greenwood With: ', function() { }); after(function() { - setup.teardownTestBed(); + runner.teardown(getOutputTeardownFiles(outputPath)); }); }); \ No newline at end of file diff --git a/packages/cli/test/cases/build.config.optimization-default/build.config-optimization-default.spec.js b/packages/cli/test/cases/build.config.optimization-default/build.config-optimization-default.spec.js index 12f459a87..ed4ea5b56 100644 --- a/packages/cli/test/cases/build.config.optimization-default/build.config-optimization-default.spec.js +++ b/packages/cli/test/cases/build.config.optimization-default/build.config-optimization-default.spec.js @@ -23,21 +23,27 @@ const expect = require('chai').expect; const glob = require('glob-promise'); const { JSDOM } = require('jsdom'); const path = require('path'); -const TestBed = require('../../../../../test/test-bed'); +const { getSetupFiles, getOutputTeardownFiles } = require('../../../../../test/utils'); +const Runner = require('gallinago').Runner; describe('Build Greenwood With: ', function() { const LABEL = 'Default Optimization Configuration'; - let setup; - - before(async function() { - setup = new TestBed(); - this.context = await setup.setupTestBed(__dirname); + const cliPath = path.join(process.cwd(), 'packages/cli/src/index.js'); + const outputPath = __dirname; + let runner; + + before(function() { + this.context = { + publicDir: path.join(outputPath, 'public') + }; + runner = new Runner(); }); describe(LABEL, function() { before(async function() { - await setup.runGreenwoodCommand('build'); + await runner.setup(outputPath, getSetupFiles(outputPath)); + await runner.runCommand(cliPath, 'build'); }); describe('Output for JavaScript / CSS tags and files', function() { @@ -102,6 +108,6 @@ describe('Build Greenwood With: ', function() { }); after(function() { - setup.teardownTestBed(); + runner.teardown(getOutputTeardownFiles(outputPath)); }); }); \ No newline at end of file diff --git a/packages/cli/test/cases/build.config.optimization-inline/build.config-optimization-inline.spec.js b/packages/cli/test/cases/build.config.optimization-inline/build.config-optimization-inline.spec.js index a25c748ce..543f40013 100644 --- a/packages/cli/test/cases/build.config.optimization-inline/build.config-optimization-inline.spec.js +++ b/packages/cli/test/cases/build.config.optimization-inline/build.config-optimization-inline.spec.js @@ -26,21 +26,27 @@ const expect = require('chai').expect; const glob = require('glob-promise'); const { JSDOM } = require('jsdom'); const path = require('path'); -const TestBed = require('../../../../../test/test-bed'); +const { getSetupFiles, getOutputTeardownFiles } = require('../../../../../test/utils'); +const Runner = require('gallinago').Runner; describe('Build Greenwood With: ', function() { const LABEL = 'Inline Optimization Configuration'; - let setup; + const cliPath = path.join(process.cwd(), 'packages/cli/src/index.js'); + const outputPath = __dirname; + let runner; before(async function() { - setup = new TestBed(); - this.context = await setup.setupTestBed(__dirname); + this.context = { + publicDir: path.join(outputPath, 'public') + }; + runner = new Runner(); }); describe(LABEL, function() { before(async function() { - await setup.runGreenwoodCommand('build'); + await runner.setup(outputPath, getSetupFiles(outputPath)); + await runner.runCommand(cliPath, 'build'); }); describe('Output for JavaScript / CSS tags and files', function() { @@ -110,6 +116,6 @@ describe('Build Greenwood With: ', function() { }); after(function() { - setup.teardownTestBed(); + runner.teardown(getOutputTeardownFiles(outputPath)); }); }); \ No newline at end of file diff --git a/packages/cli/test/cases/build.config.optimization-none/build.config-optimization-none.spec.js b/packages/cli/test/cases/build.config.optimization-none/build.config-optimization-none.spec.js index a4e957f51..ad2d2a294 100644 --- a/packages/cli/test/cases/build.config.optimization-none/build.config-optimization-none.spec.js +++ b/packages/cli/test/cases/build.config.optimization-none/build.config-optimization-none.spec.js @@ -27,21 +27,27 @@ const fs = require('fs'); const glob = require('glob-promise'); const { JSDOM } = require('jsdom'); const path = require('path'); -const TestBed = require('../../../../../test/test-bed'); +const { getSetupFiles, getOutputTeardownFiles } = require('../../../../../test/utils'); +const Runner = require('gallinago').Runner; describe('Build Greenwood With: ', function() { const LABEL = 'None Optimization Configuration'; - let setup; - - before(async function() { - setup = new TestBed(); - this.context = await setup.setupTestBed(__dirname); + const cliPath = path.join(process.cwd(), 'packages/cli/src/index.js'); + const outputPath = __dirname; + let runner; + + before(function() { + this.context = { + publicDir: path.join(outputPath, 'public') + }; + runner = new Runner(); }); describe(LABEL, function() { before(async function() { - await setup.runGreenwoodCommand('build'); + await runner.setup(outputPath, getSetupFiles(outputPath)); + await runner.runCommand(cliPath, 'build'); }); describe('Output for JavaScript / CSS tags and files', function() { @@ -108,6 +114,6 @@ describe('Build Greenwood With: ', function() { }); after(function() { - setup.teardownTestBed(); + runner.teardown(getOutputTeardownFiles(outputPath)); }); }); \ No newline at end of file diff --git a/packages/cli/test/cases/build.config.optimization-static/build.config-optimization-static.spec.js b/packages/cli/test/cases/build.config.optimization-static/build.config-optimization-static.spec.js index f9cae7bbc..6cf91bb3a 100644 --- a/packages/cli/test/cases/build.config.optimization-static/build.config-optimization-static.spec.js +++ b/packages/cli/test/cases/build.config.optimization-static/build.config-optimization-static.spec.js @@ -24,21 +24,27 @@ const expect = require('chai').expect; const glob = require('glob-promise'); const { JSDOM } = require('jsdom'); const path = require('path'); -const TestBed = require('../../../../../test/test-bed'); +const { getSetupFiles, getOutputTeardownFiles } = require('../../../../../test/utils'); +const Runner = require('gallinago').Runner; describe('Build Greenwood With: ', function() { const LABEL = 'Static Optimization Configuration'; - let setup; + const cliPath = path.join(process.cwd(), 'packages/cli/src/index.js'); + const outputPath = __dirname; + let runner; before(async function() { - setup = new TestBed(); - this.context = await setup.setupTestBed(__dirname); + this.context = { + publicDir: path.join(outputPath, 'public') + }; + runner = new Runner(); }); describe(LABEL, function() { before(async function() { - await setup.runGreenwoodCommand('build'); + await runner.setup(outputPath, getSetupFiles(outputPath)); + await runner.runCommand(cliPath, 'build'); }); describe('JavaScript