SystemCardTests.cs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. using Tests.E2e.Infra;
  2. using Tests.E2e.PageObjectModels;
  3. using Xunit.Abstractions;
  4. using Microsoft.Playwright;
  5. namespace Tests.E2e;
  6. public class SystemCardTests(
  7. PlaywrightFixture fixture,
  8. ITestOutputHelper output) : E2ETestBase(fixture, output)
  9. {
  10. private readonly ITestOutputHelper _output = output;
  11. // ============================================================
  12. // Rename / Clone / Delete Flow
  13. // ============================================================
  14. [Fact]
  15. public async Task User_Can_Rename_Clone_And_Delete_System()
  16. {
  17. var (context, page) = await CreatePageAsync();
  18. var originalName = $"e2e-sys-{Guid.NewGuid():N}"[..16];
  19. var renamedName = $"e2e-sys-rn-{Guid.NewGuid():N}"[..16];
  20. var cloneName = $"e2e-sys-cl-{Guid.NewGuid():N}"[..16];
  21. try
  22. {
  23. await page.GotoAsync($"{fixture.BaseUrl}/systems/list");
  24. var list = new SystemsListPom(page);
  25. await list.AssertLoadedAsync();
  26. await list.AddSystemAsync(originalName);
  27. if (!page.Url.Contains($"/resources/systems/{originalName}",
  28. StringComparison.OrdinalIgnoreCase))
  29. {
  30. await list.OpenSystemAsync(originalName);
  31. }
  32. var card = new SystemCardPom(page);
  33. await card.AssertVisibleAsync(originalName);
  34. // -------------------------
  35. // Rename
  36. // -------------------------
  37. await card.RenameAsync(originalName, renamedName);
  38. await card.AssertVisibleAsync(renamedName);
  39. // -------------------------
  40. // Clone
  41. // -------------------------
  42. await card.CloneAsync(renamedName, cloneName);
  43. await card.AssertVisibleAsync(cloneName);
  44. // -------------------------
  45. // Delete clone
  46. // -------------------------
  47. await card.DeleteAsync(cloneName);
  48. await page.WaitForURLAsync("**/systems/list");
  49. // Delete renamed original
  50. await page.GotoAsync($"{fixture.BaseUrl}/resources/systems/{renamedName}");
  51. await card.AssertVisibleAsync(renamedName);
  52. await card.DeleteAsync(renamedName);
  53. await page.WaitForURLAsync("**/systems/list");
  54. }
  55. catch (Exception)
  56. {
  57. _output.WriteLine("TEST FAILED — Capturing diagnostics");
  58. _output.WriteLine($"Current URL: {page.Url}");
  59. var html = await page.ContentAsync();
  60. _output.WriteLine("==== DOM SNAPSHOT START ====");
  61. _output.WriteLine(html);
  62. _output.WriteLine("==== DOM SNAPSHOT END ====");
  63. throw;
  64. }
  65. finally
  66. {
  67. await context.CloseAsync();
  68. }
  69. }
  70. // ============================================================
  71. // Edit Flow
  72. // ============================================================
  73. [Fact]
  74. public async Task User_Can_Edit_And_Save_System()
  75. {
  76. var (context, page) = await CreatePageAsync();
  77. var name = $"e2e-sys-edit-{Guid.NewGuid():N}"[..16];
  78. try
  79. {
  80. await page.GotoAsync($"{fixture.BaseUrl}/systems/list");
  81. var list = new SystemsListPom(page);
  82. await list.AddSystemAsync(name);
  83. if (!page.Url.Contains($"/resources/systems/{name}",
  84. StringComparison.OrdinalIgnoreCase))
  85. {
  86. await list.OpenSystemAsync(name);
  87. }
  88. var card = new SystemCardPom(page);
  89. await card.AssertVisibleAsync(name);
  90. await card.BeginEditAsync(name);
  91. // Edit fields
  92. await card.TypeSelect(name).SelectOptionAsync(new SelectOptionValue { Index = 0 });
  93. await card.OsInput(name).FillAsync("Ubuntu 22.04");
  94. await card.CoresInput(name).FillAsync("8");
  95. await card.RamInput(name).FillAsync("16");
  96. await card.SaveAsync(name);
  97. // Verify read mode restored
  98. await Assertions.Expect(card.EditButton(name)).ToBeVisibleAsync();
  99. }
  100. finally
  101. {
  102. await context.CloseAsync();
  103. }
  104. }
  105. // ============================================================
  106. // Cancel Edit
  107. // ============================================================
  108. [Fact]
  109. public async Task User_Can_Cancel_System_Edit()
  110. {
  111. var (context, page) = await CreatePageAsync();
  112. var name = $"e2e-sys-cancel-{Guid.NewGuid():N}"[..16];
  113. try
  114. {
  115. await page.GotoAsync($"{fixture.BaseUrl}/systems/list");
  116. var list = new SystemsListPom(page);
  117. await list.AddSystemAsync(name);
  118. if (!page.Url.Contains($"/resources/systems/{name}",
  119. StringComparison.OrdinalIgnoreCase))
  120. {
  121. await list.OpenSystemAsync(name);
  122. }
  123. var card = new SystemCardPom(page);
  124. await card.AssertVisibleAsync(name);
  125. await card.BeginEditAsync(name);
  126. await card.OsInput(name).FillAsync("Should Not Save");
  127. await card.CancelAsync(name);
  128. await Assertions.Expect(card.EditButton(name)).ToBeVisibleAsync();
  129. }
  130. finally
  131. {
  132. await context.CloseAsync();
  133. }
  134. }
  135. // ============================================================
  136. // Drive Flow
  137. // ============================================================
  138. [Fact]
  139. public async Task User_Can_Add_And_Edit_System_Drive()
  140. {
  141. var (context, page) = await CreatePageAsync();
  142. var name = $"e2e-sys-drive-{Guid.NewGuid():N}"[..16];
  143. try
  144. {
  145. await page.GotoAsync($"{fixture.BaseUrl}/systems/list");
  146. var list = new SystemsListPom(page);
  147. await list.AddSystemAsync(name);
  148. if (!page.Url.Contains($"/resources/systems/{name}",
  149. StringComparison.OrdinalIgnoreCase))
  150. {
  151. await list.OpenSystemAsync(name);
  152. }
  153. var card = new SystemCardPom(page);
  154. await card.AssertVisibleAsync(name);
  155. await card.AddDriveAsync(name, "ssd", 512);
  156. }
  157. finally
  158. {
  159. await context.CloseAsync();
  160. }
  161. }
  162. }