SystemsListPom.cs 5.2 KB

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