@bigbinary/neeto-playwright-commons 1.8.39 → 1.8.40
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/index.cjs.js +108 -11
- package/index.cjs.js.map +1 -1
- package/index.d.ts +44 -12
- package/index.js +108 -13
- package/index.js.map +1 -1
- package/package.json +1 -1
package/index.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import MailosaurClient from 'mailosaur';
|
|
|
5
5
|
import { I18nPlaywrightFixture } from 'playwright-i18next-fixture';
|
|
6
6
|
import { TFunction } from 'i18next';
|
|
7
7
|
import { Protocol } from 'playwright-core/types/protocol';
|
|
8
|
+
import * as ts_toolbelt_out_Function_Curry from 'ts-toolbelt/out/Function/Curry';
|
|
8
9
|
import * as playwright_core from 'playwright-core';
|
|
9
10
|
import { Secret, TOTP } from 'otpauth';
|
|
10
11
|
|
|
@@ -230,7 +231,7 @@ declare class HelpAndProfilePage {
|
|
|
230
231
|
|
|
231
232
|
type Integration = "dailyco" | "github" | "google-calendar" | "google-analytics" | "google-sheets" | "microsoft-teams" | "neeto-chat" | "neeto-crm" | "slack" | "twilio" | "whereby" | "zapier" | "zoom";
|
|
232
233
|
type IntegrationStatus = "connected" | "disconnected";
|
|
233
|
-
type PartialInterceptMultipleResponsesParams = Partial<InterceptMultipleResponsesParams>;
|
|
234
|
+
type PartialInterceptMultipleResponsesParams$1 = Partial<InterceptMultipleResponsesParams>;
|
|
234
235
|
interface IntegrationBaseParams {
|
|
235
236
|
page: Page;
|
|
236
237
|
neetoPlaywrightUtilities: CustomCommands;
|
|
@@ -239,7 +240,7 @@ interface IntegrationBaseParams {
|
|
|
239
240
|
connectHeader?: string;
|
|
240
241
|
pageloaderTimeout?: number;
|
|
241
242
|
integrationRouteIndex?: string;
|
|
242
|
-
integrationRouteResponsesParams?: PartialInterceptMultipleResponsesParams;
|
|
243
|
+
integrationRouteResponsesParams?: PartialInterceptMultipleResponsesParams$1;
|
|
243
244
|
}
|
|
244
245
|
declare class IntegrationBase {
|
|
245
246
|
readonly page: Page;
|
|
@@ -251,17 +252,24 @@ declare class IntegrationBase {
|
|
|
251
252
|
readonly connectedHeader: string;
|
|
252
253
|
pageloaderTimeout: number;
|
|
253
254
|
integrationRouteIndex: string;
|
|
254
|
-
integrationRouteResponsesParams: PartialInterceptMultipleResponsesParams;
|
|
255
|
+
integrationRouteResponsesParams: PartialInterceptMultipleResponsesParams$1;
|
|
255
256
|
constructor({ page, neetoPlaywrightUtilities, integration, connectHeader, connectedHeader, pageloaderTimeout, integrationRouteIndex, integrationRouteResponsesParams, }: IntegrationBaseParams);
|
|
256
|
-
disconnect: (interceptMultipleResponsesParams?: PartialInterceptMultipleResponsesParams) => Promise<void>;
|
|
257
|
+
disconnect: (interceptMultipleResponsesParams?: PartialInterceptMultipleResponsesParams$1) => Promise<void>;
|
|
257
258
|
connect: (skipGoTo?: boolean) => Promise<void>;
|
|
258
259
|
verifyIntegrationStatus: (status?: IntegrationStatus) => Promise<void>;
|
|
259
260
|
clickOnIntegrationCard: () => Promise<void>;
|
|
260
|
-
|
|
261
|
+
gotoIntegrationIndex: () => Promise<void>;
|
|
261
262
|
}
|
|
262
263
|
|
|
263
264
|
type AsyncNoArgsFunction = () => Promise<void>;
|
|
264
265
|
type RedirectUrl = string | RegExp | ((url: URL) => boolean);
|
|
266
|
+
type PartialInterceptMultipleResponsesParams = Partial<InterceptMultipleResponsesParams>;
|
|
267
|
+
type UpdateConfigureSlackChannelParams = {
|
|
268
|
+
newSlackChannel: string;
|
|
269
|
+
interceptMultipleResponsesParams?: PartialInterceptMultipleResponsesParams;
|
|
270
|
+
refreshInterceptMultipleResponsesParams?: PartialInterceptMultipleResponsesParams;
|
|
271
|
+
refreshChannelList?: boolean;
|
|
272
|
+
};
|
|
265
273
|
type SlackPageParams = {
|
|
266
274
|
page: Page;
|
|
267
275
|
neetoPlaywrightUtilities: CustomCommands;
|
|
@@ -269,16 +277,20 @@ type SlackPageParams = {
|
|
|
269
277
|
};
|
|
270
278
|
declare class SlackPage extends IntegrationBase {
|
|
271
279
|
slackWebappPage: Page;
|
|
280
|
+
slackWebappPageDataQa: (dataQa: string | [string, string]) => Locator;
|
|
272
281
|
constructor({ page, neetoPlaywrightUtilities, integrationRouteIndex, }: SlackPageParams);
|
|
273
|
-
connectAndVerifyIntegration: (redirectUrl: RedirectUrl, customSteps?: AsyncNoArgsFunction) => Promise<void>;
|
|
282
|
+
connectAndVerifyIntegration: (redirectUrl: RedirectUrl, customSteps?: AsyncNoArgsFunction, channelToConfigure?: string) => Promise<void>;
|
|
274
283
|
disconnectAndVerifyIntegration: () => Promise<void>;
|
|
275
|
-
updateConfigureSlackChannel: ({ newSlackChannel, interceptMultipleResponsesParams, }:
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
}) => Promise<void>;
|
|
279
|
-
loginToSlackWebapp: (slackWebappPage: Page) => Promise<void>;
|
|
284
|
+
updateConfigureSlackChannel: ({ newSlackChannel, interceptMultipleResponsesParams, refreshInterceptMultipleResponsesParams, refreshChannelList, }: UpdateConfigureSlackChannelParams) => Promise<void>;
|
|
285
|
+
clickOnChannelListRefreshButton: (refreshInterceptMultipleResponsesParams?: PartialInterceptMultipleResponsesParams) => Promise<void>;
|
|
286
|
+
loginToSlackWebapp: (slackWebappPage: Page, customCredentials?: Record<"workspace" | "loginPassword" | "loginEmail", string | undefined>) => Promise<void>;
|
|
280
287
|
logoutFromSlackWebApp: () => Promise<void>;
|
|
281
288
|
goToSlackChannel: (slackChannel: string) => Promise<void>;
|
|
289
|
+
createNewSlackChannel: ({ channelName, kind, }: {
|
|
290
|
+
channelName: string;
|
|
291
|
+
kind?: "public" | "private" | undefined;
|
|
292
|
+
}) => Promise<void>;
|
|
293
|
+
deleteSlackChannel: (channel: string) => Promise<void>;
|
|
282
294
|
}
|
|
283
295
|
|
|
284
296
|
interface WebhooksPageParams {
|
|
@@ -667,6 +679,21 @@ declare const SLACK_SELECTORS: {
|
|
|
667
679
|
replyBar: string;
|
|
668
680
|
markdownElement: string;
|
|
669
681
|
virtualListItem: string;
|
|
682
|
+
channelItems: string;
|
|
683
|
+
};
|
|
684
|
+
declare const SLACK_DATA_QA_SELECTORS: {
|
|
685
|
+
sectionHeadingButton: string;
|
|
686
|
+
channelSectionSubmenuCreate: string;
|
|
687
|
+
channelSectionMenuCreateChannel: string;
|
|
688
|
+
skModalContent: string;
|
|
689
|
+
infiniteSpinner: string;
|
|
690
|
+
channelNameOptionsList: string;
|
|
691
|
+
channelNameInput: string;
|
|
692
|
+
createChannelNextButton: string;
|
|
693
|
+
inviteToWorkspaceSkipButton: string;
|
|
694
|
+
menuItems: string;
|
|
695
|
+
channelDetailsModal: string;
|
|
696
|
+
channelDetailsSettingsTab: string;
|
|
670
697
|
};
|
|
671
698
|
|
|
672
699
|
declare const INTEGRATION_SELECTORS: {
|
|
@@ -692,6 +719,10 @@ declare const SLACK_WEB_TEXTS: {
|
|
|
692
719
|
signOut: string;
|
|
693
720
|
allow: string;
|
|
694
721
|
loadingThread: string;
|
|
722
|
+
name: string;
|
|
723
|
+
deleteThisChannel: string;
|
|
724
|
+
permanentlyDeleteTheChannel: string;
|
|
725
|
+
deleteChannel: string;
|
|
695
726
|
};
|
|
696
727
|
|
|
697
728
|
declare const initializeCredentials: (product: string) => void;
|
|
@@ -733,6 +764,7 @@ declare const skipTest: {
|
|
|
733
764
|
declare const shouldSkipSetupAndTeardown: () => boolean | "";
|
|
734
765
|
declare const squish: (text: string) => string;
|
|
735
766
|
declare const toCamelCase: (string: string) => string;
|
|
767
|
+
declare const getByDataQA: ts_toolbelt_out_Function_Curry.Curry<(page: Page, dataQa: string | [string, string]) => playwright_core.Locator>;
|
|
736
768
|
|
|
737
769
|
interface LoginProps {
|
|
738
770
|
page: Page;
|
|
@@ -840,4 +872,4 @@ interface Overrides {
|
|
|
840
872
|
}
|
|
841
873
|
declare const definePlaywrightConfig: (overrides: Overrides) => _playwright_test.PlaywrightTestConfig<{}, {}>;
|
|
842
874
|
|
|
843
|
-
export { API_ROUTES, BASE_URL, CHANGELOG_WIDGET_SELECTORS, CHAT_WIDGET_SELECTORS, CHAT_WIDGET_TEXTS, COMMON_SELECTORS, CREDENTIALS, CustomCommands, type CustomFixture, ENVIRONMENT, EmbedBase, GLOBAL_TRANSLATIONS_PATTERN, HELP_CENTER_SELECTORS, HelpAndProfilePage, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IS_STAGING_ENV, IntegrationBase, KEYBOARD_SHORTCUTS_SELECTORS, LOGIN_SELECTORS, MEMBER_FORM_SELECTORS, MEMBER_SELECTORS, MEMBER_TEXTS, MERGE_TAGS_SELECTORS, MailosaurUtils, NEETO_AUTH_BASE_URL, NEETO_EDITOR_SELECTORS, NEETO_FILTERS_SELECTORS, OTP_EMAIL_PATTERN, OrganizationPage, PROFILE_SECTION_SELECTORS, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES, SIGNUP_SELECTORS, SLACK_DEFAULT_CHANNEL, SLACK_SELECTORS, SLACK_WEB_TEXTS, STORAGE_STATE, SlackPage, TAGS_SELECTORS, THIRD_PARTY_ROUTES, USER_AGENTS, WebhooksPage, clearCredentials, commands, cpuThrottlingUsingCDP, decodeQRCodeFromFile, definePlaywrightConfig, executeWithThrottledResources, extractSubdomainFromError, generateStagingData, getGlobalUserState, headerUtils, hyphenize, i18nFixture, initializeCredentials, initializeTotp, joinHyphenCase, joinString, login, loginWithoutSSO, memberUtils, networkConditions, networkThrottlingUsingCDP, readFileSyncIfExists, removeCredentialFile, shouldSkipSetupAndTeardown, skipTest, squish, _default as stealthTest, tableUtils, toCamelCase, updateCredentials, writeDataToFile };
|
|
875
|
+
export { API_ROUTES, BASE_URL, CHANGELOG_WIDGET_SELECTORS, CHAT_WIDGET_SELECTORS, CHAT_WIDGET_TEXTS, COMMON_SELECTORS, CREDENTIALS, CustomCommands, type CustomFixture, ENVIRONMENT, EmbedBase, GLOBAL_TRANSLATIONS_PATTERN, HELP_CENTER_SELECTORS, HelpAndProfilePage, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IS_STAGING_ENV, IntegrationBase, KEYBOARD_SHORTCUTS_SELECTORS, LOGIN_SELECTORS, MEMBER_FORM_SELECTORS, MEMBER_SELECTORS, MEMBER_TEXTS, MERGE_TAGS_SELECTORS, MailosaurUtils, NEETO_AUTH_BASE_URL, NEETO_EDITOR_SELECTORS, NEETO_FILTERS_SELECTORS, OTP_EMAIL_PATTERN, OrganizationPage, PROFILE_SECTION_SELECTORS, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES, SIGNUP_SELECTORS, SLACK_DATA_QA_SELECTORS, SLACK_DEFAULT_CHANNEL, SLACK_SELECTORS, SLACK_WEB_TEXTS, STORAGE_STATE, SlackPage, TAGS_SELECTORS, THIRD_PARTY_ROUTES, USER_AGENTS, WebhooksPage, clearCredentials, commands, cpuThrottlingUsingCDP, decodeQRCodeFromFile, definePlaywrightConfig, executeWithThrottledResources, extractSubdomainFromError, generateStagingData, getByDataQA, getGlobalUserState, headerUtils, hyphenize, i18nFixture, initializeCredentials, initializeTotp, joinHyphenCase, joinString, login, loginWithoutSSO, memberUtils, networkConditions, networkThrottlingUsingCDP, readFileSyncIfExists, removeCredentialFile, shouldSkipSetupAndTeardown, skipTest, squish, _default as stealthTest, tableUtils, toCamelCase, updateCredentials, writeDataToFile };
|
package/index.js
CHANGED
|
@@ -2,7 +2,7 @@ import test$1, { expect, test as test$2, defineConfig, devices } from '@playwrig
|
|
|
2
2
|
import { execSync } from 'child_process';
|
|
3
3
|
import * as fs$d from 'fs';
|
|
4
4
|
import fs__default, { writeFileSync as writeFileSync$1, unlinkSync, readFileSync } from 'fs';
|
|
5
|
-
import { not, isEmpty as isEmpty$1, isNil, isNotNil, mergeDeepLeft, mergeAll } from 'ramda';
|
|
5
|
+
import { curry, not, isEmpty as isEmpty$1, isNil, isNotNil, mergeDeepLeft, mergeAll } from 'ramda';
|
|
6
6
|
import require$$0$2 from 'util';
|
|
7
7
|
import { faker } from '@faker-js/faker';
|
|
8
8
|
import MailosaurClient from 'mailosaur';
|
|
@@ -126,6 +126,16 @@ const shouldSkipSetupAndTeardown = () => { var _a; return ((_a = getGlobalUserSt
|
|
|
126
126
|
// trims and replaces multiple whitespace characters in a string with a single space
|
|
127
127
|
const squish = (text) => text.trim().replace(/\s+/g, " ");
|
|
128
128
|
const toCamelCase = (string) => string.toLowerCase().replace(/( \w)/g, letter => letter[1].toUpperCase());
|
|
129
|
+
const getByDataQA = curry((page, dataQa) => {
|
|
130
|
+
if (typeof dataQa === "string") {
|
|
131
|
+
// eslint-disable-next-line playwright/no-raw-locators
|
|
132
|
+
return page.locator(`[data-qa='${dataQa}']`);
|
|
133
|
+
}
|
|
134
|
+
// eslint-disable-next-line playwright/no-raw-locators
|
|
135
|
+
return page
|
|
136
|
+
.locator(`[data-qa='${dataQa[0]}']`)
|
|
137
|
+
.locator(`[data-qa='${dataQa[1]}']`);
|
|
138
|
+
});
|
|
129
139
|
|
|
130
140
|
const COMMON_SELECTORS = {
|
|
131
141
|
copyButton: "copy-button",
|
|
@@ -12539,6 +12549,10 @@ const SLACK_WEB_TEXTS = {
|
|
|
12539
12549
|
signOut: "Sign out",
|
|
12540
12550
|
allow: "Allow",
|
|
12541
12551
|
loadingThread: "Loading thread",
|
|
12552
|
+
name: "Name",
|
|
12553
|
+
deleteThisChannel: "Delete this channel",
|
|
12554
|
+
permanentlyDeleteTheChannel: "Yes, permanently delete the channel",
|
|
12555
|
+
deleteChannel: "Delete channel",
|
|
12542
12556
|
};
|
|
12543
12557
|
|
|
12544
12558
|
const HELP_CENTER_SELECTORS = {
|
|
@@ -12887,6 +12901,21 @@ const SLACK_SELECTORS = {
|
|
|
12887
12901
|
replyBar: "[data-qa='reply_bar']",
|
|
12888
12902
|
markdownElement: "[data-qa='bk_markdown_element']",
|
|
12889
12903
|
virtualListItem: "[data-qa='virtual-list-item']",
|
|
12904
|
+
channelItems: '[role="treeitem"][data-qa="virtual-list-item"]',
|
|
12905
|
+
};
|
|
12906
|
+
const SLACK_DATA_QA_SELECTORS = {
|
|
12907
|
+
sectionHeadingButton: "section_heading_button__channels",
|
|
12908
|
+
channelSectionSubmenuCreate: "channel_section_submenu_create",
|
|
12909
|
+
channelSectionMenuCreateChannel: "channel_section_menu__create_channel",
|
|
12910
|
+
skModalContent: "sk-modal-content",
|
|
12911
|
+
infiniteSpinner: "infinite-spinner",
|
|
12912
|
+
channelNameOptionsList: "channel-name-options-list",
|
|
12913
|
+
channelNameInput: "channel-name-input",
|
|
12914
|
+
createChannelNextButton: "create-channel-next-button",
|
|
12915
|
+
inviteToWorkspaceSkipButton: "invite_to_workspace_skip_button",
|
|
12916
|
+
menuItems: "menu_items",
|
|
12917
|
+
channelDetailsModal: "channel_details_modal",
|
|
12918
|
+
channelDetailsSettingsTab: "channel_details_settings_tab",
|
|
12890
12919
|
};
|
|
12891
12920
|
|
|
12892
12921
|
/* eslint-disable playwright/no-raw-locators */
|
|
@@ -12898,7 +12927,7 @@ class SlackPage extends IntegrationBase {
|
|
|
12898
12927
|
integration: "slack",
|
|
12899
12928
|
integrationRouteIndex,
|
|
12900
12929
|
});
|
|
12901
|
-
this.connectAndVerifyIntegration = async (redirectUrl, customSteps) => {
|
|
12930
|
+
this.connectAndVerifyIntegration = async (redirectUrl, customSteps, channelToConfigure = SLACK_DEFAULT_CHANNEL) => {
|
|
12902
12931
|
await this.connect();
|
|
12903
12932
|
await this.page
|
|
12904
12933
|
.getByRole("button", {
|
|
@@ -12921,7 +12950,11 @@ class SlackPage extends IntegrationBase {
|
|
|
12921
12950
|
teamName: currentWorkspace,
|
|
12922
12951
|
}),
|
|
12923
12952
|
})).toBeVisible();
|
|
12924
|
-
await
|
|
12953
|
+
await this.neetoPlaywrightUtilities.selectOptionFromDropdown({
|
|
12954
|
+
value: channelToConfigure,
|
|
12955
|
+
selectValueContainer: COMMON_SELECTORS.selectValueContainer,
|
|
12956
|
+
selectMenu: COMMON_SELECTORS.dropdownMenu,
|
|
12957
|
+
});
|
|
12925
12958
|
await this.page
|
|
12926
12959
|
.getByRole("button", { name: this.t("neetoSlack.common.continue") })
|
|
12927
12960
|
.click();
|
|
@@ -12944,11 +12977,14 @@ class SlackPage extends IntegrationBase {
|
|
|
12944
12977
|
await this.disconnect();
|
|
12945
12978
|
await this.verifyIntegrationStatus("disconnected");
|
|
12946
12979
|
};
|
|
12947
|
-
this.updateConfigureSlackChannel = async ({ newSlackChannel = "random", interceptMultipleResponsesParams = {}, }) => {
|
|
12980
|
+
this.updateConfigureSlackChannel = async ({ newSlackChannel = "random", interceptMultipleResponsesParams = {}, refreshInterceptMultipleResponsesParams = {}, refreshChannelList = false, }) => {
|
|
12948
12981
|
await this.page.getByTestId(INTEGRATION_SELECTORS.manageButton).click();
|
|
12949
12982
|
await this.page
|
|
12950
12983
|
.getByRole("button", { name: this.t("neetoSlack.common.edit") })
|
|
12951
12984
|
.click();
|
|
12985
|
+
if (refreshChannelList) {
|
|
12986
|
+
await this.clickOnChannelListRefreshButton(refreshInterceptMultipleResponsesParams);
|
|
12987
|
+
}
|
|
12952
12988
|
await this.page.getByTestId(COMMON_SELECTORS.selectContainer).click();
|
|
12953
12989
|
await this.page
|
|
12954
12990
|
.getByTestId(COMMON_SELECTORS.dropdownMenu)
|
|
@@ -12963,25 +12999,41 @@ class SlackPage extends IntegrationBase {
|
|
|
12963
12999
|
.click();
|
|
12964
13000
|
await savePromise;
|
|
12965
13001
|
};
|
|
12966
|
-
this.
|
|
13002
|
+
this.clickOnChannelListRefreshButton = async (refreshInterceptMultipleResponsesParams) => {
|
|
13003
|
+
const refreshChannelPromise = this.neetoPlaywrightUtilities.interceptMultipleResponses({
|
|
13004
|
+
times: 0,
|
|
13005
|
+
...refreshInterceptMultipleResponsesParams,
|
|
13006
|
+
});
|
|
13007
|
+
await this.page
|
|
13008
|
+
.getByRole("button", {
|
|
13009
|
+
name: this.t("neetoSlack.slack.channelListRefreshButton"),
|
|
13010
|
+
})
|
|
13011
|
+
.click();
|
|
13012
|
+
await refreshChannelPromise;
|
|
13013
|
+
};
|
|
13014
|
+
this.loginToSlackWebapp = async (slackWebappPage, customCredentials) => {
|
|
12967
13015
|
this.slackWebappPage = slackWebappPage;
|
|
12968
|
-
|
|
12969
|
-
|
|
12970
|
-
|
|
12971
|
-
|
|
13016
|
+
this.slackWebappPageDataQa = getByDataQA(this.slackWebappPage);
|
|
13017
|
+
const slackWorkspace = (customCredentials === null || customCredentials === void 0 ? void 0 : customCredentials.workspace) || process.env.SLACK_WORKSPACE;
|
|
13018
|
+
const slackLoginPassword = (customCredentials === null || customCredentials === void 0 ? void 0 : customCredentials.loginPassword) || process.env.SLACK_LOGIN_PASSWORD;
|
|
13019
|
+
const slackLoginEmail = (customCredentials === null || customCredentials === void 0 ? void 0 : customCredentials.loginEmail) || process.env.SLACK_LOGIN_EMAIL;
|
|
13020
|
+
if (isNotNil(slackWorkspace) &&
|
|
13021
|
+
isNotNil(slackLoginPassword) &&
|
|
13022
|
+
isNotNil(slackLoginEmail)) {
|
|
13023
|
+
await slackWebappPage.goto(THIRD_PARTY_ROUTES.slack.loginWithPassword(slackWorkspace));
|
|
12972
13024
|
await slackWebappPage
|
|
12973
13025
|
.locator(SLACK_SELECTORS.loginEmail)
|
|
12974
|
-
.pressSequentially(
|
|
13026
|
+
.pressSequentially(slackLoginEmail, { delay: 10 });
|
|
12975
13027
|
await slackWebappPage
|
|
12976
13028
|
.locator(SLACK_SELECTORS.loginPassword)
|
|
12977
|
-
.pressSequentially(
|
|
13029
|
+
.pressSequentially(slackLoginPassword, { delay: 10 });
|
|
12978
13030
|
await slackWebappPage.locator(SLACK_SELECTORS.signInButton).click();
|
|
12979
13031
|
await slackWebappPage
|
|
12980
13032
|
.locator(SLACK_SELECTORS.redirectOpenInBrowser)
|
|
12981
13033
|
.click();
|
|
12982
13034
|
}
|
|
12983
13035
|
else {
|
|
12984
|
-
throw new Error("ENV variable SLACK_LOGIN_EMAIL or SLACK_LOGIN_PASSWORD or SLACK_WORKSPACE is not defined.
|
|
13036
|
+
throw new Error("ENV variable SLACK_LOGIN_EMAIL or SLACK_LOGIN_PASSWORD or SLACK_WORKSPACE is not defined.");
|
|
12985
13037
|
}
|
|
12986
13038
|
};
|
|
12987
13039
|
this.logoutFromSlackWebApp = async () => {
|
|
@@ -13000,6 +13052,49 @@ class SlackPage extends IntegrationBase {
|
|
|
13000
13052
|
.locator(SLACK_SELECTORS.virtualListItem, { hasText: slackChannel })
|
|
13001
13053
|
.click();
|
|
13002
13054
|
};
|
|
13055
|
+
this.createNewSlackChannel = async ({ channelName, kind = "public", }) => {
|
|
13056
|
+
await this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.sectionHeadingButton).click();
|
|
13057
|
+
await this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.channelSectionSubmenuCreate).click();
|
|
13058
|
+
await this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.channelSectionMenuCreateChannel).click();
|
|
13059
|
+
await expect(this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.skModalContent)).toBeVisible();
|
|
13060
|
+
await expect(this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.infiniteSpinner)).toBeHidden();
|
|
13061
|
+
await expect(this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.channelNameOptionsList)).toBeHidden({ timeout: 5000 });
|
|
13062
|
+
await this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.skModalContent)
|
|
13063
|
+
.getByText(SLACK_WEB_TEXTS.name, { exact: true })
|
|
13064
|
+
.click();
|
|
13065
|
+
await this.slackWebappPageDataQa([
|
|
13066
|
+
SLACK_DATA_QA_SELECTORS.skModalContent,
|
|
13067
|
+
SLACK_DATA_QA_SELECTORS.channelNameInput,
|
|
13068
|
+
]).pressSequentially(channelName);
|
|
13069
|
+
await expect(this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.infiniteSpinner)).toBeHidden();
|
|
13070
|
+
await expect(this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.createChannelNextButton)).toBeEnabled();
|
|
13071
|
+
await this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.createChannelNextButton).click();
|
|
13072
|
+
await this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.skModalContent)
|
|
13073
|
+
.getByRole("radio", { name: kind })
|
|
13074
|
+
.check();
|
|
13075
|
+
await this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.createChannelNextButton).click();
|
|
13076
|
+
await this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.inviteToWorkspaceSkipButton).click();
|
|
13077
|
+
};
|
|
13078
|
+
this.deleteSlackChannel = async (channel) => {
|
|
13079
|
+
const channelItem = this.slackWebappPage.locator(SLACK_SELECTORS.channelItems, { hasText: channel });
|
|
13080
|
+
await channelItem.click({ button: "right" });
|
|
13081
|
+
await this.slackWebappPageDataQa([
|
|
13082
|
+
SLACK_DATA_QA_SELECTORS.menuItems,
|
|
13083
|
+
SLACK_DATA_QA_SELECTORS.channelDetailsModal,
|
|
13084
|
+
]).click();
|
|
13085
|
+
await expect(this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.channelDetailsModal)).toBeVisible();
|
|
13086
|
+
await this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.channelDetailsSettingsTab).click();
|
|
13087
|
+
await this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.skModalContent)
|
|
13088
|
+
.getByRole("button", { name: SLACK_WEB_TEXTS.deleteThisChannel })
|
|
13089
|
+
.click();
|
|
13090
|
+
await this.slackWebappPage
|
|
13091
|
+
.getByLabel(SLACK_WEB_TEXTS.permanentlyDeleteTheChannel)
|
|
13092
|
+
.check();
|
|
13093
|
+
await this.slackWebappPage
|
|
13094
|
+
.getByRole("button", { name: SLACK_WEB_TEXTS.deleteChannel })
|
|
13095
|
+
.click();
|
|
13096
|
+
await expect(channelItem).toBeHidden();
|
|
13097
|
+
};
|
|
13003
13098
|
}
|
|
13004
13099
|
}
|
|
13005
13100
|
|
|
@@ -147005,5 +147100,5 @@ const definePlaywrightConfig = (overrides) => {
|
|
|
147005
147100
|
});
|
|
147006
147101
|
};
|
|
147007
147102
|
|
|
147008
|
-
export { API_ROUTES, BASE_URL, CHANGELOG_WIDGET_SELECTORS, CHAT_WIDGET_SELECTORS, CHAT_WIDGET_TEXTS, COMMON_SELECTORS, CREDENTIALS, CustomCommands, ENVIRONMENT, EmbedBase, GLOBAL_TRANSLATIONS_PATTERN, HELP_CENTER_SELECTORS, HelpAndProfilePage, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IS_STAGING_ENV, IntegrationBase, KEYBOARD_SHORTCUTS_SELECTORS, LOGIN_SELECTORS, MEMBER_FORM_SELECTORS, MEMBER_SELECTORS, MEMBER_TEXTS, MERGE_TAGS_SELECTORS, MailosaurUtils, NEETO_AUTH_BASE_URL, NEETO_EDITOR_SELECTORS, NEETO_FILTERS_SELECTORS, OTP_EMAIL_PATTERN, OrganizationPage, PROFILE_SECTION_SELECTORS, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES, SIGNUP_SELECTORS, SLACK_DEFAULT_CHANNEL, SLACK_SELECTORS, SLACK_WEB_TEXTS, STORAGE_STATE, SlackPage, TAGS_SELECTORS, THIRD_PARTY_ROUTES, USER_AGENTS, WebhooksPage, clearCredentials, commands, cpuThrottlingUsingCDP, decodeQRCodeFromFile, definePlaywrightConfig, executeWithThrottledResources, extractSubdomainFromError, generateStagingData, getGlobalUserState, headerUtils, hyphenize, i18nFixture, initializeCredentials, initializeTotp, joinHyphenCase, joinString, login, loginWithoutSSO, memberUtils, networkConditions, networkThrottlingUsingCDP, readFileSyncIfExists, removeCredentialFile, shouldSkipSetupAndTeardown, skipTest, squish, stealth as stealthTest, tableUtils, toCamelCase, updateCredentials, writeDataToFile };
|
|
147103
|
+
export { API_ROUTES, BASE_URL, CHANGELOG_WIDGET_SELECTORS, CHAT_WIDGET_SELECTORS, CHAT_WIDGET_TEXTS, COMMON_SELECTORS, CREDENTIALS, CustomCommands, ENVIRONMENT, EmbedBase, GLOBAL_TRANSLATIONS_PATTERN, HELP_CENTER_SELECTORS, HelpAndProfilePage, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IS_STAGING_ENV, IntegrationBase, KEYBOARD_SHORTCUTS_SELECTORS, LOGIN_SELECTORS, MEMBER_FORM_SELECTORS, MEMBER_SELECTORS, MEMBER_TEXTS, MERGE_TAGS_SELECTORS, MailosaurUtils, NEETO_AUTH_BASE_URL, NEETO_EDITOR_SELECTORS, NEETO_FILTERS_SELECTORS, OTP_EMAIL_PATTERN, OrganizationPage, PROFILE_SECTION_SELECTORS, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES, SIGNUP_SELECTORS, SLACK_DATA_QA_SELECTORS, SLACK_DEFAULT_CHANNEL, SLACK_SELECTORS, SLACK_WEB_TEXTS, STORAGE_STATE, SlackPage, TAGS_SELECTORS, THIRD_PARTY_ROUTES, USER_AGENTS, WebhooksPage, clearCredentials, commands, cpuThrottlingUsingCDP, decodeQRCodeFromFile, definePlaywrightConfig, executeWithThrottledResources, extractSubdomainFromError, generateStagingData, getByDataQA, getGlobalUserState, headerUtils, hyphenize, i18nFixture, initializeCredentials, initializeTotp, joinHyphenCase, joinString, login, loginWithoutSSO, memberUtils, networkConditions, networkThrottlingUsingCDP, readFileSyncIfExists, removeCredentialFile, shouldSkipSetupAndTeardown, skipTest, squish, stealth as stealthTest, tableUtils, toCamelCase, updateCredentials, writeDataToFile };
|
|
147009
147104
|
//# sourceMappingURL=index.js.map
|