SystemsListPom.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. using Microsoft.Playwright;
  2. namespace Tests.E2e.PageObjectModels;
  3. public class SystemsListPom {
  4. private readonly IPage _page;
  5. public SystemsListPom(IPage page) {
  6. _page = page;
  7. }
  8. public AddResourceComponent AddSystem => new(_page, "system");
  9. // -------------------------------------------------
  10. // Root & State
  11. // -------------------------------------------------
  12. public ILocator PageRoot => _page.GetByTestId("systems-page-root");
  13. public ILocator PageTitle => _page.GetByTestId("systems-page-title");
  14. public ILocator Loading => _page.GetByTestId("systems-loading");
  15. public ILocator EmptyState => _page.GetByTestId("systems-empty");
  16. public ILocator SystemsList => _page.GetByTestId("systems-list");
  17. // -------------------------------------------------
  18. // Add System Section
  19. // -------------------------------------------------
  20. public ILocator AddSection => _page.GetByTestId("add-system-section");
  21. // These must match AddResourceComponent test IDs
  22. public ILocator AddInput => _page.GetByTestId("add-system-input");
  23. public ILocator AddButton => _page.GetByTestId("add-system-button");
  24. // -------------------------------------------------
  25. // Grouping (RunsOn)
  26. // -------------------------------------------------
  27. public ILocator Group(string groupKey) => _page.GetByTestId($"systems-group-{SanitizeGroup(groupKey)}");
  28. public ILocator GroupTitle(string groupKey) => _page.GetByTestId($"systems-group-title-{SanitizeGroup(groupKey)}");
  29. public ILocator GroupList(string groupKey) => _page.GetByTestId($"systems-group-list-{SanitizeGroup(groupKey)}");
  30. // -------------------------------------------------
  31. // Individual Systems
  32. // -------------------------------------------------
  33. public ILocator SystemListItem(string name) => _page.GetByTestId($"systems-list-item-{Sanitize(name)}");
  34. public ILocator SystemCard(string name) => _page.GetByTestId($"system-item-{Sanitize(name)}");
  35. public ILocator DeleteButton(string name) => SystemCard(name).GetByTestId("delete-system-button");
  36. public ILocator EditButton(string name) => SystemCard(name).GetByTestId("edit-system-button");
  37. public ILocator RenameButton(string name) => SystemCard(name).GetByTestId("rename-system-button");
  38. public ILocator CloneButton(string name) => SystemCard(name).GetByTestId("clone-system-button");
  39. // -------------------------------------------------
  40. // Navigation
  41. // -------------------------------------------------
  42. public async Task GotoAsync(string baseUrl) {
  43. await _page.GotoAsync($"{baseUrl}/systems/list");
  44. await AssertLoadedAsync();
  45. }
  46. public async Task AssertLoadedAsync() {
  47. await Assertions.Expect(PageRoot).ToBeVisibleAsync();
  48. await Assertions.Expect(PageTitle).ToBeVisibleAsync();
  49. }
  50. public async Task WaitForListAsync() => await Assertions.Expect(SystemsList).ToBeVisibleAsync();
  51. public async Task AssertEmptyAsync() => await Assertions.Expect(EmptyState).ToBeVisibleAsync();
  52. // -------------------------------------------------
  53. // Actions
  54. // -------------------------------------------------
  55. public async Task AddSystemAsync(string name) {
  56. await AddSystem.AddAsync(name);
  57. await Assertions.Expect(SystemCard(name))
  58. .ToBeVisibleAsync();
  59. }
  60. public async Task DeleteSystemAsync(string name) {
  61. await DeleteButton(name).ClickAsync();
  62. await _page.GetByTestId("system-delete-confirm-modal-confirm")
  63. .ClickAsync();
  64. await Assertions.Expect(SystemCard(name))
  65. .Not.ToBeVisibleAsync();
  66. }
  67. public async Task OpenSystemAsync(string name) {
  68. await SystemCard(name).ClickAsync();
  69. await _page.WaitForURLAsync($"**/resources/systems/{name}");
  70. }
  71. // -------------------------------------------------
  72. // Assertions
  73. // -------------------------------------------------
  74. public async Task AssertSystemExists(string name) {
  75. await Assertions.Expect(SystemCard(name))
  76. .ToBeVisibleAsync();
  77. }
  78. public async Task AssertSystemDoesNotExist(string name) {
  79. await Assertions.Expect(SystemCard(name))
  80. .Not.ToBeVisibleAsync();
  81. }
  82. public async Task AssertGroupExists(string groupKey) {
  83. await Assertions.Expect(Group(groupKey))
  84. .ToBeVisibleAsync();
  85. }
  86. public async Task AssertSystemInGroup(string groupKey, string systemName) {
  87. await Assertions.Expect(
  88. GroupList(groupKey)
  89. .GetByTestId($"systems-list-item-{Sanitize(systemName)}")
  90. )
  91. .ToBeVisibleAsync();
  92. }
  93. // -------------------------------------------------
  94. // Utilities
  95. // -------------------------------------------------
  96. private static string Sanitize(string value) => value.Replace(" ", "-");
  97. private static string SanitizeGroup(string? value) {
  98. return string.IsNullOrWhiteSpace(value)
  99. ? "unassigned"
  100. : value.Replace(" ", "-");
  101. }
  102. }