SystemCardPom.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. using Microsoft.Playwright;
  2. namespace Tests.E2e.PageObjectModels;
  3. public class SystemCardPom(IPage page) {
  4. public TagsPom Tags => new(page);
  5. public LabelsPom Labels => new(page);
  6. // ---- Drive Modal (TestIdPrefix = "system") ----
  7. // ---- Drive Modal (TestIdPrefix = "system") ----
  8. public ILocator DriveTypeSelect
  9. => page.GetByTestId("system-drive-modal-type-input");
  10. public ILocator DriveSizeInput
  11. => page.GetByTestId("system-drive-modal-size-input");
  12. public ILocator DriveSubmitButton
  13. => page.GetByTestId("system-drive-modal-submit");
  14. public ILocator DriveDeleteButton
  15. => page.GetByTestId("system-delete-button");
  16. // -------------------------------------------------
  17. // Notes
  18. // -------------------------------------------------
  19. public ILocator NotesViewer
  20. => page.GetByTestId("system-notes-viewer-container");
  21. public ILocator NotesEditor
  22. => page.GetByTestId("system-notes-editor-container");
  23. // -------------------------------------------------
  24. // Confirm Delete Modal
  25. // -------------------------------------------------
  26. public ILocator ConfirmDeleteButton
  27. => page.GetByTestId("system-delete-confirm-modal-confirm");
  28. // -------------------------------------------------
  29. // Helpers
  30. // -------------------------------------------------
  31. private static string Sanitize(string value)
  32. => value.Replace(" ", "-");
  33. public ILocator Card(string name)
  34. => page.GetByTestId($"system-item-{Sanitize(name)}");
  35. public ILocator Link(string name)
  36. => page.GetByTestId($"system-item-{Sanitize(name)}-link");
  37. // -------------------------------------------------
  38. // Action Buttons
  39. // -------------------------------------------------
  40. public ILocator EditButton(string name)
  41. => Card(name).GetByTestId("edit-system-button");
  42. public ILocator SaveButton(string name)
  43. => Card(name).GetByTestId("save-system-button");
  44. public ILocator CancelButton(string name)
  45. => Card(name).GetByTestId("cancel-system-button");
  46. public ILocator RenameButton(string name)
  47. => Card(name).GetByTestId("rename-system-button");
  48. public ILocator CloneButton(string name)
  49. => Card(name).GetByTestId("clone-system-button");
  50. public ILocator DeleteButton(string name)
  51. => Card(name).GetByTestId("delete-system-button");
  52. // -------------------------------------------------
  53. // Edit Inputs
  54. // -------------------------------------------------
  55. public ILocator TypeSelect(string name)
  56. => Card(name).GetByTestId("system-type-select");
  57. public ILocator TypeValue(string name)
  58. => Card(name).GetByTestId("system-type-value");
  59. public ILocator OsInput(string name)
  60. => Card(name).GetByTestId("system-os-input");
  61. public ILocator CoresInput(string name)
  62. => Card(name).GetByTestId("system-cores-input");
  63. public ILocator RamInput(string name)
  64. => Card(name).GetByTestId("system-ram-input");
  65. public ILocator IpInput(string name)
  66. => Card(name).GetByTestId("system-ip-input");
  67. /// <summary>
  68. /// Read-mode IP. Renders the effective IP, which may be inherited from
  69. /// the host rather than set on the system itself.
  70. /// </summary>
  71. public ILocator IpValue(string name)
  72. => Card(name).GetByTestId("system-ip-value");
  73. public ILocator RunsOnButton(string name)
  74. => Card(name).GetByTestId("system-runs-on-button");
  75. // -------------------------------------------------
  76. // Drives
  77. // -------------------------------------------------
  78. public ILocator AddDriveButton(string name)
  79. => Card(name).GetByTestId("add-drive-button");
  80. public ILocator DriveItem(string name, string type, int size)
  81. => Card(name).GetByTestId($"drive-item-{type}-{size}");
  82. // High-level drive action
  83. public async Task AddDriveAsync(string name, string type, int size) {
  84. await AddDriveButton(name).ClickAsync();
  85. await DriveTypeSelect.SelectOptionAsync(new SelectOptionValue {
  86. Value = type
  87. });
  88. await DriveSizeInput.FillAsync(size.ToString());
  89. await DriveSubmitButton.ClickAsync();
  90. await Assertions.Expect(
  91. DriveItem(name, type, size)
  92. ).ToBeVisibleAsync();
  93. }
  94. // -------------------------------------------------
  95. // High-Level Actions
  96. // -------------------------------------------------
  97. public async Task AssertVisibleAsync(string name) => await Assertions.Expect(Card(name)).ToBeVisibleAsync();
  98. public async Task BeginEditAsync(string name) {
  99. await EditButton(name).ClickAsync();
  100. await Assertions.Expect(SaveButton(name)).ToBeVisibleAsync();
  101. }
  102. public async Task SaveAsync(string name) {
  103. await SaveButton(name).ClickAsync();
  104. await Assertions.Expect(EditButton(name)).ToBeVisibleAsync();
  105. }
  106. public async Task CancelAsync(string name) {
  107. await CancelButton(name).ClickAsync();
  108. await Assertions.Expect(EditButton(name)).ToBeVisibleAsync();
  109. }
  110. public async Task RenameAsync(string currentName, string newName) {
  111. await RenameButton(currentName).ClickAsync();
  112. await page.GetByTestId("system-rename-string-value-modal-input")
  113. .FillAsync(newName);
  114. await page.GetByTestId("system-rename-string-value-modal-submit")
  115. .ClickAsync();
  116. await page.WaitForURLAsync($"**/resources/systems/{newName}");
  117. }
  118. public async Task CloneAsync(string currentName, string cloneName) {
  119. await CloneButton(currentName).ClickAsync();
  120. await page.GetByTestId("system-clone-string-value-modal-input")
  121. .FillAsync(cloneName);
  122. await page.GetByTestId("system-clone-string-value-modal-submit")
  123. .ClickAsync();
  124. await page.WaitForURLAsync($"**/resources/systems/{cloneName}");
  125. }
  126. public async Task DeleteAsync(string name) {
  127. await DeleteButton(name).ClickAsync();
  128. await ConfirmDeleteButton.ClickAsync();
  129. }
  130. }