sfdx-browserforce-plugin 5.1.2 → 5.2.0-next.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/README.md +54 -16
- package/lib/browserforce-command.js +2 -2
- package/lib/browserforce-command.js.map +1 -1
- package/lib/browserforce.d.ts +7 -3
- package/lib/browserforce.js +57 -32
- package/lib/browserforce.js.map +1 -1
- package/lib/pages/login.d.ts +1 -1
- package/lib/pages/login.js +5 -5
- package/lib/pages/login.js.map +1 -1
- package/lib/plugins/activity-settings/index.js +9 -6
- package/lib/plugins/activity-settings/index.js.map +1 -1
- package/lib/plugins/company-information/index.js +26 -16
- package/lib/plugins/company-information/index.js.map +1 -1
- package/lib/plugins/customer-portal/available-custom-objects/index.js +5 -5
- package/lib/plugins/customer-portal/available-custom-objects/index.js.map +1 -1
- package/lib/plugins/customer-portal/enabled/index.js +5 -6
- package/lib/plugins/customer-portal/enabled/index.js.map +1 -1
- package/lib/plugins/customer-portal/portals/index.js +68 -32
- package/lib/plugins/customer-portal/portals/index.js.map +1 -1
- package/lib/plugins/density-settings/index.d.ts +1 -8
- package/lib/plugins/density-settings/index.js +37 -29
- package/lib/plugins/density-settings/index.js.map +1 -1
- package/lib/plugins/email-deliverability/index.js +11 -8
- package/lib/plugins/email-deliverability/index.js.map +1 -1
- package/lib/plugins/high-velocity-sales-settings/page.d.ts +1 -1
- package/lib/plugins/high-velocity-sales-settings/page.js +7 -8
- package/lib/plugins/high-velocity-sales-settings/page.js.map +1 -1
- package/lib/plugins/history-tracking/index.js +21 -14
- package/lib/plugins/history-tracking/index.js.map +1 -1
- package/lib/plugins/home-page-layouts/index.js +16 -12
- package/lib/plugins/home-page-layouts/index.js.map +1 -1
- package/lib/plugins/lightning-experience-settings/index.d.ts +2 -2
- package/lib/plugins/lightning-experience-settings/index.js +42 -38
- package/lib/plugins/lightning-experience-settings/index.js.map +1 -1
- package/lib/plugins/linkedin-sales-navigator-settings/index.js +2 -2
- package/lib/plugins/linkedin-sales-navigator-settings/index.js.map +1 -1
- package/lib/plugins/linkedin-sales-navigator-settings/page.d.ts +4 -2
- package/lib/plugins/linkedin-sales-navigator-settings/page.js +18 -8
- package/lib/plugins/linkedin-sales-navigator-settings/page.js.map +1 -1
- package/lib/plugins/omni-channel-settings/index.e2e-spec.js +4 -0
- package/lib/plugins/omni-channel-settings/index.e2e-spec.js.map +1 -1
- package/lib/plugins/omni-channel-settings/index.js +6 -14
- package/lib/plugins/omni-channel-settings/index.js.map +1 -1
- package/lib/plugins/opportunity-splits/index.js +4 -4
- package/lib/plugins/opportunity-splits/index.js.map +1 -1
- package/lib/plugins/opportunity-splits/pages/layout-selection.d.ts +1 -1
- package/lib/plugins/opportunity-splits/pages/layout-selection.js +2 -4
- package/lib/plugins/opportunity-splits/pages/layout-selection.js.map +1 -1
- package/lib/plugins/opportunity-splits/pages/overview.d.ts +1 -1
- package/lib/plugins/opportunity-splits/pages/overview.js +6 -11
- package/lib/plugins/opportunity-splits/pages/overview.js.map +1 -1
- package/lib/plugins/opportunity-splits/pages/setup.d.ts +1 -1
- package/lib/plugins/opportunity-splits/pages/setup.js +2 -4
- package/lib/plugins/opportunity-splits/pages/setup.js.map +1 -1
- package/lib/plugins/permission-sets/index.e2e-spec.js +16 -5
- package/lib/plugins/permission-sets/index.e2e-spec.js.map +1 -1
- package/lib/plugins/permission-sets/service-presence-status/index.js +32 -25
- package/lib/plugins/permission-sets/service-presence-status/index.js.map +1 -1
- package/lib/plugins/picklists/field-dependencies/pages.d.ts +1 -1
- package/lib/plugins/picklists/field-dependencies/pages.js +9 -17
- package/lib/plugins/picklists/field-dependencies/pages.js.map +1 -1
- package/lib/plugins/picklists/pages.d.ts +2 -1
- package/lib/plugins/picklists/pages.js +35 -63
- package/lib/plugins/picklists/pages.js.map +1 -1
- package/lib/plugins/record-types/pages.d.ts +1 -1
- package/lib/plugins/record-types/pages.js +15 -23
- package/lib/plugins/record-types/pages.js.map +1 -1
- package/lib/plugins/relate-contact-to-multiple-accounts/index.d.ts +1 -1
- package/lib/plugins/relate-contact-to-multiple-accounts/index.js +32 -42
- package/lib/plugins/relate-contact-to-multiple-accounts/index.js.map +1 -1
- package/lib/plugins/reports-and-dashboards/folder-sharing/index.js +18 -13
- package/lib/plugins/reports-and-dashboards/folder-sharing/index.js.map +1 -1
- package/lib/plugins/salesforce-cpq-config/formConfig.js +12 -12
- package/lib/plugins/salesforce-cpq-config/formConfig.js.map +1 -1
- package/lib/plugins/salesforce-cpq-config/index.js +87 -68
- package/lib/plugins/salesforce-cpq-config/index.js.map +1 -1
- package/lib/plugins/salesforce-to-salesforce/index.e2e-spec.js +1 -0
- package/lib/plugins/salesforce-to-salesforce/index.e2e-spec.js.map +1 -1
- package/lib/plugins/salesforce-to-salesforce/index.js +8 -16
- package/lib/plugins/salesforce-to-salesforce/index.js.map +1 -1
- package/lib/plugins/security/authentication-configuration/index.js +18 -13
- package/lib/plugins/security/authentication-configuration/index.js.map +1 -1
- package/lib/plugins/security/certificate-and-key-management/index.js +16 -21
- package/lib/plugins/security/certificate-and-key-management/index.js.map +1 -1
- package/lib/plugins/service-channels/capacity/index.js +64 -35
- package/lib/plugins/service-channels/capacity/index.js.map +1 -1
- package/lib/plugins/service-channels/index.e2e-spec.js +4 -0
- package/lib/plugins/service-channels/index.e2e-spec.js.map +1 -1
- package/lib/plugins/slack/index.js +13 -14
- package/lib/plugins/slack/index.js.map +1 -1
- package/lib/plugins/user-access-policies/index.e2e-spec.js +4 -2
- package/lib/plugins/user-access-policies/index.e2e-spec.js.map +1 -1
- package/lib/plugins/user-access-policies/index.js +4 -2
- package/lib/plugins/user-access-policies/index.js.map +1 -1
- package/lib/plugins/user-access-policies/page.d.ts +2 -2
- package/lib/plugins/user-access-policies/page.js +34 -51
- package/lib/plugins/user-access-policies/page.js.map +1 -1
- package/oclif.manifest.json +1 -11
- package/package.json +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Locator, Page } from 'playwright';
|
|
2
2
|
import { BrowserforcePlugin } from '../../plugin.js';
|
|
3
3
|
type Config = {
|
|
4
4
|
activeThemeName: string;
|
|
@@ -6,7 +6,7 @@ type Config = {
|
|
|
6
6
|
type Theme = {
|
|
7
7
|
developerName: string;
|
|
8
8
|
isActive: boolean;
|
|
9
|
-
|
|
9
|
+
rowLocator: Locator;
|
|
10
10
|
};
|
|
11
11
|
export declare class LightningExperienceSettings extends BrowserforcePlugin {
|
|
12
12
|
setupDOMObserver(page: Page, elementName: string, callbackName: string): Promise<void>;
|
|
@@ -6,7 +6,7 @@ const DEVELOPER_NAMES_SELECTOR = `${THEME_ROW_SELECTOR} > td:nth-child(2) > ligh
|
|
|
6
6
|
const STATES_SELECTOR = `${THEME_ROW_SELECTOR} > td:nth-child(6) > lightning-primitive-cell-factory`;
|
|
7
7
|
export class LightningExperienceSettings extends BrowserforcePlugin {
|
|
8
8
|
async setupDOMObserver(page, elementName, callbackName) {
|
|
9
|
-
await page.evaluate((elementName, callbackName) => {
|
|
9
|
+
await page.evaluate(({ elementName, callbackName, }) => {
|
|
10
10
|
const observer = new MutationObserver((mutations) => {
|
|
11
11
|
for (const mutation of mutations) {
|
|
12
12
|
for (const node of Array.from(mutation.addedNodes)) {
|
|
@@ -25,7 +25,7 @@ export class LightningExperienceSettings extends BrowserforcePlugin {
|
|
|
25
25
|
window.addEventListener('beforeunload', () => {
|
|
26
26
|
observer.disconnect();
|
|
27
27
|
}, { once: true });
|
|
28
|
-
}, elementName, callbackName);
|
|
28
|
+
}, { elementName, callbackName });
|
|
29
29
|
}
|
|
30
30
|
async retrieve() {
|
|
31
31
|
const page = await this.browserforce.openPage(BASE_PATH);
|
|
@@ -43,18 +43,25 @@ export class LightningExperienceSettings extends BrowserforcePlugin {
|
|
|
43
43
|
await page.close();
|
|
44
44
|
}
|
|
45
45
|
async getThemeData(page) {
|
|
46
|
-
await page.
|
|
47
|
-
const
|
|
48
|
-
await
|
|
49
|
-
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
46
|
+
await page.locator(THEME_ROW_SELECTOR).first().waitFor();
|
|
47
|
+
const rowLocator = page.locator(THEME_ROW_SELECTOR);
|
|
48
|
+
const rowCount = await rowLocator.count();
|
|
49
|
+
await page.locator(DEVELOPER_NAMES_SELECTOR).first().waitFor();
|
|
50
|
+
const developerNameLocator = page.locator(DEVELOPER_NAMES_SELECTOR);
|
|
51
|
+
const stateLocator = page.locator(STATES_SELECTOR);
|
|
52
|
+
const themes = [];
|
|
53
|
+
for (let i = 0; i < rowCount; i++) {
|
|
54
|
+
const developerName = await developerNameLocator.nth(i).innerText();
|
|
55
|
+
const hasIcon = await stateLocator
|
|
56
|
+
.nth(i)
|
|
57
|
+
.evaluate((cell) => cell.shadowRoot?.querySelector('lightning-primitive-icon') !== null);
|
|
58
|
+
themes.push({
|
|
53
59
|
developerName,
|
|
54
|
-
isActive:
|
|
55
|
-
|
|
56
|
-
};
|
|
57
|
-
}
|
|
60
|
+
isActive: hasIcon,
|
|
61
|
+
rowLocator: rowLocator.nth(i),
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
return themes;
|
|
58
65
|
}
|
|
59
66
|
async setActiveTheme(page, themeDeveloperName) {
|
|
60
67
|
const data = await this.getThemeData(page);
|
|
@@ -62,36 +69,33 @@ export class LightningExperienceSettings extends BrowserforcePlugin {
|
|
|
62
69
|
if (!theme) {
|
|
63
70
|
throw new Error(`Could not find theme "${themeDeveloperName}" in list of themes: ${data.map((d) => d.developerName)}`);
|
|
64
71
|
}
|
|
72
|
+
const newActiveThemeRowLocator = theme.rowLocator;
|
|
73
|
+
await page
|
|
74
|
+
.locator(`${THEME_ROW_SELECTOR} lightning-button-menu`)
|
|
75
|
+
.first()
|
|
76
|
+
.waitFor({ state: 'visible' });
|
|
77
|
+
const menuButton = newActiveThemeRowLocator.locator('td lightning-primitive-cell-factory lightning-primitive-cell-actions lightning-button-menu');
|
|
78
|
+
await menuButton.click();
|
|
79
|
+
await page
|
|
80
|
+
.locator(`${THEME_ROW_SELECTOR} lightning-button-menu slot lightning-menu-item`)
|
|
81
|
+
.first()
|
|
82
|
+
.waitFor({ state: 'visible' });
|
|
83
|
+
const menuItems = menuButton.locator('slot lightning-menu-item');
|
|
84
|
+
const menuItemCount = await menuItems.count();
|
|
85
|
+
// second last item: [show, activate, preview]
|
|
86
|
+
const activateMenuItem = menuItems.nth(menuItemCount - 2);
|
|
87
|
+
await activateMenuItem.click();
|
|
65
88
|
// When switching from a SDLS2 to a SLDS1 theme, the following modal appears:
|
|
66
89
|
// Activate this theme?
|
|
67
90
|
// This theme uses SLDS 1. When you activate this theme, you also disable SLDS 2.
|
|
68
91
|
// - Never Mind
|
|
69
92
|
// - Activate
|
|
70
|
-
await page.
|
|
71
|
-
|
|
72
|
-
await
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
await this.setupDOMObserver(page, 'lightning-overlay-container', 'onModalAppeared');
|
|
79
|
-
const newActiveThemeRowElementHandle = theme.rowElementHandle;
|
|
80
|
-
await page.waitForSelector(`${THEME_ROW_SELECTOR} lightning-button-menu`, {
|
|
81
|
-
visible: true,
|
|
82
|
-
});
|
|
83
|
-
const menuButton = await newActiveThemeRowElementHandle.$('td lightning-primitive-cell-factory lightning-primitive-cell-actions lightning-button-menu');
|
|
84
|
-
await page.evaluate((e) => e.click(), menuButton);
|
|
85
|
-
await page.waitForSelector(`${THEME_ROW_SELECTOR} lightning-button-menu slot lightning-menu-item`, {
|
|
86
|
-
visible: true,
|
|
87
|
-
});
|
|
88
|
-
const menuItems = await menuButton.$$('slot lightning-menu-item');
|
|
89
|
-
// second last item: [show, activate, preview]
|
|
90
|
-
const activateMenuItem = menuItems[menuItems.length - 2];
|
|
91
|
-
await Promise.all([
|
|
92
|
-
page.waitForNavigation(),
|
|
93
|
-
page.evaluate((e) => e.click(), activateMenuItem),
|
|
94
|
-
]);
|
|
93
|
+
const confirmButton = await page.locator('lightning-modal lightning-button[variant="brand"]');
|
|
94
|
+
if (await confirmButton.isVisible()) {
|
|
95
|
+
await confirmButton.waitFor({ state: 'visible' });
|
|
96
|
+
await confirmButton.click();
|
|
97
|
+
}
|
|
98
|
+
await page.locator('span.breadcrumbDetail.uiOutputText').waitFor();
|
|
95
99
|
}
|
|
96
100
|
}
|
|
97
101
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/lightning-experience-settings/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,SAAS,GAAG,yCAAyC,CAAC;AAE5D,mEAAmE;AACnE,MAAM,kBAAkB,GAAG,oCAAoC,CAAC;AAChE,MAAM,wBAAwB,GAAG,GAAG,kBAAkB,qFAAqF,CAAC;AAC5I,MAAM,eAAe,GAAG,GAAG,kBAAkB,uDAAuD,CAAC;AAYrG,MAAM,OAAO,2BAA4B,SAAQ,kBAAkB;IACjE,KAAK,CAAC,gBAAgB,CACpB,IAAU,EACV,WAAmB,EACnB,YAAoB;QAEpB,MAAM,IAAI,CAAC,QAAQ,CACjB,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/lightning-experience-settings/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,12 +3,12 @@ import { LinkedInSalesNavigatorPage } from './page.js';
|
|
|
3
3
|
export class LinkedInSalesNavigatorSettings extends BrowserforcePlugin {
|
|
4
4
|
async retrieve(definition) {
|
|
5
5
|
const result = { enabled: false };
|
|
6
|
-
const page = new LinkedInSalesNavigatorPage(await this.browserforce.openPage(LinkedInSalesNavigatorPage.getUrl()));
|
|
6
|
+
const page = new LinkedInSalesNavigatorPage(await this.browserforce.openPage(LinkedInSalesNavigatorPage.getUrl()), this.browserforce);
|
|
7
7
|
result.enabled = await page.getStatus();
|
|
8
8
|
return result;
|
|
9
9
|
}
|
|
10
10
|
async apply(config) {
|
|
11
|
-
const page = new LinkedInSalesNavigatorPage(await this.browserforce.openPage(LinkedInSalesNavigatorPage.getUrl()));
|
|
11
|
+
const page = new LinkedInSalesNavigatorPage(await this.browserforce.openPage(LinkedInSalesNavigatorPage.getUrl()), this.browserforce);
|
|
12
12
|
await page.setStatus(config.enabled);
|
|
13
13
|
}
|
|
14
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/linkedin-sales-navigator-settings/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AAMvD,MAAM,OAAO,8BAA+B,SAAQ,kBAAkB;IAC7D,KAAK,CAAC,QAAQ,CAAC,UAAmB;QACvC,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,0BAA0B,CACzC,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,0BAA0B,CAAC,MAAM,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/linkedin-sales-navigator-settings/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AAMvD,MAAM,OAAO,8BAA+B,SAAQ,kBAAkB;IAC7D,KAAK,CAAC,QAAQ,CAAC,UAAmB;QACvC,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,0BAA0B,CACzC,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,0BAA0B,CAAC,MAAM,EAAE,CAAC,EACrE,IAAI,CAAC,YAAY,CAClB,CAAC;QACF,MAAM,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACxC,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,MAAc;QAC/B,MAAM,IAAI,GAAG,IAAI,0BAA0B,CACzC,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,0BAA0B,CAAC,MAAM,EAAE,CAAC,EACrE,IAAI,CAAC,YAAY,CAClB,CAAC;QACF,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;CACF"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { Page } from '
|
|
1
|
+
import { Page } from 'playwright';
|
|
2
|
+
import { Browserforce } from '../../browserforce.js';
|
|
2
3
|
export declare class LinkedInSalesNavigatorPage {
|
|
3
4
|
private page;
|
|
4
|
-
|
|
5
|
+
private browserforce;
|
|
6
|
+
constructor(page: Page, browserforce: Browserforce);
|
|
5
7
|
static getUrl(): string;
|
|
6
8
|
getStatus(): Promise<boolean>;
|
|
7
9
|
setStatus(enable: boolean): Promise<void>;
|
|
@@ -4,28 +4,38 @@ const CONFIRM_CHECKBOX = 'lightning-input lightning-primitive-input-checkbox inp
|
|
|
4
4
|
const ACCEPT_BUTTON = 'section[data-aura-class="setup_sales_linkedinLinkedInSetupAcceptTermsModal"] div div button:not(:disabled):nth-child(2)';
|
|
5
5
|
export class LinkedInSalesNavigatorPage {
|
|
6
6
|
page;
|
|
7
|
-
|
|
7
|
+
browserforce;
|
|
8
|
+
constructor(page, browserforce) {
|
|
8
9
|
this.page = page;
|
|
10
|
+
this.browserforce = browserforce;
|
|
9
11
|
}
|
|
10
12
|
static getUrl() {
|
|
11
13
|
return 'lightning/setup/LinkedInSalesNavigatorPage/home';
|
|
12
14
|
}
|
|
13
15
|
async getStatus() {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
.map((checkbox) => checkbox.checked)
|
|
17
|
-
.wait();
|
|
16
|
+
await this.page.locator(ENABLE_TOGGLE).waitFor();
|
|
17
|
+
const isEnabled = await this.page.locator(ENABLE_TOGGLE).isChecked();
|
|
18
18
|
await this.page.close();
|
|
19
19
|
return isEnabled;
|
|
20
20
|
}
|
|
21
21
|
async setStatus(enable) {
|
|
22
22
|
// NOTE: Unfortunately a simple click() on the locator does not work here
|
|
23
|
-
await
|
|
23
|
+
await this.page.locator(ENABLE_TOGGLE).waitFor();
|
|
24
|
+
await this.page
|
|
25
|
+
.locator(ENABLE_TOGGLE)
|
|
26
|
+
.evaluate((checkbox) => checkbox.click());
|
|
24
27
|
if (enable) {
|
|
25
|
-
await
|
|
26
|
-
await
|
|
28
|
+
await this.page.locator(CONFIRM_CHECKBOX).waitFor();
|
|
29
|
+
await this.page
|
|
30
|
+
.locator(CONFIRM_CHECKBOX)
|
|
31
|
+
.evaluate((checkbox) => checkbox.click());
|
|
32
|
+
await this.page.locator(ACCEPT_BUTTON).waitFor();
|
|
33
|
+
await this.page
|
|
34
|
+
.locator(ACCEPT_BUTTON)
|
|
35
|
+
.evaluate((button) => button.click());
|
|
27
36
|
}
|
|
28
37
|
await throwPageErrors(this.page);
|
|
38
|
+
await this.browserforce.waitForIdle(this.page);
|
|
29
39
|
await this.page.close();
|
|
30
40
|
}
|
|
31
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../../src/plugins/linkedin-sales-navigator-settings/page.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../../src/plugins/linkedin-sales-navigator-settings/page.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEtE,MAAM,aAAa,GACjB,mGAAmG,CAAC;AACtG,MAAM,gBAAgB,GACpB,0IAA0I,CAAC;AAC7I,MAAM,aAAa,GACjB,yHAAyH,CAAC;AAE5H,MAAM,OAAO,0BAA0B;IAC7B,IAAI,CAAO;IACX,YAAY,CAAe;IAEnC,YAAY,IAAU,EAAE,YAA0B;QAChD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAEM,MAAM,CAAC,MAAM;QAClB,OAAO,iDAAiD,CAAC;IAC3D,CAAC;IAEM,KAAK,CAAC,SAAS;QACpB,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC;QACjD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,SAAS,EAAE,CAAC;QACrE,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,MAAe;QACpC,yEAAyE;QACzE,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC;QACjD,MAAM,IAAI,CAAC,IAAI;aACZ,OAAO,CAAC,aAAa,CAAC;aACtB,QAAQ,CAAC,CAAC,QAA0B,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QAE9D,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,CAAC;YACpD,MAAM,IAAI,CAAC,IAAI;iBACZ,OAAO,CAAC,gBAAgB,CAAC;iBACzB,QAAQ,CAAC,CAAC,QAA0B,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;YAC9D,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC;YACjD,MAAM,IAAI,CAAC,IAAI;iBACZ,OAAO,CAAC,aAAa,CAAC;iBACtB,QAAQ,CAAC,CAAC,MAAyB,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -14,11 +14,15 @@ describe(OmniChannelSettings.name, function () {
|
|
|
14
14
|
};
|
|
15
15
|
it('should enable status based capacity model', async () => {
|
|
16
16
|
await plugin.run(configEnableStatusBasedCapacityModel);
|
|
17
|
+
});
|
|
18
|
+
it('should verify status based capacity model is enabled', async () => {
|
|
17
19
|
const res = await plugin.retrieve();
|
|
18
20
|
assert.deepStrictEqual(res, configEnableStatusBasedCapacityModel);
|
|
19
21
|
});
|
|
20
22
|
it('should disable status based capacity model', async () => {
|
|
21
23
|
await plugin.run(configDisableStatusBasedCapacityModel);
|
|
24
|
+
});
|
|
25
|
+
it('should verify status based capacity model is disabled', async () => {
|
|
22
26
|
const res = await plugin.retrieve();
|
|
23
27
|
assert.deepStrictEqual(res, configDisableStatusBasedCapacityModel);
|
|
24
28
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.e2e-spec.js","sourceRoot":"","sources":["../../../src/plugins/omni-channel-settings/index.e2e-spec.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,QAAQ,CAAC,mBAAmB,CAAC,IAAI,EAAE;IACjC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,MAA2B,CAAC;IAChC,MAAM,CAAC,GAAG,EAAE;QACV,MAAM,GAAG,IAAI,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,MAAM,oCAAoC,GAAG;QAC3C,8BAA8B,EAAE,IAAI;KACrC,CAAC;IACF,MAAM,qCAAqC,GAAG;QAC5C,8BAA8B,EAAE,KAAK;KACtC,CAAC;IAEF,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,MAAM,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.e2e-spec.js","sourceRoot":"","sources":["../../../src/plugins/omni-channel-settings/index.e2e-spec.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,QAAQ,CAAC,mBAAmB,CAAC,IAAI,EAAE;IACjC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,MAA2B,CAAC;IAChC,MAAM,CAAC,GAAG,EAAE;QACV,MAAM,GAAG,IAAI,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,MAAM,oCAAoC,GAAG;QAC3C,8BAA8B,EAAE,IAAI;KACrC,CAAC;IACF,MAAM,qCAAqC,GAAG;QAC5C,8BAA8B,EAAE,KAAK;KACtC,CAAC;IAEF,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,MAAM,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,oCAAoC,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,MAAM,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,qCAAqC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -4,25 +4,17 @@ const SAVE_BUTTON_SELECTOR = 'input[id$=":save"]';
|
|
|
4
4
|
const STATUS_CAPACITY_TOGGLE_SELECTOR = 'input[id$=":toggleOmniStatusCapModelPref"]';
|
|
5
5
|
export class OmniChannelSettings extends BrowserforcePlugin {
|
|
6
6
|
async retrieve(definition) {
|
|
7
|
-
// Open the omni-channel setup page
|
|
8
7
|
const page = await this.browserforce.openPage(BASE_PATH);
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
const enableStatusBasedCapacityModel = await page
|
|
9
|
+
.locator(STATUS_CAPACITY_TOGGLE_SELECTOR)
|
|
10
|
+
.evaluate((el) => el.getAttribute('checked') === 'checked' ? true : false);
|
|
12
11
|
return { enableStatusBasedCapacityModel };
|
|
13
12
|
}
|
|
14
13
|
async apply(config) {
|
|
15
|
-
// Open the omni-channel setup page
|
|
16
14
|
const page = await this.browserforce.openPage(BASE_PATH);
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
await
|
|
20
|
-
// Save the settings
|
|
21
|
-
const saveButton = await page.waitForSelector(SAVE_BUTTON_SELECTOR);
|
|
22
|
-
await saveButton.click();
|
|
23
|
-
// Wait for the page to refresh
|
|
24
|
-
await page.waitForNavigation();
|
|
25
|
-
// Close the page
|
|
15
|
+
await page.locator(STATUS_CAPACITY_TOGGLE_SELECTOR).click();
|
|
16
|
+
await page.locator(SAVE_BUTTON_SELECTOR).click();
|
|
17
|
+
await page.waitForLoadState('networkidle');
|
|
26
18
|
await page.close();
|
|
27
19
|
}
|
|
28
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/omni-channel-settings/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,SAAS,GAAG,4BAA4B,CAAC;AAE/C,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AAClD,MAAM,+BAA+B,GACnC,4CAA4C,CAAC;AAM/C,MAAM,OAAO,mBAAoB,SAAQ,kBAAkB;IAClD,KAAK,CAAC,QAAQ,CAAC,UAAmB;QACvC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/omni-channel-settings/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,SAAS,GAAG,4BAA4B,CAAC;AAE/C,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AAClD,MAAM,+BAA+B,GACnC,4CAA4C,CAAC;AAM/C,MAAM,OAAO,mBAAoB,SAAQ,kBAAkB;IAClD,KAAK,CAAC,QAAQ,CAAC,UAAmB;QACvC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEzD,MAAM,8BAA8B,GAAG,MAAM,IAAI;aAC9C,OAAO,CAAC,+BAA+B,CAAC;aACxC,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,CACf,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CACxD,CAAC;QAEJ,OAAO,EAAE,8BAA8B,EAAE,CAAC;IAC5C,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,MAAc;QAC/B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEzD,MAAM,IAAI,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,CAAC;QAE5D,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEjD,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAC3C,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -12,21 +12,21 @@ export class OpportunitySplits extends BrowserforcePlugin {
|
|
|
12
12
|
return response;
|
|
13
13
|
}
|
|
14
14
|
async apply(config) {
|
|
15
|
-
let page;
|
|
16
15
|
if (config.enabled) {
|
|
17
|
-
page = await this.browserforce.openPage(SetupPage.PATH);
|
|
16
|
+
const page = await this.browserforce.openPage(SetupPage.PATH);
|
|
18
17
|
const setupPage = new SetupPage(page);
|
|
19
18
|
const layoutSelectionPage = await setupPage.enable();
|
|
20
19
|
const overviewPage = await layoutSelectionPage.choose();
|
|
21
20
|
await overviewPage.waitUntilCompleted();
|
|
21
|
+
await page.close();
|
|
22
22
|
}
|
|
23
23
|
else {
|
|
24
|
-
page = await this.browserforce.openPage(OverviewPage.PATH);
|
|
24
|
+
const page = await this.browserforce.openPage(OverviewPage.PATH);
|
|
25
25
|
const overviewPage = new OverviewPage(page);
|
|
26
26
|
await overviewPage.disable();
|
|
27
27
|
await overviewPage.waitUntilCompleted();
|
|
28
|
+
await page.close();
|
|
28
29
|
}
|
|
29
|
-
await page.close();
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/opportunity-splits/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/opportunity-splits/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAM7C,MAAM,OAAO,iBAAkB,SAAQ,kBAAkB;IAChD,KAAK,CAAC,QAAQ,CAAC,UAAmB;QACvC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACjE,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG;YACf,OAAO,EAAE,MAAM,YAAY,CAAC,SAAS,EAAE;SACxC,CAAC;QACF,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,MAAc;QAC/B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC9D,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,mBAAmB,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,CAAC;YACrD,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC;YACxD,MAAM,YAAY,CAAC,kBAAkB,EAAE,CAAC;YACxC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACjE,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC;YAC7B,MAAM,YAAY,CAAC,kBAAkB,EAAE,CAAC;YACxC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -7,10 +7,8 @@ export class LayoutSelectionPage {
|
|
|
7
7
|
this.page = page;
|
|
8
8
|
}
|
|
9
9
|
async choose() {
|
|
10
|
-
await
|
|
11
|
-
|
|
12
|
-
this.page.locator(SAVE_BUTTON).click(),
|
|
13
|
-
]);
|
|
10
|
+
await this.page.locator(SAVE_BUTTON).click();
|
|
11
|
+
await this.page.waitForLoadState('networkidle');
|
|
14
12
|
return new OverviewPage(this.page);
|
|
15
13
|
}
|
|
16
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-selection.js","sourceRoot":"","sources":["../../../../src/plugins/opportunity-splits/pages/layout-selection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,GAAG,oBAAoB,CAAC;AAEzC,MAAM,OAAO,mBAAmB;IAC9B,MAAM,CAAC,IAAI,GACT,qEAAqE,CAAC;IAChE,IAAI,CAAO;IAEnB,YAAY,IAAU;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAEM,KAAK,CAAC,MAAM;QACjB,MAAM,
|
|
1
|
+
{"version":3,"file":"layout-selection.js","sourceRoot":"","sources":["../../../../src/plugins/opportunity-splits/pages/layout-selection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,GAAG,oBAAoB,CAAC;AAEzC,MAAM,OAAO,mBAAmB;IAC9B,MAAM,CAAC,IAAI,GACT,qEAAqE,CAAC;IAChE,IAAI,CAAO;IAEnB,YAAY,IAAU;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAEM,KAAK,CAAC,MAAM;QACjB,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAChD,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC"}
|
|
@@ -11,27 +11,22 @@ export class OverviewPage {
|
|
|
11
11
|
}
|
|
12
12
|
async isEnabled() {
|
|
13
13
|
await this.waitUntilCompleted();
|
|
14
|
-
return (
|
|
15
|
-
(await this.page
|
|
14
|
+
return (this.page.url().includes(OverviewPage.PATH) &&
|
|
15
|
+
(await this.page.locator(DISABLE_LINK).count()) > 0);
|
|
16
16
|
}
|
|
17
17
|
async waitUntilCompleted() {
|
|
18
18
|
if (await this.isInProgress()) {
|
|
19
|
-
await this.page
|
|
20
|
-
.locator(COMPLETED)
|
|
21
|
-
.setTimeout(10 * 60 * 1000) // 10 minutes
|
|
22
|
-
.wait();
|
|
19
|
+
await this.page.locator(COMPLETED).waitFor({ timeout: 10 * 60 * 1000 }); // 10 minutes
|
|
23
20
|
}
|
|
24
21
|
}
|
|
25
22
|
async isInProgress() {
|
|
26
|
-
return (await this.page
|
|
23
|
+
return (await this.page.locator(IN_PROGRESS).count()) > 0;
|
|
27
24
|
}
|
|
28
25
|
async disable() {
|
|
29
26
|
await this.page.locator(DISABLE_LINK).click();
|
|
30
27
|
await this.page.locator(DISABLE_CONFIRM_CHECKBOX).click();
|
|
31
|
-
await
|
|
32
|
-
|
|
33
|
-
this.page.locator(DISABLE_CONFIRM_BUTTON).click(),
|
|
34
|
-
]);
|
|
28
|
+
await this.page.locator(DISABLE_CONFIRM_BUTTON).click();
|
|
29
|
+
await this.page.waitForLoadState('networkidle');
|
|
35
30
|
return this;
|
|
36
31
|
}
|
|
37
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overview.js","sourceRoot":"","sources":["../../../../src/plugins/opportunity-splits/pages/overview.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,GAAG,2CAA2C,CAAC;AAChE,MAAM,SAAS,GAAG,uBAAuB,CAAC;AAC1C,MAAM,YAAY,GAAG,6BAA6B,CAAC;AACnD,MAAM,wBAAwB,GAAG,mBAAmB,CAAC;AACrD,MAAM,sBAAsB,GAC1B,uDAAuD,CAAC;AAE1D,MAAM,OAAO,YAAY;IACvB,MAAM,CAAC,IAAI,GACT,uEAAuE,CAAC;IAClE,IAAI,CAAO;IAEnB,YAAY,IAAU;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAEM,KAAK,CAAC,SAAS;QACpB,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAChC,OAAO,CACL,
|
|
1
|
+
{"version":3,"file":"overview.js","sourceRoot":"","sources":["../../../../src/plugins/opportunity-splits/pages/overview.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,GAAG,2CAA2C,CAAC;AAChE,MAAM,SAAS,GAAG,uBAAuB,CAAC;AAC1C,MAAM,YAAY,GAAG,6BAA6B,CAAC;AACnD,MAAM,wBAAwB,GAAG,mBAAmB,CAAC;AACrD,MAAM,sBAAsB,GAC1B,uDAAuD,CAAC;AAE1D,MAAM,OAAO,YAAY;IACvB,MAAM,CAAC,IAAI,GACT,uEAAuE,CAAC;IAClE,IAAI,CAAO;IAEnB,YAAY,IAAU;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAEM,KAAK,CAAC,SAAS;QACpB,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAChC,OAAO,CACL,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC;YAC3C,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CACpD,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,kBAAkB;QAC7B,IAAI,MAAM,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;YAC9B,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,aAAa;QACxF,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,YAAY;QACvB,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;IAC5D,CAAC;IAEM,KAAK,CAAC,OAAO;QAClB,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC;QAC9C,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;QAC1D,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;QACxD,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC"}
|
|
@@ -9,10 +9,8 @@ export class SetupPage {
|
|
|
9
9
|
}
|
|
10
10
|
async enable() {
|
|
11
11
|
await this.page.locator(SAVE_BUTTON).click();
|
|
12
|
-
await
|
|
13
|
-
|
|
14
|
-
this.page.locator(MODAL_CONFIRM_BUTTON).click(),
|
|
15
|
-
]);
|
|
12
|
+
await this.page.locator(MODAL_CONFIRM_BUTTON).click();
|
|
13
|
+
await this.page.waitForLoadState('networkidle');
|
|
16
14
|
return new LayoutSelectionPage(this.page);
|
|
17
15
|
}
|
|
18
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../../src/plugins/opportunity-splits/pages/setup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,WAAW,GAAG,+BAA+B,CAAC;AACpD,MAAM,oBAAoB,GACxB,mEAAmE,CAAC;AAEtE,MAAM,OAAO,SAAS;IACpB,MAAM,CAAC,IAAI,GACT,mEAAmE,CAAC;IAC9D,IAAI,CAAO;IAEnB,YAAY,IAAU;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAEM,KAAK,CAAC,MAAM;QACjB,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;QAC7C,MAAM,
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../../src/plugins/opportunity-splits/pages/setup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,WAAW,GAAG,+BAA+B,CAAC;AACpD,MAAM,oBAAoB,GACxB,mEAAmE,CAAC;AAEtE,MAAM,OAAO,SAAS;IACpB,MAAM,CAAC,IAAI,GACT,mEAAmE,CAAC;IAC9D,IAAI,CAAO;IAEnB,YAAY,IAAU;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAEM,KAAK,CAAC,MAAM;QACjB,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;QACtD,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAChD,OAAO,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC"}
|
|
@@ -10,12 +10,18 @@ describe(PermissionSets.name, function () {
|
|
|
10
10
|
before(() => {
|
|
11
11
|
plugin = new PermissionSets(global.bf);
|
|
12
12
|
});
|
|
13
|
-
const
|
|
13
|
+
const addConfigurePermissionSet = [
|
|
14
14
|
{
|
|
15
15
|
permissionSetName: 'ServicePresenceTest',
|
|
16
16
|
servicePresenceStatuses: ['TestStatus', 'TestStatus3'],
|
|
17
17
|
},
|
|
18
18
|
];
|
|
19
|
+
const removeConfigurePermissionSet = [
|
|
20
|
+
{
|
|
21
|
+
permissionSetName: 'ServicePresenceTest',
|
|
22
|
+
servicePresenceStatuses: [],
|
|
23
|
+
},
|
|
24
|
+
];
|
|
19
25
|
it('should create permission set and service presence status as a prerequisite', () => {
|
|
20
26
|
const sourceDeployCmd = child.spawnSync('sf', [
|
|
21
27
|
'project',
|
|
@@ -27,10 +33,15 @@ describe(PermissionSets.name, function () {
|
|
|
27
33
|
]);
|
|
28
34
|
assert.deepStrictEqual(sourceDeployCmd.status, 0, sourceDeployCmd.output.toString());
|
|
29
35
|
});
|
|
30
|
-
it('should
|
|
31
|
-
await plugin.run(
|
|
32
|
-
const res = await plugin.retrieve(
|
|
33
|
-
assert.deepStrictEqual(res,
|
|
36
|
+
it('should add permission set presence status', async () => {
|
|
37
|
+
await plugin.run(addConfigurePermissionSet);
|
|
38
|
+
const res = await plugin.retrieve(addConfigurePermissionSet);
|
|
39
|
+
assert.deepStrictEqual(res, addConfigurePermissionSet);
|
|
40
|
+
});
|
|
41
|
+
it('should remove permission set presence status', async () => {
|
|
42
|
+
await plugin.run(removeConfigurePermissionSet);
|
|
43
|
+
const res = await plugin.retrieve(removeConfigurePermissionSet);
|
|
44
|
+
assert.deepStrictEqual(res, removeConfigurePermissionSet);
|
|
34
45
|
});
|
|
35
46
|
});
|
|
36
47
|
//# sourceMappingURL=index.e2e-spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.e2e-spec.js","sourceRoot":"","sources":["../../../src/plugins/permission-sets/index.e2e-spec.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,KAAK,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE;IAC5B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,MAAsB,CAAC;IAC3B,MAAM,CAAC,GAAG,EAAE;QACV,MAAM,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,MAAM,
|
|
1
|
+
{"version":3,"file":"index.e2e-spec.js","sourceRoot":"","sources":["../../../src/plugins/permission-sets/index.e2e-spec.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,KAAK,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE;IAC5B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,MAAsB,CAAC;IAC3B,MAAM,CAAC,GAAG,EAAE;QACV,MAAM,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,MAAM,yBAAyB,GAAG;QAChC;YACE,iBAAiB,EAAE,qBAAqB;YACxC,uBAAuB,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC;SACvD;KACF,CAAC;IAEF,MAAM,4BAA4B,GAAG;QACnC;YACE,iBAAiB,EAAE,qBAAqB;YACxC,uBAAuB,EAAE,EAAE;SAC5B;KACF,CAAC;IAEF,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACpF,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE;YAC5C,SAAS;YACT,QAAQ;YACR,OAAO;YACP,IAAI;YACJ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC;YACnC,QAAQ;SACT,CAAC,CAAC;QACH,MAAM,CAAC,eAAe,CACpB,eAAe,CAAC,MAAM,EACtB,CAAC,EACD,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,CAClC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;QAC7D,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC;QAChE,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,4BAA4B,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -2,8 +2,8 @@ import { BrowserforcePlugin } from '../../../plugin.js';
|
|
|
2
2
|
const ADD_BUTTON_SELECTOR = 'a[id$=":duelingListBox:backingList_add"]';
|
|
3
3
|
const REMOVE_BUTTON_SELECTOR = 'a[id$=":duelingListBox:backingList_remove"]';
|
|
4
4
|
const SAVE_BUTTON_SELECTOR = 'input[id$=":button_pc_save"]';
|
|
5
|
-
const VALUES_AVAILABLE_SELECTOR = 'select[id$=":duelingListBox:backingList_a"]
|
|
6
|
-
const VALUES_ENABLED_SELECTOR = 'select[id$=":duelingListBox:backingList_s"]
|
|
5
|
+
const VALUES_AVAILABLE_SELECTOR = 'select[id$=":duelingListBox:backingList_a"]';
|
|
6
|
+
const VALUES_ENABLED_SELECTOR = 'select[id$=":duelingListBox:backingList_s"]';
|
|
7
7
|
export class ServicePresenceStatus extends BrowserforcePlugin {
|
|
8
8
|
async retrieve(definition) {
|
|
9
9
|
// Query for the permission set
|
|
@@ -13,9 +13,12 @@ export class ServicePresenceStatus extends BrowserforcePlugin {
|
|
|
13
13
|
.singleRecordQuery(`SELECT Id FROM PermissionSet WHERE Name='${permissionSetName}'`);
|
|
14
14
|
// Open the permission set setup page
|
|
15
15
|
const page = await this.browserforce.openPage(`${permissionSet.Id}/e?s=ServicePresenceStatusAccess`);
|
|
16
|
-
const enabledServicePresenceStatuses = await page
|
|
17
|
-
|
|
16
|
+
const enabledServicePresenceStatuses = await page
|
|
17
|
+
.locator(`${VALUES_ENABLED_SELECTOR} > option:not(:disabled)`)
|
|
18
|
+
.evaluateAll((options) => {
|
|
19
|
+
return options.map((option) => option.title);
|
|
18
20
|
});
|
|
21
|
+
await page.close();
|
|
19
22
|
return enabledServicePresenceStatuses;
|
|
20
23
|
}
|
|
21
24
|
async apply(config) {
|
|
@@ -24,35 +27,39 @@ export class ServicePresenceStatus extends BrowserforcePlugin {
|
|
|
24
27
|
const permissionSet = await this.org
|
|
25
28
|
.getConnection()
|
|
26
29
|
.singleRecordQuery(`SELECT Id FROM PermissionSet WHERE Name='${permissionSetName}'`);
|
|
27
|
-
// Open the permission set setup page
|
|
28
30
|
const page = await this.browserforce.openPage(`${permissionSet.Id}/e?s=ServicePresenceStatusAccess`);
|
|
29
31
|
if (config?.servicePresenceStatuses) {
|
|
30
|
-
await page
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
32
|
+
const availableOptions = await page
|
|
33
|
+
.locator(`${VALUES_AVAILABLE_SELECTOR} > option:not(:disabled)`)
|
|
34
|
+
.evaluateAll((options) => {
|
|
35
|
+
return options.map((option) => option.title);
|
|
36
|
+
});
|
|
37
|
+
const enabledOptions = await page
|
|
38
|
+
.locator(`${VALUES_ENABLED_SELECTOR} > option:not(:disabled)`)
|
|
39
|
+
.evaluateAll((options) => {
|
|
40
|
+
return options.map((option) => option.title);
|
|
41
|
+
});
|
|
42
|
+
for (const optionTitle of availableOptions) {
|
|
43
|
+
if (config.servicePresenceStatuses.includes(optionTitle)) {
|
|
44
|
+
await page
|
|
45
|
+
.getByRole('option', { name: optionTitle, exact: true })
|
|
46
|
+
.click();
|
|
47
|
+
await page.locator(ADD_BUTTON_SELECTOR).click();
|
|
38
48
|
}
|
|
39
49
|
}
|
|
40
|
-
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
await
|
|
47
|
-
await page.click(REMOVE_BUTTON_SELECTOR);
|
|
50
|
+
// Find first option that needs to be removed
|
|
51
|
+
for (const optionTitle of enabledOptions) {
|
|
52
|
+
if (!config.servicePresenceStatuses.includes(optionTitle)) {
|
|
53
|
+
await page
|
|
54
|
+
.getByRole('option', { name: optionTitle, exact: true })
|
|
55
|
+
.click();
|
|
56
|
+
await page.locator(REMOVE_BUTTON_SELECTOR).click();
|
|
48
57
|
}
|
|
49
58
|
}
|
|
50
59
|
}
|
|
51
60
|
// Save the settings and wait for page refresh
|
|
52
|
-
await
|
|
53
|
-
|
|
54
|
-
page.click(SAVE_BUTTON_SELECTOR),
|
|
55
|
-
]);
|
|
61
|
+
await page.locator(SAVE_BUTTON_SELECTOR).click();
|
|
62
|
+
await page.waitForLoadState('load');
|
|
56
63
|
// Close the page
|
|
57
64
|
await page.close();
|
|
58
65
|
}
|