@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
package/dist/server/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sources":["../../src/server/init.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {expect} from '@playwright/test';\nimport {
|
|
1
|
+
{"version":3,"file":"init.js","sources":["../../src/server/init.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {expect} from '@playwright/test';\nimport {TeamType} from '@mattermost/types/teams';\n\nimport {makeClient} from './client';\nimport {getOnPremServerConfig} from './default_config';\nimport {createNewTeam} from './team';\nimport {createNewUserProfile} from './user';\n\nimport {getFileFromCommonAsset} from '@/file';\nimport {testConfig} from '@/test_config';\n\ntype InitSetupOptions = {\n userOptions?: Partial<Parameters<typeof createNewUserProfile>[1]>;\n teamsOptions?: Partial<Parameters<typeof createNewTeam>[1]>;\n withDefaultProfileImage?: boolean;\n};\n\nexport async function initSetup({\n userOptions = {prefix: 'user', disableTutorial: true, disableOnboarding: true},\n teamsOptions = {name: 'team', displayName: 'Team', type: 'O' as TeamType, unique: true},\n withDefaultProfileImage = true,\n}: Partial<InitSetupOptions> = {}) {\n try {\n // Login the admin user via API\n const {adminClient, adminUser} = await getAdminClient();\n if (!adminUser) {\n throw new Error('Failed to setup admin: Admin user not found.');\n }\n if (!adminClient) {\n throw new Error(\n \"Failed to setup admin: Check that you're able to access the server using the same admin credential.\",\n );\n }\n\n // Reset server config\n const adminConfig = await adminClient.updateConfig(getOnPremServerConfig() as any);\n\n // Create new team\n const team = await createNewTeam(adminClient, teamsOptions);\n\n // Create new user and add to newly created team\n const user = await createNewUserProfile(adminClient, userOptions);\n await adminClient.addToTeam(team.id, user.id);\n\n // Log in new user via API\n const {client: userClient} = await makeClient(user);\n\n if (withDefaultProfileImage) {\n const file = getFileFromCommonAsset('mattermost-icon_128x128.png');\n await userClient.uploadProfileImage(user.id, file);\n }\n\n return {\n adminClient,\n adminUser,\n adminConfig,\n user,\n userClient,\n team,\n offTopicUrl: getUrl(team.name, 'off-topic'),\n townSquareUrl: getUrl(team.name, 'town-square'),\n };\n } catch (error) {\n expect(error, 'Should not throw an error').toBeFalsy();\n throw error;\n }\n}\n\nexport async function getAdminClient(opts: {skipLog: boolean} = {skipLog: false}) {\n const {client: adminClient, user: adminUser} = await makeClient(\n {\n username: testConfig.adminUsername,\n password: testConfig.adminPassword,\n },\n opts,\n );\n\n return {adminClient, adminUser};\n}\n\nfunction getUrl(teamName: string, channelName: string) {\n return `/${teamName}/channels/${channelName}`;\n}\n"],"names":["getOnPremServerConfig","team","createNewTeam","user","createNewUserProfile","makeClient","file","getFileFromCommonAsset","expect","testConfig"],"mappings":";;;;;;;;;;AAAA;AACA;AAmBO,eAAe,SAAS,CAAC,EAC5B,WAAW,GAAG,EAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAC,EAC9E,YAAY,GAAG,EAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,GAAe,EAAE,MAAM,EAAE,IAAI,EAAC,EACvF,uBAAuB,GAAG,IAAI,GAAA,GACH,EAAE,EAAA;AAC7B,IAAA,IAAI;;QAEA,MAAM,EAAC,WAAW,EAAE,SAAS,EAAC,GAAG,MAAM,cAAc,EAAE;QACvD,IAAI,CAAC,SAAS,EAAE;AACZ,YAAA,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC;QACnE;QACA,IAAI,CAAC,WAAW,EAAE;AACd,YAAA,MAAM,IAAI,KAAK,CACX,qGAAqG,CACxG;QACL;;QAGA,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,YAAY,CAACA,oCAAqB,EAAS,CAAC;;QAGlF,MAAMC,MAAI,GAAG,MAAMC,kBAAa,CAAC,WAAW,EAAE,YAAY,CAAC;;QAG3D,MAAMC,MAAI,GAAG,MAAMC,yBAAoB,CAAC,WAAW,EAAE,WAAW,CAAC;AACjE,QAAA,MAAM,WAAW,CAAC,SAAS,CAACH,MAAI,CAAC,EAAE,EAAEE,MAAI,CAAC,EAAE,CAAC;;QAG7C,MAAM,EAAC,MAAM,EAAE,UAAU,EAAC,GAAG,MAAME,iBAAU,CAACF,MAAI,CAAC;QAEnD,IAAI,uBAAuB,EAAE;AACzB,YAAA,MAAMG,MAAI,GAAGC,2BAAsB,CAAC,6BAA6B,CAAC;YAClE,MAAM,UAAU,CAAC,kBAAkB,CAACJ,MAAI,CAAC,EAAE,EAAEG,MAAI,CAAC;QACtD;QAEA,OAAO;YACH,WAAW;YACX,SAAS;YACT,WAAW;kBACXH,MAAI;YACJ,UAAU;kBACVF,MAAI;YACJ,WAAW,EAAE,MAAM,CAACA,MAAI,CAAC,IAAI,EAAE,WAAW,CAAC;YAC3C,aAAa,EAAE,MAAM,CAACA,MAAI,CAAC,IAAI,EAAE,aAAa,CAAC;SAClD;IACL;IAAE,OAAO,KAAK,EAAE;QACZO,WAAM,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC,SAAS,EAAE;AACtD,QAAA,MAAM,KAAK;IACf;AACJ;AAEO,eAAe,cAAc,CAAC,OAA2B,EAAC,OAAO,EAAE,KAAK,EAAC,EAAA;AAC5E,IAAA,MAAM,EAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAC,GAAG,MAAMH,iBAAU,CAC3D;QACI,QAAQ,EAAEI,sBAAU,CAAC,aAAa;QAClC,QAAQ,EAAEA,sBAAU,CAAC,aAAa;KACrC,EACD,IAAI,CACP;AAED,IAAA,OAAO,EAAC,WAAW,EAAE,SAAS,EAAC;AACnC;AAEA,SAAS,MAAM,CAAC,QAAgB,EAAE,WAAmB,EAAA;AACjD,IAAA,OAAO,CAAA,CAAA,EAAI,QAAQ,CAAA,UAAA,EAAa,WAAW,EAAE;AACjD;;;;;"}
|
package/dist/server/post.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post.js","sources":["../../src/server/post.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Post, PostMetadata} from '@mattermost/types/posts';\n\nimport {getRandomId} from '@/util';\n\nexport function createRandomPost(post?: Partial<Post>): Post {\n if (post && post.channel_id && post.user_id) {\n const time = Date.now();\n\n const defaultPost = {\n create_at: time,\n user_id: post.user_id,\n channel_id: post.channel_id,\n root_id: post.root_id || '',\n message: `${post?.message ?? ''}${getRandomId()}`,\n pending_post_id: `${post.user_id}:${time}`,\n props: post?.props || {},\n file_ids: post?.file_ids || [],\n metadata: {} as PostMetadata,\n };\n\n Reflect.deleteProperty(post, 'user_id');\n Reflect.deleteProperty(post, 'channel_id');\n Reflect.deleteProperty(post, 'message');\n Reflect.deleteProperty(post, 'pending_post_id');\n\n return {...defaultPost, ...post} as Post;\n }\n\n throw new Error('Post is missing channel_id or user_id or both');\n}\n"],"names":["getRandomId"],"mappings":";;;;AAAA;AACA;AAMM,SAAU,gBAAgB,CAAC,IAAoB,EAAA;IACjD,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE;AACzC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE;AAEvB,QAAA,MAAM,WAAW,GAAG;AAChB,YAAA,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU;AAC3B,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;YAC3B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"post.js","sources":["../../src/server/post.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Post, PostMetadata} from '@mattermost/types/posts';\n\nimport {getRandomId} from '@/util';\n\nexport function createRandomPost(post?: Partial<Post>): Post {\n if (post && post.channel_id && post.user_id) {\n const time = Date.now();\n\n const defaultPost = {\n create_at: time,\n user_id: post.user_id,\n channel_id: post.channel_id,\n root_id: post.root_id || '',\n message: `${post?.message ?? ''}${getRandomId()}`,\n pending_post_id: `${post.user_id}:${time}`,\n props: post?.props || {},\n file_ids: post?.file_ids || [],\n metadata: {} as PostMetadata,\n };\n\n Reflect.deleteProperty(post, 'user_id');\n Reflect.deleteProperty(post, 'channel_id');\n Reflect.deleteProperty(post, 'message');\n Reflect.deleteProperty(post, 'pending_post_id');\n\n return {...defaultPost, ...post} as Post;\n }\n\n throw new Error('Post is missing channel_id or user_id or both');\n}\n"],"names":["getRandomId"],"mappings":";;;;AAAA;AACA;AAMM,SAAU,gBAAgB,CAAC,IAAoB,EAAA;IACjD,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE;AACzC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE;AAEvB,QAAA,MAAM,WAAW,GAAG;AAChB,YAAA,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU;AAC3B,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;YAC3B,OAAO,EAAE,CAAA,EAAG,IAAI,EAAE,OAAO,IAAI,EAAE,CAAA,EAAGA,gBAAW,EAAE,CAAA,CAAE;AACjD,YAAA,eAAe,EAAE,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE;AAC1C,YAAA,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE;AACxB,YAAA,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,EAAE;AAC9B,YAAA,QAAQ,EAAE,EAAkB;SAC/B;AAED,QAAA,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC;AACvC,QAAA,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC;AAC1C,QAAA,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC;AACvC,QAAA,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,iBAAiB,CAAC;AAE/C,QAAA,OAAO,EAAC,GAAG,WAAW,EAAE,GAAG,IAAI,EAAS;IAC5C;AAEA,IAAA,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC;AACpE;;;;"}
|
package/dist/server/team.d.ts
CHANGED
|
@@ -1,2 +1,9 @@
|
|
|
1
|
+
import { Client4 } from '@mattermost/client';
|
|
1
2
|
import { Team, TeamType } from '@mattermost/types/teams';
|
|
2
|
-
export declare function
|
|
3
|
+
export declare function createNewTeam(client: Client4, options?: {
|
|
4
|
+
name?: string;
|
|
5
|
+
displayName?: string;
|
|
6
|
+
type?: TeamType;
|
|
7
|
+
unique?: boolean;
|
|
8
|
+
}): Promise<Team>;
|
|
9
|
+
export declare function createRandomTeam(name?: string, displayName?: string, type?: TeamType, unique?: boolean): Promise<Team>;
|
package/dist/server/team.js
CHANGED
|
@@ -4,8 +4,18 @@ var util = require('../util.js');
|
|
|
4
4
|
|
|
5
5
|
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
6
6
|
// See LICENSE.txt for license information.
|
|
7
|
-
function
|
|
8
|
-
|
|
7
|
+
async function createNewTeam(client, options = {
|
|
8
|
+
name: 'team',
|
|
9
|
+
displayName: 'Team',
|
|
10
|
+
type: 'O',
|
|
11
|
+
unique: true,
|
|
12
|
+
}) {
|
|
13
|
+
const randomTeam = await createRandomTeam(options.name, options.displayName, options.type, options.unique);
|
|
14
|
+
const newTeam = await client.createTeam(randomTeam);
|
|
15
|
+
return newTeam;
|
|
16
|
+
}
|
|
17
|
+
async function createRandomTeam(name = 'team', displayName = 'Team', type = 'O', unique = true) {
|
|
18
|
+
const randomSuffix = await util.getRandomId();
|
|
9
19
|
const team = {
|
|
10
20
|
name: unique ? `${name}-${randomSuffix}` : name,
|
|
11
21
|
display_name: unique ? `${displayName} ${randomSuffix}` : displayName,
|
|
@@ -14,5 +24,6 @@ function createRandomTeam(name = 'team', displayName = 'Team', type = 'O', uniqu
|
|
|
14
24
|
return team;
|
|
15
25
|
}
|
|
16
26
|
|
|
27
|
+
exports.createNewTeam = createNewTeam;
|
|
17
28
|
exports.createRandomTeam = createRandomTeam;
|
|
18
29
|
//# sourceMappingURL=team.js.map
|
package/dist/server/team.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"team.js","sources":["../../src/server/team.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Team, TeamType} from '@mattermost/types/teams';\n\nimport {getRandomId} from '@/util';\n\nexport function
|
|
1
|
+
{"version":3,"file":"team.js","sources":["../../src/server/team.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Client4} from '@mattermost/client';\nimport {Team, TeamType} from '@mattermost/types/teams';\n\nimport {getRandomId} from '@/util';\n\nexport async function createNewTeam(\n client: Client4,\n options: {name?: string; displayName?: string; type?: TeamType; unique?: boolean} = {\n name: 'team',\n displayName: 'Team',\n type: 'O' as TeamType,\n unique: true,\n },\n) {\n const randomTeam = await createRandomTeam(options.name, options.displayName, options.type, options.unique);\n const newTeam = await client.createTeam(randomTeam);\n\n return newTeam;\n}\n\nexport async function createRandomTeam(\n name = 'team',\n displayName = 'Team',\n type: TeamType = 'O',\n unique = true,\n): Promise<Team> {\n const randomSuffix = await getRandomId();\n\n const team = {\n name: unique ? `${name}-${randomSuffix}` : name,\n display_name: unique ? `${displayName} ${randomSuffix}` : displayName,\n type,\n };\n\n return team as Team;\n}\n"],"names":["getRandomId"],"mappings":";;;;AAAA;AACA;AAOO,eAAe,aAAa,CAC/B,MAAe,EACf,OAAA,GAAoF;AAChF,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,WAAW,EAAE,MAAM;AACnB,IAAA,IAAI,EAAE,GAAe;AACrB,IAAA,MAAM,EAAE,IAAI;AACf,CAAA,EAAA;IAED,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;IAC1G,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC;AAEnD,IAAA,OAAO,OAAO;AAClB;AAEO,eAAe,gBAAgB,CAClC,IAAI,GAAG,MAAM,EACb,WAAW,GAAG,MAAM,EACpB,IAAA,GAAiB,GAAG,EACpB,MAAM,GAAG,IAAI,EAAA;AAEb,IAAA,MAAM,YAAY,GAAG,MAAMA,gBAAW,EAAE;AAExC,IAAA,MAAM,IAAI,GAAG;AACT,QAAA,IAAI,EAAE,MAAM,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE,GAAG,IAAI;AAC/C,QAAA,YAAY,EAAE,MAAM,GAAG,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE,GAAG,WAAW;QACrE,IAAI;KACP;AAED,IAAA,OAAO,IAAY;AACvB;;;;;"}
|
package/dist/server/user.d.ts
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { Client4 } from '@mattermost/client';
|
|
2
|
+
import { UserProfile, UserTimezone } from '@mattermost/types/users';
|
|
3
|
+
export declare function createNewUserProfile(client: Client4, options?: {
|
|
4
|
+
prefix?: string;
|
|
5
|
+
disableTutorial?: boolean;
|
|
6
|
+
disableOnboarding?: boolean;
|
|
7
|
+
}): Promise<UserProfile>;
|
|
8
|
+
export declare function createRandomUser(prefix?: string): Promise<UserProfile>;
|
|
3
9
|
export declare function getDefaultAdminUser(): UserProfile;
|
|
10
|
+
export declare function isOutsideRemoteUserHour(userTz: UserTimezone | undefined): boolean;
|
package/dist/server/user.js
CHANGED
|
@@ -1,12 +1,37 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var luxon = require('luxon');
|
|
3
4
|
var util = require('../util.js');
|
|
4
5
|
var test_config = require('../test_config.js');
|
|
6
|
+
var constant = require('../constant.js');
|
|
5
7
|
|
|
6
8
|
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
7
9
|
// See LICENSE.txt for license information.
|
|
8
|
-
function
|
|
9
|
-
|
|
10
|
+
async function createNewUserProfile(client, options = {
|
|
11
|
+
prefix: 'user',
|
|
12
|
+
disableTutorial: true,
|
|
13
|
+
disableOnboarding: true,
|
|
14
|
+
}) {
|
|
15
|
+
const randomUser = await createRandomUser(options.prefix);
|
|
16
|
+
const newUser = await client.createUser(randomUser, '', '');
|
|
17
|
+
// Set password to the created user profile so it can be used to login later
|
|
18
|
+
newUser.password = randomUser.password;
|
|
19
|
+
if (options.disableTutorial) {
|
|
20
|
+
await client.savePreferences(newUser.id, [
|
|
21
|
+
{ user_id: newUser.id, category: 'tutorial_step', name: newUser.id, value: '999' },
|
|
22
|
+
{ user_id: newUser.id, category: 'crt_thread_pane_step', name: newUser.id, value: '999' },
|
|
23
|
+
]);
|
|
24
|
+
}
|
|
25
|
+
if (options.disableOnboarding) {
|
|
26
|
+
await client.savePreferences(newUser.id, [
|
|
27
|
+
{ user_id: newUser.id, category: 'onboarding_task_list', name: 'onboarding_task_list_show', value: 'false' },
|
|
28
|
+
{ user_id: newUser.id, category: 'onboarding_task_list', name: 'onboarding_task_list_open', value: 'false' },
|
|
29
|
+
]);
|
|
30
|
+
}
|
|
31
|
+
return newUser;
|
|
32
|
+
}
|
|
33
|
+
async function createRandomUser(prefix = 'user') {
|
|
34
|
+
const randomId = await util.getRandomId();
|
|
10
35
|
const user = {
|
|
11
36
|
email: `${prefix}${randomId}@sample.mattermost.com`,
|
|
12
37
|
username: `${prefix}${randomId}`,
|
|
@@ -27,7 +52,16 @@ function getDefaultAdminUser() {
|
|
|
27
52
|
};
|
|
28
53
|
return admin;
|
|
29
54
|
}
|
|
55
|
+
function isOutsideRemoteUserHour(userTz) {
|
|
56
|
+
const timezone = (userTz?.useAutomaticTimezone ? userTz?.automaticTimezone : userTz?.manualTimezone) || 'UTC';
|
|
57
|
+
const teammateUserDate = luxon.DateTime.local().setZone(timezone);
|
|
58
|
+
const currentHour = teammateUserDate.hour;
|
|
59
|
+
return (currentHour >= constant.REMOTE_USERS_HOUR_LIMIT_END_OF_THE_DAY ||
|
|
60
|
+
currentHour < constant.REMOTE_USERS_HOUR_LIMIT_BEGINNING_OF_THE_DAY);
|
|
61
|
+
}
|
|
30
62
|
|
|
63
|
+
exports.createNewUserProfile = createNewUserProfile;
|
|
31
64
|
exports.createRandomUser = createRandomUser;
|
|
32
65
|
exports.getDefaultAdminUser = getDefaultAdminUser;
|
|
66
|
+
exports.isOutsideRemoteUserHour = isOutsideRemoteUserHour;
|
|
33
67
|
//# sourceMappingURL=user.js.map
|
package/dist/server/user.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.js","sources":["../../src/server/user.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {UserProfile} from '@mattermost/types/users';\n\nimport {getRandomId} from '@/util';\nimport {testConfig} from '@/test_config';\n\nexport function createRandomUser(prefix = 'user') {\n const randomId = getRandomId();\n\n const user = {\n email: `${prefix}${randomId}@sample.mattermost.com`,\n username: `${prefix}${randomId}`,\n password: 'passwd',\n first_name: `First${randomId}`,\n last_name: `Last${randomId}`,\n nickname: `Nickname${randomId}`,\n };\n\n return user as UserProfile;\n}\n\nexport function getDefaultAdminUser() {\n const admin = {\n username: testConfig.adminUsername,\n password: testConfig.adminPassword,\n first_name: 'Kenneth',\n last_name: 'Moreno',\n email: testConfig.adminEmail,\n };\n\n return admin as UserProfile;\n}\n"],"names":["getRandomId","testConfig"],"mappings":"
|
|
1
|
+
{"version":3,"file":"user.js","sources":["../../src/server/user.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Client4} from '@mattermost/client';\nimport {UserProfile, UserTimezone} from '@mattermost/types/users';\nimport {DateTime} from 'luxon';\n\nimport {getRandomId} from '@/util';\nimport {testConfig} from '@/test_config';\nimport {REMOTE_USERS_HOUR_LIMIT_END_OF_THE_DAY, REMOTE_USERS_HOUR_LIMIT_BEGINNING_OF_THE_DAY} from '@/constant';\n\nexport async function createNewUserProfile(\n client: Client4,\n options: {prefix?: string; disableTutorial?: boolean; disableOnboarding?: boolean} = {\n prefix: 'user',\n disableTutorial: true,\n disableOnboarding: true,\n },\n) {\n const randomUser = await createRandomUser(options.prefix);\n\n const newUser = await client.createUser(randomUser, '', '');\n // Set password to the created user profile so it can be used to login later\n newUser.password = randomUser.password;\n\n if (options.disableTutorial) {\n await client.savePreferences(newUser.id, [\n {user_id: newUser.id, category: 'tutorial_step', name: newUser.id, value: '999'},\n {user_id: newUser.id, category: 'crt_thread_pane_step', name: newUser.id, value: '999'},\n ]);\n }\n\n if (options.disableOnboarding) {\n await client.savePreferences(newUser.id, [\n {user_id: newUser.id, category: 'onboarding_task_list', name: 'onboarding_task_list_show', value: 'false'},\n {user_id: newUser.id, category: 'onboarding_task_list', name: 'onboarding_task_list_open', value: 'false'},\n ]);\n }\n\n return newUser;\n}\n\nexport async function createRandomUser(prefix = 'user') {\n const randomId = await getRandomId();\n\n const user = {\n email: `${prefix}${randomId}@sample.mattermost.com`,\n username: `${prefix}${randomId}`,\n password: 'passwd',\n first_name: `First${randomId}`,\n last_name: `Last${randomId}`,\n nickname: `Nickname${randomId}`,\n };\n\n return user as UserProfile;\n}\n\nexport function getDefaultAdminUser() {\n const admin = {\n username: testConfig.adminUsername,\n password: testConfig.adminPassword,\n first_name: 'Kenneth',\n last_name: 'Moreno',\n email: testConfig.adminEmail,\n };\n\n return admin as UserProfile;\n}\n\nexport function isOutsideRemoteUserHour(userTz: UserTimezone | undefined) {\n const timezone = (userTz?.useAutomaticTimezone ? userTz?.automaticTimezone : userTz?.manualTimezone) || 'UTC';\n\n const teammateUserDate = DateTime.local().setZone(timezone);\n\n const currentHour = teammateUserDate.hour;\n return (\n currentHour >= REMOTE_USERS_HOUR_LIMIT_END_OF_THE_DAY ||\n currentHour < REMOTE_USERS_HOUR_LIMIT_BEGINNING_OF_THE_DAY\n );\n}\n"],"names":["getRandomId","testConfig","DateTime","REMOTE_USERS_HOUR_LIMIT_END_OF_THE_DAY","REMOTE_USERS_HOUR_LIMIT_BEGINNING_OF_THE_DAY"],"mappings":"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"}
|
package/dist/test_action.d.ts
CHANGED
|
@@ -2,3 +2,12 @@ import { Locator, Page } from '@playwright/test';
|
|
|
2
2
|
export { waitUntil } from 'async-wait-until';
|
|
3
3
|
export declare function hideDynamicChannelsContent(page: Page): Promise<void>;
|
|
4
4
|
export declare function waitForAnimationEnd(locator: Locator): Promise<Animation[]>;
|
|
5
|
+
export declare function toBeFocusedWithFocusVisible(locator: Locator): Promise<boolean>;
|
|
6
|
+
export declare function logFocusedElement(page: Page): Promise<"No element has focus" | {
|
|
7
|
+
selector: string;
|
|
8
|
+
role: string;
|
|
9
|
+
ariaLabel: string;
|
|
10
|
+
text: string;
|
|
11
|
+
nodeName: string;
|
|
12
|
+
isVisible: boolean;
|
|
13
|
+
}>;
|
package/dist/test_action.js
CHANGED
|
@@ -1,24 +1,61 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var test = require('@playwright/test');
|
|
3
4
|
var asyncWaitUntil = require('async-wait-until');
|
|
4
5
|
|
|
5
6
|
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
6
7
|
// See LICENSE.txt for license information.
|
|
7
8
|
const visibilityHidden = 'visibility: hidden !important;';
|
|
8
|
-
const hideTeamHeader =
|
|
9
|
+
const hideTeamHeader = `#sidebarTeamMenuButton {${visibilityHidden}} `;
|
|
9
10
|
const hidePostHeaderTime = `.post__time {${visibilityHidden}} `;
|
|
10
11
|
const hidePostProfileIcon = `.profile-icon {${visibilityHidden}} `;
|
|
12
|
+
const hideKeywordsAndMentionsDesc = `#keywordsAndMentionsDesc {${visibilityHidden}} `;
|
|
11
13
|
async function hideDynamicChannelsContent(page) {
|
|
12
|
-
await page.addStyleTag({
|
|
14
|
+
await page.addStyleTag({
|
|
15
|
+
content: hideTeamHeader + hidePostHeaderTime + hidePostProfileIcon + hideKeywordsAndMentionsDesc,
|
|
16
|
+
});
|
|
13
17
|
}
|
|
14
18
|
async function waitForAnimationEnd(locator) {
|
|
15
19
|
return locator.evaluate((element) => Promise.all(element.getAnimations({ subtree: true }).map((animation) => animation.finished)));
|
|
16
20
|
}
|
|
21
|
+
async function toBeFocusedWithFocusVisible(locator) {
|
|
22
|
+
await test.expect(locator).toBeVisible();
|
|
23
|
+
await test.expect(locator).toBeFocused();
|
|
24
|
+
return locator.evaluate((element) => element.matches(':focus-visible'));
|
|
25
|
+
}
|
|
26
|
+
async function logFocusedElement(page) {
|
|
27
|
+
const focusedElementInfo = await page.evaluate(() => {
|
|
28
|
+
const activeElement = document.activeElement;
|
|
29
|
+
if (!activeElement) {
|
|
30
|
+
return 'No element has focus';
|
|
31
|
+
}
|
|
32
|
+
const tagName = activeElement.tagName.toLowerCase();
|
|
33
|
+
const id = activeElement.id ? `#${activeElement.id}` : '(none)';
|
|
34
|
+
const className = activeElement.className ? `.${Array.from(activeElement.classList).join('.')}` : '(none)';
|
|
35
|
+
const role = activeElement.getAttribute('role') || '';
|
|
36
|
+
const ariaLabel = activeElement.getAttribute('aria-label') || '';
|
|
37
|
+
const text = activeElement.textContent?.slice(0, 50) || '';
|
|
38
|
+
const htmlElement = activeElement;
|
|
39
|
+
return {
|
|
40
|
+
selector: `tag: ${tagName} | id: ${id} | class: ${className}`,
|
|
41
|
+
role: role,
|
|
42
|
+
ariaLabel: ariaLabel,
|
|
43
|
+
text: text.length > 50 ? `${text}...` : text,
|
|
44
|
+
nodeName: activeElement.nodeName,
|
|
45
|
+
isVisible: htmlElement.offsetWidth > 0 && htmlElement.offsetHeight > 0,
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
// eslint-disable-next-line no-console
|
|
49
|
+
console.log('Currently focused element:', focusedElementInfo);
|
|
50
|
+
return focusedElementInfo;
|
|
51
|
+
}
|
|
17
52
|
|
|
18
53
|
Object.defineProperty(exports, "waitUntil", {
|
|
19
54
|
enumerable: true,
|
|
20
55
|
get: function () { return asyncWaitUntil.waitUntil; }
|
|
21
56
|
});
|
|
22
57
|
exports.hideDynamicChannelsContent = hideDynamicChannelsContent;
|
|
58
|
+
exports.logFocusedElement = logFocusedElement;
|
|
59
|
+
exports.toBeFocusedWithFocusVisible = toBeFocusedWithFocusVisible;
|
|
23
60
|
exports.waitForAnimationEnd = waitForAnimationEnd;
|
|
24
61
|
//# sourceMappingURL=test_action.js.map
|
package/dist/test_action.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test_action.js","sources":["../src/test_action.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Locator, Page} from '@playwright/test';\nexport {waitUntil} from 'async-wait-until';\n\nconst visibilityHidden = 'visibility: hidden !important;';\nconst hideTeamHeader =
|
|
1
|
+
{"version":3,"file":"test_action.js","sources":["../src/test_action.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Locator, Page, expect} from '@playwright/test';\nexport {waitUntil} from 'async-wait-until';\n\nconst visibilityHidden = 'visibility: hidden !important;';\nconst hideTeamHeader = `#sidebarTeamMenuButton {${visibilityHidden}} `;\nconst hidePostHeaderTime = `.post__time {${visibilityHidden}} `;\nconst hidePostProfileIcon = `.profile-icon {${visibilityHidden}} `;\nconst hideKeywordsAndMentionsDesc = `#keywordsAndMentionsDesc {${visibilityHidden}} `;\n\nexport async function hideDynamicChannelsContent(page: Page) {\n await page.addStyleTag({\n content: hideTeamHeader + hidePostHeaderTime + hidePostProfileIcon + hideKeywordsAndMentionsDesc,\n });\n}\n\nexport async function waitForAnimationEnd(locator: Locator) {\n return locator.evaluate((element) =>\n Promise.all(element.getAnimations({subtree: true}).map((animation) => animation.finished)),\n );\n}\n\nexport async function toBeFocusedWithFocusVisible(locator: Locator) {\n await expect(locator).toBeVisible();\n await expect(locator).toBeFocused();\n return locator.evaluate((element) => element.matches(':focus-visible'));\n}\n\nexport async function logFocusedElement(page: Page) {\n const focusedElementInfo = await page.evaluate(() => {\n const activeElement = document.activeElement;\n if (!activeElement) {\n return 'No element has focus';\n }\n\n const tagName = activeElement.tagName.toLowerCase();\n const id = activeElement.id ? `#${activeElement.id}` : '(none)';\n const className = activeElement.className ? `.${Array.from(activeElement.classList).join('.')}` : '(none)';\n const role = activeElement.getAttribute('role') || '';\n const ariaLabel = activeElement.getAttribute('aria-label') || '';\n const text = activeElement.textContent?.slice(0, 50) || '';\n const htmlElement = activeElement as HTMLElement;\n\n return {\n selector: `tag: ${tagName} | id: ${id} | class: ${className}`,\n role: role,\n ariaLabel: ariaLabel,\n text: text.length > 50 ? `${text}...` : text,\n nodeName: activeElement.nodeName,\n isVisible: htmlElement.offsetWidth > 0 && htmlElement.offsetHeight > 0,\n };\n });\n\n // eslint-disable-next-line no-console\n console.log('Currently focused element:', focusedElementInfo);\n return focusedElementInfo;\n}\n"],"names":["expect"],"mappings":"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"}
|
package/dist/test_config.js
CHANGED
|
@@ -23,7 +23,7 @@ var dotenv__namespace = /*#__PURE__*/_interopNamespaceDefault(dotenv);
|
|
|
23
23
|
|
|
24
24
|
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
25
25
|
// See LICENSE.txt for license information.
|
|
26
|
-
dotenv__namespace.config();
|
|
26
|
+
dotenv__namespace.config({ quiet: true });
|
|
27
27
|
// All process.env should be defined here
|
|
28
28
|
class TestConfig {
|
|
29
29
|
baseURL;
|
package/dist/test_config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test_config.js","sources":["../src/test_config.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport * as dotenv from 'dotenv';\n\ndotenv.config();\n\n// All process.env should be defined here\nexport class TestConfig {\n baseURL: string;\n adminUsername: string;\n adminPassword: string;\n adminEmail: string;\n ensurePluginsInstalled: string[];\n haClusterEnabled: boolean;\n haClusterNodeCount: number;\n haClusterName: string;\n pushNotificationServer: string;\n resetBeforeTest: boolean;\n isCI: boolean;\n headless: boolean;\n slowMo: number;\n workers: number;\n snapshotEnabled: boolean;\n percyEnabled: boolean;\n\n constructor() {\n // Server\n this.baseURL = process.env.PW_BASE_URL || 'http://localhost:8065';\n this.adminUsername = process.env.PW_ADMIN_USERNAME || 'sysadmin';\n this.adminPassword = process.env.PW_ADMIN_PASSWORD || 'Sys@dmin-sample1';\n this.adminEmail = process.env.PW_ADMIN_EMAIL || 'sysadmin@sample.mattermost.com';\n this.ensurePluginsInstalled =\n typeof process.env?.PW_ENSURE_PLUGINS_INSTALLED === 'string'\n ? process.env.PW_ENSURE_PLUGINS_INSTALLED.split(',').filter((plugin) => Boolean(plugin))\n : [];\n this.haClusterEnabled = parseBool(process.env.PW_HA_CLUSTER_ENABLED, false);\n this.haClusterNodeCount = parseNumber(process.env.PW_HA_CLUSTER_NODE_COUNT, 2);\n this.haClusterName = process.env.PW_HA_CLUSTER_NAME || 'mm_dev_cluster';\n this.pushNotificationServer = process.env.PW_PUSH_NOTIFICATION_SERVER || 'https://push-test.mattermost.com';\n this.resetBeforeTest = parseBool(process.env.PW_RESET_BEFORE_TEST, false);\n // CI\n this.isCI = !!process.env.CI;\n // Playwright\n this.headless = parseBool(process.env.PW_HEADLESS, true);\n this.slowMo = parseNumber(process.env.PW_SLOWMO, 0);\n this.workers = parseNumber(process.env.PW_WORKERS, 1);\n // Visual tests\n this.snapshotEnabled = parseBool(process.env.PW_SNAPSHOT_ENABLE, false);\n this.percyEnabled = parseBool(process.env.PW_PERCY_ENABLE, false);\n }\n}\n\n// Create a singleton instance\nexport const testConfig = new TestConfig();\n\nfunction parseBool(actualValue: string | undefined, defaultValue: boolean) {\n return actualValue ? actualValue === 'true' : defaultValue;\n}\n\nfunction parseNumber(actualValue: string | undefined, defaultValue: number) {\n return actualValue ? parseInt(actualValue, 10) : defaultValue;\n}\n"],"names":["dotenv"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AAIAA,iBAAM,CAAC,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"test_config.js","sources":["../src/test_config.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport * as dotenv from 'dotenv';\n\ndotenv.config({quiet: true});\n\n// All process.env should be defined here\nexport class TestConfig {\n baseURL: string;\n adminUsername: string;\n adminPassword: string;\n adminEmail: string;\n ensurePluginsInstalled: string[];\n haClusterEnabled: boolean;\n haClusterNodeCount: number;\n haClusterName: string;\n pushNotificationServer: string;\n resetBeforeTest: boolean;\n isCI: boolean;\n headless: boolean;\n slowMo: number;\n workers: number;\n snapshotEnabled: boolean;\n percyEnabled: boolean;\n\n constructor() {\n // Server\n this.baseURL = process.env.PW_BASE_URL || 'http://localhost:8065';\n this.adminUsername = process.env.PW_ADMIN_USERNAME || 'sysadmin';\n this.adminPassword = process.env.PW_ADMIN_PASSWORD || 'Sys@dmin-sample1';\n this.adminEmail = process.env.PW_ADMIN_EMAIL || 'sysadmin@sample.mattermost.com';\n this.ensurePluginsInstalled =\n typeof process.env?.PW_ENSURE_PLUGINS_INSTALLED === 'string'\n ? process.env.PW_ENSURE_PLUGINS_INSTALLED.split(',').filter((plugin) => Boolean(plugin))\n : [];\n this.haClusterEnabled = parseBool(process.env.PW_HA_CLUSTER_ENABLED, false);\n this.haClusterNodeCount = parseNumber(process.env.PW_HA_CLUSTER_NODE_COUNT, 2);\n this.haClusterName = process.env.PW_HA_CLUSTER_NAME || 'mm_dev_cluster';\n this.pushNotificationServer = process.env.PW_PUSH_NOTIFICATION_SERVER || 'https://push-test.mattermost.com';\n this.resetBeforeTest = parseBool(process.env.PW_RESET_BEFORE_TEST, false);\n // CI\n this.isCI = !!process.env.CI;\n // Playwright\n this.headless = parseBool(process.env.PW_HEADLESS, true);\n this.slowMo = parseNumber(process.env.PW_SLOWMO, 0);\n this.workers = parseNumber(process.env.PW_WORKERS, 1);\n // Visual tests\n this.snapshotEnabled = parseBool(process.env.PW_SNAPSHOT_ENABLE, false);\n this.percyEnabled = parseBool(process.env.PW_PERCY_ENABLE, false);\n }\n}\n\n// Create a singleton instance\nexport const testConfig = new TestConfig();\n\nfunction parseBool(actualValue: string | undefined, defaultValue: boolean) {\n return actualValue ? actualValue === 'true' : defaultValue;\n}\n\nfunction parseNumber(actualValue: string | undefined, defaultValue: number) {\n return actualValue ? parseInt(actualValue, 10) : defaultValue;\n}\n"],"names":["dotenv"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AAIAA,iBAAM,CAAC,MAAM,CAAC,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC;AAE5B;MACa,UAAU,CAAA;AACnB,IAAA,OAAO;AACP,IAAA,aAAa;AACb,IAAA,aAAa;AACb,IAAA,UAAU;AACV,IAAA,sBAAsB;AACtB,IAAA,gBAAgB;AAChB,IAAA,kBAAkB;AAClB,IAAA,aAAa;AACb,IAAA,sBAAsB;AACtB,IAAA,eAAe;AACf,IAAA,IAAI;AACJ,IAAA,QAAQ;AACR,IAAA,MAAM;AACN,IAAA,OAAO;AACP,IAAA,eAAe;AACf,IAAA,YAAY;AAEZ,IAAA,WAAA,GAAA;;QAEI,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,uBAAuB;QACjE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,UAAU;QAChE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,kBAAkB;QACxE,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,gCAAgC;AAChF,QAAA,IAAI,CAAC,sBAAsB;AACvB,YAAA,OAAO,OAAO,CAAC,GAAG,EAAE,2BAA2B,KAAK;kBAC9C,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC;kBACrF,EAAE;AACZ,QAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,KAAK,CAAC;AAC3E,QAAA,IAAI,CAAC,kBAAkB,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC,CAAC;QAC9E,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,gBAAgB;QACvE,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,kCAAkC;AAC3G,QAAA,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,CAAC;;QAEzE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;;AAE5B,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC;AACxD,QAAA,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;;AAErD,QAAA,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC;AACvE,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC;IACrE;AACH;AAED;AACO,MAAM,UAAU,GAAG,IAAI,UAAU;AAExC,SAAS,SAAS,CAAC,WAA+B,EAAE,YAAqB,EAAA;IACrE,OAAO,WAAW,GAAG,WAAW,KAAK,MAAM,GAAG,YAAY;AAC9D;AAEA,SAAS,WAAW,CAAC,WAA+B,EAAE,YAAoB,EAAA;AACtE,IAAA,OAAO,WAAW,GAAG,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,GAAG,YAAY;AACjE;;;;;"}
|
package/dist/test_fixture.d.ts
CHANGED
|
@@ -4,8 +4,8 @@ import { AxeBuilder } from '@axe-core/playwright';
|
|
|
4
4
|
import { TestBrowser } from './browser_context';
|
|
5
5
|
import { ensureLicense, ensurePluginsLoaded, ensureServerDeployment, shouldHaveCallsEnabled, shouldHaveFeatureFlag, shouldRunInLinux, skipIfFeatureFlagNotSet, skipIfNoLicense } from './flag';
|
|
6
6
|
import { getBlobFromAsset, getFileFromAsset } from './file';
|
|
7
|
-
import { createRandomChannel, createRandomPost, createRandomTeam, createRandomUser, getAdminClient, initSetup } from './server';
|
|
8
|
-
import { hideDynamicChannelsContent, waitForAnimationEnd } from './test_action';
|
|
7
|
+
import { createNewUserProfile, createNewTeam, createRandomChannel, createRandomPost, createRandomTeam, createRandomUser, getAdminClient, initSetup, isOutsideRemoteUserHour, makeClient, mergeWithOnPremServerConfig } from './server';
|
|
8
|
+
import { toBeFocusedWithFocusVisible, hideDynamicChannelsContent, waitForAnimationEnd, logFocusedElement } from './test_action';
|
|
9
9
|
import { matchSnapshot } from './visual';
|
|
10
10
|
import { stubNotification, waitForNotification } from './mock_browser_api';
|
|
11
11
|
import { getRandomId } from './util';
|
|
@@ -32,12 +32,19 @@ export declare class PlaywrightExtended {
|
|
|
32
32
|
readonly getFileFromAsset: typeof getFileFromAsset;
|
|
33
33
|
readonly ensurePluginsLoaded: typeof ensurePluginsLoaded;
|
|
34
34
|
readonly getAdminClient: typeof getAdminClient;
|
|
35
|
+
readonly mergeWithOnPremServerConfig: typeof mergeWithOnPremServerConfig;
|
|
35
36
|
readonly initSetup: typeof initSetup;
|
|
37
|
+
readonly toBeFocusedWithFocusVisible: typeof toBeFocusedWithFocusVisible;
|
|
36
38
|
readonly hideDynamicChannelsContent: typeof hideDynamicChannelsContent;
|
|
37
39
|
readonly waitForAnimationEnd: typeof waitForAnimationEnd;
|
|
38
40
|
readonly waitUntil: <T extends import("async-wait-until").PredicateReturnValue>(predicate: import("async-wait-until").Predicate<T>, options?: number | import("async-wait-until").Options, intervalBetweenAttempts?: number) => Promise<T>;
|
|
41
|
+
readonly logFocusedElement: typeof logFocusedElement;
|
|
39
42
|
readonly stubNotification: typeof stubNotification;
|
|
40
43
|
readonly waitForNotification: typeof waitForNotification;
|
|
44
|
+
readonly createNewUserProfile: typeof createNewUserProfile;
|
|
45
|
+
readonly createNewTeam: typeof createNewTeam;
|
|
46
|
+
readonly isOutsideRemoteUserHour: typeof isOutsideRemoteUserHour;
|
|
47
|
+
readonly makeClient: typeof makeClient;
|
|
41
48
|
readonly matchSnapshot: typeof matchSnapshot;
|
|
42
49
|
readonly duration: {
|
|
43
50
|
half_sec: number;
|
|
@@ -51,7 +58,7 @@ export declare class PlaywrightExtended {
|
|
|
51
58
|
four_min: number;
|
|
52
59
|
};
|
|
53
60
|
readonly simpleEmailRe: RegExp;
|
|
54
|
-
readonly wait: (ms?: number) => Promise<
|
|
61
|
+
readonly wait: (ms?: number) => Promise<void>;
|
|
55
62
|
readonly random: {
|
|
56
63
|
id: typeof getRandomId;
|
|
57
64
|
channel: typeof createRandomChannel;
|
package/dist/test_fixture.js
CHANGED
|
@@ -5,10 +5,9 @@ var playwright = require('@axe-core/playwright');
|
|
|
5
5
|
var browser_context = require('./browser_context.js');
|
|
6
6
|
var flag = require('./flag.js');
|
|
7
7
|
var file = require('./file.js');
|
|
8
|
-
require('
|
|
9
|
-
require('./test_config.js');
|
|
8
|
+
var client = require('./server/client.js');
|
|
10
9
|
var channel = require('./server/channel.js');
|
|
11
|
-
require('./server/default_config.js');
|
|
10
|
+
var default_config = require('./server/default_config.js');
|
|
12
11
|
var init = require('./server/init.js');
|
|
13
12
|
var post = require('./server/post.js');
|
|
14
13
|
var team = require('./server/team.js');
|
|
@@ -51,14 +50,22 @@ class PlaywrightExtended {
|
|
|
51
50
|
// ./server
|
|
52
51
|
ensurePluginsLoaded;
|
|
53
52
|
getAdminClient;
|
|
53
|
+
mergeWithOnPremServerConfig;
|
|
54
54
|
initSetup;
|
|
55
55
|
// ./test_action
|
|
56
|
+
toBeFocusedWithFocusVisible;
|
|
56
57
|
hideDynamicChannelsContent;
|
|
57
58
|
waitForAnimationEnd;
|
|
58
59
|
waitUntil;
|
|
60
|
+
logFocusedElement;
|
|
59
61
|
// ./mock_browser_api
|
|
60
62
|
stubNotification;
|
|
61
63
|
waitForNotification;
|
|
64
|
+
// ./server
|
|
65
|
+
createNewUserProfile;
|
|
66
|
+
createNewTeam;
|
|
67
|
+
isOutsideRemoteUserHour;
|
|
68
|
+
makeClient;
|
|
62
69
|
// ./visual
|
|
63
70
|
matchSnapshot;
|
|
64
71
|
// ./util
|
|
@@ -91,10 +98,14 @@ class PlaywrightExtended {
|
|
|
91
98
|
this.ensurePluginsLoaded = flag.ensurePluginsLoaded;
|
|
92
99
|
this.initSetup = init.initSetup;
|
|
93
100
|
this.getAdminClient = init.getAdminClient;
|
|
101
|
+
this.mergeWithOnPremServerConfig = default_config.mergeWithOnPremServerConfig;
|
|
102
|
+
this.isOutsideRemoteUserHour = user.isOutsideRemoteUserHour;
|
|
94
103
|
// ./test_action
|
|
104
|
+
this.toBeFocusedWithFocusVisible = test_action.toBeFocusedWithFocusVisible;
|
|
95
105
|
this.hideDynamicChannelsContent = test_action.hideDynamicChannelsContent;
|
|
96
106
|
this.waitForAnimationEnd = test_action.waitForAnimationEnd;
|
|
97
107
|
this.waitUntil = asyncWaitUntil.waitUntil;
|
|
108
|
+
this.logFocusedElement = test_action.logFocusedElement;
|
|
98
109
|
// unauthenticated page
|
|
99
110
|
this.loginPage = new index.pages.LoginPage(page);
|
|
100
111
|
this.landingLoginPage = new index.pages.LandingLoginPage(page, isMobile);
|
|
@@ -103,6 +114,10 @@ class PlaywrightExtended {
|
|
|
103
114
|
// ./mock_browser_api
|
|
104
115
|
this.stubNotification = mock_browser_api.stubNotification;
|
|
105
116
|
this.waitForNotification = mock_browser_api.waitForNotification;
|
|
117
|
+
// ./server
|
|
118
|
+
this.createNewUserProfile = user.createNewUserProfile;
|
|
119
|
+
this.createNewTeam = team.createNewTeam;
|
|
120
|
+
this.makeClient = client.makeClient;
|
|
106
121
|
// ./visual
|
|
107
122
|
this.matchSnapshot = index$1.matchSnapshot;
|
|
108
123
|
// ./util
|
|
@@ -126,7 +141,7 @@ class PlaywrightExtended {
|
|
|
126
141
|
class AxeBuilderExtended {
|
|
127
142
|
builder;
|
|
128
143
|
// See https://github.com/dequelabs/axe-core/blob/master/doc/API.md#axe-core-tags
|
|
129
|
-
tags = ['wcag2a', 'wcag2aa'];
|
|
144
|
+
tags = ['wcag2a', 'wcag2aa', 'wcag21aa'];
|
|
130
145
|
constructor() {
|
|
131
146
|
this.builder = (page, options = {}) => {
|
|
132
147
|
// See https://github.com/dequelabs/axe-core/blob/master/doc/rule-descriptions.md#wcag-20-level-a--aa-rules
|
package/dist/test_fixture.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test_fixture.js","sources":["../src/test_fixture.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Browser, Page, test as base} from '@playwright/test';\nimport {AxeResults} from 'axe-core';\nimport {AxeBuilder} from '@axe-core/playwright';\n\nimport {TestBrowser} from './browser_context';\nimport {\n ensureLicense,\n ensurePluginsLoaded,\n ensureServerDeployment,\n shouldHaveCallsEnabled,\n shouldHaveFeatureFlag,\n shouldRunInLinux,\n skipIfFeatureFlagNotSet,\n skipIfNoLicense,\n} from './flag';\nimport {getBlobFromAsset, getFileFromAsset} from './file';\nimport {\n createRandomChannel,\n createRandomPost,\n createRandomTeam,\n createRandomUser,\n getAdminClient,\n initSetup,\n} from './server';\nimport {hideDynamicChannelsContent, waitForAnimationEnd, waitUntil} from './test_action';\nimport {pages} from './ui/pages';\nimport {matchSnapshot} from './visual';\nimport {stubNotification, waitForNotification} from './mock_browser_api';\nimport {duration, getRandomId, simpleEmailRe, wait} from './util';\n\nexport {expect} from '@playwright/test';\n\nexport type ExtendedFixtures = {\n axe: AxeBuilderExtended;\n pw: PlaywrightExtended;\n};\n\ntype AxeBuilderOptions = {\n disableColorContrast?: boolean;\n disableLinkInTextBlock?: boolean;\n};\n\nexport const test = base.extend<ExtendedFixtures>({\n // eslint-disable-next-line no-empty-pattern\n axe: async ({}, use) => {\n const ab = new AxeBuilderExtended();\n await use(ab);\n },\n pw: async ({browser, page, isMobile}, use) => {\n const pw = new PlaywrightExtended(browser, page, isMobile);\n await use(pw);\n await pw.testBrowser.close();\n },\n});\n\nexport class PlaywrightExtended {\n // ./browser_context\n readonly testBrowser;\n\n // ./flag\n readonly shouldHaveCallsEnabled;\n readonly shouldHaveFeatureFlag;\n readonly shouldRunInLinux;\n readonly ensureLicense;\n readonly ensureServerDeployment;\n readonly skipIfNoLicense;\n readonly skipIfFeatureFlagNotSet;\n\n // ./file\n readonly getBlobFromAsset;\n readonly getFileFromAsset;\n\n // ./server\n readonly ensurePluginsLoaded;\n readonly getAdminClient;\n readonly initSetup;\n\n // ./test_action\n readonly hideDynamicChannelsContent;\n readonly waitForAnimationEnd;\n readonly waitUntil;\n\n // ./mock_browser_api\n readonly stubNotification;\n readonly waitForNotification;\n\n // ./visual\n readonly matchSnapshot;\n\n // ./util\n readonly duration;\n readonly simpleEmailRe;\n readonly wait;\n\n // random\n readonly random;\n\n // unauthenticated page\n readonly loginPage;\n readonly landingLoginPage;\n readonly signupPage;\n readonly resetPasswordPage;\n\n readonly hasSeenLandingPage;\n\n constructor(browser: Browser, page: Page, isMobile: boolean) {\n // ./browser_context\n this.testBrowser = new TestBrowser(browser);\n\n // ./flag\n this.shouldHaveCallsEnabled = shouldHaveCallsEnabled;\n this.shouldHaveFeatureFlag = shouldHaveFeatureFlag;\n this.shouldRunInLinux = shouldRunInLinux;\n this.ensureLicense = ensureLicense;\n this.ensureServerDeployment = ensureServerDeployment;\n this.skipIfNoLicense = skipIfNoLicense;\n this.skipIfFeatureFlagNotSet = skipIfFeatureFlagNotSet;\n\n // ./file\n this.getBlobFromAsset = getBlobFromAsset;\n this.getFileFromAsset = getFileFromAsset;\n\n // ./server\n this.ensurePluginsLoaded = ensurePluginsLoaded;\n this.initSetup = initSetup;\n this.getAdminClient = getAdminClient;\n\n // ./test_action\n this.hideDynamicChannelsContent = hideDynamicChannelsContent;\n this.waitForAnimationEnd = waitForAnimationEnd;\n this.waitUntil = waitUntil;\n\n // unauthenticated page\n this.loginPage = new pages.LoginPage(page);\n this.landingLoginPage = new pages.LandingLoginPage(page, isMobile);\n this.signupPage = new pages.SignupPage(page);\n this.resetPasswordPage = new pages.ResetPasswordPage(page);\n\n // ./mock_browser_api\n this.stubNotification = stubNotification;\n this.waitForNotification = waitForNotification;\n\n // ./visual\n this.matchSnapshot = matchSnapshot;\n\n // ./util\n this.duration = duration;\n this.wait = wait;\n this.simpleEmailRe = simpleEmailRe;\n\n this.random = {\n id: getRandomId,\n channel: createRandomChannel,\n post: createRandomPost,\n team: createRandomTeam,\n user: createRandomUser,\n };\n\n this.hasSeenLandingPage = async () => {\n // Visit the base URL to be able to set the localStorage\n await page.goto('/');\n return await waitUntilLocalStorageIsSet(page, '__landingPageSeen__', 'true');\n };\n }\n}\n\nexport class AxeBuilderExtended {\n readonly builder: (page: Page, options?: AxeBuilderOptions) => AxeBuilder;\n\n // See https://github.com/dequelabs/axe-core/blob/master/doc/API.md#axe-core-tags\n readonly tags: string[] = ['wcag2a', 'wcag2aa'];\n\n constructor() {\n this.builder = (page: Page, options: AxeBuilderOptions = {}) => {\n // See https://github.com/dequelabs/axe-core/blob/master/doc/rule-descriptions.md#wcag-20-level-a--aa-rules\n const disabledRules: string[] = [];\n\n if (options.disableColorContrast) {\n // Disabled in pages due to impact to overall theme of Mattermost.\n // Option: make use of custom theme to improve color contrast.\n disabledRules.push('color-contrast');\n }\n\n if (options.disableLinkInTextBlock) {\n // Disabled in pages due to impact to overall theme of Mattermost.\n // Option: make use of custom theme to improve color contrast.\n disabledRules.push('link-in-text-block');\n }\n\n return new AxeBuilder({page}).withTags(this.tags).disableRules(disabledRules);\n };\n }\n\n violationFingerprints(accessibilityScanResults: AxeResults) {\n const fingerprints = accessibilityScanResults.violations.map((violation) => ({\n rule: violation.id,\n description: violation.description,\n helpUrl: violation.helpUrl,\n targets: violation.nodes.map((node) => {\n return {target: node.target, impact: node.impact, html: node.html};\n }),\n }));\n\n return JSON.stringify(fingerprints, null, 2);\n }\n}\n\nasync function waitUntilLocalStorageIsSet(page: Page, key: string, value: string, timeout = duration.ten_sec) {\n await waitUntil(\n () =>\n page.evaluate(\n ({key, value}) => {\n if (localStorage.getItem(key) === value) {\n return true;\n }\n localStorage.setItem(key, value);\n return false;\n },\n {key, value},\n ),\n {timeout},\n );\n}\n"],"names":["base","TestBrowser","shouldHaveCallsEnabled","shouldHaveFeatureFlag","shouldRunInLinux","ensureLicense","ensureServerDeployment","skipIfNoLicense","skipIfFeatureFlagNotSet","getBlobFromAsset","getFileFromAsset","ensurePluginsLoaded","initSetup","getAdminClient","hideDynamicChannelsContent","waitForAnimationEnd","waitUntil","pages","stubNotification","waitForNotification","matchSnapshot","duration","wait","simpleEmailRe","getRandomId","createRandomChannel","createRandomPost","createRandomTeam","createRandomUser","AxeBuilder"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"test_fixture.js","sources":["../src/test_fixture.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Browser, Page, test as base} from '@playwright/test';\nimport {AxeResults} from 'axe-core';\nimport {AxeBuilder} from '@axe-core/playwright';\n\nimport {TestBrowser} from './browser_context';\nimport {\n ensureLicense,\n ensurePluginsLoaded,\n ensureServerDeployment,\n shouldHaveCallsEnabled,\n shouldHaveFeatureFlag,\n shouldRunInLinux,\n skipIfFeatureFlagNotSet,\n skipIfNoLicense,\n} from './flag';\nimport {getBlobFromAsset, getFileFromAsset} from './file';\nimport {\n createNewUserProfile,\n createNewTeam,\n createRandomChannel,\n createRandomPost,\n createRandomTeam,\n createRandomUser,\n getAdminClient,\n initSetup,\n isOutsideRemoteUserHour,\n makeClient,\n mergeWithOnPremServerConfig,\n} from './server';\nimport {\n toBeFocusedWithFocusVisible,\n hideDynamicChannelsContent,\n waitForAnimationEnd,\n waitUntil,\n logFocusedElement,\n} from './test_action';\nimport {pages} from './ui/pages';\nimport {matchSnapshot} from './visual';\nimport {stubNotification, waitForNotification} from './mock_browser_api';\nimport {duration, getRandomId, simpleEmailRe, wait} from './util';\n\nexport {expect} from '@playwright/test';\n\nexport type ExtendedFixtures = {\n axe: AxeBuilderExtended;\n pw: PlaywrightExtended;\n};\n\ntype AxeBuilderOptions = {\n disableColorContrast?: boolean;\n disableLinkInTextBlock?: boolean;\n};\n\nexport const test = base.extend<ExtendedFixtures>({\n // eslint-disable-next-line no-empty-pattern\n axe: async ({}, use) => {\n const ab = new AxeBuilderExtended();\n await use(ab);\n },\n pw: async ({browser, page, isMobile}, use) => {\n const pw = new PlaywrightExtended(browser, page, isMobile);\n await use(pw);\n await pw.testBrowser.close();\n },\n});\n\nexport class PlaywrightExtended {\n // ./browser_context\n readonly testBrowser;\n\n // ./flag\n readonly shouldHaveCallsEnabled;\n readonly shouldHaveFeatureFlag;\n readonly shouldRunInLinux;\n readonly ensureLicense;\n readonly ensureServerDeployment;\n readonly skipIfNoLicense;\n readonly skipIfFeatureFlagNotSet;\n\n // ./file\n readonly getBlobFromAsset;\n readonly getFileFromAsset;\n\n // ./server\n readonly ensurePluginsLoaded;\n readonly getAdminClient;\n readonly mergeWithOnPremServerConfig;\n readonly initSetup;\n\n // ./test_action\n readonly toBeFocusedWithFocusVisible;\n readonly hideDynamicChannelsContent;\n readonly waitForAnimationEnd;\n readonly waitUntil;\n readonly logFocusedElement;\n\n // ./mock_browser_api\n readonly stubNotification;\n readonly waitForNotification;\n\n // ./server\n readonly createNewUserProfile;\n readonly createNewTeam;\n readonly isOutsideRemoteUserHour;\n readonly makeClient;\n\n // ./visual\n readonly matchSnapshot;\n\n // ./util\n readonly duration;\n readonly simpleEmailRe;\n readonly wait;\n\n // random\n readonly random;\n\n // unauthenticated page\n readonly loginPage;\n readonly landingLoginPage;\n readonly signupPage;\n readonly resetPasswordPage;\n\n readonly hasSeenLandingPage;\n\n constructor(browser: Browser, page: Page, isMobile: boolean) {\n // ./browser_context\n this.testBrowser = new TestBrowser(browser);\n\n // ./flag\n this.shouldHaveCallsEnabled = shouldHaveCallsEnabled;\n this.shouldHaveFeatureFlag = shouldHaveFeatureFlag;\n this.shouldRunInLinux = shouldRunInLinux;\n this.ensureLicense = ensureLicense;\n this.ensureServerDeployment = ensureServerDeployment;\n this.skipIfNoLicense = skipIfNoLicense;\n this.skipIfFeatureFlagNotSet = skipIfFeatureFlagNotSet;\n\n // ./file\n this.getBlobFromAsset = getBlobFromAsset;\n this.getFileFromAsset = getFileFromAsset;\n\n // ./server\n this.ensurePluginsLoaded = ensurePluginsLoaded;\n this.initSetup = initSetup;\n this.getAdminClient = getAdminClient;\n this.mergeWithOnPremServerConfig = mergeWithOnPremServerConfig;\n this.isOutsideRemoteUserHour = isOutsideRemoteUserHour;\n\n // ./test_action\n this.toBeFocusedWithFocusVisible = toBeFocusedWithFocusVisible;\n this.hideDynamicChannelsContent = hideDynamicChannelsContent;\n this.waitForAnimationEnd = waitForAnimationEnd;\n this.waitUntil = waitUntil;\n this.logFocusedElement = logFocusedElement;\n\n // unauthenticated page\n this.loginPage = new pages.LoginPage(page);\n this.landingLoginPage = new pages.LandingLoginPage(page, isMobile);\n this.signupPage = new pages.SignupPage(page);\n this.resetPasswordPage = new pages.ResetPasswordPage(page);\n\n // ./mock_browser_api\n this.stubNotification = stubNotification;\n this.waitForNotification = waitForNotification;\n\n // ./server\n this.createNewUserProfile = createNewUserProfile;\n this.createNewTeam = createNewTeam;\n this.makeClient = makeClient;\n\n // ./visual\n this.matchSnapshot = matchSnapshot;\n\n // ./util\n this.duration = duration;\n this.wait = wait;\n this.simpleEmailRe = simpleEmailRe;\n\n this.random = {\n id: getRandomId,\n channel: createRandomChannel,\n post: createRandomPost,\n team: createRandomTeam,\n user: createRandomUser,\n };\n\n this.hasSeenLandingPage = async () => {\n // Visit the base URL to be able to set the localStorage\n await page.goto('/');\n return await waitUntilLocalStorageIsSet(page, '__landingPageSeen__', 'true');\n };\n }\n}\n\nexport class AxeBuilderExtended {\n readonly builder: (page: Page, options?: AxeBuilderOptions) => AxeBuilder;\n\n // See https://github.com/dequelabs/axe-core/blob/master/doc/API.md#axe-core-tags\n readonly tags: string[] = ['wcag2a', 'wcag2aa', 'wcag21aa'];\n\n constructor() {\n this.builder = (page: Page, options: AxeBuilderOptions = {}) => {\n // See https://github.com/dequelabs/axe-core/blob/master/doc/rule-descriptions.md#wcag-20-level-a--aa-rules\n const disabledRules: string[] = [];\n\n if (options.disableColorContrast) {\n // Disabled in pages due to impact to overall theme of Mattermost.\n // Option: make use of custom theme to improve color contrast.\n disabledRules.push('color-contrast');\n }\n\n if (options.disableLinkInTextBlock) {\n // Disabled in pages due to impact to overall theme of Mattermost.\n // Option: make use of custom theme to improve color contrast.\n disabledRules.push('link-in-text-block');\n }\n\n return new AxeBuilder({page}).withTags(this.tags).disableRules(disabledRules);\n };\n }\n\n violationFingerprints(accessibilityScanResults: AxeResults) {\n const fingerprints = accessibilityScanResults.violations.map((violation) => ({\n rule: violation.id,\n description: violation.description,\n helpUrl: violation.helpUrl,\n targets: violation.nodes.map((node) => {\n return {target: node.target, impact: node.impact, html: node.html};\n }),\n }));\n\n return JSON.stringify(fingerprints, null, 2);\n }\n}\n\nasync function waitUntilLocalStorageIsSet(page: Page, key: string, value: string, timeout = duration.ten_sec) {\n await waitUntil(\n () =>\n page.evaluate(\n ({key, value}) => {\n if (localStorage.getItem(key) === value) {\n return true;\n }\n localStorage.setItem(key, value);\n return false;\n },\n {key, value},\n ),\n {timeout},\n );\n}\n"],"names":["base","TestBrowser","shouldHaveCallsEnabled","shouldHaveFeatureFlag","shouldRunInLinux","ensureLicense","ensureServerDeployment","skipIfNoLicense","skipIfFeatureFlagNotSet","getBlobFromAsset","getFileFromAsset","ensurePluginsLoaded","initSetup","getAdminClient","mergeWithOnPremServerConfig","isOutsideRemoteUserHour","toBeFocusedWithFocusVisible","hideDynamicChannelsContent","waitForAnimationEnd","waitUntil","logFocusedElement","pages","stubNotification","waitForNotification","createNewUserProfile","createNewTeam","makeClient","matchSnapshot","duration","wait","simpleEmailRe","getRandomId","createRandomChannel","createRandomPost","createRandomTeam","createRandomUser","AxeBuilder"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"root":["../src/browser_context.ts","../src/constant.ts","../src/file.ts","../src/flag.ts","../src/global_setup.ts","../src/index.ts","../src/mock_browser_api.ts","../src/test_action.ts","../src/test_config.ts","../src/test_fixture.ts","../src/types.ts","../src/util.ts","../src/server/channel.ts","../src/server/client.ts","../src/server/default_config.ts","../src/server/index.ts","../src/server/init.ts","../src/server/post.ts","../src/server/team.ts","../src/server/user.ts","../src/ui/components/footer.ts","../src/ui/components/global_header.ts","../src/ui/components/index.ts","../src/ui/components/main_header.ts","../src/ui/components/user_account_menu.ts","../src/ui/components/channels/app_bar.ts","../src/ui/components/channels/center_view.ts","../src/ui/components/channels/delete_post_confirmation_dialog.ts","../src/ui/components/channels/delete_post_modal.ts","../src/ui/components/channels/delete_scheduled_post_modal.ts","../src/ui/components/channels/draft_post.ts","../src/ui/components/channels/emoji_gif_picker.ts","../src/ui/components/channels/find_channels_modal.ts","../src/ui/components/channels/flag_post_confirmation_dialog.ts","../src/ui/components/channels/generic_confirm_modal.ts","../src/ui/components/channels/header.ts","../src/ui/components/channels/invite_people_modal.ts","../src/ui/components/channels/message_priority.ts","../src/ui/components/channels/post.ts","../src/ui/components/channels/post_create.ts","../src/ui/components/channels/post_dot_menu.ts","../src/ui/components/channels/post_edit.ts","../src/ui/components/channels/post_menu.ts","../src/ui/components/channels/post_reminder_menu.ts","../src/ui/components/channels/profile_modal.ts","../src/ui/components/channels/restore_post_confirmation_dialog.ts","../src/ui/components/channels/schedule_message_menu.ts","../src/ui/components/channels/schedule_message_modal.ts","../src/ui/components/channels/scheduled_draft_modal.ts","../src/ui/components/channels/scheduled_post.ts","../src/ui/components/channels/scheduled_post_indicator.ts","../src/ui/components/channels/search_box.ts","../src/ui/components/channels/send_message_now_modal.ts","../src/ui/components/channels/sidebar_left.ts","../src/ui/components/channels/sidebar_right.ts","../src/ui/components/channels/team_menu.ts","../src/ui/components/channels/thread_footer.ts","../src/ui/components/channels/user_profile_popover.ts","../src/ui/components/channels/channel_settings/channel_settings_modal.ts","../src/ui/components/channels/channel_settings/configuration_settings.ts","../src/ui/components/channels/channel_settings/info_settings.ts","../src/ui/components/channels/settings/advanced_settings.ts","../src/ui/components/channels/settings/display_settings.ts","../src/ui/components/channels/settings/notifications_settings.ts","../src/ui/components/channels/settings/settings_modal.ts","../src/ui/components/channels/settings/sidebar_settings.ts","../src/ui/components/channels/team_settings/team_settings_modal.ts","../src/ui/components/system_console/navbar.ts","../src/ui/components/system_console/sidebar.ts","../src/ui/components/system_console/sections/site_configuration/notifications.ts","../src/ui/components/system_console/sections/system_users/column_toggle_menu.ts","../src/ui/components/system_console/sections/system_users/feature_discovery.ts","../src/ui/components/system_console/sections/system_users/filter_menu.ts","../src/ui/components/system_console/sections/system_users/filter_popover.ts","../src/ui/components/system_console/sections/system_users/mobile_security.ts","../src/ui/components/system_console/sections/system_users/system_users.ts","../src/ui/pages/channels.ts","../src/ui/pages/content_review_dm.ts","../src/ui/pages/drafts.ts","../src/ui/pages/index.ts","../src/ui/pages/landing_login.ts","../src/ui/pages/login.ts","../src/ui/pages/reset_password.ts","../src/ui/pages/scheduled_posts.ts","../src/ui/pages/signup.ts","../src/ui/pages/system_console.ts","../src/ui/pages/threads.ts","../src/visual/index.ts","../src/visual/percy.ts"],"version":"5.9.3"}
|
package/dist/types.d.ts
CHANGED
package/dist/types.js
ADDED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app_bar.js","sources":["../../../../src/ui/components/channels/app_bar.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 ChannelsAppBar {\n readonly container: Locator;\n\n readonly playbooksIcon;\n\n constructor(container: Locator) {\n this.container = container;\n\n this.playbooksIcon = container.locator('#app-bar-icon-playbooks').getByRole('img');\n }\n\n async toBeVisible() {\n await expect(this.container).toBeVisible();\n }\n}\n"],"names":["expect"],"mappings":";;;;AAAA;AACA;AAIc,MAAO,cAAc,CAAA;AACtB,IAAA,SAAS;AAET,IAAA,aAAa;AAEtB,IAAA,WAAA,CAAY,SAAkB,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAE1B,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC
|
|
1
|
+
{"version":3,"file":"app_bar.js","sources":["../../../../src/ui/components/channels/app_bar.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 ChannelsAppBar {\n readonly container: Locator;\n\n readonly playbooksIcon;\n\n constructor(container: Locator) {\n this.container = container;\n\n this.playbooksIcon = container.locator('#app-bar-icon-playbooks').getByRole('img');\n }\n\n async toBeVisible() {\n await expect(this.container).toBeVisible();\n }\n}\n"],"names":["expect"],"mappings":";;;;AAAA;AACA;AAIc,MAAO,cAAc,CAAA;AACtB,IAAA,SAAS;AAET,IAAA,aAAa;AAEtB,IAAA,WAAA,CAAY,SAAkB,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAE1B,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;IACtF;AAEA,IAAA,MAAM,WAAW,GAAA;QACb,MAAMA,WAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;IAC9C;AACH;;;;"}
|
|
@@ -1,27 +1,26 @@
|
|
|
1
|
-
import { Locator } from '@playwright/test';
|
|
1
|
+
import { Locator, Page } from '@playwright/test';
|
|
2
2
|
import ChannelsHeader from './header';
|
|
3
3
|
import ChannelsPostCreate from './post_create';
|
|
4
4
|
import ChannelsPostEdit from './post_edit';
|
|
5
5
|
import ChannelsPost from './post';
|
|
6
|
+
import ScheduledPostIndicator from './scheduled_post_indicator';
|
|
7
|
+
import FlagPostConfirmationDialog from './flag_post_confirmation_dialog';
|
|
6
8
|
export default class ChannelsCenterView {
|
|
7
9
|
readonly container: Locator;
|
|
10
|
+
readonly page: Page;
|
|
8
11
|
readonly header: ChannelsHeader;
|
|
9
12
|
readonly postCreate: ChannelsPostCreate;
|
|
10
13
|
readonly scheduledDraftOptions: ChannelsPostCreate;
|
|
11
|
-
readonly
|
|
12
|
-
readonly scheduledDraftChannelIcon: Locator;
|
|
13
|
-
readonly scheduledDraftChannelInfoMessage: Locator;
|
|
14
|
-
readonly scheduledDraftChannelInfoMessageLocator: string;
|
|
15
|
-
readonly scheduledDraftChannelInfoMessageText: Locator;
|
|
16
|
-
readonly scheduledDraftSeeAllLink: Locator;
|
|
14
|
+
readonly scheduledPostIndicator: ScheduledPostIndicator;
|
|
17
15
|
readonly postEdit: ChannelsPostEdit;
|
|
18
16
|
readonly editedPostIcon: (postID: string) => Locator;
|
|
19
|
-
|
|
17
|
+
readonly channelBanner: Locator;
|
|
18
|
+
readonly flagPostConfirmationDialog: FlagPostConfirmationDialog;
|
|
19
|
+
readonly messageDeleted: (postId: string) => Locator;
|
|
20
|
+
readonly postText: (postID: string) => Locator;
|
|
21
|
+
constructor(container: Locator, page: Page);
|
|
20
22
|
toBeVisible(): Promise<void>;
|
|
21
|
-
|
|
22
|
-
* Click on "See all scheduled messages"
|
|
23
|
-
*/
|
|
24
|
-
clickOnSeeAllscheduledDrafts(): Promise<void>;
|
|
23
|
+
postMessage(message: string, files?: string[]): Promise<void>;
|
|
25
24
|
/**
|
|
26
25
|
* Return the first post in the Center
|
|
27
26
|
*/
|
|
@@ -47,6 +46,11 @@ export default class ChannelsCenterView {
|
|
|
47
46
|
getPostById(id: string): Promise<ChannelsPost>;
|
|
48
47
|
waitUntilLastPostContains(text: string, timeout?: number): Promise<void>;
|
|
49
48
|
waitUntilPostWithIdContains(id: string, text: string, timeout?: number): Promise<void>;
|
|
50
|
-
verifyscheduledDraftChannelInfo(): Promise<void>;
|
|
51
49
|
clickOnLastEditedPost(postID: string | null): Promise<void>;
|
|
50
|
+
assertChannelBanner(text: string, backgroundColor: string): Promise<void>;
|
|
51
|
+
assertChannelBannerNotVisible(): Promise<void>;
|
|
52
|
+
assertChannelBannerHasBoldText(text: string): Promise<void>;
|
|
53
|
+
assertChannelBannerHasItalicText(text: string): Promise<void>;
|
|
54
|
+
assertChannelBannerHasStrikethroughText(text: string): Promise<void>;
|
|
55
|
+
messageDeletedVisible(isVisible: boolean | undefined, postId: string, message: string): Promise<void>;
|
|
52
56
|
}
|