Chris@17: import { execSync } from 'child_process'; Chris@17: import { URL } from 'url'; Chris@17: import { commandAsWebserver } from '../globals'; Chris@17: Chris@17: /** Chris@17: * Installs a Drupal test site. Chris@17: * Chris@17: * @param {oject} [settings={}] Chris@17: * Settings object Chris@17: * @param {string} [settings.setupFile=''] Chris@17: * Setup file used by TestSiteApplicationTest Chris@17: * @param {function} callback Chris@17: * A callback which will be called, when the installation is finished. Chris@17: * @return {object} Chris@17: * The 'browser' object. Chris@17: */ Chris@17: exports.command = function drupalInstall({ setupFile = '' } = {}, callback) { Chris@17: const self = this; Chris@17: Chris@17: try { Chris@17: setupFile = setupFile ? `--setup-file "${setupFile}"` : ''; Chris@17: const dbOption = Chris@17: process.env.DRUPAL_TEST_DB_URL.length > 0 Chris@17: ? `--db-url ${process.env.DRUPAL_TEST_DB_URL}` Chris@17: : ''; Chris@17: const install = execSync( Chris@17: commandAsWebserver( Chris@17: `php ./scripts/test-site.php install ${setupFile} --base-url ${ Chris@17: process.env.DRUPAL_TEST_BASE_URL Chris@17: } ${dbOption} --json`, Chris@17: ), Chris@17: ); Chris@17: const installData = JSON.parse(install.toString()); Chris@17: this.drupalDbPrefix = installData.db_prefix; Chris@17: this.drupalSitePath = installData.site_path; Chris@17: const url = new URL(process.env.DRUPAL_TEST_BASE_URL); Chris@17: this.url(process.env.DRUPAL_TEST_BASE_URL).setCookie({ Chris@17: name: 'SIMPLETEST_USER_AGENT', Chris@17: // Colons need to be URL encoded to be valid. Chris@17: value: encodeURIComponent(installData.user_agent), Chris@17: path: url.pathname, Chris@17: domain: url.host, Chris@17: }); Chris@17: } catch (error) { Chris@17: this.assert.fail(error); Chris@17: } Chris@17: Chris@17: // Nightwatch doesn't like it when no actions are added in a command file. Chris@17: // https://github.com/nightwatchjs/nightwatch/issues/1792 Chris@17: this.pause(1); Chris@17: Chris@17: if (typeof callback === 'function') { Chris@17: callback.call(self); Chris@17: } Chris@17: Chris@17: return this; Chris@17: };