DesktopCardPom.cs 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. namespace Tests.E2e.PageObjectModels;
  2. using Microsoft.Playwright;
  3. public class DesktopCardPom(IPage page)
  4. {
  5. public TagsPom Tags => new(page);
  6. // -------------------------------------------------
  7. // Root + Navigation
  8. // -------------------------------------------------
  9. public ILocator DesktopItem(string name)
  10. => page.GetByTestId($"desktop-item-{Sanitize(name)}");
  11. public ILocator OpenDesktopLink(string name)
  12. => page.GetByTestId($"desktop-item-{Sanitize(name)}-link");
  13. public async Task OpenDesktopAsync(string name)
  14. {
  15. await OpenDesktopLink(name).ClickAsync();
  16. await page.WaitForURLAsync($"**/resources/hardware/{name}");
  17. }
  18. // -------------------------------------------------
  19. // Header actions
  20. // -------------------------------------------------
  21. public ILocator RenameButton(string name)
  22. => DesktopItem(name).GetByTestId("rename-desktop-button");
  23. public ILocator CloneButton(string name)
  24. => DesktopItem(name).GetByTestId("clone-desktop-button");
  25. public ILocator DeleteButton(string name)
  26. => DesktopItem(name).GetByTestId("delete-desktop-button");
  27. public ILocator ModelBadge(string name)
  28. => DesktopItem(name).GetByTestId("desktop-model-badge");
  29. // -------------------------------------------------
  30. // CPU section
  31. // -------------------------------------------------
  32. public ILocator CpuSection(string name)
  33. => DesktopItem(name).GetByTestId("desktop-cpu-section");
  34. public ILocator AddCpuButton(string name)
  35. => DesktopItem(name).GetByTestId("add-cpu-button");
  36. public ILocator EditCpuButton(string name, string cpuToString)
  37. => DesktopItem(name).GetByTestId($"edit-cpu-{Sanitize(cpuToString)}");
  38. // -------------------------------------------------
  39. // RAM section
  40. // -------------------------------------------------
  41. public ILocator RamSection(string name)
  42. => DesktopItem(name).GetByTestId("desktop-ram-section");
  43. public ILocator EditRamButton(string name)
  44. => DesktopItem(name).GetByTestId("edit-ram-button");
  45. public ILocator RamValueButton(string name)
  46. => DesktopItem(name).GetByTestId("ram-value-button");
  47. // -------------------------------------------------
  48. // Drive section
  49. // -------------------------------------------------
  50. public ILocator DriveSection(string name)
  51. => DesktopItem(name).GetByTestId("desktop-drive-section");
  52. public ILocator AddDriveButton(string name)
  53. => DesktopItem(name).GetByTestId("add-drive-button");
  54. public ILocator EditDriveButton(string name, string type, int size)
  55. => DesktopItem(name).GetByTestId($"edit-drive-{type}-{size}");
  56. // -------------------------------------------------
  57. // NIC section
  58. // -------------------------------------------------
  59. public ILocator NicSection(string name)
  60. => DesktopItem(name).GetByTestId("desktop-nic-section");
  61. public ILocator AddNicButton(string name)
  62. => DesktopItem(name).GetByTestId("add-nic-button");
  63. public ILocator EditNicButton(string name, string type, double speed)
  64. => DesktopItem(name).GetByTestId($"edit-nic-{type}-{speed}");
  65. // -------------------------------------------------
  66. // GPU section
  67. // -------------------------------------------------
  68. public ILocator GpuSection(string name)
  69. => DesktopItem(name).GetByTestId("desktop-gpu-section");
  70. public ILocator AddGpuButton(string name)
  71. => DesktopItem(name).GetByTestId("add-gpu-button");
  72. public ILocator EditGpuButton(string name, string model, int vram)
  73. => DesktopItem(name).GetByTestId($"edit-gpu-{model}-{vram}");
  74. // -------------------------------------------------
  75. // Notes (MarkdownViewer/MarkdownEditor use prefixes)
  76. // -------------------------------------------------
  77. public ILocator NotesSection(string name)
  78. => DesktopItem(name).GetByTestId("desktop-notes-section");
  79. // MarkdownViewer (TestIdPrefix="desktop-notes-viewer")
  80. public ILocator NotesViewerRoot(string name)
  81. => DesktopItem(name).GetByTestId("desktop-notes-viewer-markdown-viewer");
  82. public ILocator NotesViewerEditButton(string name)
  83. => DesktopItem(name).GetByTestId("desktop-notes-viewer-markdown-viewer-edit-button");
  84. // MarkdownEditor (TestIdPrefix="desktop-notes-editor")
  85. public ILocator NotesEditorRoot(string name)
  86. => DesktopItem(name).GetByTestId("desktop-notes-editor-markdown-editor");
  87. public ILocator NotesEditorTextarea(string name)
  88. => DesktopItem(name).GetByTestId("desktop-notes-editor-markdown-editor-textarea");
  89. public ILocator NotesEditorSave(string name)
  90. => DesktopItem(name).GetByTestId("desktop-notes-editor-markdown-editor-save");
  91. public ILocator NotesEditorCancel(string name)
  92. => DesktopItem(name).GetByTestId("desktop-notes-editor-markdown-editor-cancel");
  93. // -------------------------------------------------
  94. // Modals
  95. // -------------------------------------------------
  96. // ConfirmModal TestIdPrefix="Desktop" => "Desktop-confirm-modal-*"
  97. public ILocator DeleteConfirmModal => page.GetByTestId("Desktop-confirm-modal");
  98. public ILocator DeleteConfirmButton => page.GetByTestId("Desktop-confirm-modal-confirm");
  99. public ILocator DeleteCancelButton => page.GetByTestId("Desktop-confirm-modal-cancel");
  100. // StringValueModal prefixes you set:
  101. // desktop-rename => "desktop-rename-string-value-modal-*"
  102. public ILocator RenameModal => page.GetByTestId("desktop-rename-string-value-modal");
  103. public ILocator RenameModalInput => page.GetByTestId("desktop-rename-string-value-modal-input");
  104. public ILocator RenameModalAccept => page.GetByTestId("desktop-rename-string-value-modal-submit");
  105. public ILocator RenameModalCancel => page.GetByTestId("desktop-rename-string-value-modal-cancel");
  106. // desktop-clone => "desktop-clone-string-value-modal-*"
  107. public ILocator CloneModal => page.GetByTestId("desktop-clone-string-value-modal");
  108. public ILocator CloneModalInput => page.GetByTestId("desktop-clone-string-value-modal-input");
  109. public ILocator CloneModalAccept => page.GetByTestId("desktop-clone-string-value-modal-submit");
  110. public ILocator CloneModalCancel => page.GetByTestId("desktop-clone-string-value-modal-cancel");
  111. // -------------------------------------------------
  112. // Actions helpers
  113. // -------------------------------------------------
  114. public async Task DeleteDesktopAsync(string name)
  115. {
  116. await DeleteButton(name).ClickAsync();
  117. await Assertions.Expect(DeleteConfirmModal).ToBeVisibleAsync();
  118. await DeleteConfirmButton.ClickAsync();
  119. await Assertions.Expect(DesktopItem(name)).Not.ToBeVisibleAsync();
  120. }
  121. public async Task RenameDesktopAsync(string currentName, string newName)
  122. {
  123. await RenameButton(currentName).ClickAsync();
  124. await Assertions.Expect(RenameModal).ToBeVisibleAsync();
  125. await RenameModalInput.FillAsync(newName);
  126. await RenameModalAccept.ClickAsync();
  127. await page.WaitForURLAsync($"**/resources/hardware/{newName}");
  128. }
  129. public async Task CloneDesktopAsync(string currentName, string cloneName)
  130. {
  131. await CloneButton(currentName).ClickAsync();
  132. await Assertions.Expect(CloneModal).ToBeVisibleAsync();
  133. await CloneModalInput.FillAsync(cloneName);
  134. await CloneModalAccept.ClickAsync();
  135. await page.WaitForURLAsync($"**/resources/hardware/{cloneName}");
  136. }
  137. private static string Sanitize(string value)
  138. => value.Replace(" ", "-");
  139. }