ServerCardPom.cs 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. using Microsoft.Playwright;
  2. namespace Tests.E2e.PageObjectModels;
  3. public class ServerCardPom(IPage page)
  4. {
  5. public TagsPom Tags => new(page);
  6. public LabelsPom Labels => new(page);
  7. // -------------------------------------------------
  8. // Root / Identity
  9. // -------------------------------------------------
  10. public ILocator ServerItem(string name)
  11. => page.GetByTestId($"server-item-{Sanitize(name)}");
  12. public ILocator ServerLink(string name)
  13. => page.GetByTestId($"server-item-{Sanitize(name)}-link");
  14. public async Task AssertVisibleAsync(string name)
  15. => await Assertions.Expect(ServerItem(name)).ToBeVisibleAsync();
  16. // -------------------------------------------------
  17. // Top actions
  18. // -------------------------------------------------
  19. public ILocator RenameButton(string name)
  20. => ServerItem(name).GetByTestId("rename-server-button");
  21. public ILocator CloneButton(string name)
  22. => ServerItem(name).GetByTestId("clone-server-button");
  23. public ILocator DeleteButton(string name)
  24. => ServerItem(name).GetByTestId("delete-server-button");
  25. // -------------------------------------------------
  26. // CPU section + modal (TestIdPrefix="server-cpu")
  27. // -------------------------------------------------
  28. public ILocator CpuSection(string name)
  29. => ServerItem(name).GetByTestId("server-cpu-section");
  30. public ILocator AddCpuButton(string name)
  31. => ServerItem(name).GetByTestId("add-cpu-button");
  32. public ILocator EditCpuButton(string name, string cpuDisplayKey)
  33. => ServerItem(name).GetByTestId($"edit-cpu-{Sanitize(cpuDisplayKey)}");
  34. // CpuModal base id becomes: "server-cpu-cpu-modal"
  35. public ILocator CpuModalRoot => page.GetByTestId("server-cpu-cpu-modal");
  36. public ILocator CpuModalModelInput => page.GetByTestId("server-cpu-cpu-modal-model-input");
  37. public ILocator CpuModalCoresInput => page.GetByTestId("server-cpu-cpu-modal-cores-input");
  38. public ILocator CpuModalThreadsInput => page.GetByTestId("server-cpu-cpu-modal-threads-input");
  39. public ILocator CpuModalSubmit => page.GetByTestId("server-cpu-cpu-modal-submit");
  40. public ILocator CpuModalCancel => page.GetByTestId("server-cpu-cpu-modal-cancel");
  41. public ILocator CpuModalDelete => page.GetByTestId("server-cpu-cpu-modal-delete");
  42. public ILocator RamModalRoot => page.GetByTestId("server-ram-ram-modal");
  43. public ILocator RamModalSizeInput => page.GetByTestId("server-ram-ram-modal-size-input");
  44. public ILocator RamModalMtsInput => page.GetByTestId("server-ram-ram-modal-mts-input");
  45. public ILocator RamModalSubmit => page.GetByTestId("server-ram-ram-modal-submit");
  46. public ILocator RamModalCancel => page.GetByTestId("server-ram-ram-modal-cancel");
  47. // -------------------------------------------------
  48. // Drive modal (TestIdPrefix="server-drive")
  49. // -------------------------------------------------
  50. public ILocator DriveModalRoot => page.GetByTestId("server-drive-drive-modal");
  51. public ILocator DriveModalTypeInput => page.GetByTestId("server-drive-drive-modal-type-input");
  52. public ILocator DriveModalSizeInput => page.GetByTestId("server-drive-drive-modal-size-input");
  53. public ILocator DriveModalSubmit => page.GetByTestId("server-drive-drive-modal-submit");
  54. public ILocator DriveModalCancel => page.GetByTestId("server-drive-drive-modal-cancel");
  55. public ILocator DriveModalDelete => page.GetByTestId("server-drive-drive-modal-delete");
  56. // -------------------------------------------------
  57. // NIC modal (TestIdPrefix="server-nic")
  58. // -------------------------------------------------
  59. public ILocator NicModalRoot => page.GetByTestId("server-nic-nic-modal");
  60. public ILocator NicModalTypeInput => page.GetByTestId("server-nic-nic-modal-type-input");
  61. public ILocator NicModalSpeedInput => page.GetByTestId("server-nic-nic-modal-speed-input");
  62. public ILocator NicModalPortsInput => page.GetByTestId("server-nic-nic-modal-ports-input");
  63. public ILocator NicModalSubmit => page.GetByTestId("server-nic-nic-modal-submit");
  64. public ILocator NicModalCancel => page.GetByTestId("server-nic-nic-modal-cancel");
  65. public ILocator NicModalDelete => page.GetByTestId("server-nic-nic-modal-delete");
  66. // -------------------------------------------------
  67. // GPU modal (TestIdPrefix="server-gpu")
  68. // -------------------------------------------------
  69. public ILocator GpuModalRoot => page.GetByTestId("server-gpu-gpu-modal");
  70. public ILocator GpuModalModelInput => page.GetByTestId("server-gpu-gpu-modal-model-input");
  71. public ILocator GpuModalVramInput => page.GetByTestId("server-gpu-gpu-modal-vram-input");
  72. public ILocator GpuModalSubmit => page.GetByTestId("server-gpu-gpu-modal-submit");
  73. public ILocator GpuModalCancel => page.GetByTestId("server-gpu-gpu-modal-cancel");
  74. public ILocator GpuModalDelete => page.GetByTestId("server-gpu-gpu-modal-delete");
  75. // -------------------------------------------------
  76. // Notes (TestIdPrefix="server-markdown")
  77. // MarkdownViewer base id: "server-markdown-markdown-viewer"
  78. // MarkdownEditor base id: "server-markdown-markdown-editor"
  79. // -------------------------------------------------
  80. public ILocator NotesViewerRoot => page.GetByTestId("server-markdown-markdown-viewer");
  81. public ILocator NotesViewerEditButton => page.GetByTestId("server-markdown-markdown-viewer-edit");
  82. public ILocator NotesEditorRoot => page.GetByTestId("server-markdown-markdown-editor");
  83. public ILocator NotesEditorTextarea => page.GetByTestId("server-markdown-markdown-editor-textarea");
  84. public ILocator NotesEditorSave => page.GetByTestId("server-markdown-markdown-editor-save");
  85. public ILocator NotesEditorCancel => page.GetByTestId("server-markdown-markdown-editor-cancel");
  86. // -------------------------------------------------
  87. // Delete confirm modal (TestIdPrefix="server-delete")
  88. // ConfirmModal base id becomes: "server-delete-confirm-modal"
  89. // -------------------------------------------------
  90. public ILocator DeleteConfirmModal => page.GetByTestId("server-delete-confirm-modal");
  91. public ILocator DeleteConfirm => page.GetByTestId("server-delete-confirm-modal-confirm");
  92. public ILocator DeleteCancel => page.GetByTestId("server-delete-confirm-modal-cancel");
  93. public ILocator RenameModal => page.GetByTestId("server-rename-string-value-modal");
  94. public ILocator RenameInput => page.GetByTestId("server-rename-string-value-modal-input");
  95. public ILocator RenameAccept => page.GetByTestId("server-rename-string-value-modal-submit");
  96. public ILocator RenameCancel => page.GetByTestId("server-rename-string-value-modal-cancel");
  97. // -------------------------------------------------
  98. // Clone modal (TestIdPrefix="server-clone")
  99. // -------------------------------------------------
  100. public ILocator CloneModal => page.GetByTestId("server-clone-string-value-modal");
  101. public ILocator CloneInput => page.GetByTestId("server-clone-string-value-modal-input");
  102. public ILocator CloneAccept => page.GetByTestId("server-clone-string-value-modal-submit");
  103. public ILocator CloneCancel => page.GetByTestId("server-clone-string-value-modal-cancel");
  104. // -------------------------------------------------
  105. // Helpers / Common actions
  106. // -------------------------------------------------
  107. public async Task RenameAsync(string currentName, string newName)
  108. {
  109. await RenameButton(currentName).ClickAsync();
  110. await Assertions.Expect(RenameModal).ToBeVisibleAsync();
  111. await RenameInput.FillAsync(newName);
  112. await RenameAccept.ClickAsync();
  113. await page.WaitForURLAsync($"**/resources/hardware/{newName}");
  114. }
  115. public async Task CloneAsync(string currentName, string cloneName)
  116. {
  117. await CloneButton(currentName).ClickAsync();
  118. await Assertions.Expect(CloneModal).ToBeVisibleAsync();
  119. await CloneInput.FillAsync(cloneName);
  120. await CloneAccept.ClickAsync();
  121. await page.WaitForURLAsync($"**/resources/hardware/{cloneName}");
  122. }
  123. public async Task DeleteAsync(string name)
  124. {
  125. await DeleteButton(name).ClickAsync();
  126. await Assertions.Expect(DeleteConfirmModal).ToBeVisibleAsync();
  127. await DeleteConfirm.ClickAsync();
  128. }
  129. private static string Sanitize(string value)
  130. => value.Replace(" ", "-");
  131. }