sfdx-browserforce-plugin 5.1.2 → 5.2.0-next.2
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 +5 -5
- package/lib/browserforce.js +56 -54
- package/lib/browserforce.js.map +1 -1
- package/lib/pages/login.d.ts +1 -2
- package/lib/pages/login.js +6 -20
- package/lib/pages/login.js.map +1 -1
- package/lib/plugins/activity-settings/index.js +10 -10
- package/lib/plugins/activity-settings/index.js.map +1 -1
- package/lib/plugins/company-information/index.js +22 -20
- 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 +6 -7
- package/lib/plugins/customer-portal/enabled/index.js.map +1 -1
- package/lib/plugins/customer-portal/index.e2e-spec.js +6 -13
- package/lib/plugins/customer-portal/index.e2e-spec.js.map +1 -1
- package/lib/plugins/customer-portal/portals/index.js +66 -35
- 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 +42 -29
- package/lib/plugins/density-settings/index.js.map +1 -1
- package/lib/plugins/email-deliverability/index.js +8 -10
- 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 +9 -11
- package/lib/plugins/high-velocity-sales-settings/page.js.map +1 -1
- package/lib/plugins/history-tracking/index.e2e-spec.js +5 -0
- package/lib/plugins/history-tracking/index.e2e-spec.js.map +1 -1
- package/lib/plugins/history-tracking/index.js +32 -20
- package/lib/plugins/history-tracking/index.js.map +1 -1
- package/lib/plugins/home-page-layouts/index.js +18 -11
- package/lib/plugins/home-page-layouts/index.js.map +1 -1
- package/lib/plugins/lightning-experience-settings/index.d.ts +2 -3
- package/lib/plugins/lightning-experience-settings/index.e2e-spec.js +8 -0
- package/lib/plugins/lightning-experience-settings/index.e2e-spec.js.map +1 -1
- package/lib/plugins/lightning-experience-settings/index.js +48 -60
- package/lib/plugins/lightning-experience-settings/index.js.map +1 -1
- package/lib/plugins/linkedin-sales-navigator-settings/page.d.ts +1 -1
- package/lib/plugins/linkedin-sales-navigator-settings/page.js +17 -12
- 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 +9 -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/index.js +2 -2
- package/lib/plugins/permission-sets/index.js.map +1 -1
- package/lib/plugins/permission-sets/service-presence-status/index.js +35 -24
- package/lib/plugins/permission-sets/service-presence-status/index.js.map +1 -1
- package/lib/plugins/picklists/field-dependencies/pages.d.ts +2 -2
- package/lib/plugins/picklists/field-dependencies/pages.js +19 -18
- package/lib/plugins/picklists/field-dependencies/pages.js.map +1 -1
- package/lib/plugins/picklists/index.e2e-spec.js +38 -32
- package/lib/plugins/picklists/index.e2e-spec.js.map +1 -1
- package/lib/plugins/picklists/pages.d.ts +5 -4
- package/lib/plugins/picklists/pages.js +59 -66
- package/lib/plugins/picklists/pages.js.map +1 -1
- package/lib/plugins/record-types/index.d.ts +1 -0
- package/lib/plugins/record-types/index.e2e-spec.js +4 -0
- package/lib/plugins/record-types/index.e2e-spec.js.map +1 -1
- package/lib/plugins/record-types/index.js +7 -5
- package/lib/plugins/record-types/index.js.map +1 -1
- package/lib/plugins/record-types/pages.d.ts +2 -3
- package/lib/plugins/record-types/pages.js +17 -28
- 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.e2e-spec.js +1 -0
- package/lib/plugins/relate-contact-to-multiple-accounts/index.e2e-spec.js.map +1 -1
- package/lib/plugins/relate-contact-to-multiple-accounts/index.js +33 -44
- package/lib/plugins/relate-contact-to-multiple-accounts/index.js.map +1 -1
- package/lib/plugins/reports-and-dashboards/folder-sharing/index.js +16 -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 +77 -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.e2e-spec.js +3 -11
- package/lib/plugins/security/authentication-configuration/index.e2e-spec.js.map +1 -1
- package/lib/plugins/security/authentication-configuration/index.js +14 -13
- package/lib/plugins/security/authentication-configuration/index.js.map +1 -1
- package/lib/plugins/security/certificate-and-key-management/index.e2e-spec.js +23 -6
- package/lib/plugins/security/certificate-and-key-management/index.e2e-spec.js.map +1 -1
- package/lib/plugins/security/certificate-and-key-management/index.js +26 -28
- package/lib/plugins/security/certificate-and-key-management/index.js.map +1 -1
- package/lib/plugins/service-channels/capacity/index.js +66 -38
- package/lib/plugins/service-channels/capacity/index.js.map +1 -1
- package/lib/plugins/service-channels/index.e2e-spec.js +11 -0
- package/lib/plugins/service-channels/index.e2e-spec.js.map +1 -1
- package/lib/plugins/service-channels/index.js +2 -2
- package/lib/plugins/service-channels/index.js.map +1 -1
- package/lib/plugins/slack/index.js +12 -18
- 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 -54
- package/lib/plugins/user-access-policies/page.js.map +1 -1
- package/oclif.manifest.json +1 -11
- package/package.json +2 -2
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { waitForPageErrors } from '../../browserforce.js';
|
|
1
2
|
import { BrowserforcePlugin } from '../../plugin.js';
|
|
2
3
|
const BASE_PATH = 'ui/setup/layout/FieldHistoryTracking?pEntity={APINAME}';
|
|
3
|
-
const ENABLE_HISTORY_SELECTOR = 'input[
|
|
4
|
+
const ENABLE_HISTORY_SELECTOR = 'input[type="checkbox"][id="enable"]';
|
|
4
5
|
const ENABLE_FIELD_HISTORY_SELECTOR = 'input[id="{APINAME}_fht"]';
|
|
5
|
-
const SAVE_BUTTON_SELECTOR = 'input[
|
|
6
|
+
const SAVE_BUTTON_SELECTOR = 'input[type="submit"][name="save"]';
|
|
6
7
|
export class HistoryTracking extends BrowserforcePlugin {
|
|
7
8
|
async retrieve(definition) {
|
|
8
9
|
const historyTrackingConfigs = [];
|
|
@@ -10,15 +11,16 @@ export class HistoryTracking extends BrowserforcePlugin {
|
|
|
10
11
|
// This is in case we have field tracking configured for custom fields
|
|
11
12
|
const tableEnumOrIdByObjectApiName = await this.getTableEnumOrIdByObjectApiName(definition);
|
|
12
13
|
// Now we can iterate over all history tracking configurations in the definition
|
|
13
|
-
for
|
|
14
|
+
for (const historyTrackingConfig of definition) {
|
|
14
15
|
const historyTrackingResult = { ...historyTrackingConfig };
|
|
15
16
|
// Open the object history tracking setup page
|
|
16
17
|
const page = await this.browserforce.openPage(BASE_PATH.replace('{APINAME}', tableEnumOrIdByObjectApiName.get(historyTrackingConfig.objectApiName)));
|
|
17
18
|
// Retrieve the object history tracking
|
|
18
19
|
// If this is a custom object, this checkbox does not exist, so skip
|
|
19
20
|
if (!historyTrackingConfig.objectApiName.includes('__c')) {
|
|
20
|
-
await page
|
|
21
|
-
|
|
21
|
+
historyTrackingResult.enableHistoryTracking = await page
|
|
22
|
+
.locator(ENABLE_HISTORY_SELECTOR)
|
|
23
|
+
.isChecked();
|
|
22
24
|
}
|
|
23
25
|
// If we have no field history tracking, there is nothing more to do
|
|
24
26
|
if (!historyTrackingConfig.fieldHistoryTracking) {
|
|
@@ -45,14 +47,17 @@ export class HistoryTracking extends BrowserforcePlugin {
|
|
|
45
47
|
// This is because custom fields are identified using their CustomField.Id value
|
|
46
48
|
const fieldSelectorByFieldApiName = await this.getFieldSelectorByFieldApiName(tableEnumOrIdByObjectApiName.get(historyTrackingConfig.objectApiName), historyTrackingConfig.fieldHistoryTracking);
|
|
47
49
|
// We can now retrieve the field history settings for the fields specified for the object
|
|
48
|
-
for
|
|
50
|
+
for (const fieldHistoryTracking of historyTrackingConfig.fieldHistoryTracking) {
|
|
49
51
|
const fieldHistoryTrackingResult = { ...fieldHistoryTracking };
|
|
50
52
|
const fieldApiName = fieldSelectorByFieldApiName.get(fieldHistoryTracking.fieldApiName);
|
|
51
|
-
fieldHistoryTrackingResult.enableHistoryTracking = await page
|
|
53
|
+
fieldHistoryTrackingResult.enableHistoryTracking = await page
|
|
54
|
+
.locator(ENABLE_FIELD_HISTORY_SELECTOR.replace('{APINAME}', fieldApiName))
|
|
55
|
+
.isChecked();
|
|
52
56
|
fieldHistoryTrackingConfigs.push(fieldHistoryTrackingResult);
|
|
53
57
|
}
|
|
54
58
|
historyTrackingResult.fieldHistoryTracking = fieldHistoryTrackingConfigs;
|
|
55
59
|
historyTrackingConfigs.push(historyTrackingResult);
|
|
60
|
+
await page.close();
|
|
56
61
|
}
|
|
57
62
|
return historyTrackingConfigs;
|
|
58
63
|
}
|
|
@@ -61,18 +66,18 @@ export class HistoryTracking extends BrowserforcePlugin {
|
|
|
61
66
|
// This is in case we are configuring field tracking for custom fields
|
|
62
67
|
const tableEnumOrIdByObjectApiName = await this.getTableEnumOrIdByObjectApiName(plan);
|
|
63
68
|
// Now we can iterate over all history tracking configurations in the plan
|
|
64
|
-
for
|
|
69
|
+
for (const historyTrackingConfig of plan) {
|
|
65
70
|
// Open the object history tracking setup page
|
|
66
71
|
const page = await this.browserforce.openPage(BASE_PATH.replace('{APINAME}', tableEnumOrIdByObjectApiName.get(historyTrackingConfig.objectApiName)));
|
|
67
72
|
// Retrieve the object history tracking
|
|
68
73
|
// If this is a custom object, this checkbox does not exist, so skip
|
|
69
74
|
if (!historyTrackingConfig.objectApiName.includes('__c')) {
|
|
70
|
-
await page
|
|
71
|
-
|
|
75
|
+
const historyTrackingEnabled = await page
|
|
76
|
+
.locator(ENABLE_HISTORY_SELECTOR)
|
|
77
|
+
.isChecked();
|
|
72
78
|
if (historyTrackingConfig.enableHistoryTracking !== historyTrackingEnabled) {
|
|
73
79
|
// Click the checkbox
|
|
74
|
-
|
|
75
|
-
await enableHistoryTracking.evaluate((node) => node.click());
|
|
80
|
+
await page.locator(ENABLE_HISTORY_SELECTOR).click();
|
|
76
81
|
}
|
|
77
82
|
}
|
|
78
83
|
if (historyTrackingConfig.fieldHistoryTracking) {
|
|
@@ -80,23 +85,30 @@ export class HistoryTracking extends BrowserforcePlugin {
|
|
|
80
85
|
// This is because custom fields are identified using their CustomField.Id value
|
|
81
86
|
const fieldSelectorByFieldApiName = await this.getFieldSelectorByFieldApiName(tableEnumOrIdByObjectApiName.get(historyTrackingConfig.objectApiName), historyTrackingConfig.fieldHistoryTracking);
|
|
82
87
|
// We can now retrieve the field history settings for the fields specified for the object
|
|
83
|
-
for
|
|
88
|
+
for (const fieldHistoryTracking of historyTrackingConfig.fieldHistoryTracking) {
|
|
84
89
|
const fieldApiName = fieldSelectorByFieldApiName.get(fieldHistoryTracking.fieldApiName);
|
|
85
90
|
const fieldSelector = ENABLE_FIELD_HISTORY_SELECTOR.replace('{APINAME}', fieldApiName);
|
|
86
|
-
const fieldHistoryTrackingEnabled = await page
|
|
91
|
+
const fieldHistoryTrackingEnabled = await page
|
|
92
|
+
.locator(fieldSelector)
|
|
93
|
+
.isChecked();
|
|
87
94
|
if (fieldHistoryTracking.enableHistoryTracking !==
|
|
88
95
|
fieldHistoryTrackingEnabled) {
|
|
89
96
|
// Click the checkbox
|
|
90
|
-
|
|
91
|
-
await enableFieldHistoryTracking.evaluate((node) => node.click());
|
|
97
|
+
await page.locator(fieldSelector).click();
|
|
92
98
|
}
|
|
93
99
|
}
|
|
94
100
|
}
|
|
95
101
|
// Save the settings
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
102
|
+
const afterSavePromise = Promise.race([
|
|
103
|
+
page.waitForURL((url) => url.pathname !== `/ui/setup/layout/FieldHistoryTracking`),
|
|
104
|
+
waitForPageErrors(page),
|
|
105
|
+
]);
|
|
106
|
+
await page
|
|
107
|
+
.locator(SAVE_BUTTON_SELECTOR)
|
|
108
|
+
.filter({ visible: true }) // there are three save buttons [not visible, top row, bottom row]
|
|
109
|
+
.first()
|
|
110
|
+
.click();
|
|
111
|
+
await afterSavePromise;
|
|
100
112
|
// Close the page
|
|
101
113
|
await page.close();
|
|
102
114
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/history-tracking/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,SAAS,GAAG,wDAAwD,CAAC;AAE3E,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/history-tracking/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { waitForPageErrors } from '../../browserforce.js';
|
|
1
2
|
import { BrowserforcePlugin } from '../../plugin.js';
|
|
2
3
|
const BASE_PATH = 'setup/ui/assignhomelayoutedit.jsp';
|
|
3
4
|
const BASE_SELECTOR = 'table.detailList';
|
|
@@ -5,10 +6,12 @@ const SAVE_BUTTON_SELECTOR = 'input[name="save"]';
|
|
|
5
6
|
export class HomePageLayouts extends BrowserforcePlugin {
|
|
6
7
|
async retrieve() {
|
|
7
8
|
const page = await this.browserforce.openPage(BASE_PATH);
|
|
8
|
-
await page.
|
|
9
|
-
const profiles = await page
|
|
9
|
+
await page.locator(BASE_SELECTOR).waitFor();
|
|
10
|
+
const profiles = await page
|
|
11
|
+
.locator('table.detailList tbody tr td label')
|
|
12
|
+
.evaluateAll((labels) => {
|
|
10
13
|
return labels.map((label) => {
|
|
11
|
-
for (let i = 0; label.childNodes.length; i++) {
|
|
14
|
+
for (let i = 0; i < label.childNodes.length; i++) {
|
|
12
15
|
if (label.childNodes[i].nodeType === label.TEXT_NODE) {
|
|
13
16
|
return label.childNodes[i].nodeValue ?? '';
|
|
14
17
|
}
|
|
@@ -16,7 +19,9 @@ export class HomePageLayouts extends BrowserforcePlugin {
|
|
|
16
19
|
throw new Error('retrieving HomePageLayouts failed');
|
|
17
20
|
});
|
|
18
21
|
});
|
|
19
|
-
const layouts = await page
|
|
22
|
+
const layouts = await page
|
|
23
|
+
.locator('table.detailList tbody tr td select')
|
|
24
|
+
.evaluateAll((selects) => {
|
|
20
25
|
return selects
|
|
21
26
|
.map((select) => select.selectedOptions[0].text)
|
|
22
27
|
.map((text) => (text === 'Home Page Default' ? '' : text));
|
|
@@ -54,12 +59,12 @@ export class HomePageLayouts extends BrowserforcePlugin {
|
|
|
54
59
|
.join(',');
|
|
55
60
|
const profiles = await this.org
|
|
56
61
|
.getConnection()
|
|
57
|
-
.tooling.query(`SELECT Id, Name FROM Profile WHERE
|
|
62
|
+
.tooling.query(`SELECT Id, Name FROM Profile WHERE NAME IN (${profilesList})`);
|
|
58
63
|
const homePageLayouts = await this.org
|
|
59
64
|
.getConnection()
|
|
60
65
|
.tooling.query(`SELECT Id, Name FROM HomePageLayout WHERE Name IN (${layoutsList})`);
|
|
61
66
|
const page = await this.browserforce.openPage(BASE_PATH);
|
|
62
|
-
await page.
|
|
67
|
+
await page.locator(BASE_SELECTOR).waitFor();
|
|
63
68
|
for (const assignment of config.homePageLayoutAssignments) {
|
|
64
69
|
const homePageLayoutName = assignment.layout;
|
|
65
70
|
const profile = profiles.records.find((p) => p.Name === assignment.profile);
|
|
@@ -74,12 +79,14 @@ export class HomePageLayouts extends BrowserforcePlugin {
|
|
|
74
79
|
throw new Error(`Could not find home page layout "${homePageLayoutName}" in list of home page layouts: ${homePageLayouts.records.map((l) => l.Name)}`);
|
|
75
80
|
}
|
|
76
81
|
const profileSelector = `select[id='${profile.Id.substring(0, 15)}']`;
|
|
77
|
-
await page
|
|
78
|
-
|
|
82
|
+
await page
|
|
83
|
+
.locator(profileSelector)
|
|
84
|
+
.selectOption(homePageLayout.Id.substring(0, 15));
|
|
79
85
|
}
|
|
80
|
-
await
|
|
81
|
-
|
|
82
|
-
page.
|
|
86
|
+
await page.locator(SAVE_BUTTON_SELECTOR).first().click();
|
|
87
|
+
await Promise.race([
|
|
88
|
+
page.waitForURL((url) => url.pathname !== `/${BASE_PATH}`),
|
|
89
|
+
waitForPageErrors(page),
|
|
83
90
|
]);
|
|
84
91
|
await page.close();
|
|
85
92
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/home-page-layouts/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,SAAS,GAAG,mCAAmC,CAAC;AAEtD,MAAM,aAAa,GAAG,kBAAkB,CAAC;AACzC,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AAmBlD,MAAM,OAAO,eAAgB,SAAQ,kBAAkB;IAC9C,KAAK,CAAC,QAAQ;QACnB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACzD,MAAM,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/home-page-layouts/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Locator, Page } from 'playwright';
|
|
2
2
|
import { BrowserforcePlugin } from '../../plugin.js';
|
|
3
3
|
type Config = {
|
|
4
4
|
activeThemeName: string;
|
|
@@ -6,10 +6,9 @@ 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
|
-
setupDOMObserver(page: Page, elementName: string, callbackName: string): Promise<void>;
|
|
13
12
|
retrieve(): Promise<Config>;
|
|
14
13
|
apply(config: Config): Promise<void>;
|
|
15
14
|
getThemeData(page: Page): Promise<Theme[]>;
|
|
@@ -8,7 +8,15 @@ describe(LightningExperienceSettings.name, function () {
|
|
|
8
8
|
plugin = new LightningExperienceSettings(global.bf);
|
|
9
9
|
configOriginal = await plugin.retrieve();
|
|
10
10
|
});
|
|
11
|
+
const configSLDS2 = { activeThemeName: 'SalesforceCosmos' };
|
|
11
12
|
const configLightningLite = { activeThemeName: 'LightningLite' };
|
|
13
|
+
it('should activate SalesforceCosmos theme (SLDS2)', async () => {
|
|
14
|
+
await plugin.run(configSLDS2);
|
|
15
|
+
});
|
|
16
|
+
it('SalesforceCosmos theme should already be activated', async () => {
|
|
17
|
+
const state = await plugin.retrieve();
|
|
18
|
+
assert.deepStrictEqual(state, configSLDS2);
|
|
19
|
+
});
|
|
12
20
|
it('should activate LightningLite theme', async () => {
|
|
13
21
|
await plugin.run(configLightningLite);
|
|
14
22
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.e2e-spec.js","sourceRoot":"","sources":["../../../src/plugins/lightning-experience-settings/index.e2e-spec.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAEzD,QAAQ,CAAC,2BAA2B,CAAC,IAAI,EAAE;IACzC,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,IAAI,MAAmC,CAAC;QACxC,IAAI,cAAc,CAAC;QACnB,MAAM,CAAC,KAAK,IAAI,EAAE;YAChB,MAAM,GAAG,IAAI,2BAA2B,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACpD,cAAc,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,MAAM,mBAAmB,GAAG,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC;QACjE,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;YAC9C,MAAM,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;YAC9C,IAAI,GAAG,CAAC;YACR,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,GAAG,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,GAAG,GAAG,CAAC,CAAC;YACV,CAAC;YACD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;gBACjB,MAAM,GAAG,CAAC;YACZ,CAAC,EAAE,sBAAsB,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.e2e-spec.js","sourceRoot":"","sources":["../../../src/plugins/lightning-experience-settings/index.e2e-spec.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAEzD,QAAQ,CAAC,2BAA2B,CAAC,IAAI,EAAE;IACzC,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,IAAI,MAAmC,CAAC;QACxC,IAAI,cAAc,CAAC;QACnB,MAAM,CAAC,KAAK,IAAI,EAAE;YAChB,MAAM,GAAG,IAAI,2BAA2B,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACpD,cAAc,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC;QAC5D,MAAM,mBAAmB,GAAG,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC;QACjE,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;YAC9C,MAAM,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;YAC9C,IAAI,GAAG,CAAC;YACR,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,GAAG,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,GAAG,GAAG,CAAC,CAAC;YACV,CAAC;YACD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;gBACjB,MAAM,GAAG,CAAC;YACZ,CAAC,EAAE,sBAAsB,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -5,28 +5,6 @@ const THEME_ROW_SELECTOR = '#setupComponent table > tbody > tr';
|
|
|
5
5
|
const DEVELOPER_NAMES_SELECTOR = `${THEME_ROW_SELECTOR} > td:nth-child(2) > lightning-primitive-cell-factory lightning-base-formatted-text`;
|
|
6
6
|
const STATES_SELECTOR = `${THEME_ROW_SELECTOR} > td:nth-child(6) > lightning-primitive-cell-factory`;
|
|
7
7
|
export class LightningExperienceSettings extends BrowserforcePlugin {
|
|
8
|
-
async setupDOMObserver(page, elementName, callbackName) {
|
|
9
|
-
await page.evaluate((elementName, callbackName) => {
|
|
10
|
-
const observer = new MutationObserver((mutations) => {
|
|
11
|
-
for (const mutation of mutations) {
|
|
12
|
-
for (const node of Array.from(mutation.addedNodes)) {
|
|
13
|
-
if (node instanceof Element &&
|
|
14
|
-
node.tagName.toLowerCase() === elementName) {
|
|
15
|
-
observer.disconnect();
|
|
16
|
-
// Call the exposed function to handle the element
|
|
17
|
-
window[callbackName]();
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
observer.observe(document.body, { childList: true, subtree: false });
|
|
24
|
-
// Clean up observer after navigation starts (element won't appear)
|
|
25
|
-
window.addEventListener('beforeunload', () => {
|
|
26
|
-
observer.disconnect();
|
|
27
|
-
}, { once: true });
|
|
28
|
-
}, elementName, callbackName);
|
|
29
|
-
}
|
|
30
8
|
async retrieve() {
|
|
31
9
|
const page = await this.browserforce.openPage(BASE_PATH);
|
|
32
10
|
const themes = await this.getThemeData(page);
|
|
@@ -43,18 +21,26 @@ export class LightningExperienceSettings extends BrowserforcePlugin {
|
|
|
43
21
|
await page.close();
|
|
44
22
|
}
|
|
45
23
|
async getThemeData(page) {
|
|
46
|
-
await page.
|
|
47
|
-
const
|
|
48
|
-
await
|
|
49
|
-
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
24
|
+
await page.locator(THEME_ROW_SELECTOR).first().waitFor();
|
|
25
|
+
const rowLocator = page.locator(THEME_ROW_SELECTOR);
|
|
26
|
+
const rowCount = await rowLocator.count();
|
|
27
|
+
await page.locator(DEVELOPER_NAMES_SELECTOR).first().waitFor();
|
|
28
|
+
const developerNameLocator = page.locator(DEVELOPER_NAMES_SELECTOR);
|
|
29
|
+
const stateLocator = page.locator(STATES_SELECTOR);
|
|
30
|
+
const themes = [];
|
|
31
|
+
for (let i = 0; i < rowCount; i++) {
|
|
32
|
+
const developerName = await developerNameLocator.nth(i).innerText();
|
|
33
|
+
const hasIcon = await stateLocator
|
|
34
|
+
.nth(i)
|
|
35
|
+
.filter({ has: page.locator('lightning-primitive-icon') })
|
|
36
|
+
.isVisible();
|
|
37
|
+
themes.push({
|
|
53
38
|
developerName,
|
|
54
|
-
isActive:
|
|
55
|
-
|
|
56
|
-
};
|
|
57
|
-
}
|
|
39
|
+
isActive: hasIcon,
|
|
40
|
+
rowLocator: rowLocator.nth(i),
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return themes;
|
|
58
44
|
}
|
|
59
45
|
async setActiveTheme(page, themeDeveloperName) {
|
|
60
46
|
const data = await this.getThemeData(page);
|
|
@@ -62,35 +48,37 @@ export class LightningExperienceSettings extends BrowserforcePlugin {
|
|
|
62
48
|
if (!theme) {
|
|
63
49
|
throw new Error(`Could not find theme "${themeDeveloperName}" in list of themes: ${data.map((d) => d.developerName)}`);
|
|
64
50
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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');
|
|
51
|
+
const newActiveThemeRowLocator = theme.rowLocator;
|
|
52
|
+
await page
|
|
53
|
+
.locator(`${THEME_ROW_SELECTOR} lightning-button-menu`)
|
|
54
|
+
.first()
|
|
55
|
+
.waitFor();
|
|
56
|
+
const menuButton = newActiveThemeRowLocator.locator('td lightning-primitive-cell-factory lightning-primitive-cell-actions lightning-button-menu');
|
|
57
|
+
await menuButton.click();
|
|
58
|
+
await page
|
|
59
|
+
.locator(`${THEME_ROW_SELECTOR} lightning-button-menu slot lightning-menu-item`)
|
|
60
|
+
.first()
|
|
61
|
+
.waitFor();
|
|
89
62
|
// second last item: [show, activate, preview]
|
|
90
|
-
const activateMenuItem =
|
|
63
|
+
const activateMenuItem = menuButton
|
|
64
|
+
.locator('slot lightning-menu-item')
|
|
65
|
+
.nth(-2);
|
|
91
66
|
await Promise.all([
|
|
92
|
-
|
|
93
|
-
|
|
67
|
+
Promise.race([
|
|
68
|
+
page.waitForEvent('load'), // immediate page reload when SLDS1 theme was activated
|
|
69
|
+
Promise.all([
|
|
70
|
+
page.waitForEvent('load'),
|
|
71
|
+
// When switching from a SDLS2 to a SLDS1 theme, the following modal appears:
|
|
72
|
+
// Activate this theme?
|
|
73
|
+
// This theme uses SLDS 1. When you activate this theme, you also disable SLDS 2.
|
|
74
|
+
// - Never Mind
|
|
75
|
+
// - Activate <--
|
|
76
|
+
page
|
|
77
|
+
.locator('lightning-modal lightning-button[variant="brand"]')
|
|
78
|
+
.click(),
|
|
79
|
+
]),
|
|
80
|
+
]),
|
|
81
|
+
activateMenuItem.click(),
|
|
94
82
|
]);
|
|
95
83
|
}
|
|
96
84
|
}
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/lightning-experience-settings/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { waitForPageErrors } from '../../browserforce.js';
|
|
2
2
|
const ENABLE_TOGGLE = 'div[data-aura-class="setup_sales_linkedinLinkedInSetupRow"] input[type="checkbox"]:not(:disabled)';
|
|
3
|
-
|
|
4
|
-
const
|
|
3
|
+
// unfortunately the divs intercept pointer events so we need to click on the label instead
|
|
4
|
+
const ENABLE_BUTTON = 'div[data-aura-class="setup_sales_linkedinLinkedInSetupRow"]:has(input[type="checkbox"]:not(:disabled)) label';
|
|
5
|
+
const CONFIRM_CHECKBOX = 'section[role="dialog"] lightning-input lightning-primitive-input-checkbox';
|
|
6
|
+
const ACCEPT_BUTTON = 'section[role="dialog"] div div button:not(:disabled):nth-child(2)';
|
|
5
7
|
export class LinkedInSalesNavigatorPage {
|
|
6
8
|
page;
|
|
7
9
|
constructor(page) {
|
|
@@ -11,21 +13,24 @@ export class LinkedInSalesNavigatorPage {
|
|
|
11
13
|
return 'lightning/setup/LinkedInSalesNavigatorPage/home';
|
|
12
14
|
}
|
|
13
15
|
async getStatus() {
|
|
14
|
-
const isEnabled = await this.page
|
|
15
|
-
.locator(ENABLE_TOGGLE)
|
|
16
|
-
.map((checkbox) => checkbox.checked)
|
|
17
|
-
.wait();
|
|
16
|
+
const isEnabled = await this.page.locator(ENABLE_TOGGLE).isChecked();
|
|
18
17
|
await this.page.close();
|
|
19
18
|
return isEnabled;
|
|
20
19
|
}
|
|
21
20
|
async setStatus(enable) {
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
const afterSavePromise = Promise.race([
|
|
22
|
+
this.page.waitForResponse(/LinkedInIntegrationSetup.updatePref=1/),
|
|
23
|
+
waitForPageErrors(this.page),
|
|
24
|
+
]);
|
|
24
25
|
if (enable) {
|
|
25
|
-
await
|
|
26
|
-
await
|
|
26
|
+
await this.page.locator(ENABLE_BUTTON).click();
|
|
27
|
+
await this.page.locator(CONFIRM_CHECKBOX).click();
|
|
28
|
+
await this.page.locator(ACCEPT_BUTTON).click();
|
|
27
29
|
}
|
|
28
|
-
|
|
30
|
+
else {
|
|
31
|
+
await this.page.locator(ENABLE_BUTTON).click();
|
|
32
|
+
}
|
|
33
|
+
await afterSavePromise;
|
|
29
34
|
await this.page.close();
|
|
30
35
|
}
|
|
31
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../../src/plugins/linkedin-sales-navigator-settings/page.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../../src/plugins/linkedin-sales-navigator-settings/page.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,aAAa,GACjB,mGAAmG,CAAC;AAEtG,2FAA2F;AAC3F,MAAM,aAAa,GACjB,8GAA8G,CAAC;AACjH,MAAM,gBAAgB,GACpB,2EAA2E,CAAC;AAC9E,MAAM,aAAa,GACjB,mEAAmE,CAAC;AAEtE,MAAM,OAAO,0BAA0B;IAC7B,IAAI,CAAO;IAEnB,YAAY,IAAU;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAEM,MAAM,CAAC,MAAM;QAClB,OAAO,iDAAiD,CAAC;IAC3D,CAAC;IAEM,KAAK,CAAC,SAAS;QACpB,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,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,uCAAuC,CAAC;YAClE,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;SAC7B,CAAC,CAAC;QACH,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;YAC/C,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC;YAClD,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;QACjD,CAAC;QACD,MAAM,gBAAgB,CAAC;QACvB,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,20 @@ 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
|
+
.isChecked();
|
|
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
|
-
|
|
20
|
-
//
|
|
21
|
-
|
|
22
|
-
await
|
|
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
|
+
// omnichannel/settings.apexp
|
|
18
|
+
// ->
|
|
19
|
+
// omnichannel/settings.apexp?setupid=OmniChannelSettings
|
|
20
|
+
await page.waitForURL((url) => url.searchParams.has('setupid', 'OmniChannelSettings'));
|
|
26
21
|
await page.close();
|
|
27
22
|
}
|
|
28
23
|
}
|
|
@@ -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;QACzD,MAAM,8BAA8B,GAAG,MAAM,IAAI;aAC9C,OAAO,CAAC,+BAA+B,CAAC;aACxC,SAAS,EAAE,CAAC;QACf,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;QACzD,MAAM,IAAI,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,CAAC;QAC5D,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;QACjD,6BAA6B;QAC7B,KAAK;QACL,yDAAyD;QACzD,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,EAAE,CAC5B,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,qBAAqB,CAAC,CACvD,CAAC;QACF,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
|