ServerListPom.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. using Microsoft.Playwright;
  2. namespace Tests.E2e.PageObjectModels;
  3. public class ServersListPom(IPage page)
  4. {
  5. public AddResourceComponent AddServer => new(page, "server");
  6. public ILocator PageRoot => page.GetByTestId("servers-page-root");
  7. public ILocator PageTitle => page.GetByTestId("servers-page-title");
  8. public ILocator Loading => page.GetByTestId("servers-loading");
  9. public ILocator EmptyState => page.GetByTestId("servers-empty");
  10. public ILocator ServersList => page.GetByTestId("servers-list");
  11. public ILocator AddSection => page.GetByTestId("add-server-section");
  12. // These must match your AddResourceComponent test IDs
  13. public ILocator AddInput => page.GetByTestId("add-server-input");
  14. public ILocator AddButton => page.GetByTestId("add-server-button");
  15. // -------------------------------------------------
  16. // Dynamic Server Items
  17. // -------------------------------------------------
  18. public ILocator ServerItem(string serverName)
  19. {
  20. return page.GetByTestId($"server-item-{Sanitize(serverName)}");
  21. }
  22. public ILocator DeleteButton(string serverName)
  23. {
  24. return ServerItem(serverName)
  25. .GetByTestId("delete-server-button");
  26. }
  27. public ILocator EditButton(string serverName)
  28. {
  29. return ServerItem(serverName)
  30. .GetByTestId("edit-server-button");
  31. }
  32. public ILocator RenameButton(string serverName)
  33. {
  34. return ServerItem(serverName)
  35. .GetByTestId("rename-server-button");
  36. }
  37. public ILocator CloneButton(string serverName)
  38. {
  39. return ServerItem(serverName)
  40. .GetByTestId("clone-server-button");
  41. }
  42. // -------------------------------------------------
  43. // Navigation
  44. // -------------------------------------------------
  45. public async Task GotoAsync(string baseUrl)
  46. {
  47. await page.GotoAsync($"{baseUrl}/servers/list");
  48. await AssertLoadedAsync();
  49. }
  50. public async Task AssertLoadedAsync()
  51. {
  52. await Assertions.Expect(PageRoot).ToBeVisibleAsync();
  53. await Assertions.Expect(PageTitle).ToBeVisibleAsync();
  54. }
  55. public async Task WaitForListAsync()
  56. {
  57. await Assertions.Expect(ServersList).ToBeVisibleAsync();
  58. }
  59. // -------------------------------------------------
  60. // Actions
  61. // -------------------------------------------------
  62. public async Task AddServerAsync(string serverName)
  63. {
  64. await AddServer.AddAsync(serverName);
  65. await Assertions.Expect(ServerItem(serverName))
  66. .ToBeVisibleAsync();
  67. }
  68. public async Task DeleteServerAsync(string serverName)
  69. {
  70. await DeleteButton(serverName).ClickAsync();
  71. await page.GetByTestId("server-delete-confirm-modal-confirm").ClickAsync();
  72. await Assertions.Expect(ServerItem(serverName))
  73. .Not.ToBeVisibleAsync();
  74. }
  75. public async Task OpenServerAsync(string serverName)
  76. {
  77. await ServerItem(serverName).ClickAsync();
  78. await page.WaitForURLAsync($"**/resources/hardware/{serverName}");
  79. }
  80. public async Task AssertServerExists(string serverName)
  81. {
  82. await Assertions.Expect(ServerItem(serverName))
  83. .ToBeVisibleAsync();
  84. }
  85. public async Task AssertServerDoesNotExist(string serverName)
  86. {
  87. await Assertions.Expect(ServerItem(serverName))
  88. .Not.ToBeVisibleAsync();
  89. }
  90. private static string Sanitize(string value)
  91. {
  92. return value.Replace(" ", "-");
  93. }
  94. }