@mattermost/playwright-lib 10.7.0-3 → 11.3.0-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/dist/browser_context.d.ts +4 -2
  2. package/dist/browser_context.js +24 -4
  3. package/dist/browser_context.js.map +1 -1
  4. package/dist/constant.d.ts +2 -0
  5. package/dist/constant.js +5 -0
  6. package/dist/constant.js.map +1 -1
  7. package/dist/file.js +2 -1
  8. package/dist/file.js.map +1 -1
  9. package/dist/flag.js +1 -1
  10. package/dist/flag.js.map +1 -1
  11. package/dist/global_setup.js +26 -4
  12. package/dist/global_setup.js.map +1 -1
  13. package/dist/index.d.ts +2 -1
  14. package/dist/index.js +93 -3
  15. package/dist/index.js.map +1 -1
  16. package/dist/mock_browser_api.js.map +1 -1
  17. package/dist/server/channel.js.map +1 -1
  18. package/dist/server/client.d.ts +6 -0
  19. package/dist/server/client.js +6 -0
  20. package/dist/server/client.js.map +1 -1
  21. package/dist/server/default_config.d.ts +1 -0
  22. package/dist/server/default_config.js +100 -29
  23. package/dist/server/default_config.js.map +1 -1
  24. package/dist/server/index.d.ts +3 -3
  25. package/dist/server/index.js +9 -0
  26. package/dist/server/init.d.ts +9 -8
  27. package/dist/server/init.js +3 -11
  28. package/dist/server/init.js.map +1 -1
  29. package/dist/server/post.js.map +1 -1
  30. package/dist/server/team.d.ts +8 -1
  31. package/dist/server/team.js +13 -2
  32. package/dist/server/team.js.map +1 -1
  33. package/dist/server/user.d.ts +9 -2
  34. package/dist/server/user.js +36 -2
  35. package/dist/server/user.js.map +1 -1
  36. package/dist/test_action.d.ts +9 -0
  37. package/dist/test_action.js +39 -2
  38. package/dist/test_action.js.map +1 -1
  39. package/dist/test_config.js +1 -1
  40. package/dist/test_config.js.map +1 -1
  41. package/dist/test_fixture.d.ts +10 -3
  42. package/dist/test_fixture.js +19 -4
  43. package/dist/test_fixture.js.map +1 -1
  44. package/dist/tsconfig.tsbuildinfo +1 -0
  45. package/dist/types.d.ts +1 -0
  46. package/dist/types.js +3 -0
  47. package/dist/ui/components/channels/app_bar.js.map +1 -1
  48. package/dist/ui/components/channels/center_view.d.ts +17 -13
  49. package/dist/ui/components/channels/center_view.js +55 -25
  50. package/dist/ui/components/channels/center_view.js.map +1 -1
  51. package/dist/ui/components/channels/channel_settings/channel_settings_modal.d.ts +17 -0
  52. package/dist/ui/components/channels/channel_settings/channel_settings_modal.js +49 -0
  53. package/dist/ui/components/channels/channel_settings/channel_settings_modal.js.map +1 -0
  54. package/dist/ui/components/channels/channel_settings/configuration_settings.d.ts +11 -0
  55. package/dist/ui/components/channels/channel_settings/configuration_settings.js +48 -0
  56. package/dist/ui/components/channels/channel_settings/configuration_settings.js.map +1 -0
  57. package/dist/ui/components/channels/{scheduled_draft_menu.d.ts → channel_settings/info_settings.d.ts} +1 -3
  58. package/dist/ui/components/channels/channel_settings/info_settings.js +18 -0
  59. package/dist/ui/components/channels/channel_settings/info_settings.js.map +1 -0
  60. package/dist/ui/components/channels/delete_post_confirmation_dialog.js.map +1 -1
  61. package/dist/ui/components/channels/delete_post_modal.js.map +1 -1
  62. package/dist/ui/components/channels/delete_scheduled_post_modal.d.ts +10 -0
  63. package/dist/ui/components/channels/delete_scheduled_post_modal.js +26 -0
  64. package/dist/ui/components/channels/delete_scheduled_post_modal.js.map +1 -0
  65. package/dist/ui/components/channels/draft_post.d.ts +16 -0
  66. package/dist/ui/components/channels/draft_post.js +39 -0
  67. package/dist/ui/components/channels/draft_post.js.map +1 -0
  68. package/dist/ui/components/channels/emoji_gif_picker.d.ts +2 -0
  69. package/dist/ui/components/channels/emoji_gif_picker.js +6 -0
  70. package/dist/ui/components/channels/emoji_gif_picker.js.map +1 -1
  71. package/dist/ui/components/channels/find_channels_modal.js.map +1 -1
  72. package/dist/ui/components/channels/flag_post_confirmation_dialog.d.ts +24 -0
  73. package/dist/ui/components/channels/flag_post_confirmation_dialog.js +74 -0
  74. package/dist/ui/components/channels/flag_post_confirmation_dialog.js.map +1 -0
  75. package/dist/ui/components/channels/generic_confirm_modal.js.map +1 -1
  76. package/dist/ui/components/channels/header.d.ts +2 -0
  77. package/dist/ui/components/channels/header.js +6 -0
  78. package/dist/ui/components/channels/header.js.map +1 -1
  79. package/dist/ui/components/channels/invite_people_modal.d.ts +6 -0
  80. package/dist/ui/components/channels/invite_people_modal.js +18 -0
  81. package/dist/ui/components/channels/invite_people_modal.js.map +1 -0
  82. package/dist/ui/components/channels/message_priority.d.ts +0 -1
  83. package/dist/ui/components/channels/message_priority.js +2 -7
  84. package/dist/ui/components/channels/message_priority.js.map +1 -1
  85. package/dist/ui/components/channels/post.d.ts +7 -0
  86. package/dist/ui/components/channels/post.js +18 -0
  87. package/dist/ui/components/channels/post.js.map +1 -1
  88. package/dist/ui/components/channels/post_create.d.ts +1 -5
  89. package/dist/ui/components/channels/post_create.js +3 -12
  90. package/dist/ui/components/channels/post_create.js.map +1 -1
  91. package/dist/ui/components/channels/post_dot_menu.d.ts +2 -0
  92. package/dist/ui/components/channels/post_dot_menu.js +5 -0
  93. package/dist/ui/components/channels/post_dot_menu.js.map +1 -1
  94. package/dist/ui/components/channels/post_edit.js.map +1 -1
  95. package/dist/ui/components/channels/post_menu.js.map +1 -1
  96. package/dist/ui/components/channels/post_reminder_menu.js.map +1 -1
  97. package/dist/ui/components/channels/profile_modal.d.ts +27 -0
  98. package/dist/ui/components/channels/profile_modal.js +66 -0
  99. package/dist/ui/components/channels/profile_modal.js.map +1 -0
  100. package/dist/ui/components/channels/restore_post_confirmation_dialog.js.map +1 -1
  101. package/dist/ui/components/channels/schedule_message_menu.d.ts +12 -0
  102. package/dist/ui/components/channels/schedule_message_menu.js +31 -0
  103. package/dist/ui/components/channels/schedule_message_menu.js.map +1 -0
  104. package/dist/ui/components/channels/schedule_message_modal.d.ts +20 -0
  105. package/dist/ui/components/channels/schedule_message_modal.js +91 -0
  106. package/dist/ui/components/channels/schedule_message_modal.js.map +1 -0
  107. package/dist/ui/components/channels/scheduled_draft_modal.js.map +1 -1
  108. package/dist/ui/components/channels/scheduled_post.d.ts +20 -0
  109. package/dist/ui/components/channels/scheduled_post.js +47 -0
  110. package/dist/ui/components/channels/scheduled_post.js.map +1 -0
  111. package/dist/ui/components/channels/scheduled_post_indicator.d.ts +12 -0
  112. package/dist/ui/components/channels/scheduled_post_indicator.js +32 -0
  113. package/dist/ui/components/channels/scheduled_post_indicator.js.map +1 -0
  114. package/dist/ui/components/channels/{search_popover.d.ts → search_box.d.ts} +1 -1
  115. package/dist/ui/components/channels/{search_popover.js → search_box.js} +4 -3
  116. package/dist/ui/components/channels/search_box.js.map +1 -0
  117. package/dist/ui/components/channels/send_message_now_modal.d.ts +10 -0
  118. package/dist/ui/components/channels/send_message_now_modal.js +26 -0
  119. package/dist/ui/components/channels/send_message_now_modal.js.map +1 -0
  120. package/dist/ui/components/channels/settings/advanced_settings.d.ts +15 -0
  121. package/dist/ui/components/channels/settings/advanced_settings.js +35 -0
  122. package/dist/ui/components/channels/settings/advanced_settings.js.map +1 -0
  123. package/dist/ui/components/channels/settings/display_settings.d.ts +27 -0
  124. package/dist/ui/components/channels/settings/display_settings.js +77 -0
  125. package/dist/ui/components/channels/settings/display_settings.js.map +1 -0
  126. package/dist/ui/components/channels/settings/{notification_settings.d.ts → notifications_settings.d.ts} +12 -0
  127. package/dist/ui/components/channels/settings/{notification_settings.js → notifications_settings.js} +23 -1
  128. package/dist/ui/components/channels/settings/notifications_settings.js.map +1 -0
  129. package/dist/ui/components/channels/settings/settings_modal.d.ts +19 -4
  130. package/dist/ui/components/channels/settings/settings_modal.js +48 -7
  131. package/dist/ui/components/channels/settings/settings_modal.js.map +1 -1
  132. package/dist/ui/components/channels/settings/sidebar_settings.d.ts +12 -0
  133. package/dist/ui/components/channels/settings/sidebar_settings.js +28 -0
  134. package/dist/ui/components/channels/settings/sidebar_settings.js.map +1 -0
  135. package/dist/ui/components/channels/sidebar_left.d.ts +16 -3
  136. package/dist/ui/components/channels/sidebar_left.js +26 -9
  137. package/dist/ui/components/channels/sidebar_left.js.map +1 -1
  138. package/dist/ui/components/channels/sidebar_right.d.ts +3 -2
  139. package/dist/ui/components/channels/sidebar_right.js +6 -6
  140. package/dist/ui/components/channels/sidebar_right.js.map +1 -1
  141. package/dist/ui/components/channels/team_menu.d.ts +19 -0
  142. package/dist/ui/components/channels/team_menu.js +51 -0
  143. package/dist/ui/components/channels/team_menu.js.map +1 -0
  144. package/dist/ui/components/channels/team_settings/team_settings_modal.d.ts +6 -0
  145. package/dist/ui/components/channels/team_settings/team_settings_modal.js +18 -0
  146. package/dist/ui/components/channels/team_settings/team_settings_modal.js.map +1 -0
  147. package/dist/ui/components/channels/thread_footer.js.map +1 -1
  148. package/dist/ui/components/channels/user_profile_popover.js.map +1 -1
  149. package/dist/ui/components/footer.js.map +1 -1
  150. package/dist/ui/components/global_header.d.ts +7 -2
  151. package/dist/ui/components/global_header.js +13 -1
  152. package/dist/ui/components/global_header.js.map +1 -1
  153. package/dist/ui/components/index.d.ts +33 -5
  154. package/dist/ui/components/index.js +90 -10
  155. package/dist/ui/components/index.js.map +1 -1
  156. package/dist/ui/components/main_header.js.map +1 -1
  157. package/dist/ui/components/system_console/navbar.js.map +1 -1
  158. package/dist/ui/components/system_console/sections/site_configuration/notifications.d.ts +24 -0
  159. package/dist/ui/components/system_console/sections/site_configuration/notifications.js +63 -0
  160. package/dist/ui/components/system_console/sections/site_configuration/notifications.js.map +1 -0
  161. package/dist/ui/components/system_console/sections/system_users/column_toggle_menu.js.map +1 -1
  162. package/dist/ui/components/system_console/sections/system_users/feature_discovery.js.map +1 -1
  163. package/dist/ui/components/system_console/sections/system_users/filter_menu.js.map +1 -1
  164. package/dist/ui/components/system_console/sections/system_users/filter_popover.js.map +1 -1
  165. package/dist/ui/components/system_console/sections/system_users/mobile_security.d.ts +29 -2
  166. package/dist/ui/components/system_console/sections/system_users/mobile_security.js +75 -1
  167. package/dist/ui/components/system_console/sections/system_users/mobile_security.js.map +1 -1
  168. package/dist/ui/components/system_console/sections/system_users/system_users.js.map +1 -1
  169. package/dist/ui/components/system_console/sidebar.js.map +1 -1
  170. package/dist/ui/components/user_account_menu.d.ts +13 -0
  171. package/dist/ui/components/user_account_menu.js +32 -0
  172. package/dist/ui/components/user_account_menu.js.map +1 -0
  173. package/dist/ui/pages/channels.d.ts +46 -11
  174. package/dist/ui/pages/channels.js +119 -12
  175. package/dist/ui/pages/channels.js.map +1 -1
  176. package/dist/ui/pages/content_review_dm.d.ts +44 -0
  177. package/dist/ui/pages/content_review_dm.js +154 -0
  178. package/dist/ui/pages/content_review_dm.js.map +1 -0
  179. package/dist/ui/pages/drafts.d.ts +9 -25
  180. package/dist/ui/pages/drafts.js +25 -94
  181. package/dist/ui/pages/drafts.js.map +1 -1
  182. package/dist/ui/pages/index.d.ts +9 -5
  183. package/dist/ui/pages/index.js +10 -5
  184. package/dist/ui/pages/index.js.map +1 -1
  185. package/dist/ui/pages/landing_login.js.map +1 -1
  186. package/dist/ui/pages/login.d.ts +2 -2
  187. package/dist/ui/pages/login.js +1 -1
  188. package/dist/ui/pages/login.js.map +1 -1
  189. package/dist/ui/pages/reset_password.d.ts +2 -2
  190. package/dist/ui/pages/reset_password.js +1 -1
  191. package/dist/ui/pages/reset_password.js.map +1 -1
  192. package/dist/ui/pages/scheduled_posts.d.ts +23 -0
  193. package/dist/ui/pages/scheduled_posts.js +63 -0
  194. package/dist/ui/pages/scheduled_posts.js.map +1 -0
  195. package/dist/ui/pages/signup.d.ts +2 -2
  196. package/dist/ui/pages/signup.js +1 -1
  197. package/dist/ui/pages/signup.js.map +1 -1
  198. package/dist/ui/pages/system_console.d.ts +16 -14
  199. package/dist/ui/pages/system_console.js +10 -1
  200. package/dist/ui/pages/system_console.js.map +1 -1
  201. package/dist/ui/pages/threads.d.ts +13 -0
  202. package/dist/ui/pages/threads.js +44 -0
  203. package/dist/ui/pages/threads.js.map +1 -0
  204. package/dist/util.d.ts +17 -4
  205. package/dist/util.js +65 -5
  206. package/dist/util.js.map +1 -1
  207. package/dist/visual/index.js +9 -3
  208. package/dist/visual/index.js.map +1 -1
  209. package/dist/visual/percy.js.map +1 -1
  210. package/package.json +14 -15
  211. package/dist/ui/components/channels/scheduled_draft_menu.js +0 -23
  212. package/dist/ui/components/channels/scheduled_draft_menu.js.map +0 -1
  213. package/dist/ui/components/channels/search_popover.js.map +0 -1
  214. package/dist/ui/components/channels/settings/notification_settings.js.map +0 -1
  215. package/dist/ui/pages/scheduled_draft.d.ts +0 -38
  216. package/dist/ui/pages/scheduled_draft.js +0 -144
  217. package/dist/ui/pages/scheduled_draft.js.map +0 -1
