add resolvePackage(), resolvePackagePath() utilities
This commit is contained in:
parent
6c197cc743
commit
a21af3d3c6
|
@ -60,10 +60,10 @@ The E2E environment uses Jest as a test runner. Extending the base config is nec
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const path = require( 'path' );
|
const path = require( 'path' );
|
||||||
const { useE2EJestConfig } = require( '@woocommerce/e2e-environment' );
|
const { useE2EJestConfig, resolveLocalE2ePath } = require( '@woocommerce/e2e-environment' );
|
||||||
|
|
||||||
const jestConfig = useE2EJestConfig( {
|
const jestConfig = useE2EJestConfig( {
|
||||||
roots: [ path.resolve( __dirname, '../specs' ) ],
|
roots: [ resolveLocalE2ePath( 'specs' ) ],
|
||||||
} );
|
} );
|
||||||
|
|
||||||
module.exports = jestConfig;
|
module.exports = jestConfig;
|
||||||
|
|
|
@ -11,6 +11,7 @@ const {
|
||||||
getAppName,
|
getAppName,
|
||||||
getTestConfig,
|
getTestConfig,
|
||||||
resolveLocalE2ePath,
|
resolveLocalE2ePath,
|
||||||
|
resolvePackagePath,
|
||||||
} = require( '../utils' );
|
} = require( '../utils' );
|
||||||
|
|
||||||
const dockerArgs = [];
|
const dockerArgs = [];
|
||||||
|
@ -63,7 +64,7 @@ if ( appPath ) {
|
||||||
if ( fs.existsSync( appInitFile ) ) {
|
if ( fs.existsSync( appInitFile ) ) {
|
||||||
fs.copyFileSync(
|
fs.copyFileSync(
|
||||||
appInitFile,
|
appInitFile,
|
||||||
path.resolve( __dirname, '../docker/wp-cli/initialize.sh' )
|
resolvePackagePath( 'docker/wp-cli/initialize.sh' )
|
||||||
);
|
);
|
||||||
console.log( 'Initializing ' + appInitFile );
|
console.log( 'Initializing ' + appInitFile );
|
||||||
}
|
}
|
||||||
|
@ -90,7 +91,7 @@ if ( ! process.env.WORDPRESS_URL ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure that the first Docker compose file loaded is from our local env.
|
// Ensure that the first Docker compose file loaded is from our local env.
|
||||||
dockerArgs.unshift( '-f', path.resolve( __dirname, '../docker-compose.yaml' ) );
|
dockerArgs.unshift( '-f', resolvePackagePath( 'docker-compose.yaml' ) );
|
||||||
|
|
||||||
const dockerProcess = spawnSync( 'docker-compose', dockerArgs, {
|
const dockerProcess = spawnSync( 'docker-compose', dockerArgs, {
|
||||||
stdio: 'inherit',
|
stdio: 'inherit',
|
||||||
|
|
|
@ -4,7 +4,11 @@ const { spawnSync } = require( 'child_process' );
|
||||||
const program = require( 'commander' );
|
const program = require( 'commander' );
|
||||||
const path = require( 'path' );
|
const path = require( 'path' );
|
||||||
const fs = require( 'fs' );
|
const fs = require( 'fs' );
|
||||||
const { getAppRoot, resolveLocalE2ePath } = require( '../utils' );
|
const {
|
||||||
|
getAppRoot,
|
||||||
|
resolveLocalE2ePath,
|
||||||
|
resolvePackagePath,
|
||||||
|
} = require( '../utils' );
|
||||||
const {
|
const {
|
||||||
WC_E2E_SCREENSHOTS,
|
WC_E2E_SCREENSHOTS,
|
||||||
JEST_PUPPETEER_CONFIG,
|
JEST_PUPPETEER_CONFIG,
|
||||||
|
@ -30,7 +34,7 @@ if ( WC_E2E_SCREENSHOTS ) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const nodeConfigDirs = [ path.resolve( __dirname, '../config' ) ];
|
const nodeConfigDirs = [ resolvePackagePath( 'config' ) ];
|
||||||
|
|
||||||
if ( appPath ) {
|
if ( appPath ) {
|
||||||
nodeConfigDirs.unshift( resolveLocalE2ePath( 'config' ) );
|
nodeConfigDirs.unshift( resolveLocalE2ePath( 'config' ) );
|
||||||
|
@ -51,10 +55,7 @@ if ( ! JEST_PUPPETEER_CONFIG ) {
|
||||||
// Use local Puppeteer config if there is one.
|
// Use local Puppeteer config if there is one.
|
||||||
// Load test configuration file into an object.
|
// Load test configuration file into an object.
|
||||||
const localJestConfigFile = resolveLocalE2ePath( 'config/jest-puppeteer.config.js' );
|
const localJestConfigFile = resolveLocalE2ePath( 'config/jest-puppeteer.config.js' );
|
||||||
const jestConfigFile = path.resolve(
|
const jestConfigFile = resolvePackagePath( 'config/jest-puppeteer.config.js' );
|
||||||
__dirname,
|
|
||||||
'../config/jest-puppeteer.config.js'
|
|
||||||
);
|
|
||||||
|
|
||||||
testEnvVars.JEST_PUPPETEER_CONFIG = fs.existsSync( localJestConfigFile )
|
testEnvVars.JEST_PUPPETEER_CONFIG = fs.existsSync( localJestConfigFile )
|
||||||
? localJestConfigFile
|
? localJestConfigFile
|
||||||
|
@ -88,7 +89,7 @@ if ( program.debug ) {
|
||||||
|
|
||||||
const envVars = Object.assign( {}, process.env, testEnvVars );
|
const envVars = Object.assign( {}, process.env, testEnvVars );
|
||||||
|
|
||||||
let configPath = path.resolve( __dirname, '../config/jest.config.js' );
|
let configPath = resolvePackagePath( 'config/jest.config.js' );
|
||||||
|
|
||||||
// Look for a Jest config in the dependent app's path.
|
// Look for a Jest config in the dependent app's path.
|
||||||
if ( appPath ) {
|
if ( appPath ) {
|
||||||
|
|
|
@ -13,10 +13,7 @@ const StreamZip = require( 'node-stream-zip' );
|
||||||
*/
|
*/
|
||||||
const getRemotePluginZip = async ( fileUrl ) => {
|
const getRemotePluginZip = async ( fileUrl ) => {
|
||||||
const appPath = getAppRoot();
|
const appPath = getAppRoot();
|
||||||
const savePath = path.resolve(
|
const savePath = resolveLocalE2ePath( 'plugins' );
|
||||||
appPath,
|
|
||||||
'plugins/woocommerce/tests/e2e/plugins'
|
|
||||||
);
|
|
||||||
mkdirp.sync( savePath );
|
mkdirp.sync( savePath );
|
||||||
|
|
||||||
// Pull the filename from the end of the URL
|
// Pull the filename from the end of the URL
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
const getAppRoot = require( './app-root' );
|
const getAppRoot = require( './app-root' );
|
||||||
const { getAppName, getAppBase } = require( './app-name' );
|
const { getAppName, getAppBase } = require( './app-name' );
|
||||||
const { getTestConfig, getAdminConfig, resolveLocalE2ePath } = require( './test-config' );
|
const testConfig = require( './test-config' );
|
||||||
const { getRemotePluginZip, getLatestReleaseZipUrl } = require('./get-plugin-zip');
|
const { getRemotePluginZip, getLatestReleaseZipUrl } = require('./get-plugin-zip');
|
||||||
const takeScreenshotFor = require( './take-screenshot' );
|
const takeScreenshotFor = require( './take-screenshot' );
|
||||||
const updateReadyPageStatus = require('./update-ready-page');
|
const updateReadyPageStatus = require('./update-ready-page');
|
||||||
|
@ -10,12 +10,10 @@ module.exports = {
|
||||||
getAppBase,
|
getAppBase,
|
||||||
getAppRoot,
|
getAppRoot,
|
||||||
getAppName,
|
getAppName,
|
||||||
getTestConfig,
|
|
||||||
getAdminConfig,
|
|
||||||
resolveLocalE2ePath,
|
|
||||||
getRemotePluginZip,
|
getRemotePluginZip,
|
||||||
getLatestReleaseZipUrl,
|
getLatestReleaseZipUrl,
|
||||||
takeScreenshotFor,
|
takeScreenshotFor,
|
||||||
updateReadyPageStatus,
|
updateReadyPageStatus,
|
||||||
|
...testConfig,
|
||||||
...consoleUtils,
|
...consoleUtils,
|
||||||
};
|
};
|
||||||
|
|
|
@ -19,15 +19,72 @@ const resolveLocalE2ePath = ( filename = '' ) => {
|
||||||
);
|
);
|
||||||
|
|
||||||
return resolvedPath;
|
return resolvedPath;
|
||||||
}
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resolve a package name installable by npm install.
|
||||||
|
*
|
||||||
|
* @param {string} packageName Name of the installed package.
|
||||||
|
* @param {boolean} allowRecurse Allow a recursive call. Default true.
|
||||||
|
* @return {object}
|
||||||
|
*/
|
||||||
|
const resolvePackage = ( packageName, allowRecurse = true ) => {
|
||||||
|
const resolvedPackage = {};
|
||||||
|
|
||||||
|
try {
|
||||||
|
resolvedPackage.path = require.resolve( packageName );
|
||||||
|
resolvedPackage.name = packageName;
|
||||||
|
} catch ( e ) {
|
||||||
|
// Package name installed is not the package name.
|
||||||
|
resolvedPackage.path = '';
|
||||||
|
resolvedPackage.name = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Attempt to find the package through the project package lock file.
|
||||||
|
if ( ! resolvedPackage.path.length && allowRecurse ) {
|
||||||
|
const packageLockPath = path.resolve( appPath, 'package-lock.json' );
|
||||||
|
const packageLockContent = fs.readFileSync( packageLockPath );
|
||||||
|
const packageLockData = JSON.parse( packageLockContent );
|
||||||
|
|
||||||
|
for ( const [ key, value ] of Object.entries( packageLockData.dependencies ) ) {
|
||||||
|
if ( value.version.indexOf( packageName ) == 0 ) {
|
||||||
|
resolvedPackage = resolvePackage( key, false );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return resolvedPackage;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resolve a file in a package.
|
||||||
|
*
|
||||||
|
* @param {string} filename Filename to append to the path.
|
||||||
|
* @param {string} packageName Name of the installed package. Default @woocommerce/e2e-environment.
|
||||||
|
* @return {string}
|
||||||
|
*/
|
||||||
|
const resolvePackagePath = ( filename, packageName = '' ) => {
|
||||||
|
let packagePath;
|
||||||
|
if ( ! packageName.length ) {
|
||||||
|
packagePath = path.resolve( __dirname, '../' );
|
||||||
|
} else {
|
||||||
|
const package = resolvePackage( packageName );
|
||||||
|
packagePath = package.path;
|
||||||
|
}
|
||||||
|
|
||||||
|
const resolvedPath = path.resolve(
|
||||||
|
packagePath,
|
||||||
|
filename.indexOf( '/' ) == 0 ? filename.slice( 1 ) : filename
|
||||||
|
);
|
||||||
|
|
||||||
|
return resolvedPath;
|
||||||
|
};
|
||||||
|
|
||||||
// Copy local test configuration file if it exists.
|
// Copy local test configuration file if it exists.
|
||||||
const localTestConfigFile = resolveLocalE2ePath( 'config/default.json' );
|
const localTestConfigFile = resolveLocalE2ePath( 'config/default.json' );
|
||||||
const defaultConfigFile = path.resolve(
|
const defaultConfigFile = resolvePackagePath( 'config/default/default.json' );
|
||||||
__dirname,
|
const testConfigFile = resolvePackagePath( 'config/default.json' );
|
||||||
'../config/default/default.json'
|
|
||||||
);
|
|
||||||
const testConfigFile = path.resolve( __dirname, '../config/default.json' );
|
|
||||||
|
|
||||||
if ( fs.existsSync( localTestConfigFile ) ) {
|
if ( fs.existsSync( localTestConfigFile ) ) {
|
||||||
fs.copyFileSync( localTestConfigFile, testConfigFile );
|
fs.copyFileSync( localTestConfigFile, testConfigFile );
|
||||||
|
@ -94,4 +151,6 @@ module.exports = {
|
||||||
getTestConfig,
|
getTestConfig,
|
||||||
getAdminConfig,
|
getAdminConfig,
|
||||||
resolveLocalE2ePath,
|
resolveLocalE2ePath,
|
||||||
|
resolvePackage,
|
||||||
|
resolvePackagePath,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue