You should have the whole development environment set up as described on our wiki. Specifically, these are required:
- WP-CLI (wp --info works in console)
- NPM packages installed in
- Gulp (gulp -v works in console)
- test-config.yml file created in versionpress/tests
Currently, WpAutomation is a set of static functions as of v1; other options will be considered for v2, see WP-56.
Note: Currently, the intention is to add supported tasks as public methods to this class. If this gets
unwieldy it will probably be split into multiple files / classes.
/** * @test */ public function vpconfigDoesntAllowDirectAccess() { $pluginsDir = self::$wpAutomation->getPluginsDir(); $relativePathToPluginsDir = PathUtils::getRelativePath(self::$wpAutomation->getWebRoot(), $pluginsDir); $url = self::$testConfig->testSite->url . '/' . $relativePathToPluginsDir . "/versionpress/vpconfig.yml"; $statusCode = HttpStatusCodeUtil::getStatusCode($url); $this->assertTrue($statusCode === 403 || $statusCode === 404, "Wrong HTTP status code ({$statusCode})"); }
/** * @test */ public function runAutomation() { $testConfig = TestConfig::createDefaultConfig(); $wpAutomation = new WpAutomation($testConfig->testSite, $testConfig->wpCliVersion); $wpAutomation->setUpSite(); $wpAutomation->copyVersionPressFiles(); $wpAutomation->activateVersionPress(); $wpAutomation->runWpCliCommand('vp', 'config', ['VP_PROJECT_ROOT', '.']); }
/** * Check if site is set up and VersionPress fully activated, and if not, do so. The $force * parametr may force this. * * @param bool $force Force all the automation actions to be taken regardless of the site state */ public static function setUpSite($force) { self::staticInitialization(); if ($force || !self::$wpAutomation->isSiteSetUp()) { self::$wpAutomation->setUpSite(); } if ($force || !self::$wpAutomation->isVersionPressInitialized()) { self::$wpAutomation->copyVersionPressFiles(); self::$wpAutomation->initializeVersionPress(); } }
/** * Defines global constants, container and wpdb dynamic mapping of value references. * It's not pretty, but makes the mapping functions very flexible (they can have various dependecies). */ private static function defineGlobalVariables() { global $versionPressContainer, $wpdb, $wp_taxonomies; defined('VERSIONPRESS_PLUGIN_DIR') || define('VERSIONPRESS_PLUGIN_DIR', self::$testConfig->testSite->path . '/wp-content/plugins/versionpress'); defined('VP_VPDB_DIR') || define('VP_VPDB_DIR', self::$testConfig->testSite->path . '/wp-content/vpdb'); $versionPressContainer = DIContainer::getConfiguredInstance(); $wpdb = self::$wpdb; $rawTaxonomies = self::$wpAutomation->runWpCliCommand('taxonomy', 'list', ['format' => 'json', 'fields' => 'name']); $taxonomies = array_column(json_decode($rawTaxonomies, true), 'name'); $wp_taxonomies = array_combine($taxonomies, $taxonomies); }
private static function setUpSite() { if (!self::$wpAutomation->isSiteSetUp()) { self::$wpAutomation->setUpSite(); } if (!self::$wpAutomation->isVersionPressInitialized()) { self::$wpAutomation->copyVersionPressFiles(); self::$wpAutomation->initializeVersionPress(); } }
/** * @param WpAutomation $wpAutomation */ private function prepareSite($wpAutomation) { $wpAutomation->setUpSite(); $wpAutomation->copyVersionPressFiles(); $wpAutomation->disableDebugger(); $wpAutomation->activateVersionPress(); $wpAutomation->initializeVersionPress(); }