diff --git a/packages/js/e2e-core-tests/index.js b/packages/js/e2e-core-tests/index.js index 265ecaf6522..e30dc29012b 100644 --- a/packages/js/e2e-core-tests/index.js +++ b/packages/js/e2e-core-tests/index.js @@ -4,16 +4,4 @@ const allSpecs = require( './specs' ); const fs = require( 'fs' ); -/** - * Test set up configuration for the test scaffolding tool. - */ -const packageInstallFiles = { - testSpecs: 'data/install-specs.json', - defaultJson: 'data/default-test-config.json', - initializeSh: 'data/initialize.sh.default', -}; - -module.exports = { - allSpecs, - packageInstallFiles, -}; +module.exports = allSpecs; diff --git a/packages/js/e2e-core-tests/installFiles/index.js b/packages/js/e2e-core-tests/installFiles/index.js new file mode 100644 index 00000000000..202b83fcfda --- /dev/null +++ b/packages/js/e2e-core-tests/installFiles/index.js @@ -0,0 +1,5 @@ +module.exports = { + testSpecs: 'data/scaffold-tests.json', + defaultJson: 'data/default-test-config.json', + initializeSh: 'data/initialize.sh.default', +}; diff --git a/packages/js/e2e-environment/bin/scaffold.js b/packages/js/e2e-environment/bin/scaffold.js index d20187693f0..ac74a756206 100755 --- a/packages/js/e2e-environment/bin/scaffold.js +++ b/packages/js/e2e-environment/bin/scaffold.js @@ -22,32 +22,31 @@ const [ command, packageName ] = args; * Install the test scripts and sample default.json configuration */ if ( command == 'install' ) { - //** - const package = resolvePackage( packageName ).name; - if ( ! package.length ) { + // `package` is a reserved word + const pkg = resolvePackage( packageName ).name; + if ( ! pkg.length ) { //@todo add error message return; } - const packageSlug = package.replace( '@', '' ).replace( /\//g, '.' ); - const { packageInstallFiles } = require( package ); - const { testSpecs, defaultJson, initializeSh } = packageInstallFiles; + const packageSlug = pkg.replace( '@', '' ).replace( /\//g, '.' ); + const { testSpecs, defaultJson, initializeSh } = require( `${pkg}/installFiles` ); // Write sample default.json if ( defaultJson ) { const defaultJsonName = `config/default-${packageSlug}.json`; const defaultJsonSample = resolveLocalE2ePath( defaultJsonName ); - const packageJsonSample = resolvePackagePath( defaultJson, package ); + const packageJsonSample = resolvePackagePath( defaultJson, pkg ); fs.copyFileSync( packageJsonSample, defaultJsonSample ); - console.log( `\nCreated sample test configuration to 'tests/e2e/${defaultJsonName}'.\n` ); + console.log( `Created sample test configuration to 'tests/e2e/${defaultJsonName}'.` ); } // Write sample initialize.sh if ( initializeSh ) { const defaultInitName = `docker/${packageSlug}.sh`; const defaultInitPath = resolveLocalE2ePath( defaultInitName ); - const packageInitPath = resolvePackagePath( initializeSh, package ); + const packageInitPath = resolvePackagePath( initializeSh, pkg ); fs.copyFileSync( packageInitPath, defaultInitPath ); - console.log( `\nCreated sample test container initialization script to 'tests/e2e/${defaultInitName}'.\n` ); + console.log( `Created sample test container initialization script to 'tests/e2e/${defaultInitName}'.` ); } // Write test files @@ -55,7 +54,7 @@ if ( command == 'install' ) { return; } - const testsSpecFile = resolvePackagePath( testSpecs, package ); + const testsSpecFile = resolvePackagePath( testSpecs, pkg ); const specs = fs.readFileSync( testsSpecFile ); const tests = JSON.parse( specs ); const { active, deprecated } = tests; @@ -79,15 +78,26 @@ if ( command == 'install' ) { } if ( active && active.length ) { + const blankLine = ''; const eol = "\n"; const autoGenerate = sprintf( '/* This file was auto-generated by the command `npx wc-e2e install %s. */', packageName ); let importLineFormat; if ( testFormat.toLowerCase() == 'cjs' ) { - importLineFormat = sprintf( "const {%%s} = require( '%s' );", package ); + importLineFormat = sprintf( "const {%%s} = require( '%s' );", pkg ); } else { - importLineFormat = sprintf( "import {%%s} from '%s';", package ); + importLineFormat = sprintf( "import {%%s} from '%s';", pkg ); } + // Create the entire folder structure if not present + let specFolderPath; + const rootFolders = [ '../../tests', '../e2e', 'specs' ]; + rootFolders.forEach( ( folder ) => { + specFolderPath = resolveLocalE2ePath( folder ); + if ( ! fs.existsSync( specFolderPath ) ) { + fs.mkdirSync( specFolderPath ); + } + } ); + // Loop through folders and files to write test scripts. for ( let f = 0; f < active.length; f++ ) { const testFolder = active[ f ]; @@ -98,7 +108,7 @@ if ( command == 'install' ) { } const specFolder = testFolder.name.length ? `specs/${testFolder.name}` : 'specs'; - const specFolderPath = resolveLocalE2ePath( specFolder ); + specFolderPath = resolveLocalE2ePath( specFolder ); // Create the test folder if it doesn't exist. if ( ! fs.existsSync( specFolderPath ) ) { @@ -131,19 +141,17 @@ if ( command == 'install' ) { importPrefix = eol; } else { testSeparator = ', '; - testTerminator = ''; + testTerminator = ' '; importPrefix = ' '; } const testImport = testFile.functions.join( testSeparator ) + testTerminator; - // '' adds a blank line - buffer.push( sprintf( importLineFormat, importPrefix + testImport ), '' ); + buffer.push( sprintf( importLineFormat, importPrefix + testImport ), blankLine ); // Add test function calls and write the file let functionCalls = testFile.functions.map( functionName => functionName + '();' ); - buffer.push( ...functionCalls ); + buffer.push( ...functionCalls, blankLine ); fs.writeFileSync( testFilePath, buffer.join( eol ) ); } - console.log( eol ); } } diff --git a/packages/js/e2e-environment/utils/test-config.js b/packages/js/e2e-environment/utils/test-config.js index 430bbc6da59..35d369cf182 100644 --- a/packages/js/e2e-environment/utils/test-config.js +++ b/packages/js/e2e-environment/utils/test-config.js @@ -32,7 +32,19 @@ const resolvePackage = ( packageName, allowRecurse = true ) => { const resolvedPackage = {}; try { - resolvedPackage.path = require.resolve( packageName ); + const resolvedPath = path.dirname( require.resolve( packageName ) ); + const buildPaths = [ 'dist', 'build', 'build-modules' ]; + + // Remove build paths from the resolved path. + let resolvedParts = resolvedPath.split( path.sep ); + for ( let rp = resolvedParts.length - 1; rp >= 0; rp-- ) { + if ( buildPaths.includes( resolvedParts[ rp ] ) ) { + resolvedParts = resolvedParts.slice( 0, -1 ); + } else { + break; + } + } + resolvedPackage.path = resolvedParts.join( path.sep ); resolvedPackage.name = packageName; } catch ( e ) { // Package name installed is not the package name.