SwitchListPom.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. using Microsoft.Playwright;
  2. namespace Tests.E2e.PageObjectModels;
  3. public class SwitchListPom(IPage page)
  4. {
  5. public AddResourceComponent AddSwitch => new(page, "switch");
  6. public ILocator PageRoot => page.GetByTestId("switches-page-root");
  7. public ILocator PageTitle => page.GetByTestId("switches-page-title");
  8. public ILocator Loading => page.GetByTestId("switches-loading");
  9. public ILocator EmptyState => page.GetByTestId("switches-empty");
  10. public ILocator SwitchsList => page.GetByTestId("switches-list");
  11. public ILocator AddSection => page.GetByTestId("switches-add-section");
  12. // Must match AddResourceComponent test IDs
  13. public ILocator AddInput => page.GetByTestId("add-switch-input");
  14. public ILocator AddButton => page.GetByTestId("add-switch-button");
  15. // -------------------------------------------------
  16. // Dynamic Switch Items
  17. // -------------------------------------------------
  18. public ILocator SwitchItem(string name)
  19. {
  20. return page.GetByTestId($"switch-item-{Sanitize(name)}");
  21. }
  22. public ILocator OpenLink(string name)
  23. => page.GetByTestId($"switch-item-{Sanitize(name)}-link");
  24. public ILocator EditButton(string name)
  25. {
  26. return SwitchItem(name)
  27. .GetByTestId("edit-switch-button");
  28. }
  29. public ILocator SaveButton(string name)
  30. {
  31. return SwitchItem(name)
  32. .GetByTestId("save-switch-button");
  33. }
  34. public ILocator CancelButton(string name)
  35. {
  36. return SwitchItem(name)
  37. .GetByTestId("cancel-switch-button");
  38. }
  39. public ILocator RenameButton(string name)
  40. {
  41. return SwitchItem(name)
  42. .GetByTestId("rename-switch-button");
  43. }
  44. public ILocator CloneButton(string name)
  45. {
  46. return SwitchItem(name)
  47. .GetByTestId("clone-switch-button");
  48. }
  49. public ILocator DeleteButton(string name)
  50. {
  51. return SwitchItem(name)
  52. .GetByTestId("delete-switch-button");
  53. }
  54. // -------------------------------------------------
  55. // Navigation
  56. // -------------------------------------------------
  57. public async Task GotoAsync(string baseUrl)
  58. {
  59. await page.GotoAsync($"{baseUrl}/switches/list");
  60. await AssertLoadedAsync();
  61. }
  62. public async Task AssertLoadedAsync()
  63. {
  64. await Assertions.Expect(PageRoot).ToBeVisibleAsync();
  65. await Assertions.Expect(PageTitle).ToBeVisibleAsync();
  66. }
  67. public async Task WaitForListAsync()
  68. {
  69. await Assertions.Expect(SwitchsList).ToBeVisibleAsync();
  70. }
  71. // -------------------------------------------------
  72. // Actions
  73. // -------------------------------------------------
  74. public async Task AddSwitchAsync(string name)
  75. {
  76. await AddSwitch.AddAsync(name);
  77. await Assertions.Expect(SwitchItem(name))
  78. .ToBeVisibleAsync();
  79. }
  80. public async Task DeleteSwitchAsync(string name)
  81. {
  82. await DeleteButton(name).ClickAsync();
  83. await page.GetByTestId("Switch-confirm-modal-confirm").ClickAsync();
  84. await Assertions.Expect(SwitchItem(name))
  85. .Not.ToBeVisibleAsync();
  86. }
  87. public async Task OpenSwitchAsync(string name)
  88. {
  89. await OpenLink(name).ClickAsync();
  90. await page.WaitForURLAsync($"**/resources/hardware/{name}");
  91. }
  92. public async Task AssertSwitchExists(string name)
  93. {
  94. await Assertions.Expect(SwitchItem(name))
  95. .ToBeVisibleAsync();
  96. }
  97. public async Task AssertSwitchDoesNotExist(string name)
  98. {
  99. await Assertions.Expect(SwitchItem(name))
  100. .Not.ToBeVisibleAsync();
  101. }
  102. private static string Sanitize(string value)
  103. {
  104. return value.Replace(" ", "-");
  105. }
  106. }