@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.
- package/dist/browser_context.d.ts +4 -2
- package/dist/browser_context.js +24 -4
- package/dist/browser_context.js.map +1 -1
- package/dist/constant.d.ts +2 -0
- package/dist/constant.js +5 -0
- package/dist/constant.js.map +1 -1
- package/dist/file.js +2 -1
- package/dist/file.js.map +1 -1
- package/dist/flag.js +1 -1
- package/dist/flag.js.map +1 -1
- package/dist/global_setup.js +26 -4
- package/dist/global_setup.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +93 -3
- package/dist/index.js.map +1 -1
- package/dist/mock_browser_api.js.map +1 -1
- package/dist/server/channel.js.map +1 -1
- package/dist/server/client.d.ts +6 -0
- package/dist/server/client.js +6 -0
- package/dist/server/client.js.map +1 -1
- package/dist/server/default_config.d.ts +1 -0
- package/dist/server/default_config.js +100 -29
- package/dist/server/default_config.js.map +1 -1
- package/dist/server/index.d.ts +3 -3
- package/dist/server/index.js +9 -0
- package/dist/server/init.d.ts +9 -8
- package/dist/server/init.js +3 -11
- package/dist/server/init.js.map +1 -1
- package/dist/server/post.js.map +1 -1
- package/dist/server/team.d.ts +8 -1
- package/dist/server/team.js +13 -2
- package/dist/server/team.js.map +1 -1
- package/dist/server/user.d.ts +9 -2
- package/dist/server/user.js +36 -2
- package/dist/server/user.js.map +1 -1
- package/dist/test_action.d.ts +9 -0
- package/dist/test_action.js +39 -2
- package/dist/test_action.js.map +1 -1
- package/dist/test_config.js +1 -1
- package/dist/test_config.js.map +1 -1
- package/dist/test_fixture.d.ts +10 -3
- package/dist/test_fixture.js +19 -4
- package/dist/test_fixture.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.js +3 -0
- package/dist/ui/components/channels/app_bar.js.map +1 -1
- package/dist/ui/components/channels/center_view.d.ts +17 -13
- package/dist/ui/components/channels/center_view.js +55 -25
- package/dist/ui/components/channels/center_view.js.map +1 -1
- package/dist/ui/components/channels/channel_settings/channel_settings_modal.d.ts +17 -0
- package/dist/ui/components/channels/channel_settings/channel_settings_modal.js +49 -0
- package/dist/ui/components/channels/channel_settings/channel_settings_modal.js.map +1 -0
- package/dist/ui/components/channels/channel_settings/configuration_settings.d.ts +11 -0
- package/dist/ui/components/channels/channel_settings/configuration_settings.js +48 -0
- package/dist/ui/components/channels/channel_settings/configuration_settings.js.map +1 -0
- package/dist/ui/components/channels/{scheduled_draft_menu.d.ts → channel_settings/info_settings.d.ts} +1 -3
- package/dist/ui/components/channels/channel_settings/info_settings.js +18 -0
- package/dist/ui/components/channels/channel_settings/info_settings.js.map +1 -0
- package/dist/ui/components/channels/delete_post_confirmation_dialog.js.map +1 -1
- package/dist/ui/components/channels/delete_post_modal.js.map +1 -1
- package/dist/ui/components/channels/delete_scheduled_post_modal.d.ts +10 -0
- package/dist/ui/components/channels/delete_scheduled_post_modal.js +26 -0
- package/dist/ui/components/channels/delete_scheduled_post_modal.js.map +1 -0
- package/dist/ui/components/channels/draft_post.d.ts +16 -0
- package/dist/ui/components/channels/draft_post.js +39 -0
- package/dist/ui/components/channels/draft_post.js.map +1 -0
- package/dist/ui/components/channels/emoji_gif_picker.d.ts +2 -0
- package/dist/ui/components/channels/emoji_gif_picker.js +6 -0
- package/dist/ui/components/channels/emoji_gif_picker.js.map +1 -1
- package/dist/ui/components/channels/find_channels_modal.js.map +1 -1
- package/dist/ui/components/channels/flag_post_confirmation_dialog.d.ts +24 -0
- package/dist/ui/components/channels/flag_post_confirmation_dialog.js +74 -0
- package/dist/ui/components/channels/flag_post_confirmation_dialog.js.map +1 -0
- package/dist/ui/components/channels/generic_confirm_modal.js.map +1 -1
- package/dist/ui/components/channels/header.d.ts +2 -0
- package/dist/ui/components/channels/header.js +6 -0
- package/dist/ui/components/channels/header.js.map +1 -1
- package/dist/ui/components/channels/invite_people_modal.d.ts +6 -0
- package/dist/ui/components/channels/invite_people_modal.js +18 -0
- package/dist/ui/components/channels/invite_people_modal.js.map +1 -0
- package/dist/ui/components/channels/message_priority.d.ts +0 -1
- package/dist/ui/components/channels/message_priority.js +2 -7
- package/dist/ui/components/channels/message_priority.js.map +1 -1
- package/dist/ui/components/channels/post.d.ts +7 -0
- package/dist/ui/components/channels/post.js +18 -0
- package/dist/ui/components/channels/post.js.map +1 -1
- package/dist/ui/components/channels/post_create.d.ts +1 -5
- package/dist/ui/components/channels/post_create.js +3 -12
- package/dist/ui/components/channels/post_create.js.map +1 -1
- package/dist/ui/components/channels/post_dot_menu.d.ts +2 -0
- package/dist/ui/components/channels/post_dot_menu.js +5 -0
- package/dist/ui/components/channels/post_dot_menu.js.map +1 -1
- package/dist/ui/components/channels/post_edit.js.map +1 -1
- package/dist/ui/components/channels/post_menu.js.map +1 -1
- package/dist/ui/components/channels/post_reminder_menu.js.map +1 -1
- package/dist/ui/components/channels/profile_modal.d.ts +27 -0
- package/dist/ui/components/channels/profile_modal.js +66 -0
- package/dist/ui/components/channels/profile_modal.js.map +1 -0
- package/dist/ui/components/channels/restore_post_confirmation_dialog.js.map +1 -1
- package/dist/ui/components/channels/schedule_message_menu.d.ts +12 -0
- package/dist/ui/components/channels/schedule_message_menu.js +31 -0
- package/dist/ui/components/channels/schedule_message_menu.js.map +1 -0
- package/dist/ui/components/channels/schedule_message_modal.d.ts +20 -0
- package/dist/ui/components/channels/schedule_message_modal.js +91 -0
- package/dist/ui/components/channels/schedule_message_modal.js.map +1 -0
- package/dist/ui/components/channels/scheduled_draft_modal.js.map +1 -1
- package/dist/ui/components/channels/scheduled_post.d.ts +20 -0
- package/dist/ui/components/channels/scheduled_post.js +47 -0
- package/dist/ui/components/channels/scheduled_post.js.map +1 -0
- package/dist/ui/components/channels/scheduled_post_indicator.d.ts +12 -0
- package/dist/ui/components/channels/scheduled_post_indicator.js +32 -0
- package/dist/ui/components/channels/scheduled_post_indicator.js.map +1 -0
- package/dist/ui/components/channels/{search_popover.d.ts → search_box.d.ts} +1 -1
- package/dist/ui/components/channels/{search_popover.js → search_box.js} +4 -3
- package/dist/ui/components/channels/search_box.js.map +1 -0
- package/dist/ui/components/channels/send_message_now_modal.d.ts +10 -0
- package/dist/ui/components/channels/send_message_now_modal.js +26 -0
- package/dist/ui/components/channels/send_message_now_modal.js.map +1 -0
- package/dist/ui/components/channels/settings/advanced_settings.d.ts +15 -0
- package/dist/ui/components/channels/settings/advanced_settings.js +35 -0
- package/dist/ui/components/channels/settings/advanced_settings.js.map +1 -0
- package/dist/ui/components/channels/settings/display_settings.d.ts +27 -0
- package/dist/ui/components/channels/settings/display_settings.js +77 -0
- package/dist/ui/components/channels/settings/display_settings.js.map +1 -0
- package/dist/ui/components/channels/settings/{notification_settings.d.ts → notifications_settings.d.ts} +12 -0
- package/dist/ui/components/channels/settings/{notification_settings.js → notifications_settings.js} +23 -1
- package/dist/ui/components/channels/settings/notifications_settings.js.map +1 -0
- package/dist/ui/components/channels/settings/settings_modal.d.ts +19 -4
- package/dist/ui/components/channels/settings/settings_modal.js +48 -7
- package/dist/ui/components/channels/settings/settings_modal.js.map +1 -1
- package/dist/ui/components/channels/settings/sidebar_settings.d.ts +12 -0
- package/dist/ui/components/channels/settings/sidebar_settings.js +28 -0
- package/dist/ui/components/channels/settings/sidebar_settings.js.map +1 -0
- package/dist/ui/components/channels/sidebar_left.d.ts +16 -3
- package/dist/ui/components/channels/sidebar_left.js +26 -9
- package/dist/ui/components/channels/sidebar_left.js.map +1 -1
- package/dist/ui/components/channels/sidebar_right.d.ts +3 -2
- package/dist/ui/components/channels/sidebar_right.js +6 -6
- package/dist/ui/components/channels/sidebar_right.js.map +1 -1
- package/dist/ui/components/channels/team_menu.d.ts +19 -0
- package/dist/ui/components/channels/team_menu.js +51 -0
- package/dist/ui/components/channels/team_menu.js.map +1 -0
- package/dist/ui/components/channels/team_settings/team_settings_modal.d.ts +6 -0
- package/dist/ui/components/channels/team_settings/team_settings_modal.js +18 -0
- package/dist/ui/components/channels/team_settings/team_settings_modal.js.map +1 -0
- package/dist/ui/components/channels/thread_footer.js.map +1 -1
- package/dist/ui/components/channels/user_profile_popover.js.map +1 -1
- package/dist/ui/components/footer.js.map +1 -1
- package/dist/ui/components/global_header.d.ts +7 -2
- package/dist/ui/components/global_header.js +13 -1
- package/dist/ui/components/global_header.js.map +1 -1
- package/dist/ui/components/index.d.ts +33 -5
- package/dist/ui/components/index.js +90 -10
- package/dist/ui/components/index.js.map +1 -1
- package/dist/ui/components/main_header.js.map +1 -1
- package/dist/ui/components/system_console/navbar.js.map +1 -1
- package/dist/ui/components/system_console/sections/site_configuration/notifications.d.ts +24 -0
- package/dist/ui/components/system_console/sections/site_configuration/notifications.js +63 -0
- package/dist/ui/components/system_console/sections/site_configuration/notifications.js.map +1 -0
- package/dist/ui/components/system_console/sections/system_users/column_toggle_menu.js.map +1 -1
- package/dist/ui/components/system_console/sections/system_users/feature_discovery.js.map +1 -1
- package/dist/ui/components/system_console/sections/system_users/filter_menu.js.map +1 -1
- package/dist/ui/components/system_console/sections/system_users/filter_popover.js.map +1 -1
- package/dist/ui/components/system_console/sections/system_users/mobile_security.d.ts +29 -2
- package/dist/ui/components/system_console/sections/system_users/mobile_security.js +75 -1
- package/dist/ui/components/system_console/sections/system_users/mobile_security.js.map +1 -1
- package/dist/ui/components/system_console/sections/system_users/system_users.js.map +1 -1
- package/dist/ui/components/system_console/sidebar.js.map +1 -1
- package/dist/ui/components/user_account_menu.d.ts +13 -0
- package/dist/ui/components/user_account_menu.js +32 -0
- package/dist/ui/components/user_account_menu.js.map +1 -0
- package/dist/ui/pages/channels.d.ts +46 -11
- package/dist/ui/pages/channels.js +119 -12
- package/dist/ui/pages/channels.js.map +1 -1
- package/dist/ui/pages/content_review_dm.d.ts +44 -0
- package/dist/ui/pages/content_review_dm.js +154 -0
- package/dist/ui/pages/content_review_dm.js.map +1 -0
- package/dist/ui/pages/drafts.d.ts +9 -25
- package/dist/ui/pages/drafts.js +25 -94
- package/dist/ui/pages/drafts.js.map +1 -1
- package/dist/ui/pages/index.d.ts +9 -5
- package/dist/ui/pages/index.js +10 -5
- package/dist/ui/pages/index.js.map +1 -1
- package/dist/ui/pages/landing_login.js.map +1 -1
- package/dist/ui/pages/login.d.ts +2 -2
- package/dist/ui/pages/login.js +1 -1
- package/dist/ui/pages/login.js.map +1 -1
- package/dist/ui/pages/reset_password.d.ts +2 -2
- package/dist/ui/pages/reset_password.js +1 -1
- package/dist/ui/pages/reset_password.js.map +1 -1
- package/dist/ui/pages/scheduled_posts.d.ts +23 -0
- package/dist/ui/pages/scheduled_posts.js +63 -0
- package/dist/ui/pages/scheduled_posts.js.map +1 -0
- package/dist/ui/pages/signup.d.ts +2 -2
- package/dist/ui/pages/signup.js +1 -1
- package/dist/ui/pages/signup.js.map +1 -1
- package/dist/ui/pages/system_console.d.ts +16 -14
- package/dist/ui/pages/system_console.js +10 -1
- package/dist/ui/pages/system_console.js.map +1 -1
- package/dist/ui/pages/threads.d.ts +13 -0
- package/dist/ui/pages/threads.js +44 -0
- package/dist/ui/pages/threads.js.map +1 -0
- package/dist/util.d.ts +17 -4
- package/dist/util.js +65 -5
- package/dist/util.js.map +1 -1
- package/dist/visual/index.js +9 -3
- package/dist/visual/index.js.map +1 -1
- package/dist/visual/percy.js.map +1 -1
- package/package.json +14 -15
- package/dist/ui/components/channels/scheduled_draft_menu.js +0 -23
- package/dist/ui/components/channels/scheduled_draft_menu.js.map +0 -1
- package/dist/ui/components/channels/search_popover.js.map +0 -1
- package/dist/ui/components/channels/settings/notification_settings.js.map +0 -1
- package/dist/ui/pages/scheduled_draft.d.ts +0 -38
- package/dist/ui/pages/scheduled_draft.js +0 -144
- package/dist/ui/pages/scheduled_draft.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system_console.js","sources":["../../../src/ui/pages/system_console.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Page} from '@playwright/test';\n\nimport {components} from '@/ui/components';\n\nexport default class SystemConsolePage {\n readonly page: Page;\n\n readonly sidebar;\n readonly navbar;\n\n /**\n * System Console -> User Management -> Users\n */\n readonly systemUsers;\n readonly systemUsersFilterPopover;\n readonly systemUsersRoleMenu;\n readonly systemUsersStatusMenu;\n readonly systemUsersDateRangeMenu;\n readonly systemUsersColumnToggleMenu;\n readonly systemUsersActionMenus;\n\n readonly mobileSecurity;\n\n readonly featureDiscovery;\n\n // modal\n readonly confirmModal;\n readonly exportModal;\n readonly saveChangesModal;\n\n constructor(page: Page) {\n this.page = page;\n\n // Areas of the page\n this.navbar = new components.SystemConsoleNavbar(page.locator('.backstage-navbar'));\n this.sidebar = new components.SystemConsoleSidebar(page.locator('.admin-sidebar'));\n\n // Sections and sub-sections\n this.systemUsers = new components.SystemUsers(page.getByTestId('systemUsersSection'));\n this.mobileSecurity = new components.SystemConsoleMobileSecurity(\n page.getByTestId('sysconsole_section_MobileSecuritySettings'),\n );\n this.featureDiscovery = new components.SystemConsoleFeatureDiscovery(page.getByTestId('featureDiscovery'));\n\n // Menus & Popovers\n this.systemUsersFilterPopover = new components.SystemUsersFilterPopover(\n page.locator('#systemUsersFilterPopover'),\n );\n this.systemUsersRoleMenu = new components.SystemUsersFilterMenu(page.locator('#DropdownInput_filterRole'));\n this.systemUsersStatusMenu = new components.SystemUsersFilterMenu(page.locator('#DropdownInput_filterStatus'));\n this.systemUsersColumnToggleMenu = new components.SystemUsersColumnToggleMenu(\n page.locator('#systemUsersColumnTogglerMenu'),\n );\n this.systemUsersDateRangeMenu = new components.SystemUsersFilterMenu(\n page.locator('#systemUsersDateRangeSelectorMenu'),\n );\n this.systemUsersActionMenus = Array.from(Array(10).keys()).map(\n (index) => new components.SystemUsersFilterMenu(page.locator(`#actionMenu-systemUsersTable-${index}`)),\n );\n\n this.confirmModal = new components.GenericConfirmModal(page.locator('#confirmModal'));\n this.exportModal = new components.GenericConfirmModal(page.getByRole('dialog', {name: 'Export user data'}));\n this.saveChangesModal = new components.SystemUsers(page.locator('div.modal-content'));\n }\n\n async toBeVisible() {\n await this.page.waitForLoadState('networkidle');\n\n await this.sidebar.toBeVisible();\n await this.navbar.toBeVisible();\n }\n\n async goto() {\n await this.page.goto('/admin_console');\n }\n\n async saveRoleChange() {\n await this.saveChangesModal.container.locator('button.btn-primary:has-text(\"Save\")').click();\n }\n\n async clickResetButton() {\n await this.saveChangesModal.container.locator('button.btn-primary:has-text(\"Reset\")').click();\n }\n}\n"],"names":["components","index"],"mappings":";;;;AAAA;AACA;AAMc,MAAO,iBAAiB,CAAA;AACzB,IAAA,IAAI;AAEJ,IAAA,OAAO;AACP,IAAA,MAAM;
|
|
1
|
+
{"version":3,"file":"system_console.js","sources":["../../../src/ui/pages/system_console.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Page} from '@playwright/test';\n\nimport {components} from '@/ui/components';\n\nexport default class SystemConsolePage {\n readonly page: Page;\n\n readonly sidebar;\n readonly navbar;\n\n // Site Configuration\n\n // System Console > Notifications\n readonly notifications;\n\n /**\n * System Console -> User Management -> Users\n */\n readonly systemUsers;\n readonly systemUsersFilterPopover;\n readonly systemUsersRoleMenu;\n readonly systemUsersStatusMenu;\n readonly systemUsersDateRangeMenu;\n readonly systemUsersColumnToggleMenu;\n readonly systemUsersActionMenus;\n\n readonly mobileSecurity;\n\n readonly featureDiscovery;\n\n // modal\n readonly confirmModal;\n readonly exportModal;\n readonly saveChangesModal;\n\n constructor(page: Page) {\n this.page = page;\n\n // Site Configuration\n // System Console > Notifications\n this.notifications = new components.SystemConsoleNotifications(\n page.getByTestId('sysconsole_section_notifications'),\n );\n\n // Areas of the page\n this.navbar = new components.SystemConsoleNavbar(page.locator('.backstage-navbar'));\n this.sidebar = new components.SystemConsoleSidebar(page.locator('.admin-sidebar'));\n\n // Sections and sub-sections\n this.systemUsers = new components.SystemUsers(page.getByTestId('systemUsersSection'));\n this.mobileSecurity = new components.SystemConsoleMobileSecurity(\n page.getByTestId('sysconsole_section_MobileSecuritySettings'),\n this.page,\n );\n this.featureDiscovery = new components.SystemConsoleFeatureDiscovery(page.getByTestId('featureDiscovery'));\n\n // Menus & Popovers\n this.systemUsersFilterPopover = new components.SystemUsersFilterPopover(\n page.locator('#systemUsersFilterPopover'),\n );\n this.systemUsersRoleMenu = new components.SystemUsersFilterMenu(page.locator('#DropdownInput_filterRole'));\n this.systemUsersStatusMenu = new components.SystemUsersFilterMenu(page.locator('#DropdownInput_filterStatus'));\n this.systemUsersColumnToggleMenu = new components.SystemUsersColumnToggleMenu(\n page.locator('#systemUsersColumnTogglerMenu'),\n );\n this.systemUsersDateRangeMenu = new components.SystemUsersFilterMenu(\n page.locator('#systemUsersDateRangeSelectorMenu'),\n );\n this.systemUsersActionMenus = Array.from(Array(10).keys()).map(\n (index) => new components.SystemUsersFilterMenu(page.locator(`#actionMenu-systemUsersTable-${index}`)),\n );\n\n this.confirmModal = new components.GenericConfirmModal(page.locator('#confirmModal'));\n this.exportModal = new components.GenericConfirmModal(page.getByRole('dialog', {name: 'Export user data'}));\n this.saveChangesModal = new components.SystemUsers(page.locator('div.modal-content'));\n }\n\n async toBeVisible() {\n await this.page.waitForLoadState('networkidle');\n\n await this.sidebar.toBeVisible();\n await this.navbar.toBeVisible();\n }\n\n async goto() {\n await this.page.goto('/admin_console');\n }\n\n async saveRoleChange() {\n await this.saveChangesModal.container.locator('button.btn-primary:has-text(\"Save\")').click();\n }\n\n async clickResetButton() {\n await this.saveChangesModal.container.locator('button.btn-primary:has-text(\"Reset\")').click();\n }\n\n async clickUpdateEmailButton() {\n await this.saveChangesModal.container.locator('button.btn-primary:has-text(\"Update\")').click();\n }\n}\n"],"names":["components","index"],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Page } from '@playwright/test';
|
|
2
|
+
import { ChannelsPost } from '@/ui/components';
|
|
3
|
+
export default class ThreadsPage {
|
|
4
|
+
readonly page: Page;
|
|
5
|
+
readonly threadsList: import("playwright-core").Locator;
|
|
6
|
+
readonly noThreadSelected: import("playwright-core").Locator;
|
|
7
|
+
constructor(page: Page);
|
|
8
|
+
goto(teamName: string): Promise<void>;
|
|
9
|
+
toBeVisible(): Promise<void>;
|
|
10
|
+
toHaveThreadSelected(): Promise<void>;
|
|
11
|
+
toNotHaveThreadSelected(): Promise<void>;
|
|
12
|
+
getLastPost(): Promise<ChannelsPost>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var test = require('@playwright/test');
|
|
4
|
+
require('node:path');
|
|
5
|
+
require('node:fs');
|
|
6
|
+
require('../../file.js');
|
|
7
|
+
require('async-wait-until');
|
|
8
|
+
var post = require('../components/channels/post.js');
|
|
9
|
+
|
|
10
|
+
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
11
|
+
// See LICENSE.txt for license information.
|
|
12
|
+
class ThreadsPage {
|
|
13
|
+
page;
|
|
14
|
+
threadsList;
|
|
15
|
+
noThreadSelected;
|
|
16
|
+
constructor(page) {
|
|
17
|
+
this.page = page;
|
|
18
|
+
this.threadsList = page.locator('#threads-list');
|
|
19
|
+
this.noThreadSelected = page.locator('.no-results__title', {
|
|
20
|
+
hasText: /Looks like you’re all caught up|Catch up on your threads/,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
async goto(teamName) {
|
|
24
|
+
await this.page.goto(`/${teamName}/threads`);
|
|
25
|
+
}
|
|
26
|
+
async toBeVisible() {
|
|
27
|
+
await test.expect(this.threadsList).toBeVisible();
|
|
28
|
+
}
|
|
29
|
+
async toHaveThreadSelected() {
|
|
30
|
+
await test.expect(this.noThreadSelected).not.toBeAttached();
|
|
31
|
+
}
|
|
32
|
+
async toNotHaveThreadSelected() {
|
|
33
|
+
await this.noThreadSelected.waitFor({ state: 'visible' });
|
|
34
|
+
await test.expect(this.noThreadSelected).toBeVisible();
|
|
35
|
+
}
|
|
36
|
+
async getLastPost() {
|
|
37
|
+
const lastPost = this.page.getByTestId('rhsPostView').last();
|
|
38
|
+
await lastPost.waitFor();
|
|
39
|
+
return new post(lastPost);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
module.exports = ThreadsPage;
|
|
44
|
+
//# sourceMappingURL=threads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threads.js","sources":["../../../src/ui/pages/threads.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 {ChannelsPost} from '@/ui/components';\n\nexport default class ThreadsPage {\n readonly page: Page;\n\n readonly threadsList;\n\n readonly noThreadSelected;\n\n constructor(page: Page) {\n this.page = page;\n\n this.threadsList = page.locator('#threads-list');\n\n this.noThreadSelected = page.locator('.no-results__title', {\n hasText: /Looks like you’re all caught up|Catch up on your threads/,\n });\n }\n\n async goto(teamName: string) {\n await this.page.goto(`/${teamName}/threads`);\n }\n\n async toBeVisible() {\n await expect(this.threadsList).toBeVisible();\n }\n\n async toHaveThreadSelected() {\n await expect(this.noThreadSelected).not.toBeAttached();\n }\n\n async toNotHaveThreadSelected() {\n await this.noThreadSelected.waitFor({state: 'visible'});\n await expect(this.noThreadSelected).toBeVisible();\n }\n\n async getLastPost() {\n const lastPost = this.page.getByTestId('rhsPostView').last();\n await lastPost.waitFor();\n return new ChannelsPost(lastPost);\n }\n}\n"],"names":["expect","ChannelsPost"],"mappings":";;;;;;;;;AAAA;AACA;AAMc,MAAO,WAAW,CAAA;AACnB,IAAA,IAAI;AAEJ,IAAA,WAAW;AAEX,IAAA,gBAAgB;AAEzB,IAAA,WAAA,CAAY,IAAU,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAEhB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;QAEhD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE;AACvD,YAAA,OAAO,EAAE,0DAA0D;AACtE,SAAA,CAAC;IACN;IAEA,MAAM,IAAI,CAAC,QAAgB,EAAA;QACvB,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAA,QAAA,CAAU,CAAC;IAChD;AAEA,IAAA,MAAM,WAAW,GAAA;QACb,MAAMA,WAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE;IAChD;AAEA,IAAA,MAAM,oBAAoB,GAAA;QACtB,MAAMA,WAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE;IAC1D;AAEA,IAAA,MAAM,uBAAuB,GAAA;AACzB,QAAA,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAC,KAAK,EAAE,SAAS,EAAC,CAAC;QACvD,MAAMA,WAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE;IACrD;AAEA,IAAA,MAAM,WAAW,GAAA;AACb,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE;AAC5D,QAAA,MAAM,QAAQ,CAAC,OAAO,EAAE;AACxB,QAAA,OAAO,IAAIC,IAAY,CAAC,QAAQ,CAAC;IACrC;AACH;;;;"}
|
package/dist/util.d.ts
CHANGED
|
@@ -14,12 +14,12 @@ export declare const duration: {
|
|
|
14
14
|
* @param {number} ms - duration in millisecond
|
|
15
15
|
* @return {Promise} promise with timeout
|
|
16
16
|
*/
|
|
17
|
-
export declare const wait: (ms?: number) => Promise<
|
|
17
|
+
export declare const wait: (ms?: number) => Promise<void>;
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
20
|
-
*
|
|
19
|
+
* Generate a random ID string.
|
|
20
|
+
* Because uuid is dynamically loaded, this is async.
|
|
21
21
|
*/
|
|
22
|
-
export declare function getRandomId(length?: number): string
|
|
22
|
+
export declare function getRandomId(length?: number): Promise<string>;
|
|
23
23
|
export declare const defaultTeam: {
|
|
24
24
|
name: string;
|
|
25
25
|
displayName: string;
|
|
@@ -27,3 +27,16 @@ export declare const defaultTeam: {
|
|
|
27
27
|
};
|
|
28
28
|
export declare const illegalRe: RegExp;
|
|
29
29
|
export declare const simpleEmailRe: RegExp;
|
|
30
|
+
export declare function hexToRgb(hex: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* Finds the playwright root directory by searching for playwright.config.ts.
|
|
33
|
+
* Searches in e2e-tests folder first, then e2e-tests/playwright folder.
|
|
34
|
+
* @returns The path to the playwright root directory or null if not found.
|
|
35
|
+
*/
|
|
36
|
+
export declare function findPlaywrightRoot(): string | null;
|
|
37
|
+
/**
|
|
38
|
+
* Resolves the directory path.
|
|
39
|
+
* Tries to find directory at the playwright root, falls back to current working directory.
|
|
40
|
+
* @returns The resolved directory path.
|
|
41
|
+
*/
|
|
42
|
+
export declare function resolvePlaywrightPath(dir: string): string;
|
package/dist/util.js
CHANGED
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var path = require('node:path');
|
|
4
|
+
var fs = require('node:fs');
|
|
4
5
|
|
|
5
6
|
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
6
7
|
// See LICENSE.txt for license information.
|
|
8
|
+
// Lazy-load the ESM-only uuid package dynamically
|
|
9
|
+
let uuidv4 = null;
|
|
10
|
+
async function loadUuid() {
|
|
11
|
+
if (!uuidv4) {
|
|
12
|
+
const { v4 } = await import('uuid');
|
|
13
|
+
uuidv4 = v4;
|
|
14
|
+
}
|
|
15
|
+
return uuidv4;
|
|
16
|
+
}
|
|
7
17
|
const second = 1000;
|
|
8
18
|
const minute = 60 * 1000;
|
|
9
19
|
const duration = {
|
|
@@ -26,12 +36,13 @@ const wait = async (ms = 0) => {
|
|
|
26
36
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
27
37
|
};
|
|
28
38
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
39
|
+
* Generate a random ID string.
|
|
40
|
+
* Because uuid is dynamically loaded, this is async.
|
|
31
41
|
*/
|
|
32
|
-
function getRandomId(length = 7) {
|
|
42
|
+
async function getRandomId(length = 7) {
|
|
33
43
|
const MAX_SUBSTRING_INDEX = 27;
|
|
34
|
-
|
|
44
|
+
const v4 = await loadUuid();
|
|
45
|
+
return v4()
|
|
35
46
|
.replace(/-/g, '')
|
|
36
47
|
.substring(MAX_SUBSTRING_INDEX - length, MAX_SUBSTRING_INDEX);
|
|
37
48
|
}
|
|
@@ -41,11 +52,60 @@ function getRandomId(length = 7) {
|
|
|
41
52
|
const defaultTeam = { name: 'ad-1', displayName: 'eligendi'};
|
|
42
53
|
const illegalRe = /[/?<>\\:*|":&();]/g;
|
|
43
54
|
const simpleEmailRe = /\S+@\S+\.\S+/;
|
|
55
|
+
function hexToRgb(hex) {
|
|
56
|
+
hex = hex.replace(/^#/, '');
|
|
57
|
+
const r = parseInt(hex.substring(0, 2), 16);
|
|
58
|
+
const g = parseInt(hex.substring(2, 4), 16);
|
|
59
|
+
const b = parseInt(hex.substring(4, 6), 16);
|
|
60
|
+
return `rgb(${r}, ${g}, ${b})`;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Finds the playwright root directory by searching for playwright.config.ts.
|
|
64
|
+
* Searches in e2e-tests folder first, then e2e-tests/playwright folder.
|
|
65
|
+
* @returns The path to the playwright root directory or null if not found.
|
|
66
|
+
*/
|
|
67
|
+
function findPlaywrightRoot() {
|
|
68
|
+
let currentDir = process.cwd();
|
|
69
|
+
const root = path.parse(currentDir).root;
|
|
70
|
+
// Walk up from current directory
|
|
71
|
+
while (currentDir !== root) {
|
|
72
|
+
// First, check if playwright.config.ts exists in e2e-tests folder
|
|
73
|
+
const e2eTestsPath = path.join(currentDir, 'e2e-tests');
|
|
74
|
+
const e2eTestsConfigPath = path.join(e2eTestsPath, 'playwright.config.ts');
|
|
75
|
+
if (fs.existsSync(e2eTestsConfigPath)) {
|
|
76
|
+
return e2eTestsPath;
|
|
77
|
+
}
|
|
78
|
+
// Then, check if playwright.config.ts exists in e2e-tests/playwright folder
|
|
79
|
+
const e2ePlaywrightPath = path.join(currentDir, 'e2e-tests', 'playwright');
|
|
80
|
+
const e2ePlaywrightConfigPath = path.join(e2ePlaywrightPath, 'playwright.config.ts');
|
|
81
|
+
if (fs.existsSync(e2ePlaywrightConfigPath)) {
|
|
82
|
+
return e2ePlaywrightPath;
|
|
83
|
+
}
|
|
84
|
+
currentDir = path.dirname(currentDir);
|
|
85
|
+
}
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Resolves the directory path.
|
|
90
|
+
* Tries to find directory at the playwright root, falls back to current working directory.
|
|
91
|
+
* @returns The resolved directory path.
|
|
92
|
+
*/
|
|
93
|
+
function resolvePlaywrightPath(dir) {
|
|
94
|
+
const playwrightRoot = findPlaywrightRoot();
|
|
95
|
+
if (playwrightRoot) {
|
|
96
|
+
return path.join(playwrightRoot, dir);
|
|
97
|
+
}
|
|
98
|
+
// Fall back to current working directory
|
|
99
|
+
return path.join(process.cwd(), dir);
|
|
100
|
+
}
|
|
44
101
|
|
|
45
102
|
exports.defaultTeam = defaultTeam;
|
|
46
103
|
exports.duration = duration;
|
|
104
|
+
exports.findPlaywrightRoot = findPlaywrightRoot;
|
|
47
105
|
exports.getRandomId = getRandomId;
|
|
106
|
+
exports.hexToRgb = hexToRgb;
|
|
48
107
|
exports.illegalRe = illegalRe;
|
|
108
|
+
exports.resolvePlaywrightPath = resolvePlaywrightPath;
|
|
49
109
|
exports.simpleEmailRe = simpleEmailRe;
|
|
50
110
|
exports.wait = wait;
|
|
51
111
|
//# sourceMappingURL=util.js.map
|
package/dist/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sources":["../src/util.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {
|
|
1
|
+
{"version":3,"file":"util.js","sources":["../src/util.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport path from 'node:path';\nimport fs from 'node:fs';\n\n// Lazy-load the ESM-only uuid package dynamically\nlet uuidv4: (() => string) | null = null;\n\nasync function loadUuid() {\n if (!uuidv4) {\n const {v4} = await import('uuid');\n uuidv4 = v4;\n }\n return uuidv4!;\n}\nconst second = 1000;\nconst minute = 60 * 1000;\n\nexport const duration = {\n half_sec: second / 2,\n one_sec: second,\n two_sec: second * 2,\n four_sec: second * 4,\n ten_sec: second * 10,\n half_min: minute / 2,\n one_min: minute,\n two_min: minute * 2,\n four_min: minute * 4,\n};\n\n/**\n * Explicit `wait` should not normally used but made available for special cases.\n * @param {number} ms - duration in millisecond\n * @return {Promise} promise with timeout\n */\nexport const wait = async (ms = 0): Promise<void> => {\n return new Promise((resolve) => setTimeout(resolve, ms));\n};\n\n/**\n * Generate a random ID string.\n * Because uuid is dynamically loaded, this is async.\n */\nexport async function getRandomId(length = 7): Promise<string> {\n const MAX_SUBSTRING_INDEX = 27;\n\n const v4 = await loadUuid();\n return v4()\n .replace(/-/g, '')\n .substring(MAX_SUBSTRING_INDEX - length, MAX_SUBSTRING_INDEX);\n}\n\n// Default team is meant for sysadmin's primary team,\n// selected for compatibility with existing local development.\n// It should not be used for testing.\nexport const defaultTeam = {name: 'ad-1', displayName: 'eligendi', type: 'O'};\n\nexport const illegalRe = /[/?<>\\\\:*|\":&();]/g;\nexport const simpleEmailRe = /\\S+@\\S+\\.\\S+/;\n\nexport function hexToRgb(hex: string): string {\n hex = hex.replace(/^#/, '');\n const r = parseInt(hex.substring(0, 2), 16);\n const g = parseInt(hex.substring(2, 4), 16);\n const b = parseInt(hex.substring(4, 6), 16);\n return `rgb(${r}, ${g}, ${b})`;\n}\n\n/**\n * Finds the playwright root directory by searching for playwright.config.ts.\n * Searches in e2e-tests folder first, then e2e-tests/playwright folder.\n * @returns The path to the playwright root directory or null if not found.\n */\nexport function findPlaywrightRoot(): string | null {\n let currentDir = process.cwd();\n const root = path.parse(currentDir).root;\n\n // Walk up from current directory\n while (currentDir !== root) {\n // First, check if playwright.config.ts exists in e2e-tests folder\n const e2eTestsPath = path.join(currentDir, 'e2e-tests');\n const e2eTestsConfigPath = path.join(e2eTestsPath, 'playwright.config.ts');\n if (fs.existsSync(e2eTestsConfigPath)) {\n return e2eTestsPath;\n }\n\n // Then, check if playwright.config.ts exists in e2e-tests/playwright folder\n const e2ePlaywrightPath = path.join(currentDir, 'e2e-tests', 'playwright');\n const e2ePlaywrightConfigPath = path.join(e2ePlaywrightPath, 'playwright.config.ts');\n if (fs.existsSync(e2ePlaywrightConfigPath)) {\n return e2ePlaywrightPath;\n }\n\n currentDir = path.dirname(currentDir);\n }\n\n return null;\n}\n\n/**\n * Resolves the directory path.\n * Tries to find directory at the playwright root, falls back to current working directory.\n * @returns The resolved directory path.\n */\nexport function resolvePlaywrightPath(dir: string): string {\n const playwrightRoot = findPlaywrightRoot();\n if (playwrightRoot) {\n return path.join(playwrightRoot, dir);\n }\n // Fall back to current working directory\n return path.join(process.cwd(), dir);\n}\n"],"names":[],"mappings":"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"}
|
package/dist/visual/index.js
CHANGED
|
@@ -18,12 +18,18 @@ async function matchSnapshot(testInfo, testArgs, options = {}) {
|
|
|
18
18
|
if (test_config.testConfig.snapshotEnabled || test_config.testConfig.percyEnabled) {
|
|
19
19
|
await testArgs.page.waitForLoadState('networkidle');
|
|
20
20
|
await testArgs.page.waitForLoadState('domcontentloaded');
|
|
21
|
-
await util.wait(util.duration.
|
|
21
|
+
await util.wait(util.duration.one_sec);
|
|
22
22
|
}
|
|
23
23
|
if (test_config.testConfig.snapshotEnabled) {
|
|
24
|
-
// Visual test with built-in snapshot
|
|
25
24
|
const filename = testInfo.title.trim().replace(util.illegalRe, '').replace(/\s/g, '-').trim().toLowerCase();
|
|
26
|
-
|
|
25
|
+
// Visual test with built-in snapshot
|
|
26
|
+
// If locator is provided, take screenshot of the locator instead of the full page
|
|
27
|
+
if (testArgs.locator) {
|
|
28
|
+
await test.expect(testArgs.locator).toHaveScreenshot(`${filename}.png`, { ...options });
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
await test.expect(testArgs.page).toHaveScreenshot(`${filename}.png`, { fullPage: true, ...options });
|
|
32
|
+
}
|
|
27
33
|
}
|
|
28
34
|
if (test_config.testConfig.percyEnabled) {
|
|
29
35
|
// Used to easily identify the screenshot when viewing from third-party service provider.
|
package/dist/visual/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/visual/index.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport os from 'node:os';\n\nimport chalk from 'chalk';\nimport {TestInfo, expect} from '@playwright/test';\n\nimport snapshotWithPercy from './percy';\n\nimport {duration, illegalRe, wait} from '@/util';\nimport {testConfig} from '@/test_config';\nimport {ScreenshotOptions, TestArgs} from '@/types';\n\nexport async function matchSnapshot(testInfo: TestInfo, testArgs: TestArgs, options: ScreenshotOptions = {}) {\n if (os.platform() !== 'linux') {\n // eslint-disable-next-line no-console\n console.log(\n chalk.yellow(\n `^ Warning: No visual test performed. Run in Linux or Playwright docker image to match snapshot.`,\n ),\n );\n return;\n }\n\n if (testConfig.snapshotEnabled || testConfig.percyEnabled) {\n await testArgs.page.waitForLoadState('networkidle');\n await testArgs.page.waitForLoadState('domcontentloaded');\n await wait(duration.
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/visual/index.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport os from 'node:os';\n\nimport chalk from 'chalk';\nimport {TestInfo, expect} from '@playwright/test';\n\nimport snapshotWithPercy from './percy';\n\nimport {duration, illegalRe, wait} from '@/util';\nimport {testConfig} from '@/test_config';\nimport {ScreenshotOptions, TestArgs} from '@/types';\n\nexport async function matchSnapshot(testInfo: TestInfo, testArgs: TestArgs, options: ScreenshotOptions = {}) {\n if (os.platform() !== 'linux') {\n // eslint-disable-next-line no-console\n console.log(\n chalk.yellow(\n `^ Warning: No visual test performed. Run in Linux or Playwright docker image to match snapshot.`,\n ),\n );\n return;\n }\n\n if (testConfig.snapshotEnabled || testConfig.percyEnabled) {\n await testArgs.page.waitForLoadState('networkidle');\n await testArgs.page.waitForLoadState('domcontentloaded');\n await wait(duration.one_sec);\n }\n\n if (testConfig.snapshotEnabled) {\n const filename = testInfo.title.trim().replace(illegalRe, '').replace(/\\s/g, '-').trim().toLowerCase();\n\n // Visual test with built-in snapshot\n // If locator is provided, take screenshot of the locator instead of the full page\n if (testArgs.locator) {\n await expect(testArgs.locator).toHaveScreenshot(`${filename}.png`, {...options});\n } else {\n await expect(testArgs.page).toHaveScreenshot(`${filename}.png`, {fullPage: true, ...options});\n }\n }\n\n if (testConfig.percyEnabled) {\n // Used to easily identify the screenshot when viewing from third-party service provider.\n const name = `[${testInfo.project.name}, ${testArgs?.viewport?.width}px] > ${testInfo.file} > ${testInfo.title}`;\n\n // Visual test with Percy\n await snapshotWithPercy(name, testArgs);\n }\n}\n"],"names":["testConfig","wait","duration","illegalRe","expect","snapshotWithPercy"],"mappings":";;;;;;;;;AAAA;AACA;AAaO,eAAe,aAAa,CAAC,QAAkB,EAAE,QAAkB,EAAE,OAAA,GAA6B,EAAE,EAAA;AACvG,IAAA,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,EAAE;;QAE3B,OAAO,CAAC,GAAG,CACP,KAAK,CAAC,MAAM,CACR,CAAA,+FAAA,CAAiG,CACpG,CACJ;QACD;IACJ;IAEA,IAAIA,sBAAU,CAAC,eAAe,IAAIA,sBAAU,CAAC,YAAY,EAAE;QACvD,MAAM,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;QACnD,MAAM,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC;AACxD,QAAA,MAAMC,SAAI,CAACC,aAAQ,CAAC,OAAO,CAAC;IAChC;AAEA,IAAA,IAAIF,sBAAU,CAAC,eAAe,EAAE;AAC5B,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAACG,cAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;;;AAItG,QAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AAClB,YAAA,MAAMC,WAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAA,EAAG,QAAQ,MAAM,EAAE,EAAC,GAAG,OAAO,EAAC,CAAC;QACpF;aAAO;YACH,MAAMA,WAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,CAAA,EAAG,QAAQ,MAAM,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,OAAO,EAAC,CAAC;QACjG;IACJ;AAEA,IAAA,IAAIJ,sBAAU,CAAC,YAAY,EAAE;;QAEzB,MAAM,IAAI,GAAG,CAAA,CAAA,EAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAA,EAAA,EAAK,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAA,MAAA,EAAS,QAAQ,CAAC,IAAI,MAAM,QAAQ,CAAC,KAAK,CAAA,CAAE;;AAGhH,QAAA,MAAMK,KAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC;IAC3C;AACJ;;;;"}
|
package/dist/visual/percy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"percy.js","sources":["../../src/visual/percy.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport percySnapshot from '@percy/playwright';\n\nimport {testConfig} from '@/test_config';\nimport {TestArgs} from '@/types';\n\nexport default async function snapshotWithPercy(name: string, testArgs: TestArgs) {\n if (testArgs.browserName === 'chromium' && testConfig.percyEnabled && testArgs.viewport) {\n const {page, viewport} = testArgs;\n\n try {\n await percySnapshot(page, name, {widths: [viewport.width], minHeight: viewport.height});\n } catch (error) {\n // log an error for debugging\n // eslint-disable-next-line no-console\n console.log(`${error}\\nIn addition, check if token is properly set by \"export PERCY_TOKEN=<change_me>\"`);\n }\n }\n}\n"],"names":["testConfig"],"mappings":";;;;;AAAA;AACA;AAOe,eAAe,iBAAiB,CAAC,IAAY,EAAE,QAAkB,EAAA;AAC5E,IAAA,IAAI,QAAQ,CAAC,WAAW,KAAK,UAAU,IAAIA,sBAAU,CAAC,YAAY,IAAI,QAAQ,CAAC,QAAQ,EAAE;AACrF,QAAA,MAAM,EAAC,IAAI,EAAE,QAAQ,EAAC,GAAG,QAAQ;AAEjC,QAAA,IAAI;YACA,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,EAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAC,CAAC
|
|
1
|
+
{"version":3,"file":"percy.js","sources":["../../src/visual/percy.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport percySnapshot from '@percy/playwright';\n\nimport {testConfig} from '@/test_config';\nimport {TestArgs} from '@/types';\n\nexport default async function snapshotWithPercy(name: string, testArgs: TestArgs) {\n if (testArgs.browserName === 'chromium' && testConfig.percyEnabled && testArgs.viewport) {\n const {page, viewport} = testArgs;\n\n try {\n await percySnapshot(page, name, {widths: [viewport.width], minHeight: viewport.height});\n } catch (error) {\n // log an error for debugging\n // eslint-disable-next-line no-console\n console.log(`${error}\\nIn addition, check if token is properly set by \"export PERCY_TOKEN=<change_me>\"`);\n }\n }\n}\n"],"names":["testConfig"],"mappings":";;;;;AAAA;AACA;AAOe,eAAe,iBAAiB,CAAC,IAAY,EAAE,QAAkB,EAAA;AAC5E,IAAA,IAAI,QAAQ,CAAC,WAAW,KAAK,UAAU,IAAIA,sBAAU,CAAC,YAAY,IAAI,QAAQ,CAAC,QAAQ,EAAE;AACrF,QAAA,MAAM,EAAC,IAAI,EAAE,QAAQ,EAAC,GAAG,QAAQ;AAEjC,QAAA,IAAI;YACA,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,EAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAC,CAAC;QAC3F;QAAE,OAAO,KAAK,EAAE;;;AAGZ,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA,iFAAA,CAAmF,CAAC;QAC5G;IACJ;AACJ;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mattermost/playwright-lib",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "11.3.0-0",
|
|
4
4
|
"description": "A comprehensive end-to-end testing library for Mattermost web, desktop and plugin applications using Playwright",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -42,27 +42,26 @@
|
|
|
42
42
|
"access": "public"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@axe-core/playwright": "4.
|
|
45
|
+
"@axe-core/playwright": "4.11.0",
|
|
46
46
|
"@mattermost/client": "file:../../../webapp/platform/client",
|
|
47
47
|
"@mattermost/types": "file:../../../webapp/platform/types",
|
|
48
|
-
"@percy/cli": "1.
|
|
49
|
-
"@percy/playwright": "1.0.
|
|
50
|
-
"async-wait-until": "2.0.
|
|
51
|
-
"axe-core": "4.
|
|
48
|
+
"@percy/cli": "1.31.5",
|
|
49
|
+
"@percy/playwright": "1.0.10",
|
|
50
|
+
"async-wait-until": "2.0.31",
|
|
51
|
+
"axe-core": "4.11.0",
|
|
52
52
|
"deepmerge": "4.3.1",
|
|
53
|
-
"dotenv": "
|
|
54
|
-
"mime-types": "3.0.
|
|
55
|
-
"uuid": "
|
|
53
|
+
"dotenv": "17.2.3",
|
|
54
|
+
"mime-types": "3.0.2",
|
|
55
|
+
"uuid": "13.0.0"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
|
-
"@rollup/plugin-typescript": "12.
|
|
59
|
-
"@types/mime-types": "
|
|
60
|
-
"@types/node": "
|
|
61
|
-
"
|
|
62
|
-
"rollup": "4.38.0",
|
|
58
|
+
"@rollup/plugin-typescript": "12.3.0",
|
|
59
|
+
"@types/mime-types": "3.0.1",
|
|
60
|
+
"@types/node": "25.0.3",
|
|
61
|
+
"rollup": "4.53.5",
|
|
63
62
|
"rollup-plugin-copy": "3.5.0"
|
|
64
63
|
},
|
|
65
64
|
"peerDependencies": {
|
|
66
|
-
"@playwright/test": "1.
|
|
65
|
+
"@playwright/test": "1.57.0"
|
|
67
66
|
}
|
|
68
67
|
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var test = require('@playwright/test');
|
|
4
|
-
|
|
5
|
-
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
6
|
-
// See LICENSE.txt for license information.
|
|
7
|
-
class ScheduledDraftMenu {
|
|
8
|
-
container;
|
|
9
|
-
scheduleDraftMessageCustomTimeOption;
|
|
10
|
-
constructor(container) {
|
|
11
|
-
this.container = container;
|
|
12
|
-
this.scheduleDraftMessageCustomTimeOption = container.getByText('Choose a custom time');
|
|
13
|
-
}
|
|
14
|
-
async toBeVisible() {
|
|
15
|
-
await test.expect(this.container).toBeVisible();
|
|
16
|
-
}
|
|
17
|
-
async selectCustomTime() {
|
|
18
|
-
await this.scheduleDraftMessageCustomTimeOption.click();
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
module.exports = ScheduledDraftMenu;
|
|
23
|
-
//# sourceMappingURL=scheduled_draft_menu.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scheduled_draft_menu.js","sources":["../../../../src/ui/components/channels/scheduled_draft_menu.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Locator, expect} from '@playwright/test';\n\nexport default class ScheduledDraftMenu {\n readonly container: Locator;\n\n readonly scheduleDraftMessageCustomTimeOption;\n\n constructor(container: Locator) {\n this.container = container;\n\n this.scheduleDraftMessageCustomTimeOption = container.getByText('Choose a custom time');\n }\n\n async toBeVisible() {\n await expect(this.container).toBeVisible();\n }\n\n async selectCustomTime() {\n await this.scheduleDraftMessageCustomTimeOption.click();\n }\n}\n"],"names":["expect"],"mappings":";;;;AAAA;AACA;AAIc,MAAO,kBAAkB,CAAA;AAC1B,IAAA,SAAS;AAET,IAAA,oCAAoC;AAE7C,IAAA,WAAA,CAAY,SAAkB,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;QAE1B,IAAI,CAAC,oCAAoC,GAAG,SAAS,CAAC,SAAS,CAAC,sBAAsB,CAAC;;AAG3F,IAAA,MAAM,WAAW,GAAA;QACb,MAAMA,WAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;;AAG9C,IAAA,MAAM,gBAAgB,GAAA;AAClB,QAAA,MAAM,IAAI,CAAC,oCAAoC,CAAC,KAAK,EAAE;;AAE9D;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search_popover.js","sources":["../../../../src/ui/components/channels/search_popover.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Locator, expect} from '@playwright/test';\n\nexport default class SearchPopover {\n readonly container: Locator;\n\n readonly messagesButton;\n readonly filesButton;\n readonly searchInput;\n readonly searchBoxClose;\n readonly selectedSuggestion;\n readonly searchHints;\n readonly clearButton;\n\n constructor(container: Locator) {\n this.container = container;\n\n this.messagesButton = container.getByRole('button', {name: 'Messages'});\n this.filesButton = container.getByRole('button', {name: 'Files'});\n this.searchInput = container.getByLabel('Search messages');\n this.searchBoxClose = container.getByTestId('searchBoxClose');\n this.selectedSuggestion = container.locator('.suggestion--selected').locator('.suggestion-list__main');\n this.searchHints = container.locator('#searchHints');\n this.clearButton = container.locator('.input-clear-x');\n }\n\n // clearIfPossible clears the search input if the clear button is visible. Returns true if the clear button was clicked.\n async clearIfPossible() {\n if (await this.clearButton.isVisible()) {\n await this.clearButton.click();\n return true;\n }\n return false;\n }\n\n async toBeVisible() {\n await expect(this.container).toBeVisible();\n }\n\n getSelectedSuggestion() {\n return this.searchHints.locator('.suggestion--selected');\n }\n}\n"],"names":["expect"],"mappings":";;;;AAAA;AACA;AAIc,MAAO,aAAa,CAAA;AACrB,IAAA,SAAS;AAET,IAAA,cAAc;AACd,IAAA,WAAW;AACX,IAAA,WAAW;AACX,IAAA,cAAc;AACd,IAAA,kBAAkB;AAClB,IAAA,WAAW;AACX,IAAA,WAAW;AAEpB,IAAA,WAAA,CAAY,SAAkB,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAE1B,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAC,IAAI,EAAE,UAAU,EAAC,CAAC;AACvE,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAC,IAAI,EAAE,OAAO,EAAC,CAAC;QACjE,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAC1D,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,WAAW,CAAC,gBAAgB,CAAC;AAC7D,QAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC;QACtG,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC;QACpD,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,gBAAgB,CAAC;;;AAI1D,IAAA,MAAM,eAAe,GAAA;QACjB,IAAI,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE;AACpC,YAAA,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AAC9B,YAAA,OAAO,IAAI;;AAEf,QAAA,OAAO,KAAK;;AAGhB,IAAA,MAAM,WAAW,GAAA;QACb,MAAMA,WAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;;IAG9C,qBAAqB,GAAA;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,uBAAuB,CAAC;;AAE/D;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"notification_settings.js","sources":["../../../../../src/ui/components/channels/settings/notification_settings.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Locator, expect} from '@playwright/test';\n\ntype NotificationSettingsSection = 'keysWithHighlight' | 'keysWithNotification';\n\nexport default class NotificationsSettings {\n readonly container: Locator;\n readonly keysWithHighlightDesc: Locator;\n\n constructor(container: Locator) {\n this.container = container;\n this.keysWithHighlightDesc = container.locator('#keywordsAndHighlightDesc');\n }\n\n async toBeVisible() {\n await expect(this.container).toBeVisible();\n }\n\n async expandSection(section: NotificationSettingsSection) {\n if (section === 'keysWithHighlight') {\n await this.container.getByText('Keywords That Get Highlighted (without notifications)').click();\n await this.verifySectionIsExpanded('keysWithHighlight');\n }\n }\n\n async verifySectionIsExpanded(section: NotificationSettingsSection) {\n await expect(this.container.locator(`#${section}Edit`)).not.toBeVisible();\n\n if (section === 'keysWithHighlight') {\n await expect(\n this.container.getByText(\n 'Enter non case-sensitive keywords, press Tab or use commas to separate them:',\n ),\n ).toBeVisible();\n await expect(\n this.container.getByText(\n 'These keywords will be shown to you with a highlight when anyone sends a message that includes them.',\n ),\n ).toBeVisible();\n }\n }\n\n async getKeywordsInput() {\n await expect(this.container.locator('input')).toBeVisible();\n return this.container.locator('input');\n }\n\n async save() {\n await expect(this.container.getByText('Save')).toBeVisible();\n await this.container.getByText('Save').click();\n }\n}\n"],"names":["expect"],"mappings":";;;;AAAA;AACA;AAMc,MAAO,qBAAqB,CAAA;AAC7B,IAAA,SAAS;AACT,IAAA,qBAAqB;AAE9B,IAAA,WAAA,CAAY,SAAkB,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;QAC1B,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC,OAAO,CAAC,2BAA2B,CAAC;;AAG/E,IAAA,MAAM,WAAW,GAAA;QACb,MAAMA,WAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;;IAG9C,MAAM,aAAa,CAAC,OAAoC,EAAA;AACpD,QAAA,IAAI,OAAO,KAAK,mBAAmB,EAAE;YACjC,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,uDAAuD,CAAC,CAAC,KAAK,EAAE;AAC/F,YAAA,MAAM,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,CAAC;;;IAI/D,MAAM,uBAAuB,CAAC,OAAoC,EAAA;AAC9D,QAAA,MAAMA,WAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,IAAA,CAAM,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE;AAEzE,QAAA,IAAI,OAAO,KAAK,mBAAmB,EAAE;AACjC,YAAA,MAAMA,WAAM,CACR,IAAI,CAAC,SAAS,CAAC,SAAS,CACpB,8EAA8E,CACjF,CACJ,CAAC,WAAW,EAAE;AACf,YAAA,MAAMA,WAAM,CACR,IAAI,CAAC,SAAS,CAAC,SAAS,CACpB,sGAAsG,CACzG,CACJ,CAAC,WAAW,EAAE;;;AAIvB,IAAA,MAAM,gBAAgB,GAAA;AAClB,QAAA,MAAMA,WAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE;QAC3D,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC;;AAG1C,IAAA,MAAM,IAAI,GAAA;AACN,QAAA,MAAMA,WAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE;QAC5D,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE;;AAErD;;;;"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { Page } from '@playwright/test';
|
|
2
|
-
export default class ScheduledDraftPage {
|
|
3
|
-
readonly page: Page;
|
|
4
|
-
readonly badgeCountOnScheduledTab: import("playwright-core").Locator;
|
|
5
|
-
readonly confirmbutton: import("playwright-core").Locator;
|
|
6
|
-
readonly copyIcon: import("playwright-core").Locator;
|
|
7
|
-
readonly copyIconToolTip: import("playwright-core").Locator;
|
|
8
|
-
readonly datePattern: RegExp;
|
|
9
|
-
readonly deleteIcon: import("playwright-core").Locator;
|
|
10
|
-
readonly deleteIconToolTip: import("playwright-core").Locator;
|
|
11
|
-
readonly noscheduledDraftIcon: import("playwright-core").Locator;
|
|
12
|
-
readonly rescheduleIcon: import("playwright-core").Locator;
|
|
13
|
-
readonly rescheduleIconToolTip: import("playwright-core").Locator;
|
|
14
|
-
readonly scheduledDraftBody: import("playwright-core").Locator;
|
|
15
|
-
readonly scheduledDraftPageInfo: import("playwright-core").Locator;
|
|
16
|
-
readonly scheduledDraftPanel: (messageContent: string) => import("playwright-core").Locator;
|
|
17
|
-
readonly scheduledDraftSendNowButton: import("playwright-core").Locator;
|
|
18
|
-
readonly scheduledDraftSendNowButtonToolTip: import("playwright-core").Locator;
|
|
19
|
-
readonly editIcon: import("playwright-core").Locator;
|
|
20
|
-
readonly editBox: import("playwright-core").Locator;
|
|
21
|
-
readonly editorSaveButton: import("playwright-core").Locator;
|
|
22
|
-
constructor(page: Page);
|
|
23
|
-
toBeVisible(): Promise<void>;
|
|
24
|
-
assertBadgeCountOnTab(badgeCount: string): Promise<void>;
|
|
25
|
-
assertscheduledDraftBody(draftMessage: string): Promise<void>;
|
|
26
|
-
verifyOnHoverActionItems(messageContent: string): Promise<void>;
|
|
27
|
-
verifyDeleteIcon(): Promise<void>;
|
|
28
|
-
verifyCopyIcon(): Promise<void>;
|
|
29
|
-
verifyRescheduleIcon(): Promise<void>;
|
|
30
|
-
verifySendNowIcon(): Promise<void>;
|
|
31
|
-
getTimeStampOfMessage(messageContent: string): Promise<string>;
|
|
32
|
-
openRescheduleModal(messageContent: string): Promise<void>;
|
|
33
|
-
deleteScheduledMessage(messageContent: string): Promise<void>;
|
|
34
|
-
sendScheduledMessage(messageContent: string): Promise<void>;
|
|
35
|
-
goTo(teamName: string): Promise<void>;
|
|
36
|
-
editText(newText: string): Promise<void>;
|
|
37
|
-
copyScheduledMessage(draftMessage: string): Promise<void>;
|
|
38
|
-
}
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var test = require('@playwright/test');
|
|
4
|
-
|
|
5
|
-
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
6
|
-
// See LICENSE.txt for license information.
|
|
7
|
-
class ScheduledDraftPage {
|
|
8
|
-
page;
|
|
9
|
-
badgeCountOnScheduledTab;
|
|
10
|
-
confirmbutton;
|
|
11
|
-
copyIcon;
|
|
12
|
-
copyIconToolTip;
|
|
13
|
-
datePattern;
|
|
14
|
-
deleteIcon;
|
|
15
|
-
deleteIconToolTip;
|
|
16
|
-
noscheduledDraftIcon;
|
|
17
|
-
rescheduleIcon;
|
|
18
|
-
rescheduleIconToolTip;
|
|
19
|
-
scheduledDraftBody;
|
|
20
|
-
scheduledDraftPageInfo;
|
|
21
|
-
scheduledDraftPanel;
|
|
22
|
-
scheduledDraftSendNowButton;
|
|
23
|
-
scheduledDraftSendNowButtonToolTip;
|
|
24
|
-
editIcon;
|
|
25
|
-
editBox;
|
|
26
|
-
editorSaveButton;
|
|
27
|
-
constructor(page) {
|
|
28
|
-
this.page = page;
|
|
29
|
-
this.datePattern =
|
|
30
|
-
/(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/;
|
|
31
|
-
this.scheduledDraftBody = page.locator('div.post__body');
|
|
32
|
-
this.badgeCountOnScheduledTab = page.locator('a#draft_tabs-tab-1 div.drafts_tab_title span.MuiBadge-badge');
|
|
33
|
-
this.scheduledDraftPageInfo = page.locator('.PanelHeader__info');
|
|
34
|
-
this.scheduledDraftPanel = (messageContent) => page.locator(`article.Panel:has(div.post__body:has-text("${messageContent}"))`);
|
|
35
|
-
this.deleteIcon = page.locator('#draft_icon-trash-can-outline_delete');
|
|
36
|
-
this.deleteIconToolTip = page.locator('text=Delete scheduled post');
|
|
37
|
-
this.copyIcon = page.locator('#draft_icon-content-copy_copy_text');
|
|
38
|
-
this.copyIconToolTip = page.locator('text=Copy text');
|
|
39
|
-
this.rescheduleIcon = page.locator('#draft_icon-clock-send-outline_reschedule');
|
|
40
|
-
this.rescheduleIconToolTip = page.locator('text=Reschedule post');
|
|
41
|
-
this.noscheduledDraftIcon = page.locator('.no-results__wrapper');
|
|
42
|
-
this.scheduledDraftSendNowButton = page.locator('#draft_icon-send-outline_sendNow');
|
|
43
|
-
this.scheduledDraftSendNowButtonToolTip = page.locator('text=Send now');
|
|
44
|
-
this.confirmbutton = this.page.locator('button.btn-primary');
|
|
45
|
-
this.editIcon = page.locator('#draft_icon-pencil-outline_edit');
|
|
46
|
-
this.editBox = page.locator('textarea#edit_textbox');
|
|
47
|
-
this.editorSaveButton = page.locator('button.save');
|
|
48
|
-
}
|
|
49
|
-
async toBeVisible() {
|
|
50
|
-
await this.page.waitForLoadState('networkidle');
|
|
51
|
-
await test.expect(this.page).toHaveURL(/.*scheduled_posts/);
|
|
52
|
-
}
|
|
53
|
-
async assertBadgeCountOnTab(badgeCount) {
|
|
54
|
-
await this.badgeCountOnScheduledTab.isVisible();
|
|
55
|
-
await test.expect(this.badgeCountOnScheduledTab).toHaveText(badgeCount);
|
|
56
|
-
}
|
|
57
|
-
async assertscheduledDraftBody(draftMessage) {
|
|
58
|
-
await test.expect(this.scheduledDraftBody).toBeVisible();
|
|
59
|
-
await test.expect(this.scheduledDraftBody).toHaveText(draftMessage);
|
|
60
|
-
}
|
|
61
|
-
async verifyOnHoverActionItems(messageContent) {
|
|
62
|
-
await this.scheduledDraftPanel(messageContent).isVisible();
|
|
63
|
-
await this.scheduledDraftPanel(messageContent).hover();
|
|
64
|
-
await this.verifyDeleteIcon();
|
|
65
|
-
await this.verifyCopyIcon();
|
|
66
|
-
await this.verifyRescheduleIcon();
|
|
67
|
-
await this.verifySendNowIcon();
|
|
68
|
-
}
|
|
69
|
-
async verifyDeleteIcon() {
|
|
70
|
-
await this.deleteIcon.isVisible();
|
|
71
|
-
await this.deleteIcon.hover();
|
|
72
|
-
await test.expect(this.deleteIconToolTip).toBeVisible();
|
|
73
|
-
await test.expect(this.deleteIconToolTip).toHaveText('Delete scheduled post');
|
|
74
|
-
}
|
|
75
|
-
async verifyCopyIcon() {
|
|
76
|
-
await this.copyIcon.isVisible();
|
|
77
|
-
await this.copyIcon.hover();
|
|
78
|
-
await test.expect(this.copyIconToolTip).toBeVisible();
|
|
79
|
-
await test.expect(this.copyIconToolTip).toHaveText('Copy text');
|
|
80
|
-
}
|
|
81
|
-
async verifyRescheduleIcon() {
|
|
82
|
-
await test.expect(this.rescheduleIcon).toBeVisible();
|
|
83
|
-
await this.rescheduleIcon.hover();
|
|
84
|
-
await test.expect(this.rescheduleIconToolTip).toBeVisible();
|
|
85
|
-
await test.expect(this.rescheduleIconToolTip).toHaveText('Reschedule post');
|
|
86
|
-
}
|
|
87
|
-
async verifySendNowIcon() {
|
|
88
|
-
await this.scheduledDraftSendNowButton.isVisible();
|
|
89
|
-
await this.scheduledDraftSendNowButton.hover();
|
|
90
|
-
await test.expect(this.scheduledDraftSendNowButtonToolTip).toBeVisible();
|
|
91
|
-
await test.expect(this.scheduledDraftSendNowButtonToolTip).toHaveText('Send now');
|
|
92
|
-
}
|
|
93
|
-
async getTimeStampOfMessage(messageContent) {
|
|
94
|
-
await this.scheduledDraftPanel(messageContent).scrollIntoViewIfNeeded();
|
|
95
|
-
await this.scheduledDraftPanel(messageContent).isVisible();
|
|
96
|
-
return this.scheduledDraftPanel(messageContent).locator(this.scheduledDraftPageInfo).innerHTML();
|
|
97
|
-
}
|
|
98
|
-
async openRescheduleModal(messageContent) {
|
|
99
|
-
await this.scheduledDraftPanel(messageContent).scrollIntoViewIfNeeded();
|
|
100
|
-
await this.scheduledDraftPanel(messageContent).isVisible();
|
|
101
|
-
await this.scheduledDraftPanel(messageContent).hover();
|
|
102
|
-
await this.rescheduleIcon.hover();
|
|
103
|
-
await test.expect(this.rescheduleIconToolTip).toBeVisible();
|
|
104
|
-
await test.expect(this.rescheduleIconToolTip).toHaveText('Reschedule post');
|
|
105
|
-
await this.rescheduleIcon.click();
|
|
106
|
-
}
|
|
107
|
-
async deleteScheduledMessage(messageContent) {
|
|
108
|
-
await this.scheduledDraftPanel(messageContent).isVisible();
|
|
109
|
-
await this.scheduledDraftPanel(messageContent).hover();
|
|
110
|
-
await this.verifyDeleteIcon();
|
|
111
|
-
await this.deleteIcon.click();
|
|
112
|
-
test.expect(await this.confirmbutton.textContent()).toEqual('Yes, delete');
|
|
113
|
-
await this.confirmbutton.click();
|
|
114
|
-
}
|
|
115
|
-
async sendScheduledMessage(messageContent) {
|
|
116
|
-
await this.scheduledDraftPanel(messageContent).isVisible();
|
|
117
|
-
await this.scheduledDraftPanel(messageContent).hover();
|
|
118
|
-
await this.verifySendNowIcon();
|
|
119
|
-
await this.scheduledDraftSendNowButton.click();
|
|
120
|
-
test.expect(await this.confirmbutton.textContent()).toEqual('Yes, send now');
|
|
121
|
-
await this.confirmbutton.click();
|
|
122
|
-
}
|
|
123
|
-
async goTo(teamName) {
|
|
124
|
-
await this.page.goto(`/${teamName}/scheduled_posts`);
|
|
125
|
-
}
|
|
126
|
-
async editText(newText) {
|
|
127
|
-
await this.editIcon.click();
|
|
128
|
-
await this.editBox.isVisible();
|
|
129
|
-
await this.editBox.fill(newText);
|
|
130
|
-
await this.editorSaveButton.isVisible();
|
|
131
|
-
await this.editorSaveButton.click();
|
|
132
|
-
await this.editBox.isHidden();
|
|
133
|
-
await this.scheduledDraftPanel(newText).isVisible();
|
|
134
|
-
}
|
|
135
|
-
async copyScheduledMessage(draftMessage) {
|
|
136
|
-
await this.scheduledDraftPanel(draftMessage).isVisible();
|
|
137
|
-
await this.scheduledDraftPanel(draftMessage).hover();
|
|
138
|
-
await this.verifyCopyIcon();
|
|
139
|
-
await this.copyIcon.click();
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
module.exports = ScheduledDraftPage;
|
|
144
|
-
//# sourceMappingURL=scheduled_draft.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scheduled_draft.js","sources":["../../../src/ui/pages/scheduled_draft.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 ScheduledDraftPage {\n readonly page: Page;\n\n readonly badgeCountOnScheduledTab;\n readonly confirmbutton;\n readonly copyIcon;\n readonly copyIconToolTip;\n readonly datePattern;\n readonly deleteIcon;\n readonly deleteIconToolTip;\n readonly noscheduledDraftIcon;\n readonly rescheduleIcon;\n readonly rescheduleIconToolTip;\n readonly scheduledDraftBody;\n readonly scheduledDraftPageInfo;\n readonly scheduledDraftPanel;\n readonly scheduledDraftSendNowButton;\n readonly scheduledDraftSendNowButtonToolTip;\n readonly editIcon;\n readonly editBox;\n readonly editorSaveButton;\n\n constructor(page: Page) {\n this.page = page;\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.scheduledDraftBody = page.locator('div.post__body');\n this.badgeCountOnScheduledTab = page.locator('a#draft_tabs-tab-1 div.drafts_tab_title span.MuiBadge-badge');\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.copyIcon = page.locator('#draft_icon-content-copy_copy_text');\n this.copyIconToolTip = page.locator('text=Copy text');\n this.rescheduleIcon = page.locator('#draft_icon-clock-send-outline_reschedule');\n this.rescheduleIconToolTip = page.locator('text=Reschedule post');\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 this.editIcon = page.locator('#draft_icon-pencil-outline_edit');\n this.editBox = page.locator('textarea#edit_textbox');\n this.editorSaveButton = page.locator('button.save');\n }\n\n async toBeVisible() {\n await this.page.waitForLoadState('networkidle');\n await expect(this.page).toHaveURL(/.*scheduled_posts/);\n }\n\n async assertBadgeCountOnTab(badgeCount: string) {\n await this.badgeCountOnScheduledTab.isVisible();\n await expect(this.badgeCountOnScheduledTab).toHaveText(badgeCount);\n }\n\n async assertscheduledDraftBody(draftMessage: string) {\n await expect(this.scheduledDraftBody).toBeVisible();\n await expect(this.scheduledDraftBody).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.verifyCopyIcon();\n await this.verifyRescheduleIcon();\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 verifyCopyIcon() {\n await this.copyIcon.isVisible();\n await this.copyIcon.hover();\n await expect(this.copyIconToolTip).toBeVisible();\n await expect(this.copyIconToolTip).toHaveText('Copy text');\n }\n\n async verifyRescheduleIcon() {\n await expect(this.rescheduleIcon).toBeVisible();\n await this.rescheduleIcon.hover();\n await expect(this.rescheduleIconToolTip).toBeVisible();\n await expect(this.rescheduleIconToolTip).toHaveText('Reschedule post');\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 openRescheduleModal(messageContent: string) {\n await this.scheduledDraftPanel(messageContent).scrollIntoViewIfNeeded();\n await this.scheduledDraftPanel(messageContent).isVisible();\n await this.scheduledDraftPanel(messageContent).hover();\n await this.rescheduleIcon.hover();\n await expect(this.rescheduleIconToolTip).toBeVisible();\n await expect(this.rescheduleIconToolTip).toHaveText('Reschedule post');\n await this.rescheduleIcon.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 async goTo(teamName: string) {\n await this.page.goto(`/${teamName}/scheduled_posts`);\n }\n\n async editText(newText: string) {\n await this.editIcon.click();\n await this.editBox.isVisible();\n await this.editBox.fill(newText);\n await this.editorSaveButton.isVisible();\n await this.editorSaveButton.click();\n await this.editBox.isHidden();\n await this.scheduledDraftPanel(newText).isVisible();\n }\n\n async copyScheduledMessage(draftMessage: string) {\n await this.scheduledDraftPanel(draftMessage).isVisible();\n await this.scheduledDraftPanel(draftMessage).hover();\n await this.verifyCopyIcon();\n await this.copyIcon.click();\n }\n}\n"],"names":["expect"],"mappings":"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"}
|