diff --git a/src/Context/Traits/FilesystemAwareContextTrait.php b/src/Context/Traits/FilesystemAwareContextTrait.php new file mode 100644 index 00000000..cd88cd4a --- /dev/null +++ b/src/Context/Traits/FilesystemAwareContextTrait.php @@ -0,0 +1,21 @@ +getDriver()->filesystem->deleteFile($abspath); + } +} diff --git a/src/Context/WordpressContext.php b/src/Context/WordpressContext.php index d449125d..f5057b48 100644 --- a/src/Context/WordpressContext.php +++ b/src/Context/WordpressContext.php @@ -4,9 +4,11 @@ use Behat\Behat\Hook\Scope\AfterScenarioScope; use Behat\Behat\Hook\Scope\BeforeScenarioScope; +use Behat\Behat\Event; use Behat\Mink\Driver\Selenium2Driver; use PaulGibbs\WordpressBehatExtension\Context\Traits\CacheAwareContextTrait; use PaulGibbs\WordpressBehatExtension\Context\Traits\DatabaseAwareContextTrait; +use PaulGibbs\WordpressBehatExtension\Context\Traits\FilesystemAwareContextTrait; use PaulGibbs\WordpressBehatExtension\Context\Traits\PageObjectAwareContextTrait; /** @@ -14,7 +16,7 @@ */ class WordpressContext extends RawWordpressContext { - use PageObjectAwareContextTrait, CacheAwareContextTrait, DatabaseAwareContextTrait; + use PageObjectAwareContextTrait, CacheAwareContextTrait, DatabaseAwareContextTrait, FilesystemAwareContextTrait; /** * Constructor. @@ -45,7 +47,7 @@ public function maybeBackupDatabase(BeforeScenarioScope $scope) * Otherwise, we would use the (static) BeforeSuiteScope hook. */ $backup_file = $this->getWordpress()->getSetting('database_backup_file'); - if ($backup_file) { + if (! empty($backup_file)) { return; } @@ -55,6 +57,7 @@ public function maybeBackupDatabase(BeforeScenarioScope $scope) // If the path specified is not a file, use it as the preferred folder to store a new backup. if (! $file || ! is_file($file) || ! is_readable($file)) { $file = $this->exportDatabase(['path' => $file]); + $this->getWordpress()->setSetting('built_database_backup', true); } // Note: $file may be either an absolute OR relative file path. @@ -118,10 +121,35 @@ public function maybeRestoreDatabase(AfterScenarioScope $scope) } $file = $this->getWordpress()->getSetting('database_backup_file'); - if (! $file) { + if (empty($file)) { return; } $this->importDatabase(['path' => $file]); } + + /** + * If WordHat created its own database dump, delete it after the test suite has completed. + * + * @AfterSuite @db + * + * @param Event\SuiteEvent $scope + */ + public function maybeRemoveDatabaseDump(Event\SuiteEvent $event) + { + $delete_backup = $this->getWordpress()->getSetting('built_database_backup'); + if ($delete_backup === null) { + return; + } + + $file = $this->getWordpress()->getSetting('database_backup_file'); + if (empty($file)) { + return; + } + + $this->getWordpress()->setSetting('database_backup_file', null); + $this->getWordpress()->setSetting('built_database_backup', null); + + $this->deleteFile($file); + } } diff --git a/src/Driver/Element/Wpcli/FilesystemElement.php b/src/Driver/Element/Wpcli/FilesystemElement.php new file mode 100644 index 00000000..71619256 --- /dev/null +++ b/src/Driver/Element/Wpcli/FilesystemElement.php @@ -0,0 +1,28 @@ +drivers->getDriver()->wpcli('eval', $delete_cmd, ['--skip-wordpress']); + } +} + diff --git a/src/Driver/Element/Wpphp/FilesystemElement.php b/src/Driver/Element/Wpphp/FilesystemElement.php new file mode 100644 index 00000000..b0392f13 --- /dev/null +++ b/src/Driver/Element/Wpphp/FilesystemElement.php @@ -0,0 +1,26 @@ +