@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.cjs.js
CHANGED
|
@@ -172,6 +172,16 @@ const shouldSkipSetupAndTeardown = () => { var _a; return ((_a = getGlobalUserSt
|
|
|
172
172
|
// trims and replaces multiple whitespace characters in a string with a single space
|
|
173
173
|
const squish = (text) => text.trim().replace(/\s+/g, " ");
|
|
174
174
|
const toCamelCase = (string) => string.toLowerCase().replace(/( \w)/g, letter => letter[1].toUpperCase());
|
|
175
|
+
const getByDataQA = ramda.curry((page, dataQa) => {
|
|
176
|
+
if (typeof dataQa === "string") {
|
|
177
|
+
// eslint-disable-next-line playwright/no-raw-locators
|
|
178
|
+
return page.locator(`[data-qa='${dataQa}']`);
|
|
179
|
+
}
|
|
180
|
+
// eslint-disable-next-line playwright/no-raw-locators
|
|
181
|
+
return page
|
|
182
|
+
.locator(`[data-qa='${dataQa[0]}']`)
|
|
183
|
+
.locator(`[data-qa='${dataQa[1]}']`);
|
|
184
|
+
});
|
|
175
185
|
|
|
176
186
|
const COMMON_SELECTORS = {
|
|
177
187
|
copyButton: "copy-button",
|
|
@@ -12585,6 +12595,10 @@ const SLACK_WEB_TEXTS = {
|
|
|
12585
12595
|
signOut: "Sign out",
|
|
12586
12596
|
allow: "Allow",
|
|
12587
12597
|
loadingThread: "Loading thread",
|
|
12598
|
+
name: "Name",
|
|
12599
|
+
deleteThisChannel: "Delete this channel",
|
|
12600
|
+
permanentlyDeleteTheChannel: "Yes, permanently delete the channel",
|
|
12601
|
+
deleteChannel: "Delete channel",
|
|
12588
12602
|
};
|
|
12589
12603
|
|
|
12590
12604
|
const HELP_CENTER_SELECTORS = {
|
|
@@ -12933,6 +12947,21 @@ const SLACK_SELECTORS = {
|
|
|
12933
12947
|
replyBar: "[data-qa='reply_bar']",
|
|
12934
12948
|
markdownElement: "[data-qa='bk_markdown_element']",
|
|
12935
12949
|
virtualListItem: "[data-qa='virtual-list-item']",
|
|
12950
|
+
channelItems: '[role="treeitem"][data-qa="virtual-list-item"]',
|
|
12951
|
+
};
|
|
12952
|
+
const SLACK_DATA_QA_SELECTORS = {
|
|
12953
|
+
sectionHeadingButton: "section_heading_button__channels",
|
|
12954
|
+
channelSectionSubmenuCreate: "channel_section_submenu_create",
|
|
12955
|
+
channelSectionMenuCreateChannel: "channel_section_menu__create_channel",
|
|
12956
|
+
skModalContent: "sk-modal-content",
|
|
12957
|
+
infiniteSpinner: "infinite-spinner",
|
|
12958
|
+
channelNameOptionsList: "channel-name-options-list",
|
|
12959
|
+
channelNameInput: "channel-name-input",
|
|
12960
|
+
createChannelNextButton: "create-channel-next-button",
|
|
12961
|
+
inviteToWorkspaceSkipButton: "invite_to_workspace_skip_button",
|
|
12962
|
+
menuItems: "menu_items",
|
|
12963
|
+
channelDetailsModal: "channel_details_modal",
|
|
12964
|
+
channelDetailsSettingsTab: "channel_details_settings_tab",
|
|
12936
12965
|
};
|
|
12937
12966
|
|
|
12938
12967
|
/* eslint-disable playwright/no-raw-locators */
|
|
@@ -12944,7 +12973,7 @@ class SlackPage extends IntegrationBase {
|
|
|
12944
12973
|
integration: "slack",
|
|
12945
12974
|
integrationRouteIndex,
|
|
12946
12975
|
});
|
|
12947
|
-
this.connectAndVerifyIntegration = async (redirectUrl, customSteps) => {
|
|
12976
|
+
this.connectAndVerifyIntegration = async (redirectUrl, customSteps, channelToConfigure = SLACK_DEFAULT_CHANNEL) => {
|
|
12948
12977
|
await this.connect();
|
|
12949
12978
|
await this.page
|
|
12950
12979
|
.getByRole("button", {
|
|
@@ -12967,7 +12996,11 @@ class SlackPage extends IntegrationBase {
|
|
|
12967
12996
|
teamName: currentWorkspace,
|
|
12968
12997
|
}),
|
|
12969
12998
|
})).toBeVisible();
|
|
12970
|
-
await
|
|
12999
|
+
await this.neetoPlaywrightUtilities.selectOptionFromDropdown({
|
|
13000
|
+
value: channelToConfigure,
|
|
13001
|
+
selectValueContainer: COMMON_SELECTORS.selectValueContainer,
|
|
13002
|
+
selectMenu: COMMON_SELECTORS.dropdownMenu,
|
|
13003
|
+
});
|
|
12971
13004
|
await this.page
|
|
12972
13005
|
.getByRole("button", { name: this.t("neetoSlack.common.continue") })
|
|
12973
13006
|
.click();
|
|
@@ -12990,11 +13023,14 @@ class SlackPage extends IntegrationBase {
|
|
|
12990
13023
|
await this.disconnect();
|
|
12991
13024
|
await this.verifyIntegrationStatus("disconnected");
|
|
12992
13025
|
};
|
|
12993
|
-
this.updateConfigureSlackChannel = async ({ newSlackChannel = "random", interceptMultipleResponsesParams = {}, }) => {
|
|
13026
|
+
this.updateConfigureSlackChannel = async ({ newSlackChannel = "random", interceptMultipleResponsesParams = {}, refreshInterceptMultipleResponsesParams = {}, refreshChannelList = false, }) => {
|
|
12994
13027
|
await this.page.getByTestId(INTEGRATION_SELECTORS.manageButton).click();
|
|
12995
13028
|
await this.page
|
|
12996
13029
|
.getByRole("button", { name: this.t("neetoSlack.common.edit") })
|
|
12997
13030
|
.click();
|
|
13031
|
+
if (refreshChannelList) {
|
|
13032
|
+
await this.clickOnChannelListRefreshButton(refreshInterceptMultipleResponsesParams);
|
|
13033
|
+
}
|
|
12998
13034
|
await this.page.getByTestId(COMMON_SELECTORS.selectContainer).click();
|
|
12999
13035
|
await this.page
|
|
13000
13036
|
.getByTestId(COMMON_SELECTORS.dropdownMenu)
|
|
@@ -13009,25 +13045,41 @@ class SlackPage extends IntegrationBase {
|
|
|
13009
13045
|
.click();
|
|
13010
13046
|
await savePromise;
|
|
13011
13047
|
};
|
|
13012
|
-
this.
|
|
13048
|
+
this.clickOnChannelListRefreshButton = async (refreshInterceptMultipleResponsesParams) => {
|
|
13049
|
+
const refreshChannelPromise = this.neetoPlaywrightUtilities.interceptMultipleResponses({
|
|
13050
|
+
times: 0,
|
|
13051
|
+
...refreshInterceptMultipleResponsesParams,
|
|
13052
|
+
});
|
|
13053
|
+
await this.page
|
|
13054
|
+
.getByRole("button", {
|
|
13055
|
+
name: this.t("neetoSlack.slack.channelListRefreshButton"),
|
|
13056
|
+
})
|
|
13057
|
+
.click();
|
|
13058
|
+
await refreshChannelPromise;
|
|
13059
|
+
};
|
|
13060
|
+
this.loginToSlackWebapp = async (slackWebappPage, customCredentials) => {
|
|
13013
13061
|
this.slackWebappPage = slackWebappPage;
|
|
13014
|
-
|
|
13015
|
-
|
|
13016
|
-
|
|
13017
|
-
|
|
13062
|
+
this.slackWebappPageDataQa = getByDataQA(this.slackWebappPage);
|
|
13063
|
+
const slackWorkspace = (customCredentials === null || customCredentials === void 0 ? void 0 : customCredentials.workspace) || process.env.SLACK_WORKSPACE;
|
|
13064
|
+
const slackLoginPassword = (customCredentials === null || customCredentials === void 0 ? void 0 : customCredentials.loginPassword) || process.env.SLACK_LOGIN_PASSWORD;
|
|
13065
|
+
const slackLoginEmail = (customCredentials === null || customCredentials === void 0 ? void 0 : customCredentials.loginEmail) || process.env.SLACK_LOGIN_EMAIL;
|
|
13066
|
+
if (ramda.isNotNil(slackWorkspace) &&
|
|
13067
|
+
ramda.isNotNil(slackLoginPassword) &&
|
|
13068
|
+
ramda.isNotNil(slackLoginEmail)) {
|
|
13069
|
+
await slackWebappPage.goto(THIRD_PARTY_ROUTES.slack.loginWithPassword(slackWorkspace));
|
|
13018
13070
|
await slackWebappPage
|
|
13019
13071
|
.locator(SLACK_SELECTORS.loginEmail)
|
|
13020
|
-
.pressSequentially(
|
|
13072
|
+
.pressSequentially(slackLoginEmail, { delay: 10 });
|
|
13021
13073
|
await slackWebappPage
|
|
13022
13074
|
.locator(SLACK_SELECTORS.loginPassword)
|
|
13023
|
-
.pressSequentially(
|
|
13075
|
+
.pressSequentially(slackLoginPassword, { delay: 10 });
|
|
13024
13076
|
await slackWebappPage.locator(SLACK_SELECTORS.signInButton).click();
|
|
13025
13077
|
await slackWebappPage
|
|
13026
13078
|
.locator(SLACK_SELECTORS.redirectOpenInBrowser)
|
|
13027
13079
|
.click();
|
|
13028
13080
|
}
|
|
13029
13081
|
else {
|
|
13030
|
-
throw new Error("ENV variable SLACK_LOGIN_EMAIL or SLACK_LOGIN_PASSWORD or SLACK_WORKSPACE is not defined.
|
|
13082
|
+
throw new Error("ENV variable SLACK_LOGIN_EMAIL or SLACK_LOGIN_PASSWORD or SLACK_WORKSPACE is not defined.");
|
|
13031
13083
|
}
|
|
13032
13084
|
};
|
|
13033
13085
|
this.logoutFromSlackWebApp = async () => {
|
|
@@ -13046,6 +13098,49 @@ class SlackPage extends IntegrationBase {
|
|
|
13046
13098
|
.locator(SLACK_SELECTORS.virtualListItem, { hasText: slackChannel })
|
|
13047
13099
|
.click();
|
|
13048
13100
|
};
|
|
13101
|
+
this.createNewSlackChannel = async ({ channelName, kind = "public", }) => {
|
|
13102
|
+
await this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.sectionHeadingButton).click();
|
|
13103
|
+
await this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.channelSectionSubmenuCreate).click();
|
|
13104
|
+
await this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.channelSectionMenuCreateChannel).click();
|
|
13105
|
+
await test$1.expect(this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.skModalContent)).toBeVisible();
|
|
13106
|
+
await test$1.expect(this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.infiniteSpinner)).toBeHidden();
|
|
13107
|
+
await test$1.expect(this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.channelNameOptionsList)).toBeHidden({ timeout: 5000 });
|
|
13108
|
+
await this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.skModalContent)
|
|
13109
|
+
.getByText(SLACK_WEB_TEXTS.name, { exact: true })
|
|
13110
|
+
.click();
|
|
13111
|
+
await this.slackWebappPageDataQa([
|
|
13112
|
+
SLACK_DATA_QA_SELECTORS.skModalContent,
|
|
13113
|
+
SLACK_DATA_QA_SELECTORS.channelNameInput,
|
|
13114
|
+
]).pressSequentially(channelName);
|
|
13115
|
+
await test$1.expect(this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.infiniteSpinner)).toBeHidden();
|
|
13116
|
+
await test$1.expect(this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.createChannelNextButton)).toBeEnabled();
|
|
13117
|
+
await this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.createChannelNextButton).click();
|
|
13118
|
+
await this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.skModalContent)
|
|
13119
|
+
.getByRole("radio", { name: kind })
|
|
13120
|
+
.check();
|
|
13121
|
+
await this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.createChannelNextButton).click();
|
|
13122
|
+
await this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.inviteToWorkspaceSkipButton).click();
|
|
13123
|
+
};
|
|
13124
|
+
this.deleteSlackChannel = async (channel) => {
|
|
13125
|
+
const channelItem = this.slackWebappPage.locator(SLACK_SELECTORS.channelItems, { hasText: channel });
|
|
13126
|
+
await channelItem.click({ button: "right" });
|
|
13127
|
+
await this.slackWebappPageDataQa([
|
|
13128
|
+
SLACK_DATA_QA_SELECTORS.menuItems,
|
|
13129
|
+
SLACK_DATA_QA_SELECTORS.channelDetailsModal,
|
|
13130
|
+
]).click();
|
|
13131
|
+
await test$1.expect(this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.channelDetailsModal)).toBeVisible();
|
|
13132
|
+
await this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.channelDetailsSettingsTab).click();
|
|
13133
|
+
await this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.skModalContent)
|
|
13134
|
+
.getByRole("button", { name: SLACK_WEB_TEXTS.deleteThisChannel })
|
|
13135
|
+
.click();
|
|
13136
|
+
await this.slackWebappPage
|
|
13137
|
+
.getByLabel(SLACK_WEB_TEXTS.permanentlyDeleteTheChannel)
|
|
13138
|
+
.check();
|
|
13139
|
+
await this.slackWebappPage
|
|
13140
|
+
.getByRole("button", { name: SLACK_WEB_TEXTS.deleteChannel })
|
|
13141
|
+
.click();
|
|
13142
|
+
await test$1.expect(channelItem).toBeHidden();
|
|
13143
|
+
};
|
|
13049
13144
|
}
|
|
13050
13145
|
}
|
|
13051
13146
|
|
|
@@ -147085,6 +147180,7 @@ exports.PROJECT_TRANSLATIONS_PATH = PROJECT_TRANSLATIONS_PATH;
|
|
|
147085
147180
|
exports.ROLES_SELECTORS = ROLES_SELECTORS;
|
|
147086
147181
|
exports.ROUTES = ROUTES;
|
|
147087
147182
|
exports.SIGNUP_SELECTORS = SIGNUP_SELECTORS;
|
|
147183
|
+
exports.SLACK_DATA_QA_SELECTORS = SLACK_DATA_QA_SELECTORS;
|
|
147088
147184
|
exports.SLACK_DEFAULT_CHANNEL = SLACK_DEFAULT_CHANNEL;
|
|
147089
147185
|
exports.SLACK_SELECTORS = SLACK_SELECTORS;
|
|
147090
147186
|
exports.SLACK_WEB_TEXTS = SLACK_WEB_TEXTS;
|
|
@@ -147102,6 +147198,7 @@ exports.definePlaywrightConfig = definePlaywrightConfig;
|
|
|
147102
147198
|
exports.executeWithThrottledResources = executeWithThrottledResources;
|
|
147103
147199
|
exports.extractSubdomainFromError = extractSubdomainFromError;
|
|
147104
147200
|
exports.generateStagingData = generateStagingData;
|
|
147201
|
+
exports.getByDataQA = getByDataQA;
|
|
147105
147202
|
exports.getGlobalUserState = getGlobalUserState;
|
|
147106
147203
|
exports.headerUtils = headerUtils;
|
|
147107
147204
|
exports.hyphenize = hyphenize;
|