From 8e11f1f900a4b603d6417c90e2f5917cb5c4c8a6 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Fri, 5 Jun 2026 10:30:16 -0400 Subject: [PATCH] test(e2e): guard DeploymentFixture partial-init + teardown (review fixes) --- .../Deployment/DeploymentFixture.cs | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/tests/ZB.MOM.WW.ScadaBridge.CentralUI.PlaywrightTests/Deployment/DeploymentFixture.cs b/tests/ZB.MOM.WW.ScadaBridge.CentralUI.PlaywrightTests/Deployment/DeploymentFixture.cs index 7c25a16d..dfac4df3 100644 --- a/tests/ZB.MOM.WW.ScadaBridge.CentralUI.PlaywrightTests/Deployment/DeploymentFixture.cs +++ b/tests/ZB.MOM.WW.ScadaBridge.CentralUI.PlaywrightTests/Deployment/DeploymentFixture.cs @@ -77,10 +77,22 @@ public sealed class DeploymentFixture : IAsyncLifetime return; } - SiteAId = await CliRunner.ResolveSiteIdAsync(SiteAIdentifier); - TemplateId = await CliRunner.CreateTemplateAsync(CliRunner.UniqueName("deploytmpl")); - await CliRunner.AddAttributeAsync(TemplateId, "Value", "Double"); - AreaId = await CliRunner.CreateAreaAsync(SiteAId, CliRunner.UniqueName("area")); + try + { + SiteAId = await CliRunner.ResolveSiteIdAsync(SiteAIdentifier); + TemplateId = await CliRunner.CreateTemplateAsync(CliRunner.UniqueName("deploytmpl")); + await CliRunner.AddAttributeAsync(TemplateId, "Value", "Double"); + AreaId = await CliRunner.CreateAreaAsync(SiteAId, CliRunner.UniqueName("area")); + } + catch + { + // Partial-init guard: best-effort cleanup of whatever was created before + // the failure; DeleteAreaAsync/DeleteTemplateAsync are no-ops for id 0. + await CliRunner.DeleteAreaAsync(AreaId); + await CliRunner.DeleteTemplateAsync(TemplateId); + Available = false; + throw; + } } /// @@ -104,6 +116,7 @@ public sealed class DeploymentFixture : IAsyncLifetime public async Task<(int Id, string UniqueName)> CreateInstanceAsync() { var inv = System.Globalization.CultureInfo.InvariantCulture; + // "inst" must match the InstanceNamePrefix ("zztest-inst-") used by the teardown sweep. var name = CliRunner.UniqueName("inst"); using var doc = await CliRunner.RunJsonAsync( @@ -154,8 +167,8 @@ public sealed class DeploymentFixture : IAsyncLifetime // Best-effort teardown — never fail the suite on a cleanup hiccup. } - await CliRunner.DeleteAreaAsync(AreaId); - await CliRunner.DeleteTemplateAsync(TemplateId); + try { await CliRunner.DeleteAreaAsync(AreaId); } catch { } + try { await CliRunner.DeleteTemplateAsync(TemplateId); } catch { } } ///