@@ -1,114 +1,45 @@
1
1
  'use strict';
2
2
 
3
3
  var test = require('@playwright/test');
4
+ var index = require('../components/index.js');
4
5
 
5
6
  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
6
7
  // See LICENSE.txt for license information.
7
- class DraftPage {
8
+ class DraftsPage {
8
9
  page;
9
- badgeCountOnScheduledTab;
10
- confirmbutton;
11
- datePattern;
12
- deleteIcon;
13
- deleteIconToolTip;
14
- noscheduledDraftIcon;
15
- scheduleIcon;
16
- rescheduleIconToolTip;
17
- draftBody;
18
- scheduledDraftPageInfo;
19
- scheduledDraftPanel;
20
- scheduledDraftSendNowButton;
21
- scheduledDraftSendNowButtonToolTip;
10
+ draftsHeader;
11
+ tab;
12
+ badge;
13
+ noDrafts;
14
+ scheduleMessageModal;
22
15
  constructor(page) {
23
16
  this.page = page;
24
- this.draftBody = page.locator('div.post__body');
25
- this.scheduleIcon = page.locator('#draft_icon-clock-send-outline_reschedule');
26
- this.datePattern =
27
- /(Today|Tomorrow|(?:January|February|March|April|May|June|July|August|September|October|November|December) \d{1,2}) at \d{1,2}:\d{2} [AP]M/;
28
- this.badgeCountOnScheduledTab = page.locator('a#draft_tabs-tab-0 div.drafts_tab_title span.MuiBadge-badge');
29
- // this.scheduledDraftPageInfo = page.locator('span:has-text("Send on")');
30
- this.scheduledDraftPageInfo = page.locator('.PanelHeader__info');
31
- this.scheduledDraftPanel = (messageContent) => page.locator(`article.Panel:has(div.post__body:has-text("${messageContent}"))`);
32
- this.deleteIcon = page.locator('#draft_icon-trash-can-outline_delete');
33
- this.deleteIconToolTip = page.locator('text=Delete scheduled post');
34
- this.rescheduleIconToolTip = page.locator('text=Schedule draft');
35
- this.noscheduledDraftIcon = page.locator('.no-results__wrapper');
36
- this.scheduledDraftSendNowButton = page.locator('#draft_icon-send-outline_sendNow');
37
- this.scheduledDraftSendNowButtonToolTip = page.locator('text=Send now');
38
- this.confirmbutton = this.page.locator('button.btn-primary');
17
+ this.draftsHeader = page.locator('.Drafts__header');
18
+ this.tab = page.getByRole('tab', { name: 'Drafts' });
19
+ this.badge = this.tab.locator('span.MuiBadge-badge');
20
+ this.noDrafts = page.locator('.no-results__wrapper');
21
+ this.scheduleMessageModal = new index.components.ScheduleMessageModal(page.getByRole('dialog', { name: 'Schedule message' }));
39
22
  }
40
- async goTo(teamName) {
23
+ async goto(teamName) {
41
24
  await this.page.goto(`/${teamName}/drafts`);
42
25
  }
43
26
  async toBeVisible() {
44
- await this.page.waitForLoadState('networkidle');
45
27
  await test.expect(this.page).toHaveURL(/.*drafts/);
28
+ await this.draftsHeader.isVisible();
29
+ await test.expect(this.tab).toHaveAttribute('aria-selected', 'true');
46
30
  }
47
- async assertBadgeCountOnTab(badgeCount) {
48
- await this.badgeCountOnScheduledTab.isVisible();
49
- await test.expect(this.badgeCountOnScheduledTab).toHaveText(badgeCount);
31
+ async getBadgeCountOnTab() {
32
+ await test.expect(this.tab).toBeVisible();
33
+ const badge = this.tab.locator('span.MuiBadge-badge');
34
+ await test.expect(badge).toBeVisible();
35
+ return await badge.textContent();
50
36
  }
51
- async assertDraftBody(draftMessage) {
52
- await test.expect(this.draftBody).toBeVisible();
53
- await test.expect(this.draftBody).toHaveText(draftMessage);
54
- }
55
- async verifyOnHoverActionItems(messageContent) {
56
- await this.scheduledDraftPanel(messageContent).isVisible();
57
- await this.scheduledDraftPanel(messageContent).hover();
58
- await this.verifyDeleteIcon();
59
- await this.verifyScheduleIcon(messageContent);
60
- await this.verifySendNowIcon();
61
- }
62
- async verifyDeleteIcon() {
63
- await this.deleteIcon.isVisible();
64
- await this.deleteIcon.hover();
65
- await test.expect(this.deleteIconToolTip).toBeVisible();
66
- await test.expect(this.deleteIconToolTip).toHaveText('Delete scheduled post');
67
- }
68
- async verifyScheduleIcon(messageContent) {
69
- await this.scheduledDraftPanel(messageContent).hover();
70
- await test.expect(this.scheduleIcon).toBeVisible();
71
- await this.scheduleIcon.hover();
72
- await test.expect(this.rescheduleIconToolTip).toBeVisible();
73
- await test.expect(this.rescheduleIconToolTip).toHaveText('Schedule draft');
74
- }
75
- async verifySendNowIcon() {
76
- await this.scheduledDraftSendNowButton.isVisible();
77
- await this.scheduledDraftSendNowButton.hover();
78
- await test.expect(this.scheduledDraftSendNowButtonToolTip).toBeVisible();
79
- await test.expect(this.scheduledDraftSendNowButtonToolTip).toHaveText('Send now');
80
- }
81
- async getTimeStampOfMessage(messageContent) {
82
- await this.scheduledDraftPanel(messageContent).scrollIntoViewIfNeeded();
83
- await this.scheduledDraftPanel(messageContent).isVisible();
84
- return this.scheduledDraftPanel(messageContent).locator(this.scheduledDraftPageInfo).innerHTML();
85
- }
86
- async openScheduleModal(messageContent) {
87
- await this.scheduledDraftPanel(messageContent).scrollIntoViewIfNeeded();
88
- await this.scheduledDraftPanel(messageContent).isVisible();
89
- await this.scheduledDraftPanel(messageContent).hover();
90
- await this.scheduleIcon.hover();
91
- await test.expect(this.rescheduleIconToolTip).toBeVisible();
92
- await test.expect(this.rescheduleIconToolTip).toHaveText('Schedule draft');
93
- await this.scheduleIcon.click();
94
- }
95
- async deleteScheduledMessage(messageContent) {
96
- await this.scheduledDraftPanel(messageContent).isVisible();
97
- await this.scheduledDraftPanel(messageContent).hover();
98
- await this.verifyDeleteIcon();
99
- await this.deleteIcon.click();
100
- test.expect(await this.confirmbutton.textContent()).toEqual('Yes, delete');
101
- await this.confirmbutton.click();
102
- }
103
- async sendScheduledMessage(messageContent) {
104
- await this.scheduledDraftPanel(messageContent).isVisible();
105
- await this.scheduledDraftPanel(messageContent).hover();
106
- await this.verifySendNowIcon();
107
- await this.scheduledDraftSendNowButton.click();
108
- test.expect(await this.confirmbutton.textContent()).toEqual('Yes, send now');
109
- await this.confirmbutton.click();
37
+ async getLastPost() {
38
+ const lastPost = this.page.getByTestId('draftView').last();
39
+ await lastPost.waitFor();
40
+ return new index.components.DraftPost(lastPost);
110
41
  }
111
42
  }
112
43
 
113
- module.exports = DraftPage;
44
+ module.exports = DraftsPage;
114
45
  //# sourceMappingURL=drafts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"drafts.js","sources":["../../../src/ui/pages/drafts.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Page, expect} from '@playwright/test';\n\nexport default class DraftPage {\n readonly page: Page;\n\n readonly badgeCountOnScheduledTab;\n readonly confirmbutton;\n readonly datePattern;\n readonly deleteIcon;\n readonly deleteIconToolTip;\n readonly noscheduledDraftIcon;\n readonly scheduleIcon;\n readonly rescheduleIconToolTip;\n readonly draftBody;\n readonly scheduledDraftPageInfo;\n readonly scheduledDraftPanel;\n readonly scheduledDraftSendNowButton;\n readonly scheduledDraftSendNowButtonToolTip;\n\n constructor(page: Page) {\n this.page = page;\n this.draftBody = page.locator('div.post__body');\n this.scheduleIcon = page.locator('#draft_icon-clock-send-outline_reschedule');\n\n this.datePattern =\n /(Today|Tomorrow|(?:January|February|March|April|May|June|July|August|September|October|November|December) \\d{1,2}) at \\d{1,2}:\\d{2} [AP]M/;\n this.badgeCountOnScheduledTab = page.locator('a#draft_tabs-tab-0 div.drafts_tab_title span.MuiBadge-badge');\n // this.scheduledDraftPageInfo = page.locator('span:has-text(\"Send on\")');\n this.scheduledDraftPageInfo = page.locator('.PanelHeader__info');\n this.scheduledDraftPanel = (messageContent: string) =>\n page.locator(`article.Panel:has(div.post__body:has-text(\"${messageContent}\"))`);\n this.deleteIcon = page.locator('#draft_icon-trash-can-outline_delete');\n this.deleteIconToolTip = page.locator('text=Delete scheduled post');\n this.rescheduleIconToolTip = page.locator('text=Schedule draft');\n this.noscheduledDraftIcon = page.locator('.no-results__wrapper');\n this.scheduledDraftSendNowButton = page.locator('#draft_icon-send-outline_sendNow');\n this.scheduledDraftSendNowButtonToolTip = page.locator('text=Send now');\n this.confirmbutton = this.page.locator('button.btn-primary');\n }\n\n async goTo(teamName: string) {\n await this.page.goto(`/${teamName}/drafts`);\n }\n\n async toBeVisible() {\n await this.page.waitForLoadState('networkidle');\n await expect(this.page).toHaveURL(/.*drafts/);\n }\n\n async assertBadgeCountOnTab(badgeCount: string) {\n await this.badgeCountOnScheduledTab.isVisible();\n await expect(this.badgeCountOnScheduledTab).toHaveText(badgeCount);\n }\n\n async assertDraftBody(draftMessage: string) {\n await expect(this.draftBody).toBeVisible();\n await expect(this.draftBody).toHaveText(draftMessage);\n }\n\n async verifyOnHoverActionItems(messageContent: string) {\n await this.scheduledDraftPanel(messageContent).isVisible();\n await this.scheduledDraftPanel(messageContent).hover();\n await this.verifyDeleteIcon();\n await this.verifyScheduleIcon(messageContent);\n await this.verifySendNowIcon();\n }\n\n async verifyDeleteIcon() {\n await this.deleteIcon.isVisible();\n await this.deleteIcon.hover();\n await expect(this.deleteIconToolTip).toBeVisible();\n await expect(this.deleteIconToolTip).toHaveText('Delete scheduled post');\n }\n\n async verifyScheduleIcon(messageContent: string) {\n await this.scheduledDraftPanel(messageContent).hover();\n await expect(this.scheduleIcon).toBeVisible();\n await this.scheduleIcon.hover();\n await expect(this.rescheduleIconToolTip).toBeVisible();\n await expect(this.rescheduleIconToolTip).toHaveText('Schedule draft');\n }\n\n async verifySendNowIcon() {\n await this.scheduledDraftSendNowButton.isVisible();\n await this.scheduledDraftSendNowButton.hover();\n await expect(this.scheduledDraftSendNowButtonToolTip).toBeVisible();\n await expect(this.scheduledDraftSendNowButtonToolTip).toHaveText('Send now');\n }\n\n async getTimeStampOfMessage(messageContent: string) {\n await this.scheduledDraftPanel(messageContent).scrollIntoViewIfNeeded();\n await this.scheduledDraftPanel(messageContent).isVisible();\n return this.scheduledDraftPanel(messageContent).locator(this.scheduledDraftPageInfo).innerHTML();\n }\n\n async openScheduleModal(messageContent: string) {\n await this.scheduledDraftPanel(messageContent).scrollIntoViewIfNeeded();\n await this.scheduledDraftPanel(messageContent).isVisible();\n await this.scheduledDraftPanel(messageContent).hover();\n await this.scheduleIcon.hover();\n await expect(this.rescheduleIconToolTip).toBeVisible();\n await expect(this.rescheduleIconToolTip).toHaveText('Schedule draft');\n await this.scheduleIcon.click();\n }\n\n async deleteScheduledMessage(messageContent: string) {\n await this.scheduledDraftPanel(messageContent).isVisible();\n await this.scheduledDraftPanel(messageContent).hover();\n await this.verifyDeleteIcon();\n await this.deleteIcon.click();\n expect(await this.confirmbutton.textContent()).toEqual('Yes, delete');\n await this.confirmbutton.click();\n }\n\n async sendScheduledMessage(messageContent: string) {\n await this.scheduledDraftPanel(messageContent).isVisible();\n await this.scheduledDraftPanel(messageContent).hover();\n await this.verifySendNowIcon();\n await this.scheduledDraftSendNowButton.click();\n expect(await this.confirmbutton.textContent()).toEqual('Yes, send now');\n await this.confirmbutton.click();\n }\n}\n"],"names":["expect"],"mappings":"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"}
1
+ {"version":3,"file":"drafts.js","sources":["../../../src/ui/pages/drafts.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Page, expect} from '@playwright/test';\n\nimport {components} from '@/ui/components';\n\nexport default class DraftsPage {\n readonly page: Page;\n\n readonly draftsHeader;\n readonly tab;\n readonly badge;\n readonly noDrafts;\n\n readonly scheduleMessageModal;\n\n constructor(page: Page) {\n this.page = page;\n\n this.draftsHeader = page.locator('.Drafts__header');\n this.tab = page.getByRole('tab', {name: 'Drafts'});\n this.badge = this.tab.locator('span.MuiBadge-badge');\n\n this.noDrafts = page.locator('.no-results__wrapper');\n\n this.scheduleMessageModal = new components.ScheduleMessageModal(\n page.getByRole('dialog', {name: 'Schedule message'}),\n );\n }\n\n async goto(teamName: string) {\n await this.page.goto(`/${teamName}/drafts`);\n }\n\n async toBeVisible() {\n await expect(this.page).toHaveURL(/.*drafts/);\n await this.draftsHeader.isVisible();\n await expect(this.tab).toHaveAttribute('aria-selected', 'true');\n }\n\n async getBadgeCountOnTab() {\n await expect(this.tab).toBeVisible();\n const badge = this.tab.locator('span.MuiBadge-badge');\n await expect(badge).toBeVisible();\n return await badge.textContent();\n }\n\n async getLastPost() {\n const lastPost = this.page.getByTestId('draftView').last();\n await lastPost.waitFor();\n return new components.DraftPost(lastPost);\n }\n}\n"],"names":["components","expect"],"mappings":";;;;;AAAA;AACA;AAMc,MAAO,UAAU,CAAA;AAClB,IAAA,IAAI;AAEJ,IAAA,YAAY;AACZ,IAAA,GAAG;AACH,IAAA,KAAK;AACL,IAAA,QAAQ;AAER,IAAA,oBAAoB;AAE7B,IAAA,WAAA,CAAY,IAAU,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAEhB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;AACnD,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAC,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC;QAEpD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC;QAEpD,IAAI,CAAC,oBAAoB,GAAG,IAAIA,gBAAU,CAAC,oBAAoB,CAC3D,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAC,IAAI,EAAE,kBAAkB,EAAC,CAAC,CACvD;IACL;IAEA,MAAM,IAAI,CAAC,QAAgB,EAAA;QACvB,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAA,OAAA,CAAS,CAAC;IAC/C;AAEA,IAAA,MAAM,WAAW,GAAA;QACb,MAAMC,WAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC;AAC7C,QAAA,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;AACnC,QAAA,MAAMA,WAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,eAAe,EAAE,MAAM,CAAC;IACnE;AAEA,IAAA,MAAM,kBAAkB,GAAA;QACpB,MAAMA,WAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC;AACrD,QAAA,MAAMA,WAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;AACjC,QAAA,OAAO,MAAM,KAAK,CAAC,WAAW,EAAE;IACpC;AAEA,IAAA,MAAM,WAAW,GAAA;AACb,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE;AAC1D,QAAA,MAAM,QAAQ,CAAC,OAAO,EAAE;AACxB,QAAA,OAAO,IAAID,gBAAU,CAAC,SAAS,CAAC,QAAQ,CAAC;IAC7C;AACH;;;;"}
@@ -4,16 +4,20 @@ import LoginPage from './login';
4
4
  import ResetPasswordPage from './reset_password';
5
5
  import SignupPage from './signup';
6
6
  import SystemConsolePage from './system_console';
7
- import ScheduledDraftPage from './scheduled_draft';
8
- import DraftPage from './drafts';
7
+ import ScheduledPostsPage from './scheduled_posts';
8
+ import DraftsPage from './drafts';
9
+ import ThreadsPage from './threads';
10
+ import ContentReviewPage from './content_review_dm';
9
11
  declare const pages: {
10
12
  ChannelsPage: typeof ChannelsPage;
11
13
  LandingLoginPage: typeof LandingLoginPage;
12
14
  LoginPage: typeof LoginPage;
13
15
  ResetPasswordPage: typeof ResetPasswordPage;
14
16
  SignupPage: typeof SignupPage;
15
- ScheduledDraftPage: typeof ScheduledDraftPage;
17
+ ScheduledPostsPage: typeof ScheduledPostsPage;
18
+ ContentReviewPage: typeof ContentReviewPage;
16
19
  SystemConsolePage: typeof SystemConsolePage;
17
- DraftPage: typeof DraftPage;
20
+ DraftsPage: typeof DraftsPage;
21
+ ThreadsPage: typeof ThreadsPage;
18
22
  };
19
- export { pages, ChannelsPage, LandingLoginPage, LoginPage, ResetPasswordPage, SignupPage, ScheduledDraftPage, SystemConsolePage, DraftPage, };
23
+ export { pages, ChannelsPage, ContentReviewPage, DraftsPage, LandingLoginPage, LoginPage, ResetPasswordPage, SignupPage, ScheduledPostsPage, SystemConsolePage, };
@@ -6,8 +6,10 @@ var login = require('./login.js');
6
6
  var reset_password = require('./reset_password.js');
7
7
  var signup = require('./signup.js');
8
8
  var system_console = require('./system_console.js');
9
- var scheduled_draft = require('./scheduled_draft.js');
9
+ var scheduled_posts = require('./scheduled_posts.js');
10
10
  var drafts = require('./drafts.js');
11
+ var threads = require('./threads.js');
12
+ var content_review_dm = require('./content_review_dm.js');
11
13
 
12
14
  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
13
15
  // See LICENSE.txt for license information.
@@ -17,9 +19,11 @@ const pages = {
17
19
  LoginPage: login,
18
20
  ResetPasswordPage: reset_password,
19
21
  SignupPage: signup,
20
- ScheduledDraftPage: scheduled_draft,
22
+ ScheduledPostsPage: scheduled_posts,
23
+ ContentReviewPage: content_review_dm,
21
24
  SystemConsolePage: system_console,
22
- DraftPage: drafts,
25
+ DraftsPage: drafts,
26
+ ThreadsPage: threads,
23
27
  };
24
28
 
25
29
  exports.ChannelsPage = channels;
@@ -28,7 +32,8 @@ exports.LoginPage = login;
28
32
  exports.ResetPasswordPage = reset_password;
29
33
  exports.SignupPage = signup;
30
34
  exports.SystemConsolePage = system_console;
31
- exports.ScheduledDraftPage = scheduled_draft;
32
- exports.DraftPage = drafts;
35
+ exports.ScheduledPostsPage = scheduled_posts;
36
+ exports.DraftsPage = drafts;
37
+ exports.ContentReviewPage = content_review_dm;
33
38
  exports.pages = pages;
34
39
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/ui/pages/index.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport ChannelsPage from './channels';\nimport LandingLoginPage from './landing_login';\nimport LoginPage from './login';\nimport ResetPasswordPage from './reset_password';\nimport SignupPage from './signup';\nimport SystemConsolePage from './system_console';\nimport ScheduledDraftPage from './scheduled_draft';\nimport DraftPage from './drafts';\n\nconst pages = {\n ChannelsPage,\n LandingLoginPage,\n LoginPage,\n ResetPasswordPage,\n SignupPage,\n ScheduledDraftPage,\n SystemConsolePage,\n DraftPage,\n};\n\nexport {\n pages,\n ChannelsPage,\n LandingLoginPage,\n LoginPage,\n ResetPasswordPage,\n SignupPage,\n ScheduledDraftPage,\n SystemConsolePage,\n DraftPage,\n};\n"],"names":["ChannelsPage","LandingLoginPage","LoginPage","ResetPasswordPage","SignupPage","ScheduledDraftPage","SystemConsolePage","DraftPage"],"mappings":";;;;;;;;;;;AAAA;AACA;AAWA,MAAM,KAAK,GAAG;kBACVA,QAAY;sBACZC,aAAgB;eAChBC,KAAS;uBACTC,cAAiB;gBACjBC,MAAU;wBACVC,eAAkB;uBAClBC,cAAiB;eACjBC,MAAS;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/ui/pages/index.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport ChannelsPage from './channels';\nimport LandingLoginPage from './landing_login';\nimport LoginPage from './login';\nimport ResetPasswordPage from './reset_password';\nimport SignupPage from './signup';\nimport SystemConsolePage from './system_console';\nimport ScheduledPostsPage from './scheduled_posts';\nimport DraftsPage from './drafts';\nimport ThreadsPage from './threads';\nimport ContentReviewPage from './content_review_dm';\n\nconst pages = {\n ChannelsPage,\n LandingLoginPage,\n LoginPage,\n ResetPasswordPage,\n SignupPage,\n ScheduledPostsPage,\n ContentReviewPage,\n SystemConsolePage,\n DraftsPage,\n ThreadsPage,\n};\n\nexport {\n pages,\n ChannelsPage,\n ContentReviewPage,\n DraftsPage,\n LandingLoginPage,\n LoginPage,\n ResetPasswordPage,\n SignupPage,\n ScheduledPostsPage,\n SystemConsolePage,\n};\n"],"names":["ChannelsPage","LandingLoginPage","LoginPage","ResetPasswordPage","SignupPage","ScheduledPostsPage","ContentReviewPage","SystemConsolePage","DraftsPage","ThreadsPage"],"mappings":";;;;;;;;;;;;;AAAA;AACA;AAaA,MAAM,KAAK,GAAG;kBACVA,QAAY;sBACZC,aAAgB;eAChBC,KAAS;uBACTC,cAAiB;gBACjBC,MAAU;wBACVC,eAAkB;uBAClBC,iBAAiB;uBACjBC,cAAiB;gBACjBC,MAAU;iBACVC,OAAW;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"landing_login.js","sources":["../../../src/ui/pages/landing_login.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Page, expect} from '@playwright/test';\n\nexport default class LandingLoginPage {\n readonly page: Page;\n\n readonly isMobile?: boolean;\n\n readonly viewInAppButton;\n readonly viewInDesktopAppButton;\n readonly viewInBrowserButton;\n\n constructor(page: Page, isMobile?: boolean) {\n this.page = page;\n this.isMobile = isMobile;\n\n this.viewInAppButton = page.locator('text=View in App');\n this.viewInDesktopAppButton = page.locator('text=View in Desktop App');\n this.viewInBrowserButton = page.locator('text=View in Browser');\n }\n\n async toBeVisible() {\n await this.page.waitForLoadState('networkidle');\n\n if (this.isMobile) {\n await expect(this.viewInAppButton).toBeVisible();\n } else {\n await expect(this.viewInDesktopAppButton).toBeVisible();\n }\n\n await expect(this.viewInBrowserButton).toBeVisible();\n }\n\n async goto() {\n await this.page.goto('/landing#/login');\n }\n}\n"],"names":["expect"],"mappings":";;;;AAAA;AACA;AAIc,MAAO,gBAAgB,CAAA;AACxB,IAAA,IAAI;AAEJ,IAAA,QAAQ;AAER,IAAA,eAAe;AACf,IAAA,sBAAsB;AACtB,IAAA,mBAAmB;IAE5B,WAAY,CAAA,IAAU,EAAE,QAAkB,EAAA;AACtC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QAExB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC;QACvD,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC;QACtE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC;;AAGnE,IAAA,MAAM,WAAW,GAAA;QACb,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;AAE/C,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,MAAMA,WAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE;;aAC7C;YACH,MAAMA,WAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,WAAW,EAAE;;QAG3D,MAAMA,WAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,WAAW,EAAE;;AAGxD,IAAA,MAAM,IAAI,GAAA;QACN,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;;AAE9C;;;;"}
1
+ {"version":3,"file":"landing_login.js","sources":["../../../src/ui/pages/landing_login.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Page, expect} from '@playwright/test';\n\nexport default class LandingLoginPage {\n readonly page: Page;\n\n readonly isMobile?: boolean;\n\n readonly viewInAppButton;\n readonly viewInDesktopAppButton;\n readonly viewInBrowserButton;\n\n constructor(page: Page, isMobile?: boolean) {\n this.page = page;\n this.isMobile = isMobile;\n\n this.viewInAppButton = page.locator('text=View in App');\n this.viewInDesktopAppButton = page.locator('text=View in Desktop App');\n this.viewInBrowserButton = page.locator('text=View in Browser');\n }\n\n async toBeVisible() {\n await this.page.waitForLoadState('networkidle');\n\n if (this.isMobile) {\n await expect(this.viewInAppButton).toBeVisible();\n } else {\n await expect(this.viewInDesktopAppButton).toBeVisible();\n }\n\n await expect(this.viewInBrowserButton).toBeVisible();\n }\n\n async goto() {\n await this.page.goto('/landing#/login');\n }\n}\n"],"names":["expect"],"mappings":";;;;AAAA;AACA;AAIc,MAAO,gBAAgB,CAAA;AACxB,IAAA,IAAI;AAEJ,IAAA,QAAQ;AAER,IAAA,eAAe;AACf,IAAA,sBAAsB;AACtB,IAAA,mBAAmB;IAE5B,WAAA,CAAY,IAAU,EAAE,QAAkB,EAAA;AACtC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QAExB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC;QACvD,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC;QACtE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC;IACnE;AAEA,IAAA,MAAM,WAAW,GAAA;QACb,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;AAE/C,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,MAAMA,WAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE;QACpD;aAAO;YACH,MAAMA,WAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,WAAW,EAAE;QAC3D;QAEA,MAAMA,WAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,WAAW,EAAE;IACxD;AAEA,IAAA,MAAM,IAAI,GAAA;QACN,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;IAC3C;AACH;;;;"}
@@ -16,8 +16,8 @@ export default class LoginPage {
16
16
  readonly userErrorLabel: import("playwright-core").Locator;
17
17
  readonly fieldWithError: import("playwright-core").Locator;
18
18
  readonly formContainer: import("playwright-core").Locator;
19
- readonly header: import("../components/main_header").default;
20
- readonly footer: import("../components/footer").default;
19
+ readonly header: import("@/ui/components").MainHeader;
20
+ readonly footer: import("@/ui/components").Footer;
21
21
  constructor(page: Page);
22
22
  toBeVisible(): Promise<void>;
23
23
  goto(): Promise<void>;
@@ -32,7 +32,7 @@ class LoginPage {
32
32
  this.loginPlaceholder = page.locator(`[placeholder="Email or Username"]`);
33
33
  this.loginWithAdLdapPlaceholder = page.locator(`[placeholder="Email, Username or AD/LDAP Username"]`);
34
34
  this.passwordInput = page.locator('#input_password-input');
35
- this.passwordToggleButton = page.getByRole('button', { name: 'Show or hide password' });
35
+ this.passwordToggleButton = page.locator('#password_toggle');
36
36
  this.signInButton = page.locator('button:has-text("Log in")');
37
37
  this.createAccountLink = page.locator("text=Don't have an account?");
38
38
  this.forgotPasswordLink = page.locator('text=Forgot your password?');
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sources":["../../../src/ui/pages/login.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Page, expect} from '@playwright/test';\nimport {UserProfile} from '@mattermost/types/users';\n\nimport {components} from '@/ui/components';\n\nexport default class LoginPage {\n readonly page: Page;\n\n readonly title;\n readonly subtitle;\n readonly bodyCard;\n readonly loginInput;\n readonly loginPlaceholder;\n readonly loginWithAdLdapPlaceholder;\n readonly passwordInput;\n readonly passwordToggleButton;\n readonly signInButton;\n readonly createAccountLink;\n readonly forgotPasswordLink;\n readonly userErrorLabel;\n readonly fieldWithError;\n readonly formContainer;\n\n readonly header;\n readonly footer;\n\n constructor(page: Page) {\n this.page = page;\n\n this.title = page.locator('h1:has-text(\"Log in to your account\")');\n this.subtitle = page.locator('text=Collaborate with your team in real-time');\n this.bodyCard = page.locator('.login-body-card-content');\n this.loginInput = page.locator('#input_loginId');\n this.loginPlaceholder = page.locator(`[placeholder=\"Email or Username\"]`);\n this.loginWithAdLdapPlaceholder = page.locator(`[placeholder=\"Email, Username or AD/LDAP Username\"]`);\n this.passwordInput = page.locator('#input_password-input');\n this.passwordToggleButton = page.getByRole('button', {name: 'Show or hide password'});\n this.signInButton = page.locator('button:has-text(\"Log in\")');\n this.createAccountLink = page.locator(\"text=Don't have an account?\");\n this.forgotPasswordLink = page.locator('text=Forgot your password?');\n this.userErrorLabel = page.locator('text=Please enter your email or username');\n this.fieldWithError = page.locator('.with-error');\n this.formContainer = page.locator('.signup-team__container');\n\n this.header = new components.MainHeader(page.locator('.hfroute-header'));\n this.footer = new components.Footer(page.locator('.hfroute-footer'));\n }\n\n async toBeVisible() {\n await this.page.waitForLoadState('networkidle');\n await expect(this.title).toBeVisible();\n await expect(this.loginInput).toBeVisible();\n await expect(this.passwordInput).toBeVisible();\n }\n\n async goto() {\n await this.page.goto('/login');\n }\n\n async login(user: UserProfile, useUsername = true) {\n await this.loginInput.fill(useUsername ? user.username : user.email);\n await this.passwordInput.fill(user.password);\n await Promise.all([this.page.waitForNavigation(), this.signInButton.click()]);\n }\n}\n"],"names":["components","expect"],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sources":["../../../src/ui/pages/login.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Page, expect} from '@playwright/test';\nimport {UserProfile} from '@mattermost/types/users';\n\nimport {components} from '@/ui/components';\n\nexport default class LoginPage {\n readonly page: Page;\n\n readonly title;\n readonly subtitle;\n readonly bodyCard;\n readonly loginInput;\n readonly loginPlaceholder;\n readonly loginWithAdLdapPlaceholder;\n readonly passwordInput;\n readonly passwordToggleButton;\n readonly signInButton;\n readonly createAccountLink;\n readonly forgotPasswordLink;\n readonly userErrorLabel;\n readonly fieldWithError;\n readonly formContainer;\n\n readonly header;\n readonly footer;\n\n constructor(page: Page) {\n this.page = page;\n\n this.title = page.locator('h1:has-text(\"Log in to your account\")');\n this.subtitle = page.locator('text=Collaborate with your team in real-time');\n this.bodyCard = page.locator('.login-body-card-content');\n this.loginInput = page.locator('#input_loginId');\n this.loginPlaceholder = page.locator(`[placeholder=\"Email or Username\"]`);\n this.loginWithAdLdapPlaceholder = page.locator(`[placeholder=\"Email, Username or AD/LDAP Username\"]`);\n this.passwordInput = page.locator('#input_password-input');\n this.passwordToggleButton = page.locator('#password_toggle');\n this.signInButton = page.locator('button:has-text(\"Log in\")');\n this.createAccountLink = page.locator(\"text=Don't have an account?\");\n this.forgotPasswordLink = page.locator('text=Forgot your password?');\n this.userErrorLabel = page.locator('text=Please enter your email or username');\n this.fieldWithError = page.locator('.with-error');\n this.formContainer = page.locator('.signup-team__container');\n\n this.header = new components.MainHeader(page.locator('.hfroute-header'));\n this.footer = new components.Footer(page.locator('.hfroute-footer'));\n }\n\n async toBeVisible() {\n await this.page.waitForLoadState('networkidle');\n await expect(this.title).toBeVisible();\n await expect(this.loginInput).toBeVisible();\n await expect(this.passwordInput).toBeVisible();\n }\n\n async goto() {\n await this.page.goto('/login');\n }\n\n async login(user: UserProfile, useUsername = true) {\n await this.loginInput.fill(useUsername ? user.username : user.email);\n await this.passwordInput.fill(user.password);\n await Promise.all([this.page.waitForNavigation(), this.signInButton.click()]);\n }\n}\n"],"names":["components","expect"],"mappings":"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"}
@@ -6,8 +6,8 @@ export default class ResetPasswordPage {
6
6
  readonly emailInput: import("playwright-core").Locator;
7
7
  readonly resetButton: import("playwright-core").Locator;
8
8
  readonly formContainer: import("playwright-core").Locator;
9
- readonly header: import("../components/main_header").default;
10
- readonly footer: import("../components/footer").default;
9
+ readonly header: import("@/ui/components").MainHeader;
10
+ readonly footer: import("@/ui/components").Footer;
11
11
  constructor(page: Page);
12
12
  toBeVisible(): Promise<void>;
13
13
  goto(): Promise<void>;
@@ -18,7 +18,7 @@ class ResetPasswordPage {
18
18
  this.page = page;
19
19
  this.title = page.locator('h1:has-text("Password Reset")');
20
20
  this.subtitle = page.locator('text=To reset your password, enter the email address you used to sign up');
21
- this.emailInput = page.locator(`[placeholder="Email"]`);
21
+ this.emailInput = page.locator('#passwordResetEmailInput');
22
22
  this.resetButton = page.locator('#passwordResetButton');
23
23
  this.formContainer = page.locator('.signup-team__container');
24
24
  this.header = new index.components.MainHeader(page.locator('.signup-header'));
@@ -1 +1 @@
1
- {"version":3,"file":"reset_password.js","sources":["../../../src/ui/pages/reset_password.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Page, expect} from '@playwright/test';\n\nimport {components} from '@/ui/components';\n\nexport default class ResetPasswordPage {\n readonly page: Page;\n\n readonly title;\n readonly subtitle;\n readonly emailInput;\n readonly resetButton;\n readonly formContainer;\n\n readonly header;\n readonly footer;\n\n constructor(page: Page) {\n this.page = page;\n\n this.title = page.locator('h1:has-text(\"Password Reset\")');\n this.subtitle = page.locator('text=To reset your password, enter the email address you used to sign up');\n this.emailInput = page.locator(`[placeholder=\"Email\"]`);\n this.resetButton = page.locator('#passwordResetButton');\n this.formContainer = page.locator('.signup-team__container');\n\n this.header = new components.MainHeader(page.locator('.signup-header'));\n this.footer = new components.Footer(page.locator('#footer_section'));\n }\n\n async toBeVisible() {\n await this.page.waitForLoadState('networkidle');\n await expect(this.title).toBeVisible();\n await expect(this.subtitle).toBeVisible();\n await expect(this.emailInput).toBeVisible();\n await expect(this.resetButton).toBeVisible();\n }\n\n async goto() {\n await this.page.goto('/reset_password');\n }\n\n async reset(email: string) {\n await this.emailInput.fill(email);\n await Promise.all([this.page.waitForNavigation(), this.resetButton.click()]);\n }\n}\n"],"names":["components","expect"],"mappings":";;;;;AAAA;AACA;AAMc,MAAO,iBAAiB,CAAA;AACzB,IAAA,IAAI;AAEJ,IAAA,KAAK;AACL,IAAA,QAAQ;AACR,IAAA,UAAU;AACV,IAAA,WAAW;AACX,IAAA,aAAa;AAEb,IAAA,MAAM;AACN,IAAA,MAAM;AAEf,IAAA,WAAA,CAAY,IAAU,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAEhB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,+BAA+B,CAAC;QAC1D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,0EAA0E,CAAC;QACxG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,CAAuB,qBAAA,CAAA,CAAC;QACvD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC;QACvD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC;AAE5D,QAAA,IAAI,CAAC,MAAM,GAAG,IAAIA,gBAAU,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,MAAM,GAAG,IAAIA,gBAAU,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;;AAGxE,IAAA,MAAM,WAAW,GAAA;QACb,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;QAC/C,MAAMC,WAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;QACtC,MAAMA,WAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE;QACzC,MAAMA,WAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;QAC3C,MAAMA,WAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE;;AAGhD,IAAA,MAAM,IAAI,GAAA;QACN,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;;IAG3C,MAAM,KAAK,CAAC,KAAa,EAAA;QACrB,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;QACjC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;;AAEnF;;;;"}
1
+ {"version":3,"file":"reset_password.js","sources":["../../../src/ui/pages/reset_password.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Page, expect} from '@playwright/test';\n\nimport {components} from '@/ui/components';\n\nexport default class ResetPasswordPage {\n readonly page: Page;\n\n readonly title;\n readonly subtitle;\n readonly emailInput;\n readonly resetButton;\n readonly formContainer;\n\n readonly header;\n readonly footer;\n\n constructor(page: Page) {\n this.page = page;\n\n this.title = page.locator('h1:has-text(\"Password Reset\")');\n this.subtitle = page.locator('text=To reset your password, enter the email address you used to sign up');\n this.emailInput = page.locator('#passwordResetEmailInput');\n this.resetButton = page.locator('#passwordResetButton');\n this.formContainer = page.locator('.signup-team__container');\n\n this.header = new components.MainHeader(page.locator('.signup-header'));\n this.footer = new components.Footer(page.locator('#footer_section'));\n }\n\n async toBeVisible() {\n await this.page.waitForLoadState('networkidle');\n await expect(this.title).toBeVisible();\n await expect(this.subtitle).toBeVisible();\n await expect(this.emailInput).toBeVisible();\n await expect(this.resetButton).toBeVisible();\n }\n\n async goto() {\n await this.page.goto('/reset_password');\n }\n\n async reset(email: string) {\n await this.emailInput.fill(email);\n await Promise.all([this.page.waitForNavigation(), this.resetButton.click()]);\n }\n}\n"],"names":["components","expect"],"mappings":";;;;;AAAA;AACA;AAMc,MAAO,iBAAiB,CAAA;AACzB,IAAA,IAAI;AAEJ,IAAA,KAAK;AACL,IAAA,QAAQ;AACR,IAAA,UAAU;AACV,IAAA,WAAW;AACX,IAAA,aAAa;AAEb,IAAA,MAAM;AACN,IAAA,MAAM;AAEf,IAAA,WAAA,CAAY,IAAU,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAEhB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,+BAA+B,CAAC;QAC1D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,0EAA0E,CAAC;QACxG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC;QAC1D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC;QACvD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC;AAE5D,QAAA,IAAI,CAAC,MAAM,GAAG,IAAIA,gBAAU,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,MAAM,GAAG,IAAIA,gBAAU,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACxE;AAEA,IAAA,MAAM,WAAW,GAAA;QACb,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;QAC/C,MAAMC,WAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;QACtC,MAAMA,WAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE;QACzC,MAAMA,WAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;QAC3C,MAAMA,WAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE;IAChD;AAEA,IAAA,MAAM,IAAI,GAAA;QACN,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;IAC3C;IAEA,MAAM,KAAK,CAAC,KAAa,EAAA;QACrB,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;QACjC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;IAChF;AACH;;;;"}
@@ -0,0 +1,23 @@
1
+ import { Page } from '@playwright/test';
2
+ import type { ScheduledPost } from '@/ui/components';
3
+ export default class ScheduledPostsPage {
4
+ readonly page: Page;
5
+ readonly draftsHeader: import("playwright-core").Locator;
6
+ readonly tab: import("playwright-core").Locator;
7
+ readonly badge: import("playwright-core").Locator;
8
+ readonly noScheduledDrafts: import("playwright-core").Locator;
9
+ readonly scheduleMessageModal: import("@/ui/components").ScheduleMessageModal;
10
+ readonly sendMessageNowModal: import("@/ui/components").SendMessageNowModal;
11
+ readonly deleteScheduledPostModal: import("@/ui/components").DeleteScheduledPostModal;
12
+ constructor(page: Page);
13
+ toBeVisible(): Promise<void>;
14
+ getBadgeCountOnTab(): Promise<string | null>;
15
+ getLastPost(): Promise<ScheduledPost>;
16
+ getLastPostID(): Promise<string | null>;
17
+ getNthPost(index: number): Promise<ScheduledPost>;
18
+ rescheduleMessage(post: ScheduledPost, dayFromToday?: number, timeOptionIndex?: number): Promise<{
19
+ selectedDate: string;
20
+ selectedTime: string | null;
21
+ }>;
22
+ goto(teamName: string): Promise<void>;
23
+ }
@@ -0,0 +1,63 @@
1
+ 'use strict';
2
+
3
+ var test = require('@playwright/test');
4
+ var index = require('../components/index.js');
5
+
6
+ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
7
+ // See LICENSE.txt for license information.
8
+ class ScheduledPostsPage {
9
+ page;
10
+ draftsHeader;
11
+ tab;
12
+ badge;
13
+ noScheduledDrafts;
14
+ scheduleMessageModal;
15
+ sendMessageNowModal;
16
+ deleteScheduledPostModal;
17
+ constructor(page) {
18
+ this.page = page;
19
+ this.draftsHeader = page.locator('.Drafts__header');
20
+ this.tab = page.getByRole('tab', { name: 'Scheduled' });
21
+ this.badge = this.tab.locator('span.MuiBadge-badge');
22
+ this.noScheduledDrafts = page.locator('.no-results__wrapper');
23
+ this.scheduleMessageModal = new index.components.ScheduleMessageModal(page.getByRole('dialog', { name: 'Schedule message' }));
24
+ this.sendMessageNowModal = new index.components.SendMessageNowModal(page.getByRole('dialog', { name: 'Send message now' }));
25
+ this.deleteScheduledPostModal = new index.components.DeleteScheduledPostModal(page.getByRole('dialog', { name: 'Delete scheduled post' }));
26
+ }
27
+ async toBeVisible() {
28
+ await test.expect(this.page).toHaveURL(/.*scheduled_posts/);
29
+ await this.draftsHeader.isVisible();
30
+ await test.expect(this.tab).toHaveAttribute('aria-selected', 'true');
31
+ }
32
+ async getBadgeCountOnTab() {
33
+ await test.expect(this.tab).toBeVisible();
34
+ const badge = this.tab.locator('span.MuiBadge-badge');
35
+ await test.expect(badge).toBeVisible();
36
+ return await badge.textContent();
37
+ }
38
+ async getLastPost() {
39
+ const lastPost = this.page.getByTestId('scheduledPostView').last();
40
+ await lastPost.waitFor();
41
+ return new index.components.ScheduledPost(lastPost);
42
+ }
43
+ async getLastPostID() {
44
+ return this.page.getByTestId('scheduledPostView').last().getAttribute('data-postid');
45
+ }
46
+ async getNthPost(index$1) {
47
+ const nthPost = this.page.getByTestId('scheduledPostView').nth(index$1);
48
+ await nthPost.waitFor();
49
+ return new index.components.ScheduledPost(nthPost);
50
+ }
51
+ async rescheduleMessage(post, dayFromToday = 0, timeOptionIndex = 0) {
52
+ await post.hover();
53
+ await test.expect(post.rescheduleButton).toBeVisible();
54
+ await post.rescheduleButton.click();
55
+ return await this.scheduleMessageModal.scheduleMessage(dayFromToday, timeOptionIndex);
56
+ }
57
+ async goto(teamName) {
58
+ await this.page.goto(`/${teamName}/scheduled_posts`);
59
+ }
60
+ }
61
+
62
+ module.exports = ScheduledPostsPage;
63
+ //# sourceMappingURL=scheduled_posts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduled_posts.js","sources":["../../../src/ui/pages/scheduled_posts.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Page, expect} from '@playwright/test';\n\nimport {components} from '@/ui/components';\nimport type {ScheduledPost} from '@/ui/components';\n\nexport default class ScheduledPostsPage {\n readonly page: Page;\n\n readonly draftsHeader;\n readonly tab;\n readonly badge;\n readonly noScheduledDrafts;\n readonly scheduleMessageModal;\n readonly sendMessageNowModal;\n readonly deleteScheduledPostModal;\n\n constructor(page: Page) {\n this.page = page;\n\n this.draftsHeader = page.locator('.Drafts__header');\n this.tab = page.getByRole('tab', {name: 'Scheduled'});\n this.badge = this.tab.locator('span.MuiBadge-badge');\n\n this.noScheduledDrafts = page.locator('.no-results__wrapper');\n\n this.scheduleMessageModal = new components.ScheduleMessageModal(\n page.getByRole('dialog', {name: 'Schedule message'}),\n );\n this.sendMessageNowModal = new components.SendMessageNowModal(\n page.getByRole('dialog', {name: 'Send message now'}),\n );\n this.deleteScheduledPostModal = new components.DeleteScheduledPostModal(\n page.getByRole('dialog', {name: 'Delete scheduled post'}),\n );\n }\n\n async toBeVisible() {\n await expect(this.page).toHaveURL(/.*scheduled_posts/);\n await this.draftsHeader.isVisible();\n await expect(this.tab).toHaveAttribute('aria-selected', 'true');\n }\n\n async getBadgeCountOnTab() {\n await expect(this.tab).toBeVisible();\n const badge = this.tab.locator('span.MuiBadge-badge');\n await expect(badge).toBeVisible();\n return await badge.textContent();\n }\n\n async getLastPost() {\n const lastPost = this.page.getByTestId('scheduledPostView').last();\n await lastPost.waitFor();\n return new components.ScheduledPost(lastPost);\n }\n\n async getLastPostID() {\n return this.page.getByTestId('scheduledPostView').last().getAttribute('data-postid');\n }\n\n async getNthPost(index: number) {\n const nthPost = this.page.getByTestId('scheduledPostView').nth(index);\n await nthPost.waitFor();\n return new components.ScheduledPost(nthPost);\n }\n\n async rescheduleMessage(post: ScheduledPost, dayFromToday: number = 0, timeOptionIndex: number = 0) {\n await post.hover();\n await expect(post.rescheduleButton).toBeVisible();\n await post.rescheduleButton.click();\n\n return await this.scheduleMessageModal.scheduleMessage(dayFromToday, timeOptionIndex);\n }\n\n async goto(teamName: string) {\n await this.page.goto(`/${teamName}/scheduled_posts`);\n }\n}\n"],"names":["components","expect","index"],"mappings":"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"}
@@ -18,8 +18,8 @@ export default class SignupPage {
18
18
  readonly emailError: import("playwright-core").Locator;
19
19
  readonly usernameError: import("playwright-core").Locator;
20
20
  readonly passwordError: import("playwright-core").Locator;
21
- readonly header: import("../components/main_header").default;
22
- readonly footer: import("../components/footer").default;
21
+ readonly header: import("@/ui/components").MainHeader;
22
+ readonly footer: import("@/ui/components").Footer;
23
23
  constructor(page: Page);
24
24
  toBeVisible(): Promise<void>;
25
25
  goto(): Promise<void>;
@@ -36,7 +36,7 @@ class SignupPage {
36
36
  this.emailInput = page.locator('#input_email');
37
37
  this.usernameInput = page.locator('#input_name');
38
38
  this.passwordInput = page.locator('#input_password-input');
39
- this.passwordToggleButton = page.getByRole('button', { name: 'Show or hide password' });
39
+ this.passwordToggleButton = page.locator('#password_toggle');
40
40
  this.createAccountButton = page.locator('button:has-text("Create Account")');
41
41
  this.emailError = page.locator('text=Please enter a valid email address');
42
42
  this.usernameError = page.locator('text=Usernames have to begin with a lowercase letter and be 3-22 characters long. You can use lowercase letters, numbers, periods, dashes, and underscores.');
@@ -1 +1 @@
1
- {"version":3,"file":"signup.js","sources":["../../../src/ui/pages/signup.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Page, expect} from '@playwright/test';\n\nimport {duration, wait} from '@/util';\nimport {components} from '@/ui/components';\n\nexport default class SignupPage {\n readonly page: Page;\n\n readonly title;\n readonly subtitle;\n readonly bodyCard;\n readonly emailInput;\n readonly usernameInput;\n readonly passwordInput;\n readonly passwordToggleButton;\n readonly newsLetterCheckBox;\n readonly newsLetterPrivacyPolicyLink;\n readonly newsLetterUnsubscribeLink;\n readonly agreementTermsOfUseLink;\n readonly agreementPrivacyPolicyLink;\n readonly createAccountButton;\n readonly loginLink;\n readonly emailError;\n readonly usernameError;\n readonly passwordError;\n\n readonly header;\n readonly footer;\n\n constructor(page: Page) {\n this.page = page;\n\n this.title = page.locator('h1:has-text(\"Let’s get started\")');\n this.subtitle = page.locator('text=Create your Mattermost account to start collaborating with your team');\n this.bodyCard = page.locator('.signup-body-card-content');\n this.loginLink = page.locator('text=Log in');\n this.emailInput = page.locator('#input_email');\n this.usernameInput = page.locator('#input_name');\n this.passwordInput = page.locator('#input_password-input');\n this.passwordToggleButton = page.getByRole('button', {name: 'Show or hide password'});\n this.createAccountButton = page.locator('button:has-text(\"Create Account\")');\n this.emailError = page.locator('text=Please enter a valid email address');\n this.usernameError = page.locator(\n 'text=Usernames have to begin with a lowercase letter and be 3-22 characters long. You can use lowercase letters, numbers, periods, dashes, and underscores.',\n );\n this.passwordError = page.locator('text=Must be 5-72 characters long.');\n\n const newsletterBlock = page.locator('.check-input');\n this.newsLetterCheckBox = newsletterBlock.getByRole('checkbox', {name: 'newsletter checkbox'});\n this.newsLetterPrivacyPolicyLink = newsletterBlock.locator('text=Privacy Policy');\n this.newsLetterUnsubscribeLink = newsletterBlock.locator('text=unsubscribe');\n\n const agreementBlock = page.locator('.signup-body-card-agreement');\n this.agreementTermsOfUseLink = agreementBlock.locator('text=Terms of Use');\n this.agreementPrivacyPolicyLink = agreementBlock.locator('text=Privacy Policy');\n\n this.header = new components.MainHeader(page.locator('.hfroute-header'));\n this.footer = new components.Footer(page.locator('.hfroute-footer'));\n }\n\n async toBeVisible() {\n await this.page.waitForLoadState('networkidle');\n await this.page.waitForLoadState('domcontentloaded');\n await wait(duration.half_sec);\n await expect(this.title).toBeVisible();\n await expect(this.emailInput).toBeVisible();\n await expect(this.usernameInput).toBeVisible();\n await expect(this.passwordInput).toBeVisible();\n }\n\n async goto() {\n await this.page.goto('/signup_user_complete');\n }\n\n async create(user: {email: string; username: string; password: string}, waitForRedirect = true) {\n await this.emailInput.fill(user.email);\n await this.usernameInput.fill(user.username);\n await this.passwordInput.fill(user.password);\n await this.createAccountButton.click();\n\n if (waitForRedirect) {\n await this.page.waitForNavigation();\n }\n }\n}\n"],"names":["components","wait","duration","expect"],"mappings":"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"}
1
+ {"version":3,"file":"signup.js","sources":["../../../src/ui/pages/signup.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Page, expect} from '@playwright/test';\n\nimport {duration, wait} from '@/util';\nimport {components} from '@/ui/components';\n\nexport default class SignupPage {\n readonly page: Page;\n\n readonly title;\n readonly subtitle;\n readonly bodyCard;\n readonly emailInput;\n readonly usernameInput;\n readonly passwordInput;\n readonly passwordToggleButton;\n readonly newsLetterCheckBox;\n readonly newsLetterPrivacyPolicyLink;\n readonly newsLetterUnsubscribeLink;\n readonly agreementTermsOfUseLink;\n readonly agreementPrivacyPolicyLink;\n readonly createAccountButton;\n readonly loginLink;\n readonly emailError;\n readonly usernameError;\n readonly passwordError;\n\n readonly header;\n readonly footer;\n\n constructor(page: Page) {\n this.page = page;\n\n this.title = page.locator('h1:has-text(\"Let’s get started\")');\n this.subtitle = page.locator('text=Create your Mattermost account to start collaborating with your team');\n this.bodyCard = page.locator('.signup-body-card-content');\n this.loginLink = page.locator('text=Log in');\n this.emailInput = page.locator('#input_email');\n this.usernameInput = page.locator('#input_name');\n this.passwordInput = page.locator('#input_password-input');\n this.passwordToggleButton = page.locator('#password_toggle');\n this.createAccountButton = page.locator('button:has-text(\"Create Account\")');\n this.emailError = page.locator('text=Please enter a valid email address');\n this.usernameError = page.locator(\n 'text=Usernames have to begin with a lowercase letter and be 3-22 characters long. You can use lowercase letters, numbers, periods, dashes, and underscores.',\n );\n this.passwordError = page.locator('text=Must be 5-72 characters long.');\n\n const newsletterBlock = page.locator('.check-input');\n this.newsLetterCheckBox = newsletterBlock.getByRole('checkbox', {name: 'newsletter checkbox'});\n this.newsLetterPrivacyPolicyLink = newsletterBlock.locator('text=Privacy Policy');\n this.newsLetterUnsubscribeLink = newsletterBlock.locator('text=unsubscribe');\n\n const agreementBlock = page.locator('.signup-body-card-agreement');\n this.agreementTermsOfUseLink = agreementBlock.locator('text=Terms of Use');\n this.agreementPrivacyPolicyLink = agreementBlock.locator('text=Privacy Policy');\n\n this.header = new components.MainHeader(page.locator('.hfroute-header'));\n this.footer = new components.Footer(page.locator('.hfroute-footer'));\n }\n\n async toBeVisible() {\n await this.page.waitForLoadState('networkidle');\n await this.page.waitForLoadState('domcontentloaded');\n await wait(duration.half_sec);\n await expect(this.title).toBeVisible();\n await expect(this.emailInput).toBeVisible();\n await expect(this.usernameInput).toBeVisible();\n await expect(this.passwordInput).toBeVisible();\n }\n\n async goto() {\n await this.page.goto('/signup_user_complete');\n }\n\n async create(user: {email: string; username: string; password: string}, waitForRedirect = true) {\n await this.emailInput.fill(user.email);\n await this.usernameInput.fill(user.username);\n await this.passwordInput.fill(user.password);\n await this.createAccountButton.click();\n\n if (waitForRedirect) {\n await this.page.waitForNavigation();\n }\n }\n}\n"],"names":["components","wait","duration","expect"],"mappings":"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"}
@@ -1,26 +1,28 @@
1
1
  import { Page } from '@playwright/test';
2
2
  export default class SystemConsolePage {
3
3
  readonly page: Page;
4
- readonly sidebar: import("../components/system_console/sidebar").default;
5
- readonly navbar: import("../components/system_console/navbar").default;
4
+ readonly sidebar: import("@/ui/components").SystemConsoleSidebar;
5
+ readonly navbar: import("@/ui/components").SystemConsoleNavbar;
6
+ readonly notifications: import("@/ui/components").SystemConsoleNotifications;
6
7
  /**
7
8
  * System Console -> User Management -> Users
8
9
  */
9
- readonly systemUsers: import("../components/system_console/sections/system_users/system_users").default;
10
- readonly systemUsersFilterPopover: import("../components/system_console/sections/system_users/filter_popover").default;
11
- readonly systemUsersRoleMenu: import("../components/system_console/sections/system_users/filter_menu").default;
12
- readonly systemUsersStatusMenu: import("../components/system_console/sections/system_users/filter_menu").default;
13
- readonly systemUsersDateRangeMenu: import("../components/system_console/sections/system_users/filter_menu").default;
14
- readonly systemUsersColumnToggleMenu: import("../components/system_console/sections/system_users/column_toggle_menu").default;
15
- readonly systemUsersActionMenus: import("../components/system_console/sections/system_users/filter_menu").default[];
16
- readonly mobileSecurity: import("../components/system_console/sections/system_users/mobile_security").default;
17
- readonly featureDiscovery: import("../components/system_console/sections/system_users/feature_discovery").default;
18
- readonly confirmModal: import("../components/channels/generic_confirm_modal").default;
19
- readonly exportModal: import("../components/channels/generic_confirm_modal").default;
20
- readonly saveChangesModal: import("../components/system_console/sections/system_users/system_users").default;
10
+ readonly systemUsers: import("@/ui/components").SystemUsers;
11
+ readonly systemUsersFilterPopover: import("@/ui/components").SystemUsersFilterPopover;
12
+ readonly systemUsersRoleMenu: import("@/ui/components").SystemUsersFilterMenu;
13
+ readonly systemUsersStatusMenu: import("@/ui/components").SystemUsersFilterMenu;
14
+ readonly systemUsersDateRangeMenu: import("@/ui/components").SystemUsersFilterMenu;
15
+ readonly systemUsersColumnToggleMenu: import("@/ui/components").SystemUsersColumnToggleMenu;
16
+ readonly systemUsersActionMenus: import("@/ui/components").SystemUsersFilterMenu[];
17
+ readonly mobileSecurity: import("@/ui/components").SystemConsoleMobileSecurity;
18
+ readonly featureDiscovery: import("@/ui/components").SystemConsoleFeatureDiscovery;
19
+ readonly confirmModal: import("@/ui/components").GenericConfirmModal;
20
+ readonly exportModal: import("@/ui/components").GenericConfirmModal;
21
+ readonly saveChangesModal: import("@/ui/components").SystemUsers;
21
22
  constructor(page: Page);
22
23
  toBeVisible(): Promise<void>;
23
24
  goto(): Promise<void>;
24
25
  saveRoleChange(): Promise<void>;
25
26
  clickResetButton(): Promise<void>;
27
+ clickUpdateEmailButton(): Promise<void>;
26
28
  }
@@ -8,6 +8,9 @@ class SystemConsolePage {
8
8
  page;
9
9
  sidebar;
10
10
  navbar;
11
+ // Site Configuration
12
+ // System Console > Notifications
13
+ notifications;
11
14
  /**
12
15
  * System Console -> User Management -> Users
13
16
  */
@@ -26,12 +29,15 @@ class SystemConsolePage {
26
29
  saveChangesModal;
27
30
  constructor(page) {
28
31
  this.page = page;
32
+ // Site Configuration
33
+ // System Console > Notifications
34
+ this.notifications = new index.components.SystemConsoleNotifications(page.getByTestId('sysconsole_section_notifications'));
29
35
  // Areas of the page
30
36
  this.navbar = new index.components.SystemConsoleNavbar(page.locator('.backstage-navbar'));
31
37
  this.sidebar = new index.components.SystemConsoleSidebar(page.locator('.admin-sidebar'));
32
38
  // Sections and sub-sections
33
39
  this.systemUsers = new index.components.SystemUsers(page.getByTestId('systemUsersSection'));
34
- this.mobileSecurity = new index.components.SystemConsoleMobileSecurity(page.getByTestId('sysconsole_section_MobileSecuritySettings'));
40
+ this.mobileSecurity = new index.components.SystemConsoleMobileSecurity(page.getByTestId('sysconsole_section_MobileSecuritySettings'), this.page);
35
41
  this.featureDiscovery = new index.components.SystemConsoleFeatureDiscovery(page.getByTestId('featureDiscovery'));
36
42
  // Menus & Popovers
37
43
  this.systemUsersFilterPopover = new index.components.SystemUsersFilterPopover(page.locator('#systemUsersFilterPopover'));
@@ -58,6 +64,9 @@ class SystemConsolePage {
58
64
  async clickResetButton() {
59
65
  await this.saveChangesModal.container.locator('button.btn-primary:has-text("Reset")').click();
60
66
  }
67
+ async clickUpdateEmailButton() {
68
+ await this.saveChangesModal.container.locator('button.btn-primary:has-text("Update")').click();
69
+ }
61
70
  }
62
71
 
63
72
  module.exports = SystemConsolePage;