ServerCardTests.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using Tests.E2e.Infra;
  2. using Tests.E2e.PageObjectModels;
  3. using Xunit.Abstractions;
  4. namespace Tests.E2e;
  5. public class ServerCardTests(
  6. PlaywrightFixture fixture,
  7. ITestOutputHelper output) : E2ETestBase(fixture, output)
  8. {
  9. private readonly ITestOutputHelper _output = output;
  10. [Fact]
  11. public async Task User_Can_Rename_Clone_And_Delete_Server_From_Details_Page()
  12. {
  13. var (context, page) = await CreatePageAsync();
  14. var originalName = $"e2e-srv-{Guid.NewGuid():N}"[..16];
  15. var renamedName = $"e2e-srv-rn-{Guid.NewGuid():N}"[..16];
  16. var cloneName = $"e2e-srv-cl-{Guid.NewGuid():N}"[..16];
  17. try
  18. {
  19. // ------------------------------------
  20. // Navigate to Servers list
  21. // ------------------------------------
  22. await page.GotoAsync(fixture.BaseUrl);
  23. var layout = new MainLayoutPom(page);
  24. await layout.AssertLoadedAsync();
  25. await layout.GotoHardwareAsync();
  26. var hardwareTree = new HardwareTreePom(page);
  27. await hardwareTree.AssertLoadedAsync();
  28. await hardwareTree.GotoServersListAsync();
  29. var listPage = new ServersListPom(page);
  30. await listPage.AssertLoadedAsync();
  31. // ------------------------------------
  32. // Create server
  33. // ------------------------------------
  34. await listPage.AddServerAsync(originalName);
  35. // If list does not auto-navigate, open it
  36. if (!page.Url.Contains($"/resources/hardware/{originalName}", StringComparison.OrdinalIgnoreCase))
  37. {
  38. await listPage.OpenServerAsync(originalName);
  39. }
  40. var card = new ServerCardPom(page);
  41. await card.AssertVisibleAsync(originalName);
  42. // ====================================
  43. // RENAME
  44. // ====================================
  45. await card.RenameAsync(originalName, renamedName);
  46. await card.AssertVisibleAsync(renamedName);
  47. // ====================================
  48. // CLONE
  49. // ====================================
  50. await card.CloneAsync(renamedName, cloneName);
  51. await card.AssertVisibleAsync(cloneName);
  52. // ====================================
  53. // DELETE CLONE
  54. // ====================================
  55. await card.DeleteAsync(cloneName);
  56. // Details page delete navigates to tree
  57. await page.WaitForURLAsync("**/hardware/tree");
  58. // ====================================
  59. // DELETE RENAMED ORIGINAL
  60. // ====================================
  61. await page.GotoAsync($"{fixture.BaseUrl}/resources/hardware/{renamedName}");
  62. await card.AssertVisibleAsync(renamedName);
  63. await card.DeleteAsync(renamedName);
  64. await page.WaitForURLAsync("**/hardware/tree");
  65. }
  66. catch (Exception)
  67. {
  68. _output.WriteLine("TEST FAILED — Capturing diagnostics");
  69. _output.WriteLine($"Current URL: {page.Url}");
  70. var html = await page.ContentAsync();
  71. _output.WriteLine("==== DOM SNAPSHOT START ====");
  72. _output.WriteLine(html);
  73. _output.WriteLine("==== DOM SNAPSHOT END ====");
  74. throw;
  75. }
  76. finally
  77. {
  78. await context.CloseAsync();
  79. }
  80. }
  81. }