From 91611e65b97a8a125421b9a4711fe4037a30dfde Mon Sep 17 00:00:00 2001 From: mho22 Date: Thu, 20 Nov 2025 10:46:17 +0100 Subject: [PATCH] Add afterEach dispose functions --- .../src/lib/steps/activate-plugin.spec.ts | 5 +++++ .../blueprints/src/lib/steps/activate-theme.spec.ts | 5 +++++ .../src/lib/steps/define-wp-config-consts.spec.ts | 4 ++++ .../lib/steps/import-theme-starter-content.spec.ts | 5 +++++ .../blueprints/src/lib/steps/import-wxr.spec.ts | 13 +++++++++---- .../blueprints/src/lib/steps/install-plugin.spec.ts | 8 ++++++-- .../blueprints/src/lib/steps/install-theme.spec.ts | 9 +++++++-- .../blueprints/src/lib/steps/login.spec.ts | 5 +++++ .../blueprints/src/lib/steps/mkdir.spec.ts | 1 + .../playground/blueprints/src/lib/steps/mv.spec.ts | 1 + .../blueprints/src/lib/steps/reset-data.spec.ts | 6 +++++- .../playground/blueprints/src/lib/steps/rm.spec.ts | 1 + .../blueprints/src/lib/steps/rmdir.spec.ts | 1 + .../blueprints/src/lib/steps/run-php.spec.ts | 1 + .../blueprints/src/lib/steps/run-sql.spec.ts | 5 +++++ .../blueprints/src/lib/steps/site-data.spec.ts | 5 +++++ .../blueprints/src/lib/steps/wp-cli.spec.ts | 4 ++++ .../blueprints/src/lib/steps/write-file.spec.ts | 1 + .../blueprints/src/lib/steps/write-files.spec.ts | 5 +++++ 19 files changed, 76 insertions(+), 9 deletions(-) diff --git a/packages/playground/blueprints/src/lib/steps/activate-plugin.spec.ts b/packages/playground/blueprints/src/lib/steps/activate-plugin.spec.ts index 23e2997fc3..c95c293c77 100644 --- a/packages/playground/blueprints/src/lib/steps/activate-plugin.spec.ts +++ b/packages/playground/blueprints/src/lib/steps/activate-plugin.spec.ts @@ -25,6 +25,11 @@ describe('Blueprint step activatePlugin()', () => { php = await handler.getPrimaryPhp(); }); + afterEach(async () => { + php.exit(); + await handler[Symbol.asyncDispose](); + }); + it('should activate a plugin file located in the plugins directory', async () => { const docroot = handler.documentRoot; php.writeFile( diff --git a/packages/playground/blueprints/src/lib/steps/activate-theme.spec.ts b/packages/playground/blueprints/src/lib/steps/activate-theme.spec.ts index 60cc338701..d979b127f8 100644 --- a/packages/playground/blueprints/src/lib/steps/activate-theme.spec.ts +++ b/packages/playground/blueprints/src/lib/steps/activate-theme.spec.ts @@ -25,6 +25,11 @@ describe('Blueprint step activateTheme()', () => { php = await handler.getPrimaryPhp(); }); + afterEach(async () => { + php.exit(); + await handler[Symbol.asyncDispose](); + }); + it('should activate the theme', async () => { const docroot = php.documentRoot; php.mkdir(`${docroot}/wp-content/themes/test-theme`); diff --git a/packages/playground/blueprints/src/lib/steps/define-wp-config-consts.spec.ts b/packages/playground/blueprints/src/lib/steps/define-wp-config-consts.spec.ts index c3e75abdfd..68561ac008 100644 --- a/packages/playground/blueprints/src/lib/steps/define-wp-config-consts.spec.ts +++ b/packages/playground/blueprints/src/lib/steps/define-wp-config-consts.spec.ts @@ -10,6 +10,10 @@ describe('defineBeforeRun', () => { php = new PHP(await loadNodeRuntime(RecommendedPHPVersion)); }); + afterEach(() => { + php.exit(); + }); + it('should define the constants before running the requested script', async () => { const constants = { SITE_URL: 'http://test.url', diff --git a/packages/playground/blueprints/src/lib/steps/import-theme-starter-content.spec.ts b/packages/playground/blueprints/src/lib/steps/import-theme-starter-content.spec.ts index 5e87d6064b..b41e400db7 100644 --- a/packages/playground/blueprints/src/lib/steps/import-theme-starter-content.spec.ts +++ b/packages/playground/blueprints/src/lib/steps/import-theme-starter-content.spec.ts @@ -24,6 +24,11 @@ describe('Blueprint step importThemeStarterContent', () => { php = await handler.getPrimaryPhp(); }); + afterEach(async () => { + php.exit(); + await handler[Symbol.asyncDispose](); + }); + it('Should import theme starter content', async () => { const docroot = php.documentRoot; // Create a test theme with starter content, Must have at a minimum diff --git a/packages/playground/blueprints/src/lib/steps/import-wxr.spec.ts b/packages/playground/blueprints/src/lib/steps/import-wxr.spec.ts index c82279e4d8..52f9693e51 100644 --- a/packages/playground/blueprints/src/lib/steps/import-wxr.spec.ts +++ b/packages/playground/blueprints/src/lib/steps/import-wxr.spec.ts @@ -91,6 +91,11 @@ describe('Blueprint step importWxr', () => { }); }, 30_000); + afterEach(async () => { + php.exit(); + await handler[Symbol.asyncDispose](); + }); + it( 'Should import a WXR file with JSON-encoded UTF-8 characters', async () => { @@ -270,7 +275,7 @@ describe('Blueprint step importWxr', () => { const result = await php.run({ code: ` ['post', 'page'], @@ -279,10 +284,10 @@ describe('Blueprint step importWxr', () => { 'orderby' => 'ID', 'order' => 'ASC' ]); - + // Get admin user info $admin_user = get_user_by('login', 'admin'); - + $post_authors = []; foreach ($posts as $post) { $author = get_user_by('ID', $post->post_author); @@ -295,7 +300,7 @@ describe('Blueprint step importWxr', () => { 'author_display_name' => $author ? $author->display_name : null, ]; } - + echo json_encode([ 'admin_user_id' => $admin_user ? $admin_user->ID : null, 'admin_user_login' => $admin_user ? $admin_user->user_login : null, diff --git a/packages/playground/blueprints/src/lib/steps/install-plugin.spec.ts b/packages/playground/blueprints/src/lib/steps/install-plugin.spec.ts index 2b41fa305a..ee0f5726de 100644 --- a/packages/playground/blueprints/src/lib/steps/install-plugin.spec.ts +++ b/packages/playground/blueprints/src/lib/steps/install-plugin.spec.ts @@ -14,8 +14,8 @@ async function zipFiles( const zipFilePath = `/${zipFileName}`; await php.run({ - code: `open("${zipFilePath}", ZIPARCHIVE::CREATE); + code: `open("${zipFilePath}", ZIPARCHIVE::CREATE); $files = ${phpVar(files)}; foreach($files as $path => $content) { $zip->addFromString($path, $content); @@ -86,6 +86,10 @@ describe('Blueprint step installPlugin', () => { installedPluginPath = `${pluginsPath}/${pluginName}`; }); + afterEach(() => { + php.exit(); + }); + it('should install a plugin', async () => { await installPlugin(php, { pluginData: await zipFiles(php, zipFileName, { diff --git a/packages/playground/blueprints/src/lib/steps/install-theme.spec.ts b/packages/playground/blueprints/src/lib/steps/install-theme.spec.ts index 22039f8d18..241088b9a0 100644 --- a/packages/playground/blueprints/src/lib/steps/install-theme.spec.ts +++ b/packages/playground/blueprints/src/lib/steps/install-theme.spec.ts @@ -46,8 +46,9 @@ describe('Blueprint step installTheme', () => { expect(php.fileExists(zipFilePath)).toBe(true); }); - afterEach(() => { + afterEach(async () => { php.exit(); + await handler[Symbol.asyncDispose](); }); const expectedThemeIndexPhpPath = @@ -179,7 +180,11 @@ describe('Blueprint step installTheme', () => { targetFolderName: 'test-expected-theme', }, }); - expect(php.fileExists(`${rootPath}/wp-content/themes/test-expected-theme/`)).toBe(true); + expect( + php.fileExists( + `${rootPath}/wp-content/themes/test-expected-theme/` + ) + ).toBe(true); }); }); }); diff --git a/packages/playground/blueprints/src/lib/steps/login.spec.ts b/packages/playground/blueprints/src/lib/steps/login.spec.ts index 1524ce170a..0a6ed5768a 100644 --- a/packages/playground/blueprints/src/lib/steps/login.spec.ts +++ b/packages/playground/blueprints/src/lib/steps/login.spec.ts @@ -26,6 +26,11 @@ describe('Blueprint step login', () => { php = await handler.getPrimaryPhp(); }); + afterEach(async () => { + php.exit(); + await handler[Symbol.asyncDispose](); + }); + const requestFollowRedirects = async (request: PHPRequest) => { let response = await handler.request(request); while (response.httpStatusCode === 302) { diff --git a/packages/playground/blueprints/src/lib/steps/mkdir.spec.ts b/packages/playground/blueprints/src/lib/steps/mkdir.spec.ts index ffa8a7a082..91b1717c26 100644 --- a/packages/playground/blueprints/src/lib/steps/mkdir.spec.ts +++ b/packages/playground/blueprints/src/lib/steps/mkdir.spec.ts @@ -16,6 +16,7 @@ describe('Blueprint step mkdir', () => { afterEach(() => { loggerErrorSpy.mockRestore(); + php.exit(); }); it('should create a directory', async () => { diff --git a/packages/playground/blueprints/src/lib/steps/mv.spec.ts b/packages/playground/blueprints/src/lib/steps/mv.spec.ts index bd8ae880e8..763d18349c 100644 --- a/packages/playground/blueprints/src/lib/steps/mv.spec.ts +++ b/packages/playground/blueprints/src/lib/steps/mv.spec.ts @@ -18,6 +18,7 @@ describe('Blueprint step mv()', () => { afterEach(() => { loggerErrorSpy.mockRestore(); + php.exit(); }); it('should move a file', async () => { diff --git a/packages/playground/blueprints/src/lib/steps/reset-data.spec.ts b/packages/playground/blueprints/src/lib/steps/reset-data.spec.ts index d1838a9f81..c9d680a0a6 100644 --- a/packages/playground/blueprints/src/lib/steps/reset-data.spec.ts +++ b/packages/playground/blueprints/src/lib/steps/reset-data.spec.ts @@ -24,11 +24,15 @@ describe('Blueprint step resetData()', () => { php = await handler.getPrimaryPhp(); }); + afterEach(() => { + php.exit(); + }); + it('should assign ID=1 to the first post created after applying the resetData step', async () => { php.writeFile(`${docroot}/index.php`, ` { afterEach(() => { loggerErrorSpy.mockRestore(); + php.exit(); }); it('should remove a file', async () => { diff --git a/packages/playground/blueprints/src/lib/steps/rmdir.spec.ts b/packages/playground/blueprints/src/lib/steps/rmdir.spec.ts index 36fde6266f..f80089cdcc 100644 --- a/packages/playground/blueprints/src/lib/steps/rmdir.spec.ts +++ b/packages/playground/blueprints/src/lib/steps/rmdir.spec.ts @@ -18,6 +18,7 @@ describe('Blueprint step rmdir()', () => { afterEach(() => { loggerErrorSpy.mockRestore(); + php.exit(); }); it('should remove a directory', async () => { diff --git a/packages/playground/blueprints/src/lib/steps/run-php.spec.ts b/packages/playground/blueprints/src/lib/steps/run-php.spec.ts index bd8e7e15f1..797f547feb 100644 --- a/packages/playground/blueprints/src/lib/steps/run-php.spec.ts +++ b/packages/playground/blueprints/src/lib/steps/run-php.spec.ts @@ -17,6 +17,7 @@ describe('Blueprint step runPHP', () => { afterEach(() => { loggerErrorSpy.mockRestore(); + php.exit(); }); it('should run PHP code', async () => { diff --git a/packages/playground/blueprints/src/lib/steps/run-sql.spec.ts b/packages/playground/blueprints/src/lib/steps/run-sql.spec.ts index f06a5efd20..2601182a0f 100644 --- a/packages/playground/blueprints/src/lib/steps/run-sql.spec.ts +++ b/packages/playground/blueprints/src/lib/steps/run-sql.spec.ts @@ -50,6 +50,11 @@ describe('Blueprint step runSql', () => { ); }); + afterEach(async () => { + php.exit(); + await handler[Symbol.asyncDispose](); + }); + it('should split and "run" sql queries', async () => { // Test a single query await runSql(php, { diff --git a/packages/playground/blueprints/src/lib/steps/site-data.spec.ts b/packages/playground/blueprints/src/lib/steps/site-data.spec.ts index a44462d401..1a0e3ecf31 100644 --- a/packages/playground/blueprints/src/lib/steps/site-data.spec.ts +++ b/packages/playground/blueprints/src/lib/steps/site-data.spec.ts @@ -24,6 +24,11 @@ describe('Blueprint step setSiteOptions()', () => { php = await handler.getPrimaryPhp(); }); + afterEach(async () => { + php.exit(); + await handler[Symbol.asyncDispose](); + }); + it('should set the site option', async () => { await setSiteOptions(php, { options: { diff --git a/packages/playground/blueprints/src/lib/steps/wp-cli.spec.ts b/packages/playground/blueprints/src/lib/steps/wp-cli.spec.ts index ec3b1981fd..1ed1486eb2 100644 --- a/packages/playground/blueprints/src/lib/steps/wp-cli.spec.ts +++ b/packages/playground/blueprints/src/lib/steps/wp-cli.spec.ts @@ -31,6 +31,10 @@ describe('Blueprint step wpCLI', () => { php = await handler.getPrimaryPhp(); }); + afterEach(() => { + php.exit(); + }); + it('should run wp-cli commands', async () => { const result = await wpCLI(php, { command: diff --git a/packages/playground/blueprints/src/lib/steps/write-file.spec.ts b/packages/playground/blueprints/src/lib/steps/write-file.spec.ts index 5972ca9c16..686acbf631 100644 --- a/packages/playground/blueprints/src/lib/steps/write-file.spec.ts +++ b/packages/playground/blueprints/src/lib/steps/write-file.spec.ts @@ -18,6 +18,7 @@ describe('Blueprint step writeFile()', () => { afterEach(() => { loggerErrorSpy.mockRestore(); + php.exit(); }); it('should write a file with string data', async () => { diff --git a/packages/playground/blueprints/src/lib/steps/write-files.spec.ts b/packages/playground/blueprints/src/lib/steps/write-files.spec.ts index ce804c7d4e..a0ca2d44d7 100644 --- a/packages/playground/blueprints/src/lib/steps/write-files.spec.ts +++ b/packages/playground/blueprints/src/lib/steps/write-files.spec.ts @@ -16,6 +16,11 @@ describe('writeFiles', () => { php = await handler.getPrimaryPhp(); }); + afterEach(async () => { + php.exit(); + await handler[Symbol.asyncDispose](); + }); + it('should write files to the document root', async () => { await writeFiles(php, { writeToPath: '/wordpress/wp-content/plugins/test-plugin',