@bigbinary/neeto-playwright-commons 1.8.38 → 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.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
- private gotoIntegrationIndex;
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
- newSlackChannel: string;
277
- interceptMultipleResponsesParams?: Partial<InterceptMultipleResponsesParams> | undefined;
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 {
@@ -462,6 +474,7 @@ declare const COMMON_SELECTORS: {
462
474
  columnsDropdownContainer: string;
463
475
  columnsDropdownButton: string;
464
476
  breadcrumbHeader: string;
477
+ header: string;
465
478
  };
466
479
 
467
480
  declare const NEETO_EDITOR_SELECTORS: {
@@ -666,6 +679,21 @@ declare const SLACK_SELECTORS: {
666
679
  replyBar: string;
667
680
  markdownElement: string;
668
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;
669
697
  };
670
698
 
671
699
  declare const INTEGRATION_SELECTORS: {
@@ -691,6 +719,10 @@ declare const SLACK_WEB_TEXTS: {
691
719
  signOut: string;
692
720
  allow: string;
693
721
  loadingThread: string;
722
+ name: string;
723
+ deleteThisChannel: string;
724
+ permanentlyDeleteTheChannel: string;
725
+ deleteChannel: string;
694
726
  };
695
727
 
696
728
  declare const initializeCredentials: (product: string) => void;
@@ -732,6 +764,7 @@ declare const skipTest: {
732
764
  declare const shouldSkipSetupAndTeardown: () => boolean | "";
733
765
  declare const squish: (text: string) => string;
734
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>;
735
768
 
736
769
  interface LoginProps {
737
770
  page: Page;
@@ -839,4 +872,4 @@ interface Overrides {
839
872
  }
840
873
  declare const definePlaywrightConfig: (overrides: Overrides) => _playwright_test.PlaywrightTestConfig<{}, {}>;
841
874
 
842
- 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",
@@ -190,6 +200,7 @@ const COMMON_SELECTORS = {
190
200
  columnsDropdownContainer: "show/hide-columns-dropdown-container",
191
201
  columnsDropdownButton: "columns-dropdown-button",
192
202
  breadcrumbHeader: "header-breadcrumb",
203
+ header: "neeto-molecules-header",
193
204
  };
194
205
 
195
206
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
@@ -12538,6 +12549,10 @@ const SLACK_WEB_TEXTS = {
12538
12549
  signOut: "Sign out",
12539
12550
  allow: "Allow",
12540
12551
  loadingThread: "Loading thread",
12552
+ name: "Name",
12553
+ deleteThisChannel: "Delete this channel",
12554
+ permanentlyDeleteTheChannel: "Yes, permanently delete the channel",
12555
+ deleteChannel: "Delete channel",
12541
12556
  };
12542
12557
 
12543
12558
  const HELP_CENTER_SELECTORS = {
@@ -12886,6 +12901,21 @@ const SLACK_SELECTORS = {
12886
12901
  replyBar: "[data-qa='reply_bar']",
12887
12902
  markdownElement: "[data-qa='bk_markdown_element']",
12888
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",
12889
12919
  };
12890
12920
 
12891
12921
  /* eslint-disable playwright/no-raw-locators */
@@ -12897,7 +12927,7 @@ class SlackPage extends IntegrationBase {
12897
12927
  integration: "slack",
12898
12928
  integrationRouteIndex,
12899
12929
  });
12900
- this.connectAndVerifyIntegration = async (redirectUrl, customSteps) => {
12930
+ this.connectAndVerifyIntegration = async (redirectUrl, customSteps, channelToConfigure = SLACK_DEFAULT_CHANNEL) => {
12901
12931
  await this.connect();
12902
12932
  await this.page
12903
12933
  .getByRole("button", {
@@ -12920,7 +12950,11 @@ class SlackPage extends IntegrationBase {
12920
12950
  teamName: currentWorkspace,
12921
12951
  }),
12922
12952
  })).toBeVisible();
12923
- await expect(this.page.getByTestId(COMMON_SELECTORS.selectValueContainer)).toContainText(SLACK_DEFAULT_CHANNEL);
12953
+ await this.neetoPlaywrightUtilities.selectOptionFromDropdown({
12954
+ value: channelToConfigure,
12955
+ selectValueContainer: COMMON_SELECTORS.selectValueContainer,
12956
+ selectMenu: COMMON_SELECTORS.dropdownMenu,
12957
+ });
12924
12958
  await this.page
12925
12959
  .getByRole("button", { name: this.t("neetoSlack.common.continue") })
12926
12960
  .click();
@@ -12943,11 +12977,14 @@ class SlackPage extends IntegrationBase {
12943
12977
  await this.disconnect();
12944
12978
  await this.verifyIntegrationStatus("disconnected");
12945
12979
  };
12946
- this.updateConfigureSlackChannel = async ({ newSlackChannel = "random", interceptMultipleResponsesParams = {}, }) => {
12980
+ this.updateConfigureSlackChannel = async ({ newSlackChannel = "random", interceptMultipleResponsesParams = {}, refreshInterceptMultipleResponsesParams = {}, refreshChannelList = false, }) => {
12947
12981
  await this.page.getByTestId(INTEGRATION_SELECTORS.manageButton).click();
12948
12982
  await this.page
12949
12983
  .getByRole("button", { name: this.t("neetoSlack.common.edit") })
12950
12984
  .click();
12985
+ if (refreshChannelList) {
12986
+ await this.clickOnChannelListRefreshButton(refreshInterceptMultipleResponsesParams);
12987
+ }
12951
12988
  await this.page.getByTestId(COMMON_SELECTORS.selectContainer).click();
12952
12989
  await this.page
12953
12990
  .getByTestId(COMMON_SELECTORS.dropdownMenu)
@@ -12962,25 +12999,41 @@ class SlackPage extends IntegrationBase {
12962
12999
  .click();
12963
13000
  await savePromise;
12964
13001
  };
12965
- this.loginToSlackWebapp = async (slackWebappPage) => {
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) => {
12966
13015
  this.slackWebappPage = slackWebappPage;
12967
- if (isNotNil(process.env.SLACK_WORKSPACE) &&
12968
- isNotNil(process.env.SLACK_LOGIN_PASSWORD) &&
12969
- isNotNil(process.env.SLACK_LOGIN_EMAIL)) {
12970
- await slackWebappPage.goto(THIRD_PARTY_ROUTES.slack.loginWithPassword(process.env.SLACK_WORKSPACE));
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));
12971
13024
  await slackWebappPage
12972
13025
  .locator(SLACK_SELECTORS.loginEmail)
12973
- .pressSequentially(process.env.SLACK_LOGIN_EMAIL, { delay: 10 });
13026
+ .pressSequentially(slackLoginEmail, { delay: 10 });
12974
13027
  await slackWebappPage
12975
13028
  .locator(SLACK_SELECTORS.loginPassword)
12976
- .pressSequentially(process.env.SLACK_LOGIN_PASSWORD, { delay: 10 });
13029
+ .pressSequentially(slackLoginPassword, { delay: 10 });
12977
13030
  await slackWebappPage.locator(SLACK_SELECTORS.signInButton).click();
12978
13031
  await slackWebappPage
12979
13032
  .locator(SLACK_SELECTORS.redirectOpenInBrowser)
12980
13033
  .click();
12981
13034
  }
12982
13035
  else {
12983
- throw new Error("ENV variable SLACK_LOGIN_EMAIL or SLACK_LOGIN_PASSWORD or SLACK_WORKSPACE is not defined. Please add the API key to use this fixture.");
13036
+ throw new Error("ENV variable SLACK_LOGIN_EMAIL or SLACK_LOGIN_PASSWORD or SLACK_WORKSPACE is not defined.");
12984
13037
  }
12985
13038
  };
12986
13039
  this.logoutFromSlackWebApp = async () => {
@@ -12999,6 +13052,49 @@ class SlackPage extends IntegrationBase {
12999
13052
  .locator(SLACK_SELECTORS.virtualListItem, { hasText: slackChannel })
13000
13053
  .click();
13001
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
+ };
13002
13098
  }
13003
13099
  }
13004
13100
 
@@ -147004,5 +147100,5 @@ const definePlaywrightConfig = (overrides) => {
147004
147100
  });
147005
147101
  };
147006
147102
 
147007
- 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 };
147008
147104
  //# sourceMappingURL=index.js.map