SystemCardPom.cs 5.5 KB

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