SystemCardPom.cs 5.6 KB

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