@mattermost/playwright-lib 10.7.0 → 11.3.0-1
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/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/types.d.ts +1 -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 +16 -17
- 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
|
@@ -9,8 +9,10 @@ export declare class TestBrowser {
|
|
|
9
9
|
page: import("playwright-core").Page;
|
|
10
10
|
channelsPage: import("./ui/pages").ChannelsPage;
|
|
11
11
|
systemConsolePage: import("./ui/pages").SystemConsolePage;
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
scheduledPostsPage: import("./ui/pages").ScheduledPostsPage;
|
|
13
|
+
draftsPage: import("./ui/pages").DraftsPage;
|
|
14
|
+
threadsPage: import("./ui/pages/threads").default;
|
|
15
|
+
contentReviewPage: import("./ui/pages").ContentReviewPage;
|
|
14
16
|
}>;
|
|
15
17
|
close(): Promise<void>;
|
|
16
18
|
}
|
package/dist/browser_context.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var promises = require('node:fs/promises');
|
|
4
|
+
var path = require('node:path');
|
|
5
|
+
var fs = require('node:fs');
|
|
4
6
|
var test = require('@playwright/test');
|
|
5
7
|
var test_config = require('./test_config.js');
|
|
6
8
|
var index = require('./ui/pages/index.js');
|
|
9
|
+
var util = require('./util.js');
|
|
7
10
|
|
|
8
11
|
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
9
12
|
// See LICENSE.txt for license information.
|
|
@@ -26,10 +29,21 @@ class TestBrowser {
|
|
|
26
29
|
const page = await context.newPage();
|
|
27
30
|
const channelsPage = new index.pages.ChannelsPage(page);
|
|
28
31
|
const systemConsolePage = new index.pages.SystemConsolePage(page);
|
|
29
|
-
const
|
|
30
|
-
const
|
|
32
|
+
const scheduledPostsPage = new index.pages.ScheduledPostsPage(page);
|
|
33
|
+
const draftsPage = new index.pages.DraftsPage(page);
|
|
34
|
+
const threadsPage = new index.pages.ThreadsPage(page);
|
|
35
|
+
const contentReviewPage = new index.pages.ContentReviewPage(page);
|
|
31
36
|
this.context = context;
|
|
32
|
-
return {
|
|
37
|
+
return {
|
|
38
|
+
context,
|
|
39
|
+
page,
|
|
40
|
+
channelsPage,
|
|
41
|
+
systemConsolePage,
|
|
42
|
+
scheduledPostsPage,
|
|
43
|
+
draftsPage,
|
|
44
|
+
threadsPage,
|
|
45
|
+
contentReviewPage,
|
|
46
|
+
};
|
|
33
47
|
}
|
|
34
48
|
async close() {
|
|
35
49
|
if (this.context) {
|
|
@@ -54,7 +68,13 @@ async function loginByAPI(loginId, password, token = '', ldapOnly = false) {
|
|
|
54
68
|
headers: { 'X-Requested-With': 'XMLHttpRequest' },
|
|
55
69
|
});
|
|
56
70
|
// Save signed-in state to a folder
|
|
57
|
-
const
|
|
71
|
+
const storageStateDir = util.resolvePlaywrightPath('storage_state');
|
|
72
|
+
// Ensure storage_state directory exists
|
|
73
|
+
if (!fs.existsSync(storageStateDir)) {
|
|
74
|
+
fs.mkdirSync(storageStateDir, { recursive: true });
|
|
75
|
+
}
|
|
76
|
+
const filename = `${Date.now()}_${loginId}_${password}${token ? '_' + token : ''}${ldapOnly ? '_ldap' : ''}.json`;
|
|
77
|
+
const storagePath = path.join(storageStateDir, filename);
|
|
58
78
|
const storageState = await requestContext.storageState({ path: storagePath });
|
|
59
79
|
await requestContext.dispose();
|
|
60
80
|
// Append origins to bypass seeing landing page then write to file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser_context.js","sources":["../src/browser_context.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {writeFile} from 'node:fs/promises';\n\nimport {Browser, BrowserContext, request} from '@playwright/test';\nimport {UserProfile} from '@mattermost/types/users';\n\nimport {testConfig} from './test_config';\nimport {pages} from './ui/pages';\n\nexport class TestBrowser {\n readonly browser: Browser;\n context: BrowserContext | null;\n\n constructor(browser: Browser) {\n this.browser = browser;\n this.context = null;\n }\n\n async login(user: UserProfile) {\n const options = {storageState: ''};\n if (user) {\n // Log in via API request and save user storage\n const storagePath = await loginByAPI(user.username, user.password);\n options.storageState = storagePath;\n }\n\n // Sign in a user in new browser context\n const context = await this.browser.newContext(options);\n const page = await context.newPage();\n\n const channelsPage = new pages.ChannelsPage(page);\n const systemConsolePage = new pages.SystemConsolePage(page);\n const
|
|
1
|
+
{"version":3,"file":"browser_context.js","sources":["../src/browser_context.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {writeFile} from 'node:fs/promises';\nimport path from 'node:path';\nimport fs from 'node:fs';\n\nimport {Browser, BrowserContext, request} from '@playwright/test';\nimport {UserProfile} from '@mattermost/types/users';\n\nimport {testConfig} from './test_config';\nimport {pages} from './ui/pages';\nimport {resolvePlaywrightPath} from './util';\n\nexport class TestBrowser {\n readonly browser: Browser;\n context: BrowserContext | null;\n\n constructor(browser: Browser) {\n this.browser = browser;\n this.context = null;\n }\n\n async login(user: UserProfile) {\n const options = {storageState: ''};\n if (user) {\n // Log in via API request and save user storage\n const storagePath = await loginByAPI(user.username, user.password);\n options.storageState = storagePath;\n }\n\n // Sign in a user in new browser context\n const context = await this.browser.newContext(options);\n const page = await context.newPage();\n\n const channelsPage = new pages.ChannelsPage(page);\n const systemConsolePage = new pages.SystemConsolePage(page);\n const scheduledPostsPage = new pages.ScheduledPostsPage(page);\n const draftsPage = new pages.DraftsPage(page);\n const threadsPage = new pages.ThreadsPage(page);\n const contentReviewPage = new pages.ContentReviewPage(page);\n\n this.context = context;\n\n return {\n context,\n page,\n channelsPage,\n systemConsolePage,\n scheduledPostsPage,\n draftsPage,\n threadsPage,\n contentReviewPage,\n };\n }\n\n async close() {\n if (this.context) {\n await this.context.close();\n }\n }\n}\n\nexport async function loginByAPI(loginId: string, password: string, token = '', ldapOnly = false) {\n const requestContext = await request.newContext();\n\n const data: any = {\n login_id: loginId,\n password,\n token,\n deviceId: '',\n };\n\n if (ldapOnly) {\n data.ldap_only = 'true';\n }\n\n // Log in via API\n await requestContext.post(`${testConfig.baseURL}/api/v4/users/login`, {\n data,\n headers: {'X-Requested-With': 'XMLHttpRequest'},\n });\n\n // Save signed-in state to a folder\n const storageStateDir = resolvePlaywrightPath('storage_state');\n\n // Ensure storage_state directory exists\n if (!fs.existsSync(storageStateDir)) {\n fs.mkdirSync(storageStateDir, {recursive: true});\n }\n\n const filename = `${Date.now()}_${loginId}_${password}${token ? '_' + token : ''}${ldapOnly ? '_ldap' : ''}.json`;\n const storagePath = path.join(storageStateDir, filename);\n const storageState = await requestContext.storageState({path: storagePath});\n await requestContext.dispose();\n\n // Append origins to bypass seeing landing page then write to file\n storageState.origins.push({\n origin: testConfig.baseURL,\n localStorage: [{name: '__landingPageSeen__', value: 'true'}],\n });\n await writeFile(storagePath, JSON.stringify(storageState));\n\n return storagePath;\n}\n"],"names":["pages","request","testConfig","resolvePlaywrightPath","writeFile"],"mappings":"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"}
|
package/dist/constant.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export declare const appsPluginId = "com.mattermost.apps";
|
|
2
2
|
export declare const callsPluginId = "com.mattermost.calls";
|
|
3
3
|
export declare const playbooksPluginId = "playbooks";
|
|
4
|
+
export declare const REMOTE_USERS_HOUR_LIMIT_END_OF_THE_DAY = 22;
|
|
5
|
+
export declare const REMOTE_USERS_HOUR_LIMIT_BEGINNING_OF_THE_DAY = 6;
|
package/dist/constant.js
CHANGED
|
@@ -3,6 +3,11 @@
|
|
|
3
3
|
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
4
4
|
// See LICENSE.txt for license information.
|
|
5
5
|
const callsPluginId = 'com.mattermost.calls';
|
|
6
|
+
// Remote users hour limit taken from webapp/channels/src/utils/constants.ts
|
|
7
|
+
const REMOTE_USERS_HOUR_LIMIT_END_OF_THE_DAY = 22;
|
|
8
|
+
const REMOTE_USERS_HOUR_LIMIT_BEGINNING_OF_THE_DAY = 6;
|
|
6
9
|
|
|
10
|
+
exports.REMOTE_USERS_HOUR_LIMIT_BEGINNING_OF_THE_DAY = REMOTE_USERS_HOUR_LIMIT_BEGINNING_OF_THE_DAY;
|
|
11
|
+
exports.REMOTE_USERS_HOUR_LIMIT_END_OF_THE_DAY = REMOTE_USERS_HOUR_LIMIT_END_OF_THE_DAY;
|
|
7
12
|
exports.callsPluginId = callsPluginId;
|
|
8
13
|
//# sourceMappingURL=constant.js.map
|
package/dist/constant.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constant.js","sources":["../src/constant.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nexport const appsPluginId = 'com.mattermost.apps';\nexport const callsPluginId = 'com.mattermost.calls';\nexport const playbooksPluginId = 'playbooks';\n"],"names":[],"mappings":";;AAAA;AACA;AAGO,MAAM,aAAa,GAAG
|
|
1
|
+
{"version":3,"file":"constant.js","sources":["../src/constant.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nexport const appsPluginId = 'com.mattermost.apps';\nexport const callsPluginId = 'com.mattermost.calls';\nexport const playbooksPluginId = 'playbooks';\n\n// Remote users hour limit taken from webapp/channels/src/utils/constants.ts\nexport const REMOTE_USERS_HOUR_LIMIT_END_OF_THE_DAY = 22;\nexport const REMOTE_USERS_HOUR_LIMIT_BEGINNING_OF_THE_DAY = 6;\n"],"names":[],"mappings":";;AAAA;AACA;AAGO,MAAM,aAAa,GAAG;AAG7B;AACO,MAAM,sCAAsC,GAAG;AAC/C,MAAM,4CAA4C,GAAG;;;;;;"}
|
package/dist/file.js
CHANGED
|
@@ -3,11 +3,12 @@
|
|
|
3
3
|
var path = require('node:path');
|
|
4
4
|
var fs = require('node:fs');
|
|
5
5
|
var mime = require('mime-types');
|
|
6
|
+
var util = require('./util.js');
|
|
6
7
|
|
|
7
8
|
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
8
9
|
// See LICENSE.txt for license information.
|
|
9
10
|
const commonAssetPath = path.resolve(__dirname, 'asset');
|
|
10
|
-
const assetPath =
|
|
11
|
+
const assetPath = util.resolvePlaywrightPath('asset');
|
|
11
12
|
/**
|
|
12
13
|
* Reads file data and creates a File object.
|
|
13
14
|
* @param filePath - The path to the file.
|
package/dist/file.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.js","sources":["../src/file.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\nimport mime from 'mime-types';\n\nconst commonAssetPath = path.resolve(__dirname, 'asset');\nexport const assetPath =
|
|
1
|
+
{"version":3,"file":"file.js","sources":["../src/file.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\nimport mime from 'mime-types';\n\nimport {resolvePlaywrightPath} from './util';\n\nconst commonAssetPath = path.resolve(__dirname, 'asset');\nexport const assetPath = resolvePlaywrightPath('asset');\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst availableFiles = ['mattermost-icon_128x128.png'] as const;\ntype AvailableFilename = (typeof availableFiles)[number];\n\n/**\n * Reads file data and creates a File object.\n * @param filePath - The path to the file.\n * @returns A File object containing the file data.\n * @throws If the file does not exist.\n */\nexport function getFileData(filePath: string): File {\n if (!fs.existsSync(filePath)) {\n throw new Error(`File not found at path: ${filePath}`);\n }\n\n const mimeType = mime.lookup(filePath) || undefined;\n const fileName = path.basename(filePath);\n const fileBuffer = fs.readFileSync(filePath);\n\n return new File([fileBuffer], fileName, {type: mimeType});\n}\n\n/**\n * Reads file data and creates a Blob object.\n * @param filePath - The path to the file.\n * @returns A Blob object containing the file data.\n * @throws If the file does not exist.\n */\nexport function getBlobData(filePath: string): Blob {\n if (!fs.existsSync(filePath)) {\n throw new Error(`File not found at path: ${filePath}`);\n }\n\n const mimeType = mime.lookup(filePath) || undefined;\n const fileBuffer = fs.readFileSync(filePath);\n\n return new Blob([fileBuffer], {type: mimeType});\n}\n\n/**\n * Reads file data from the \"asset\" directory and creates a File object.\n * @param filename - The name of the file in the \"asset\" directory.\n * @returns An object containing a File object\n */\nexport function getFileFromAsset(filename: string) {\n const filePath = path.join(assetPath, filename);\n\n return getFileData(filePath);\n}\n\n/**\n * Reads file data from the \"asset\" directory and creates a Blob object.\n * @param filename - The name of the file in the \"asset\" directory.\n * @returns An object containing a Blob object\n */\nexport function getBlobFromAsset(filename: string) {\n const filePath = path.join(assetPath, filename);\n\n return getBlobData(filePath);\n}\n\n/**\n * Reads file data from the lib \"asset\" directory and creates a File object.\n * @param filename - The name of the file in the \"asset\" directory.\n * @returns An object containing a File object\n */\nexport function getFileFromCommonAsset(filename: AvailableFilename) {\n const filePath = path.join(commonAssetPath, filename);\n\n return getFileData(filePath);\n}\n\n/**\n * Reads file data from the lib \"asset\" directory and creates a Blob object.\n * @param filename - The name of the file in the \"asset\" directory.\n * @returns An object containing a Blob object\n */\nexport function getBlobFromCommonAsset(filename: AvailableFilename) {\n const filePath = path.join(commonAssetPath, filename);\n\n return getBlobData(filePath);\n}\n"],"names":["resolvePlaywrightPath"],"mappings":";;;;;;;AAAA;AACA;AASA,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC;MAC3C,SAAS,GAAGA,0BAAqB,CAAC,OAAO;AAMtD;;;;;AAKG;AACG,SAAU,WAAW,CAAC,QAAgB,EAAA;IACxC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;AAC1B,QAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAA,CAAE,CAAC;IAC1D;IAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,SAAS;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACxC,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC;AAE5C,IAAA,OAAO,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAC,CAAC;AAC7D;AAEA;;;;;AAKG;AACG,SAAU,WAAW,CAAC,QAAgB,EAAA;IACxC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;AAC1B,QAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAA,CAAE,CAAC;IAC1D;IAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,SAAS;IACnD,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC;AAE5C,IAAA,OAAO,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAC,CAAC;AACnD;AAEA;;;;AAIG;AACG,SAAU,gBAAgB,CAAC,QAAgB,EAAA;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC;AAE/C,IAAA,OAAO,WAAW,CAAC,QAAQ,CAAC;AAChC;AAEA;;;;AAIG;AACG,SAAU,gBAAgB,CAAC,QAAgB,EAAA;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC;AAE/C,IAAA,OAAO,WAAW,CAAC,QAAQ,CAAC;AAChC;AAEA;;;;AAIG;AACG,SAAU,sBAAsB,CAAC,QAA2B,EAAA;IAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC;AAErD,IAAA,OAAO,WAAW,CAAC,QAAQ,CAAC;AAChC;;;;;;;;;"}
|
package/dist/flag.js
CHANGED
|
@@ -29,7 +29,7 @@ async function ensureLicense() {
|
|
|
29
29
|
const { adminClient } = await init.getAdminClient();
|
|
30
30
|
let license = await adminClient.getClientLicenseOld();
|
|
31
31
|
if (license?.IsLicensed !== 'true') {
|
|
32
|
-
const config = await adminClient.
|
|
32
|
+
const config = await adminClient.getClientConfig();
|
|
33
33
|
test.expect(config.ServiceEnvironment === 'dev', 'The trial license request fails in the local development environment. Please manually upload the test license.').toBeFalsy();
|
|
34
34
|
await requestTrialLicense();
|
|
35
35
|
license = await adminClient.getClientLicenseOld();
|
package/dist/flag.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flag.js","sources":["../src/flag.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 {expect, test} from '@playwright/test';\nimport {PluginManifest} from '@mattermost/types/plugins';\n\nimport {callsPluginId} from './constant';\nimport {getAdminClient} from './server/init';\nimport {testConfig} from './test_config';\n\nexport async function shouldHaveCallsEnabled(enabled = true) {\n const {adminClient} = await getAdminClient();\n const config = await adminClient.getConfig();\n\n const callsEnabled = config.PluginSettings.PluginStates[callsPluginId].Enable;\n\n const matched = callsEnabled === enabled;\n expect(matched, matched ? '' : `Calls expect \"${enabled}\" but actual \"${callsEnabled}\"`).toBeTruthy();\n}\n\nexport async function shouldHaveFeatureFlag(name: string, value: string | boolean) {\n const {adminClient} = await getAdminClient();\n const config = await adminClient.getConfig();\n\n const matched = config.FeatureFlags[name] === value;\n expect(\n matched,\n matched ? '' : `FeatureFlags[\"${name}'] expect \"${value}\" but actual \"${config.FeatureFlags[name]}\"`,\n ).toBeTruthy();\n}\n\nexport async function shouldRunInLinux() {\n const platform = os.platform();\n expect(platform, 'Run in Linux or Playwright docker image only').toBe('linux');\n}\n\nexport async function ensureLicense() {\n const {adminClient} = await getAdminClient();\n let license = await adminClient.getClientLicenseOld();\n\n if (license?.IsLicensed !== 'true') {\n const config = await adminClient.getClientConfigOld();\n expect(\n config.ServiceEnvironment === 'dev',\n 'The trial license request fails in the local development environment. Please manually upload the test license.',\n ).toBeFalsy();\n\n await requestTrialLicense();\n\n license = await adminClient.getClientLicenseOld();\n }\n\n expect(license?.IsLicensed === 'true', 'Ensure server has license').toBeTruthy();\n}\n\nexport async function requestTrialLicense() {\n const {adminClient} = await getAdminClient();\n const admin = await adminClient.getMe();\n try {\n await adminClient.requestTrialLicense({\n receive_emails_accepted: true,\n terms_accepted: true,\n users: 100,\n contact_name: admin.first_name + ' ' + admin.last_name,\n contact_email: admin.email,\n company_name: 'Mattermost Playwright E2E Tests',\n company_size: '101-250',\n company_country: 'United States',\n });\n } catch (error) {\n expect(error, 'Failed to request trial license').toBeFalsy();\n throw error;\n }\n}\n\nexport async function skipIfNoLicense() {\n const {adminClient} = await getAdminClient();\n const license = await adminClient.getClientLicenseOld();\n\n test.skip(license.IsLicensed === 'false', 'Skipping test - server not licensed');\n}\n\nexport async function skipIfFeatureFlagNotSet(name: string, value: string | boolean) {\n const {adminClient} = await getAdminClient();\n const cfg = await adminClient.getConfig();\n\n test.skip(cfg.FeatureFlags[name] !== value, `Skipping test - Feature Flag ${name} needs to be set to ${value}`);\n}\n\n// ensureServerDeployment is used to ensure server deployment type is as expected.\n// If server is not deployed as expected, test will fail.\nexport async function ensureServerDeployment() {\n const {adminClient} = await getAdminClient();\n\n // Based on test config, ensure server is on an HA cluster.\n if (testConfig.haClusterEnabled) {\n const {haClusterNodeCount, haClusterName} = testConfig;\n\n const {Enable, ClusterName} = (await adminClient.getConfig()).ClusterSettings;\n expect(Enable, Enable ? '' : 'Should have cluster enabled').toBe(true);\n\n const sameClusterName = ClusterName === haClusterName;\n expect(\n sameClusterName,\n sameClusterName\n ? ''\n : `Should have cluster name set and as expected. Got \"${ClusterName}\" but expected \"${haClusterName}\"`,\n ).toBe(true);\n\n const clusterInfo = await adminClient.getClusterStatus();\n const sameCount = clusterInfo?.length === haClusterNodeCount;\n expect(\n sameCount,\n sameCount\n ? ''\n : `Should match number of nodes in a cluster as expected. Got \"${clusterInfo?.length}\" but expected \"${haClusterNodeCount}\"`,\n ).toBe(true);\n\n clusterInfo.forEach((info) =>\n // eslint-disable-next-line no-console\n console.log(`hostname: ${info.hostname}, version: ${info.version}, config_hash: ${info.config_hash}`),\n );\n }\n}\n\n// ensurePluginsLoaded is used to ensure all pluginIds including from testConfig.ensurePluginsInstalled are installed and active.\n// If any pluginId is not installed, test will fail.\n// testConfig.ensurePluginsInstalled is derived from `PW_ENSURE_PLUGINS_INSTALLED` environment variable.\nexport async function ensurePluginsLoaded(pluginIds: string[] = []) {\n const {adminClient} = await getAdminClient();\n\n const pluginStatus = await adminClient.getPluginStatuses();\n const plugins = await adminClient.getPlugins();\n\n // Ensure all plugins are installed and active.\n testConfig.ensurePluginsInstalled\n .concat(pluginIds)\n .filter((pluginId) => Boolean(pluginId))\n .forEach(async (pluginId) => {\n const isInstalled = pluginStatus.some((plugin) => plugin.plugin_id === pluginId);\n\n // If not installed, test will fail.\n expect(isInstalled, `${pluginId} is not installed. Related test will fail.`).toBe(true);\n\n const isActive = plugins.active.some((plugin: PluginManifest) => plugin.id === pluginId);\n if (!isActive) {\n await adminClient.enablePlugin(pluginId);\n\n // eslint-disable-next-line no-console\n console.log(`${pluginId} is installed and has been activated.`);\n } else {\n // eslint-disable-next-line no-console\n console.log(`${pluginId} is installed and active.`);\n }\n });\n}\n"],"names":["getAdminClient","callsPluginId","expect","test","testConfig"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"flag.js","sources":["../src/flag.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 {expect, test} from '@playwright/test';\nimport {PluginManifest} from '@mattermost/types/plugins';\n\nimport {callsPluginId} from './constant';\nimport {getAdminClient} from './server/init';\nimport {testConfig} from './test_config';\n\nexport async function shouldHaveCallsEnabled(enabled = true) {\n const {adminClient} = await getAdminClient();\n const config = await adminClient.getConfig();\n\n const callsEnabled = config.PluginSettings.PluginStates[callsPluginId].Enable;\n\n const matched = callsEnabled === enabled;\n expect(matched, matched ? '' : `Calls expect \"${enabled}\" but actual \"${callsEnabled}\"`).toBeTruthy();\n}\n\nexport async function shouldHaveFeatureFlag(name: string, value: string | boolean) {\n const {adminClient} = await getAdminClient();\n const config = await adminClient.getConfig();\n\n const matched = config.FeatureFlags[name] === value;\n expect(\n matched,\n matched ? '' : `FeatureFlags[\"${name}'] expect \"${value}\" but actual \"${config.FeatureFlags[name]}\"`,\n ).toBeTruthy();\n}\n\nexport async function shouldRunInLinux() {\n const platform = os.platform();\n expect(platform, 'Run in Linux or Playwright docker image only').toBe('linux');\n}\n\nexport async function ensureLicense() {\n const {adminClient} = await getAdminClient();\n let license = await adminClient.getClientLicenseOld();\n\n if (license?.IsLicensed !== 'true') {\n const config = await adminClient.getClientConfig();\n expect(\n config.ServiceEnvironment === 'dev',\n 'The trial license request fails in the local development environment. Please manually upload the test license.',\n ).toBeFalsy();\n\n await requestTrialLicense();\n\n license = await adminClient.getClientLicenseOld();\n }\n\n expect(license?.IsLicensed === 'true', 'Ensure server has license').toBeTruthy();\n}\n\nexport async function requestTrialLicense() {\n const {adminClient} = await getAdminClient();\n const admin = await adminClient.getMe();\n try {\n await adminClient.requestTrialLicense({\n receive_emails_accepted: true,\n terms_accepted: true,\n users: 100,\n contact_name: admin.first_name + ' ' + admin.last_name,\n contact_email: admin.email,\n company_name: 'Mattermost Playwright E2E Tests',\n company_size: '101-250',\n company_country: 'United States',\n });\n } catch (error) {\n expect(error, 'Failed to request trial license').toBeFalsy();\n throw error;\n }\n}\n\nexport async function skipIfNoLicense() {\n const {adminClient} = await getAdminClient();\n const license = await adminClient.getClientLicenseOld();\n\n test.skip(license.IsLicensed === 'false', 'Skipping test - server not licensed');\n}\n\nexport async function skipIfFeatureFlagNotSet(name: string, value: string | boolean) {\n const {adminClient} = await getAdminClient();\n const cfg = await adminClient.getConfig();\n\n test.skip(cfg.FeatureFlags[name] !== value, `Skipping test - Feature Flag ${name} needs to be set to ${value}`);\n}\n\n// ensureServerDeployment is used to ensure server deployment type is as expected.\n// If server is not deployed as expected, test will fail.\nexport async function ensureServerDeployment() {\n const {adminClient} = await getAdminClient();\n\n // Based on test config, ensure server is on an HA cluster.\n if (testConfig.haClusterEnabled) {\n const {haClusterNodeCount, haClusterName} = testConfig;\n\n const {Enable, ClusterName} = (await adminClient.getConfig()).ClusterSettings;\n expect(Enable, Enable ? '' : 'Should have cluster enabled').toBe(true);\n\n const sameClusterName = ClusterName === haClusterName;\n expect(\n sameClusterName,\n sameClusterName\n ? ''\n : `Should have cluster name set and as expected. Got \"${ClusterName}\" but expected \"${haClusterName}\"`,\n ).toBe(true);\n\n const clusterInfo = await adminClient.getClusterStatus();\n const sameCount = clusterInfo?.length === haClusterNodeCount;\n expect(\n sameCount,\n sameCount\n ? ''\n : `Should match number of nodes in a cluster as expected. Got \"${clusterInfo?.length}\" but expected \"${haClusterNodeCount}\"`,\n ).toBe(true);\n\n clusterInfo.forEach((info) =>\n // eslint-disable-next-line no-console\n console.log(`hostname: ${info.hostname}, version: ${info.version}, config_hash: ${info.config_hash}`),\n );\n }\n}\n\n// ensurePluginsLoaded is used to ensure all pluginIds including from testConfig.ensurePluginsInstalled are installed and active.\n// If any pluginId is not installed, test will fail.\n// testConfig.ensurePluginsInstalled is derived from `PW_ENSURE_PLUGINS_INSTALLED` environment variable.\nexport async function ensurePluginsLoaded(pluginIds: string[] = []) {\n const {adminClient} = await getAdminClient();\n\n const pluginStatus = await adminClient.getPluginStatuses();\n const plugins = await adminClient.getPlugins();\n\n // Ensure all plugins are installed and active.\n testConfig.ensurePluginsInstalled\n .concat(pluginIds)\n .filter((pluginId) => Boolean(pluginId))\n .forEach(async (pluginId) => {\n const isInstalled = pluginStatus.some((plugin) => plugin.plugin_id === pluginId);\n\n // If not installed, test will fail.\n expect(isInstalled, `${pluginId} is not installed. Related test will fail.`).toBe(true);\n\n const isActive = plugins.active.some((plugin: PluginManifest) => plugin.id === pluginId);\n if (!isActive) {\n await adminClient.enablePlugin(pluginId);\n\n // eslint-disable-next-line no-console\n console.log(`${pluginId} is installed and has been activated.`);\n } else {\n // eslint-disable-next-line no-console\n console.log(`${pluginId} is installed and active.`);\n }\n });\n}\n"],"names":["getAdminClient","callsPluginId","expect","test","testConfig"],"mappings":"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"}
|
package/dist/global_setup.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var client = require('@mattermost/client');
|
|
4
|
-
var util = require('./util.js');
|
|
5
4
|
var client$1 = require('./server/client.js');
|
|
5
|
+
var util = require('./util.js');
|
|
6
6
|
require('./server/default_config.js');
|
|
7
7
|
var init = require('./server/init.js');
|
|
8
8
|
var team = require('./server/team.js');
|
|
@@ -22,6 +22,8 @@ async function baseGlobalSetup() {
|
|
|
22
22
|
await firstClient.createUser(defaultAdmin, '', '');
|
|
23
23
|
({ client: adminClient, user: adminUser } = await client$1.makeClient(defaultAdmin));
|
|
24
24
|
}
|
|
25
|
+
// Print playwright configs
|
|
26
|
+
printPlaywrightTestConfig();
|
|
25
27
|
await sysadminSetup(adminClient, adminUser);
|
|
26
28
|
}
|
|
27
29
|
async function sysadminSetup(client, user) {
|
|
@@ -37,7 +39,7 @@ async function sysadminSetup(client, user) {
|
|
|
37
39
|
const myTeams = await client.getMyTeams();
|
|
38
40
|
const myDefaultTeam = myTeams && myTeams.length > 0 && myTeams.find((team) => team.name === util.defaultTeam.name);
|
|
39
41
|
if (!myDefaultTeam) {
|
|
40
|
-
await
|
|
42
|
+
await team.createNewTeam(client, { name: util.defaultTeam.name, displayName: util.defaultTeam.displayName });
|
|
41
43
|
}
|
|
42
44
|
else if (myDefaultTeam && test_config.testConfig.resetBeforeTest) {
|
|
43
45
|
await Promise.all(myTeams.filter((team) => team.name !== util.defaultTeam.name).map((team) => client.deleteTeam(team.id)));
|
|
@@ -55,6 +57,13 @@ async function sysadminSetup(client, user) {
|
|
|
55
57
|
// Log plugin details
|
|
56
58
|
await printPluginDetails(client);
|
|
57
59
|
}
|
|
60
|
+
function printPlaywrightTestConfig() {
|
|
61
|
+
// eslint-disable-next-line no-console
|
|
62
|
+
console.log(`Playwright Test Config:
|
|
63
|
+
- Headless = ${test_config.testConfig.headless}
|
|
64
|
+
- SlowMo = ${test_config.testConfig.slowMo}
|
|
65
|
+
- Workers = ${test_config.testConfig.workers}`);
|
|
66
|
+
}
|
|
58
67
|
async function printLicenseInfo(client) {
|
|
59
68
|
const license = await client.getClientLicenseOld();
|
|
60
69
|
// eslint-disable-next-line no-console
|
|
@@ -67,7 +76,7 @@ async function printLicenseInfo(client) {
|
|
|
67
76
|
- Users = ${license.Users}`);
|
|
68
77
|
}
|
|
69
78
|
async function printClientInfo(client) {
|
|
70
|
-
const config = await client.
|
|
79
|
+
const config = await client.getClientConfig();
|
|
71
80
|
// eslint-disable-next-line no-console
|
|
72
81
|
console.log(`Build Info:
|
|
73
82
|
- BuildNumber = ${config.BuildNumber}
|
|
@@ -78,11 +87,22 @@ async function printClientInfo(client) {
|
|
|
78
87
|
- BuildEnterpriseReady = ${config.BuildEnterpriseReady}
|
|
79
88
|
- TelemetryId = ${config.TelemetryId}
|
|
80
89
|
- ServiceEnvironment = ${config.ServiceEnvironment}`);
|
|
81
|
-
const { LogSettings, ServiceSettings } = await client.getConfig();
|
|
90
|
+
const { LogSettings, ServiceSettings, PluginSettings, FeatureFlags } = await client.getConfig();
|
|
82
91
|
// eslint-disable-next-line no-console
|
|
83
92
|
console.log(`Notable Server Config:
|
|
84
93
|
- ServiceSettings.EnableSecurityFixAlert = ${ServiceSettings?.EnableSecurityFixAlert}
|
|
85
94
|
- LogSettings.EnableDiagnostics = ${LogSettings?.EnableDiagnostics}`);
|
|
95
|
+
// eslint-disable-next-line no-console
|
|
96
|
+
console.log('Feature Flags:');
|
|
97
|
+
// eslint-disable-next-line no-console
|
|
98
|
+
console.log(Object.entries(FeatureFlags)
|
|
99
|
+
.map(([key, value]) => ` - ${key} = ${value}`)
|
|
100
|
+
.join('\n'));
|
|
101
|
+
// eslint-disable-next-line no-console
|
|
102
|
+
console.log(`Plugin Settings:
|
|
103
|
+
- Enable = ${PluginSettings?.Enable}
|
|
104
|
+
- EnableUploads = ${PluginSettings?.EnableUploads}
|
|
105
|
+
- AutomaticPrepackagedPlugins = ${PluginSettings?.AutomaticPrepackagedPlugins}`);
|
|
86
106
|
}
|
|
87
107
|
async function printPluginDetails(client) {
|
|
88
108
|
const plugins = await client.getPlugins();
|
|
@@ -113,6 +133,8 @@ async function savePreferences(client, userId) {
|
|
|
113
133
|
const preferences = [
|
|
114
134
|
{ user_id: userId, category: 'tutorial_step', name: userId, value: '999' },
|
|
115
135
|
{ user_id: userId, category: 'crt_thread_pane_step', name: userId, value: '999' },
|
|
136
|
+
{ user_id: userId, category: 'onboarding_task_list', name: 'onboarding_task_list_show', value: 'false' },
|
|
137
|
+
{ user_id: userId, category: 'onboarding_task_list', name: 'onboarding_task_list_open', value: 'false' },
|
|
116
138
|
];
|
|
117
139
|
await client.savePreferences(userId, preferences);
|
|
118
140
|
}
|
package/dist/global_setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global_setup.js","sources":["../src/global_setup.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} from '@mattermost/types/users';\nimport {PluginManifest} from '@mattermost/types/plugins';\nimport {PreferenceType} from '@mattermost/types/preferences';\n\nimport {defaultTeam} from './util';\nimport {createRandomTeam, getAdminClient, getDefaultAdminUser, makeClient} from './server';\nimport {testConfig} from './test_config';\n\nexport async function baseGlobalSetup() {\n let adminClient: Client4;\n let adminUser: UserProfile | null;\n ({adminClient, adminUser} = await getAdminClient({skipLog: true}));\n\n if (!adminUser) {\n const firstClient = new Client4();\n firstClient.setUrl(testConfig.baseURL);\n const defaultAdmin = getDefaultAdminUser();\n await firstClient.createUser(defaultAdmin, '', '');\n\n ({client: adminClient, user: adminUser} = await makeClient(defaultAdmin));\n }\n\n await sysadminSetup(adminClient, adminUser);\n}\n\nasync function sysadminSetup(client: Client4, user: UserProfile | null) {\n // Ensure admin's email is verified.\n if (!user) {\n await client.verifyUserEmail(client.token);\n }\n\n // Log license and config info\n await printLicenseInfo(client);\n await printClientInfo(client);\n\n // Create default team if not present.\n // Otherwise, create other teams and channels other than the default team cna channels (town-square and off-topic).\n const myTeams = await client.getMyTeams();\n const myDefaultTeam = myTeams && myTeams.length > 0 && myTeams.find((team) => team.name === defaultTeam.name);\n if (!myDefaultTeam) {\n await client.createTeam(createRandomTeam(defaultTeam.name, defaultTeam.displayName, 'O', false));\n } else if (myDefaultTeam && testConfig.resetBeforeTest) {\n await Promise.all(\n myTeams.filter((team) => team.name !== defaultTeam.name).map((team) => client.deleteTeam(team.id)),\n );\n\n const myChannels = await client.getMyChannels(myDefaultTeam.id);\n await Promise.all(\n myChannels\n .filter((channel) => {\n return (\n channel.team_id === myDefaultTeam.id &&\n channel.name !== 'town-square' &&\n channel.name !== 'off-topic'\n );\n })\n .map((channel) => client.deleteChannel(channel.id)),\n );\n }\n\n // Set default preferences\n await savePreferences(client, user?.id ?? '');\n\n // Log plugin details\n await printPluginDetails(client);\n}\n\nasync function printLicenseInfo(client: Client4) {\n const license = await client.getClientLicenseOld();\n // eslint-disable-next-line no-console\n console.log(`Server License:\n - IsLicensed = ${license.IsLicensed}\n - IsTrial = ${license.IsTrial}\n - SkuName = ${license.SkuName}\n - SkuShortName = ${license.SkuShortName}\n - Cloud = ${license.Cloud}\n - Users = ${license.Users}`);\n}\n\nasync function printClientInfo(client: Client4) {\n const config = await client.getClientConfigOld();\n // eslint-disable-next-line no-console\n console.log(`Build Info:\n - BuildNumber = ${config.BuildNumber}\n - BuildDate = ${config.BuildDate}\n - Version = ${config.Version}\n - BuildHash = ${config.BuildHash}\n - BuildHashEnterprise = ${config.BuildHashEnterprise}\n - BuildEnterpriseReady = ${config.BuildEnterpriseReady}\n - TelemetryId = ${config.TelemetryId}\n - ServiceEnvironment = ${config.ServiceEnvironment}`);\n\n const {LogSettings, ServiceSettings} = await client.getConfig();\n // eslint-disable-next-line no-console\n console.log(`Notable Server Config:\n - ServiceSettings.EnableSecurityFixAlert = ${ServiceSettings?.EnableSecurityFixAlert}\n - LogSettings.EnableDiagnostics = ${LogSettings?.EnableDiagnostics}`);\n}\n\nasync function printPluginDetails(client: Client4) {\n const plugins = await client.getPlugins();\n\n if (plugins.active.length) {\n // eslint-disable-next-line no-console\n console.log('Active plugins:');\n }\n\n plugins.active.forEach((plugin: PluginManifest) => {\n // eslint-disable-next-line no-console\n console.log(` - ${plugin.id}@${plugin.version} | min_server@${plugin.min_server_version}`);\n });\n\n if (plugins.inactive.length) {\n // eslint-disable-next-line no-console\n console.log('Inactive plugins:');\n }\n\n plugins.inactive.forEach((plugin: PluginManifest) => {\n // eslint-disable-next-line no-console\n console.log(` - ${plugin.id}@${plugin.version} | min_server@${plugin.min_server_version}`);\n });\n\n // eslint-disable-next-line no-console\n console.log('');\n}\n\nasync function savePreferences(client: Client4, userId: UserProfile['id']) {\n try {\n if (!userId) {\n throw new Error('userId is not defined');\n }\n\n const preferences: PreferenceType[] = [\n {user_id: userId, category: 'tutorial_step', name: userId, value: '999'},\n {user_id: userId, category: 'crt_thread_pane_step', name: userId, value: '999'},\n ];\n\n await client.savePreferences(userId, preferences);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.log('Error saving preferences', error);\n }\n}\n"],"names":["getAdminClient","Client4","testConfig","getDefaultAdminUser","makeClient","defaultTeam","createRandomTeam"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"global_setup.js","sources":["../src/global_setup.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 {PluginManifest} from '@mattermost/types/plugins';\nimport {PreferenceType} from '@mattermost/types/preferences';\nimport {UserProfile} from '@mattermost/types/users';\n\nimport {createNewTeam, getAdminClient, getDefaultAdminUser, makeClient} from './server';\nimport {testConfig} from './test_config';\nimport {defaultTeam} from './util';\n\nexport async function baseGlobalSetup() {\n let adminClient: Client4;\n let adminUser: UserProfile | null;\n ({adminClient, adminUser} = await getAdminClient({skipLog: true}));\n\n if (!adminUser) {\n const firstClient = new Client4();\n firstClient.setUrl(testConfig.baseURL);\n const defaultAdmin = getDefaultAdminUser();\n await firstClient.createUser(defaultAdmin, '', '');\n\n ({client: adminClient, user: adminUser} = await makeClient(defaultAdmin));\n }\n\n // Print playwright configs\n printPlaywrightTestConfig();\n\n await sysadminSetup(adminClient, adminUser);\n}\n\nasync function sysadminSetup(client: Client4, user: UserProfile | null) {\n // Ensure admin's email is verified.\n if (!user) {\n await client.verifyUserEmail(client.token);\n }\n\n // Log license and config info\n await printLicenseInfo(client);\n await printClientInfo(client);\n\n // Create default team if not present.\n // Otherwise, create other teams and channels other than the default team cna channels (town-square and off-topic).\n const myTeams = await client.getMyTeams();\n const myDefaultTeam = myTeams && myTeams.length > 0 && myTeams.find((team) => team.name === defaultTeam.name);\n if (!myDefaultTeam) {\n await createNewTeam(client, {name: defaultTeam.name, displayName: defaultTeam.displayName});\n } else if (myDefaultTeam && testConfig.resetBeforeTest) {\n await Promise.all(\n myTeams.filter((team) => team.name !== defaultTeam.name).map((team) => client.deleteTeam(team.id)),\n );\n\n const myChannels = await client.getMyChannels(myDefaultTeam.id);\n await Promise.all(\n myChannels\n .filter((channel) => {\n return (\n channel.team_id === myDefaultTeam.id &&\n channel.name !== 'town-square' &&\n channel.name !== 'off-topic'\n );\n })\n .map((channel) => client.deleteChannel(channel.id)),\n );\n }\n\n // Set default preferences\n await savePreferences(client, user?.id ?? '');\n\n // Log plugin details\n await printPluginDetails(client);\n}\n\nfunction printPlaywrightTestConfig() {\n // eslint-disable-next-line no-console\n console.log(`Playwright Test Config:\n - Headless = ${testConfig.headless}\n - SlowMo = ${testConfig.slowMo}\n - Workers = ${testConfig.workers}`);\n}\n\nasync function printLicenseInfo(client: Client4) {\n const license = await client.getClientLicenseOld();\n // eslint-disable-next-line no-console\n console.log(`Server License:\n - IsLicensed = ${license.IsLicensed}\n - IsTrial = ${license.IsTrial}\n - SkuName = ${license.SkuName}\n - SkuShortName = ${license.SkuShortName}\n - Cloud = ${license.Cloud}\n - Users = ${license.Users}`);\n}\n\nasync function printClientInfo(client: Client4) {\n const config = await client.getClientConfig();\n // eslint-disable-next-line no-console\n console.log(`Build Info:\n - BuildNumber = ${config.BuildNumber}\n - BuildDate = ${config.BuildDate}\n - Version = ${config.Version}\n - BuildHash = ${config.BuildHash}\n - BuildHashEnterprise = ${config.BuildHashEnterprise}\n - BuildEnterpriseReady = ${config.BuildEnterpriseReady}\n - TelemetryId = ${config.TelemetryId}\n - ServiceEnvironment = ${config.ServiceEnvironment}`);\n\n const {LogSettings, ServiceSettings, PluginSettings, FeatureFlags} = await client.getConfig();\n // eslint-disable-next-line no-console\n console.log(`Notable Server Config:\n - ServiceSettings.EnableSecurityFixAlert = ${ServiceSettings?.EnableSecurityFixAlert}\n - LogSettings.EnableDiagnostics = ${LogSettings?.EnableDiagnostics}`);\n\n // eslint-disable-next-line no-console\n console.log('Feature Flags:');\n // eslint-disable-next-line no-console\n console.log(\n Object.entries(FeatureFlags)\n .map(([key, value]) => ` - ${key} = ${value}`)\n .join('\\n'),\n );\n\n // eslint-disable-next-line no-console\n console.log(`Plugin Settings:\n - Enable = ${PluginSettings?.Enable}\n - EnableUploads = ${PluginSettings?.EnableUploads}\n - AutomaticPrepackagedPlugins = ${PluginSettings?.AutomaticPrepackagedPlugins}`);\n}\n\nasync function printPluginDetails(client: Client4) {\n const plugins = await client.getPlugins();\n\n if (plugins.active.length) {\n // eslint-disable-next-line no-console\n console.log('Active plugins:');\n }\n\n plugins.active.forEach((plugin: PluginManifest) => {\n // eslint-disable-next-line no-console\n console.log(` - ${plugin.id}@${plugin.version} | min_server@${plugin.min_server_version}`);\n });\n\n if (plugins.inactive.length) {\n // eslint-disable-next-line no-console\n console.log('Inactive plugins:');\n }\n\n plugins.inactive.forEach((plugin: PluginManifest) => {\n // eslint-disable-next-line no-console\n console.log(` - ${plugin.id}@${plugin.version} | min_server@${plugin.min_server_version}`);\n });\n\n // eslint-disable-next-line no-console\n console.log('');\n}\n\nasync function savePreferences(client: Client4, userId: UserProfile['id']) {\n try {\n if (!userId) {\n throw new Error('userId is not defined');\n }\n\n const preferences: PreferenceType[] = [\n {user_id: userId, category: 'tutorial_step', name: userId, value: '999'},\n {user_id: userId, category: 'crt_thread_pane_step', name: userId, value: '999'},\n {user_id: userId, category: 'onboarding_task_list', name: 'onboarding_task_list_show', value: 'false'},\n {user_id: userId, category: 'onboarding_task_list', name: 'onboarding_task_list_open', value: 'false'},\n ];\n\n await client.savePreferences(userId, preferences);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.log('Error saving preferences', error);\n }\n}\n"],"names":["getAdminClient","Client4","testConfig","getDefaultAdminUser","makeClient","defaultTeam","createNewTeam"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,5 +4,6 @@ export { baseGlobalSetup } from './global_setup';
|
|
|
4
4
|
export { TestBrowser } from './browser_context';
|
|
5
5
|
export { getBlobFromAsset, getFileFromAsset } from './file';
|
|
6
6
|
export { duration, wait } from './util';
|
|
7
|
-
export { ChannelsPage, LandingLoginPage, LoginPage, ResetPasswordPage, SignupPage,
|
|
7
|
+
export { ChannelsPage, LandingLoginPage, LoginPage, ResetPasswordPage, SignupPage, ScheduledPostsPage, SystemConsolePage, DraftsPage, } from './ui/pages';
|
|
8
|
+
export { components, GlobalHeader, SearchBox, ChannelsCenterView, ChannelsSidebarLeft, ChannelsSidebarRight, ChannelsAppBar, ChannelsHeader, ChannelsPostCreate, ChannelsPostEdit, ChannelsPost, ChannelSettingsModal, DraftPost, FindChannelsModal, DeletePostModal, DeleteScheduledPostModal, SettingsModal, PostDotMenu, PostMenu, ThreadFooter, Footer, MainHeader, PostReminderMenu, EmojiGifPicker, GenericConfirmModal, ScheduleMessageMenu, ScheduleMessageModal, ScheduledPostIndicator, ScheduledDraftModal, ScheduledPost, SendMessageNowModal, SystemConsoleSidebar, SystemConsoleNavbar, SystemUsers, SystemUsersFilterPopover, SystemUsersFilterMenu, SystemUsersColumnToggleMenu, SystemConsoleFeatureDiscovery, SystemConsoleMobileSecurity, MessagePriority, UserProfilePopover, UserAccountMenu, DeletePostConfirmationDialog, RestorePostConfirmationDialog, ProfileModal, } from './ui/components';
|
|
8
9
|
export { TestArgs, ScreenshotOptions } from './types';
|
package/dist/index.js
CHANGED
|
@@ -12,9 +12,54 @@ var login = require('./ui/pages/login.js');
|
|
|
12
12
|
var reset_password = require('./ui/pages/reset_password.js');
|
|
13
13
|
var signup = require('./ui/pages/signup.js');
|
|
14
14
|
var system_console = require('./ui/pages/system_console.js');
|
|
15
|
-
var
|
|
15
|
+
var scheduled_posts = require('./ui/pages/scheduled_posts.js');
|
|
16
16
|
var drafts = require('./ui/pages/drafts.js');
|
|
17
17
|
var test = require('@playwright/test');
|
|
18
|
+
var index = require('./ui/components/index.js');
|
|
19
|
+
var global_header = require('./ui/components/global_header.js');
|
|
20
|
+
var search_box = require('./ui/components/channels/search_box.js');
|
|
21
|
+
var center_view = require('./ui/components/channels/center_view.js');
|
|
22
|
+
var sidebar_left = require('./ui/components/channels/sidebar_left.js');
|
|
23
|
+
var sidebar_right = require('./ui/components/channels/sidebar_right.js');
|
|
24
|
+
var app_bar = require('./ui/components/channels/app_bar.js');
|
|
25
|
+
var header = require('./ui/components/channels/header.js');
|
|
26
|
+
var post_create = require('./ui/components/channels/post_create.js');
|
|
27
|
+
var post_edit = require('./ui/components/channels/post_edit.js');
|
|
28
|
+
var post = require('./ui/components/channels/post.js');
|
|
29
|
+
var channel_settings_modal = require('./ui/components/channels/channel_settings/channel_settings_modal.js');
|
|
30
|
+
var draft_post = require('./ui/components/channels/draft_post.js');
|
|
31
|
+
var find_channels_modal = require('./ui/components/channels/find_channels_modal.js');
|
|
32
|
+
var delete_post_modal = require('./ui/components/channels/delete_post_modal.js');
|
|
33
|
+
var delete_scheduled_post_modal = require('./ui/components/channels/delete_scheduled_post_modal.js');
|
|
34
|
+
var settings_modal = require('./ui/components/channels/settings/settings_modal.js');
|
|
35
|
+
var post_dot_menu = require('./ui/components/channels/post_dot_menu.js');
|
|
36
|
+
var post_menu = require('./ui/components/channels/post_menu.js');
|
|
37
|
+
var thread_footer = require('./ui/components/channels/thread_footer.js');
|
|
38
|
+
var footer = require('./ui/components/footer.js');
|
|
39
|
+
var main_header = require('./ui/components/main_header.js');
|
|
40
|
+
var post_reminder_menu = require('./ui/components/channels/post_reminder_menu.js');
|
|
41
|
+
var emoji_gif_picker = require('./ui/components/channels/emoji_gif_picker.js');
|
|
42
|
+
var generic_confirm_modal = require('./ui/components/channels/generic_confirm_modal.js');
|
|
43
|
+
var schedule_message_menu = require('./ui/components/channels/schedule_message_menu.js');
|
|
44
|
+
var schedule_message_modal = require('./ui/components/channels/schedule_message_modal.js');
|
|
45
|
+
var scheduled_post_indicator = require('./ui/components/channels/scheduled_post_indicator.js');
|
|
46
|
+
var scheduled_draft_modal = require('./ui/components/channels/scheduled_draft_modal.js');
|
|
47
|
+
var scheduled_post = require('./ui/components/channels/scheduled_post.js');
|
|
48
|
+
var send_message_now_modal = require('./ui/components/channels/send_message_now_modal.js');
|
|
49
|
+
var sidebar = require('./ui/components/system_console/sidebar.js');
|
|
50
|
+
var navbar = require('./ui/components/system_console/navbar.js');
|
|
51
|
+
var system_users = require('./ui/components/system_console/sections/system_users/system_users.js');
|
|
52
|
+
var filter_popover = require('./ui/components/system_console/sections/system_users/filter_popover.js');
|
|
53
|
+
var filter_menu = require('./ui/components/system_console/sections/system_users/filter_menu.js');
|
|
54
|
+
var column_toggle_menu = require('./ui/components/system_console/sections/system_users/column_toggle_menu.js');
|
|
55
|
+
var feature_discovery = require('./ui/components/system_console/sections/system_users/feature_discovery.js');
|
|
56
|
+
var mobile_security = require('./ui/components/system_console/sections/system_users/mobile_security.js');
|
|
57
|
+
var message_priority = require('./ui/components/channels/message_priority.js');
|
|
58
|
+
var user_profile_popover = require('./ui/components/channels/user_profile_popover.js');
|
|
59
|
+
var user_account_menu = require('./ui/components/user_account_menu.js');
|
|
60
|
+
var delete_post_confirmation_dialog = require('./ui/components/channels/delete_post_confirmation_dialog.js');
|
|
61
|
+
var restore_post_confirmation_dialog = require('./ui/components/channels/restore_post_confirmation_dialog.js');
|
|
62
|
+
var profile_modal = require('./ui/components/channels/profile_modal.js');
|
|
18
63
|
|
|
19
64
|
|
|
20
65
|
|
|
@@ -33,10 +78,55 @@ exports.LoginPage = login;
|
|
|
33
78
|
exports.ResetPasswordPage = reset_password;
|
|
34
79
|
exports.SignupPage = signup;
|
|
35
80
|
exports.SystemConsolePage = system_console;
|
|
36
|
-
exports.
|
|
37
|
-
exports.
|
|
81
|
+
exports.ScheduledPostsPage = scheduled_posts;
|
|
82
|
+
exports.DraftsPage = drafts;
|
|
38
83
|
Object.defineProperty(exports, "expect", {
|
|
39
84
|
enumerable: true,
|
|
40
85
|
get: function () { return test.expect; }
|
|
41
86
|
});
|
|
87
|
+
exports.components = index.components;
|
|
88
|
+
exports.GlobalHeader = global_header;
|
|
89
|
+
exports.SearchBox = search_box;
|
|
90
|
+
exports.ChannelsCenterView = center_view;
|
|
91
|
+
exports.ChannelsSidebarLeft = sidebar_left;
|
|
92
|
+
exports.ChannelsSidebarRight = sidebar_right;
|
|
93
|
+
exports.ChannelsAppBar = app_bar;
|
|
94
|
+
exports.ChannelsHeader = header;
|
|
95
|
+
exports.ChannelsPostCreate = post_create;
|
|
96
|
+
exports.ChannelsPostEdit = post_edit;
|
|
97
|
+
exports.ChannelsPost = post;
|
|
98
|
+
exports.ChannelSettingsModal = channel_settings_modal;
|
|
99
|
+
exports.DraftPost = draft_post;
|
|
100
|
+
exports.FindChannelsModal = find_channels_modal;
|
|
101
|
+
exports.DeletePostModal = delete_post_modal;
|
|
102
|
+
exports.DeleteScheduledPostModal = delete_scheduled_post_modal;
|
|
103
|
+
exports.SettingsModal = settings_modal;
|
|
104
|
+
exports.PostDotMenu = post_dot_menu;
|
|
105
|
+
exports.PostMenu = post_menu;
|
|
106
|
+
exports.ThreadFooter = thread_footer;
|
|
107
|
+
exports.Footer = footer;
|
|
108
|
+
exports.MainHeader = main_header;
|
|
109
|
+
exports.PostReminderMenu = post_reminder_menu;
|
|
110
|
+
exports.EmojiGifPicker = emoji_gif_picker;
|
|
111
|
+
exports.GenericConfirmModal = generic_confirm_modal;
|
|
112
|
+
exports.ScheduleMessageMenu = schedule_message_menu;
|
|
113
|
+
exports.ScheduleMessageModal = schedule_message_modal;
|
|
114
|
+
exports.ScheduledPostIndicator = scheduled_post_indicator;
|
|
115
|
+
exports.ScheduledDraftModal = scheduled_draft_modal;
|
|
116
|
+
exports.ScheduledPost = scheduled_post;
|
|
117
|
+
exports.SendMessageNowModal = send_message_now_modal;
|
|
118
|
+
exports.SystemConsoleSidebar = sidebar;
|
|
119
|
+
exports.SystemConsoleNavbar = navbar;
|
|
120
|
+
exports.SystemUsers = system_users;
|
|
121
|
+
exports.SystemUsersFilterPopover = filter_popover;
|
|
122
|
+
exports.SystemUsersFilterMenu = filter_menu;
|
|
123
|
+
exports.SystemUsersColumnToggleMenu = column_toggle_menu;
|
|
124
|
+
exports.SystemConsoleFeatureDiscovery = feature_discovery;
|
|
125
|
+
exports.SystemConsoleMobileSecurity = mobile_security;
|
|
126
|
+
exports.MessagePriority = message_priority;
|
|
127
|
+
exports.UserProfilePopover = user_profile_popover;
|
|
128
|
+
exports.UserAccountMenu = user_account_menu;
|
|
129
|
+
exports.DeletePostConfirmationDialog = delete_post_confirmation_dialog;
|
|
130
|
+
exports.RestorePostConfirmationDialog = restore_post_confirmation_dialog;
|
|
131
|
+
exports.ProfileModal = profile_modal;
|
|
42
132
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock_browser_api.js","sources":["../src/mock_browser_api.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\ntype NotificationData = {title: string} & NotificationOptions;\n\n// Extend the Window interface to add custom properties\ndeclare global {\n interface Window {\n _originalNotification: typeof Notification;\n _notifications: NotificationData[];\n getNotifications: () => NotificationData[];\n }\n}\n\n/**\n * `stubNotification` intercepts the Notification API to capture notifications.\n *\n * Note:\n * - Works across browsers and devices, except in headless mode, where stubbing the Notification API is supported only in Firefox and WebKit.\n * - An `Error: page.evaluate: window.getNotifications is not a function` may occur if the `stubNotification` function is called before the page has fully loaded.\n *\n * @param page Page object\n * @param permission Permission setting for notifications, with possible values: \"default\" | \"granted\" | \"denied\". Note: A notification sound may still occur even when set to \"denied\", as the browser might attempt to trigger system notifications.\n */\nexport async function stubNotification(page: Page, permission: NotificationPermission) {\n await page.evaluate((notificationPermission: NotificationPermission) => {\n // Override the Notification.requestPermission method\n window.Notification.requestPermission = () => Promise.resolve(permission);\n\n // Copy the original Notification\n if (!window._originalNotification) {\n window._originalNotification = window.Notification;\n }\n\n // Initialize a list where to capture the notifications\n window._notifications = [];\n\n // Override the Notification constructor\n class CustomNotification extends window._originalNotification {\n constructor(title: string, options?: NotificationOptions) {\n super(title, options);\n const notification = {title, ...options};\n window._notifications.push(notification);\n }\n }\n\n // Set static properties and permission status\n Object.defineProperties(CustomNotification, {\n permission: {\n get: () => notificationPermission,\n },\n requestPermission: {\n value: () => Promise.resolve(notificationPermission),\n },\n });\n\n // Replace the global Notification with the custom one\n window.Notification = CustomNotification as unknown as typeof Notification;\n\n // Method to get all notifications\n window.getNotifications = () => window._notifications;\n }, permission);\n}\n\n/**\n * `waitForNotification` waits for a specified number of notifications to be received on the page within a given timeout.\n * @param page Page object\n * @param expectedCount Number of notifications to wait for before returning. (default: 1)\n * @param timeout Wait time in milliseconds. (default: 5000ms)\n * @returns An array of notifications received\n */\nexport async function waitForNotification(\n page: Page,\n expectedCount = 1,\n timeout: number = 5000,\n): Promise<NotificationData[]> {\n const start = Date.now();\n while (Date.now() - start < timeout) {\n const notifications = await page.evaluate(() => window.getNotifications());\n if (notifications.length >= expectedCount) {\n return notifications;\n }\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n // eslint-disable-next-line no-console\n console.error(`Notification not received within the timeout period of ${timeout}ms`);\n return [];\n}\n"],"names":[],"mappings":";;AAAA;AACA;AAeA;;;;;;;;;AASG;AACI,eAAe,gBAAgB,CAAC,IAAU,EAAE,UAAkC,EAAA;AACjF,IAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,sBAA8C,KAAI;;AAEnE,QAAA,MAAM,CAAC,YAAY,CAAC,iBAAiB,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;;AAGzE,QAAA,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE;AAC/B,YAAA,MAAM,CAAC,qBAAqB,GAAG,MAAM,CAAC,YAAY
|
|
1
|
+
{"version":3,"file":"mock_browser_api.js","sources":["../src/mock_browser_api.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\ntype NotificationData = {title: string} & NotificationOptions;\n\n// Extend the Window interface to add custom properties\ndeclare global {\n interface Window {\n _originalNotification: typeof Notification;\n _notifications: NotificationData[];\n getNotifications: () => NotificationData[];\n }\n}\n\n/**\n * `stubNotification` intercepts the Notification API to capture notifications.\n *\n * Note:\n * - Works across browsers and devices, except in headless mode, where stubbing the Notification API is supported only in Firefox and WebKit.\n * - An `Error: page.evaluate: window.getNotifications is not a function` may occur if the `stubNotification` function is called before the page has fully loaded.\n *\n * @param page Page object\n * @param permission Permission setting for notifications, with possible values: \"default\" | \"granted\" | \"denied\". Note: A notification sound may still occur even when set to \"denied\", as the browser might attempt to trigger system notifications.\n */\nexport async function stubNotification(page: Page, permission: NotificationPermission) {\n await page.evaluate((notificationPermission: NotificationPermission) => {\n // Override the Notification.requestPermission method\n window.Notification.requestPermission = () => Promise.resolve(permission);\n\n // Copy the original Notification\n if (!window._originalNotification) {\n window._originalNotification = window.Notification;\n }\n\n // Initialize a list where to capture the notifications\n window._notifications = [];\n\n // Override the Notification constructor\n class CustomNotification extends window._originalNotification {\n constructor(title: string, options?: NotificationOptions) {\n super(title, options);\n const notification = {title, ...options};\n window._notifications.push(notification);\n }\n }\n\n // Set static properties and permission status\n Object.defineProperties(CustomNotification, {\n permission: {\n get: () => notificationPermission,\n },\n requestPermission: {\n value: () => Promise.resolve(notificationPermission),\n },\n });\n\n // Replace the global Notification with the custom one\n window.Notification = CustomNotification as unknown as typeof Notification;\n\n // Method to get all notifications\n window.getNotifications = () => window._notifications;\n }, permission);\n}\n\n/**\n * `waitForNotification` waits for a specified number of notifications to be received on the page within a given timeout.\n * @param page Page object\n * @param expectedCount Number of notifications to wait for before returning. (default: 1)\n * @param timeout Wait time in milliseconds. (default: 5000ms)\n * @returns An array of notifications received\n */\nexport async function waitForNotification(\n page: Page,\n expectedCount = 1,\n timeout: number = 5000,\n): Promise<NotificationData[]> {\n const start = Date.now();\n while (Date.now() - start < timeout) {\n const notifications = await page.evaluate(() => window.getNotifications());\n if (notifications.length >= expectedCount) {\n return notifications;\n }\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n // eslint-disable-next-line no-console\n console.error(`Notification not received within the timeout period of ${timeout}ms`);\n return [];\n}\n"],"names":[],"mappings":";;AAAA;AACA;AAeA;;;;;;;;;AASG;AACI,eAAe,gBAAgB,CAAC,IAAU,EAAE,UAAkC,EAAA;AACjF,IAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,sBAA8C,KAAI;;AAEnE,QAAA,MAAM,CAAC,YAAY,CAAC,iBAAiB,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;;AAGzE,QAAA,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE;AAC/B,YAAA,MAAM,CAAC,qBAAqB,GAAG,MAAM,CAAC,YAAY;QACtD;;AAGA,QAAA,MAAM,CAAC,cAAc,GAAG,EAAE;;AAG1B,QAAA,MAAM,kBAAmB,SAAQ,MAAM,CAAC,qBAAqB,CAAA;YACzD,WAAA,CAAY,KAAa,EAAE,OAA6B,EAAA;AACpD,gBAAA,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;gBACrB,MAAM,YAAY,GAAG,EAAC,KAAK,EAAE,GAAG,OAAO,EAAC;AACxC,gBAAA,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC;YAC5C;AACH;;AAGD,QAAA,MAAM,CAAC,gBAAgB,CAAC,kBAAkB,EAAE;AACxC,YAAA,UAAU,EAAE;AACR,gBAAA,GAAG,EAAE,MAAM,sBAAsB;AACpC,aAAA;AACD,YAAA,iBAAiB,EAAE;gBACf,KAAK,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC;AACvD,aAAA;AACJ,SAAA,CAAC;;AAGF,QAAA,MAAM,CAAC,YAAY,GAAG,kBAAoD;;QAG1E,MAAM,CAAC,gBAAgB,GAAG,MAAM,MAAM,CAAC,cAAc;IACzD,CAAC,EAAE,UAAU,CAAC;AAClB;AAEA;;;;;;AAMG;AACI,eAAe,mBAAmB,CACrC,IAAU,EACV,aAAa,GAAG,CAAC,EACjB,OAAA,GAAkB,IAAI,EAAA;AAEtB,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE;IACxB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,OAAO,EAAE;AACjC,QAAA,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAA,IAAI,aAAa,CAAC,MAAM,IAAI,aAAa,EAAE;AACvC,YAAA,OAAO,aAAa;QACxB;AACA,QAAA,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC5D;;AAEA,IAAA,OAAO,CAAC,KAAK,CAAC,0DAA0D,OAAO,CAAA,EAAA,CAAI,CAAC;AACpF,IAAA,OAAO,EAAE;AACb;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.js","sources":["../../src/server/channel.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Channel, ChannelType} from '@mattermost/types/channels';\n\nimport {getRandomId} from '@/util';\n\ntype ChannelInput = {\n teamId: string;\n name: string;\n displayName: string;\n type?: ChannelType;\n purpose?: string;\n header?: string;\n unique?: boolean;\n};\n\nexport function createRandomChannel(channelInput: ChannelInput): Channel {\n const channel = {\n team_id: channelInput.teamId,\n name: channelInput.name,\n display_name: channelInput.displayName,\n type: channelInput.type || 'O',\n purpose: channelInput.type || '',\n header: channelInput.type || '',\n };\n\n if (channelInput.unique) {\n const randomSuffix = getRandomId();\n\n channel.name = `${channelInput.name}-${randomSuffix}`;\n channel.display_name = `${channelInput.displayName} ${randomSuffix}`;\n }\n\n return channel as Channel;\n}\n"],"names":["getRandomId"],"mappings":";;;;AAAA;AACA;AAgBM,SAAU,mBAAmB,CAAC,YAA0B,EAAA;AAC1D,IAAA,MAAM,OAAO,GAAG;QACZ,OAAO,EAAE,YAAY,CAAC,MAAM;QAC5B,IAAI,EAAE,YAAY,CAAC,IAAI;QACvB,YAAY,EAAE,YAAY,CAAC,WAAW;AACtC,QAAA,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI,GAAG;AAC9B,QAAA,OAAO,EAAE,YAAY,CAAC,IAAI,IAAI,EAAE;AAChC,QAAA,MAAM,EAAE,YAAY,CAAC,IAAI,IAAI,EAAE;KAClC;AAED,IAAA,IAAI,YAAY,CAAC,MAAM,EAAE;AACrB,QAAA,MAAM,YAAY,GAAGA,gBAAW,EAAE;QAElC,OAAO,CAAC,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"channel.js","sources":["../../src/server/channel.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Channel, ChannelType} from '@mattermost/types/channels';\n\nimport {getRandomId} from '@/util';\n\ntype ChannelInput = {\n teamId: string;\n name: string;\n displayName: string;\n type?: ChannelType;\n purpose?: string;\n header?: string;\n unique?: boolean;\n};\n\nexport function createRandomChannel(channelInput: ChannelInput): Channel {\n const channel = {\n team_id: channelInput.teamId,\n name: channelInput.name,\n display_name: channelInput.displayName,\n type: channelInput.type || 'O',\n purpose: channelInput.type || '',\n header: channelInput.type || '',\n };\n\n if (channelInput.unique) {\n const randomSuffix = getRandomId();\n\n channel.name = `${channelInput.name}-${randomSuffix}`;\n channel.display_name = `${channelInput.displayName} ${randomSuffix}`;\n }\n\n return channel as Channel;\n}\n"],"names":["getRandomId"],"mappings":";;;;AAAA;AACA;AAgBM,SAAU,mBAAmB,CAAC,YAA0B,EAAA;AAC1D,IAAA,MAAM,OAAO,GAAG;QACZ,OAAO,EAAE,YAAY,CAAC,MAAM;QAC5B,IAAI,EAAE,YAAY,CAAC,IAAI;QACvB,YAAY,EAAE,YAAY,CAAC,WAAW;AACtC,QAAA,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI,GAAG;AAC9B,QAAA,OAAO,EAAE,YAAY,CAAC,IAAI,IAAI,EAAE;AAChC,QAAA,MAAM,EAAE,YAAY,CAAC,IAAI,IAAI,EAAE;KAClC;AAED,IAAA,IAAI,YAAY,CAAC,MAAM,EAAE;AACrB,QAAA,MAAM,YAAY,GAAGA,gBAAW,EAAE;QAElC,OAAO,CAAC,IAAI,GAAG,CAAA,EAAG,YAAY,CAAC,IAAI,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE;QACrD,OAAO,CAAC,YAAY,GAAG,CAAA,EAAG,YAAY,CAAC,WAAW,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE;IACxE;AAEA,IAAA,OAAO,OAAkB;AAC7B;;;;"}
|
package/dist/server/client.d.ts
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { Client4 } from '@mattermost/client';
|
|
2
|
+
import { AdminConfig } from '@mattermost/types/config';
|
|
2
3
|
import { UserProfile } from '@mattermost/types/users';
|
|
4
|
+
declare module '@mattermost/client' {
|
|
5
|
+
interface Client4 {
|
|
6
|
+
updateConfigX: (config: Partial<AdminConfig>) => Promise<AdminConfig>;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
3
9
|
export declare function makeClient(userRequest?: UserRequest, opts?: {
|
|
4
10
|
useCache?: boolean;
|
|
5
11
|
skipLog?: boolean;
|
package/dist/server/client.js
CHANGED
|
@@ -5,6 +5,12 @@ var test_config = require('../test_config.js');
|
|
|
5
5
|
|
|
6
6
|
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
7
7
|
// See LICENSE.txt for license information.
|
|
8
|
+
// updateConfigX merges the given config with the current config and updates it to the server
|
|
9
|
+
client.Client4.prototype.updateConfigX = async function (config) {
|
|
10
|
+
const currentConfig = await this.getConfig();
|
|
11
|
+
const newConfig = { ...currentConfig, ...config };
|
|
12
|
+
return await this.updateConfig(newConfig);
|
|
13
|
+
};
|
|
8
14
|
// Variable to hold cache
|
|
9
15
|
const clients = {};
|
|
10
16
|
async function makeClient(userRequest, opts = { useCache: true, skipLog: false }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sources":["../../src/server/client.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} from '@mattermost/types/users';\n\nimport {testConfig} from '@/test_config';\n\n// Variable to hold cache\nconst clients: Record<string, ClientCache> = {};\n\nexport async function makeClient(\n userRequest?: UserRequest,\n opts: {useCache?: boolean; skipLog?: boolean} = {useCache: true, skipLog: false},\n): Promise<ClientCache> {\n const client = new Client4();\n client.setUrl(testConfig.baseURL);\n\n try {\n if (!userRequest) {\n return {client, user: null};\n }\n\n const cacheKey = userRequest.username + userRequest.password;\n if (opts?.useCache && clients[cacheKey] != null) {\n return clients[cacheKey];\n }\n\n const userProfile = await client.login(userRequest.username, userRequest.password);\n const user = {...userProfile, password: userRequest.password};\n\n if (opts?.useCache) {\n clients[cacheKey] = {client, user};\n }\n\n return {client, user};\n } catch (err) {\n if (!opts?.skipLog) {\n // log an error for debugging\n // eslint-disable-next-line no-console\n console.log('makeClient', err);\n }\n return {client, user: null};\n }\n}\n\n// Client types\n\ntype UserRequest = {\n username: string;\n email?: string;\n password: string;\n};\n\ntype ClientCache = {\n client: Client4;\n user: UserProfile | null;\n};\n"],"names":["
|
|
1
|
+
{"version":3,"file":"client.js","sources":["../../src/server/client.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 {AdminConfig} from '@mattermost/types/config';\nimport {UserProfile} from '@mattermost/types/users';\n\nimport {testConfig} from '@/test_config';\n\n// Extend Client4 with methods used for testing\ndeclare module '@mattermost/client' {\n interface Client4 {\n updateConfigX: (config: Partial<AdminConfig>) => Promise<AdminConfig>;\n }\n}\n\n// updateConfigX merges the given config with the current config and updates it to the server\nClient4.prototype.updateConfigX = async function (this: Client4, config: Partial<AdminConfig>) {\n const currentConfig = await this.getConfig();\n const newConfig = {...currentConfig, ...config};\n return await this.updateConfig(newConfig);\n};\n\n// Variable to hold cache\nconst clients: Record<string, ClientCache> = {};\n\nexport async function makeClient(\n userRequest?: UserRequest,\n opts: {useCache?: boolean; skipLog?: boolean} = {useCache: true, skipLog: false},\n): Promise<ClientCache> {\n const client = new Client4();\n client.setUrl(testConfig.baseURL);\n\n try {\n if (!userRequest) {\n return {client, user: null};\n }\n\n const cacheKey = userRequest.username + userRequest.password;\n if (opts?.useCache && clients[cacheKey] != null) {\n return clients[cacheKey];\n }\n\n const userProfile = await client.login(userRequest.username, userRequest.password);\n const user = {...userProfile, password: userRequest.password};\n\n if (opts?.useCache) {\n clients[cacheKey] = {client, user};\n }\n\n return {client, user};\n } catch (err) {\n if (!opts?.skipLog) {\n // log an error for debugging\n // eslint-disable-next-line no-console\n console.log('makeClient', err);\n }\n return {client, user: null};\n }\n}\n\n// Client types\n\ntype UserRequest = {\n username: string;\n email?: string;\n password: string;\n};\n\ntype ClientCache = {\n client: Client4;\n user: UserProfile | null;\n};\n"],"names":["Client4","client","testConfig"],"mappings":";;;;;AAAA;AACA;AAeA;AACAA,cAAO,CAAC,SAAS,CAAC,aAAa,GAAG,gBAA+B,MAA4B,EAAA;AACzF,IAAA,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE;IAC5C,MAAM,SAAS,GAAG,EAAC,GAAG,aAAa,EAAE,GAAG,MAAM,EAAC;AAC/C,IAAA,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;AAC7C,CAAC;AAED;AACA,MAAM,OAAO,GAAgC,EAAE;AAExC,eAAe,UAAU,CAC5B,WAAyB,EACzB,IAAA,GAAgD,EAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAC,EAAA;AAEhF,IAAA,MAAMC,QAAM,GAAG,IAAID,cAAO,EAAE;AAC5B,IAAAC,QAAM,CAAC,MAAM,CAACC,sBAAU,CAAC,OAAO,CAAC;AAEjC,IAAA,IAAI;QACA,IAAI,CAAC,WAAW,EAAE;AACd,YAAA,OAAO,UAACD,QAAM,EAAE,IAAI,EAAE,IAAI,EAAC;QAC/B;QAEA,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ;QAC5D,IAAI,IAAI,EAAE,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE;AAC7C,YAAA,OAAO,OAAO,CAAC,QAAQ,CAAC;QAC5B;AAEA,QAAA,MAAM,WAAW,GAAG,MAAMA,QAAM,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC;AAClF,QAAA,MAAM,IAAI,GAAG,EAAC,GAAG,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAC;AAE7D,QAAA,IAAI,IAAI,EAAE,QAAQ,EAAE;YAChB,OAAO,CAAC,QAAQ,CAAC,GAAG,UAACA,QAAM,EAAE,IAAI,EAAC;QACtC;AAEA,QAAA,OAAO,UAACA,QAAM,EAAE,IAAI,EAAC;IACzB;IAAE,OAAO,GAAG,EAAE;AACV,QAAA,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE;;;AAGhB,YAAA,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC;QAClC;AACA,QAAA,OAAO,UAACA,QAAM,EAAE,IAAI,EAAE,IAAI,EAAC;IAC/B;AACJ;;;;"}
|