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
|
@@ -7,8 +7,9 @@ export class AuthenticationConfiguration extends BrowserforcePlugin {
|
|
|
7
7
|
async retrieve(definition) {
|
|
8
8
|
const page = await this.browserforce.openPage(EDIT_VIEW_PATH);
|
|
9
9
|
const frameOrPage = await this.browserforce.waitForSelectorInFrameOrPage(page, SETUP_FORM_SELECTOR);
|
|
10
|
-
await frameOrPage
|
|
11
|
-
|
|
10
|
+
const services = await frameOrPage
|
|
11
|
+
.locator(SERVICE_CHECKBOX_SELECTOR)
|
|
12
|
+
.evaluateAll((inputs, definedServices) => inputs
|
|
12
13
|
.map((cb) => {
|
|
13
14
|
const labelElement = document.querySelector(`label[for="${cb.id}"]`);
|
|
14
15
|
const label = labelElement
|
|
@@ -26,9 +27,10 @@ export class AuthenticationConfiguration extends BrowserforcePlugin {
|
|
|
26
27
|
async apply(plan) {
|
|
27
28
|
const page = await this.browserforce.openPage(EDIT_VIEW_PATH);
|
|
28
29
|
const frameOrPage = await this.browserforce.waitForSelectorInFrameOrPage(page, SETUP_FORM_SELECTOR);
|
|
29
|
-
await frameOrPage.waitForSelector(SERVICE_CHECKBOX_SELECTOR);
|
|
30
30
|
for (const svc of plan.services) {
|
|
31
|
-
const checkboxId = (await frameOrPage
|
|
31
|
+
const checkboxId = (await frameOrPage
|
|
32
|
+
.locator(SERVICE_CHECKBOX_SELECTOR)
|
|
33
|
+
.evaluateAll((inputs, serviceName) => {
|
|
32
34
|
for (const inp of inputs) {
|
|
33
35
|
const labelElement = document.querySelector(`label[for="${inp.id}"]`);
|
|
34
36
|
if (labelElement &&
|
|
@@ -42,20 +44,19 @@ export class AuthenticationConfiguration extends BrowserforcePlugin {
|
|
|
42
44
|
throw new Error(`Authentication service "${svc.label}" not found`);
|
|
43
45
|
}
|
|
44
46
|
const selector = `[id="${checkboxId}"]`;
|
|
45
|
-
const isChecked = await frameOrPage
|
|
47
|
+
const isChecked = await frameOrPage.locator(selector).isChecked();
|
|
46
48
|
if (svc.enabled !== isChecked) {
|
|
47
|
-
await frameOrPage.
|
|
49
|
+
await frameOrPage.locator(selector).click();
|
|
48
50
|
}
|
|
49
51
|
}
|
|
50
|
-
const anyChecked = await frameOrPage
|
|
52
|
+
const anyChecked = await frameOrPage
|
|
53
|
+
.locator(SERVICE_CHECKBOX_SELECTOR)
|
|
54
|
+
.evaluateAll((inputs) => inputs.some((cb) => cb.checked));
|
|
51
55
|
if (!anyChecked) {
|
|
52
|
-
throw new Error('Change failed:
|
|
56
|
+
throw new Error('Change failed: "You must select at least one authentication service."');
|
|
53
57
|
}
|
|
54
|
-
await frameOrPage.
|
|
55
|
-
await
|
|
56
|
-
frameOrPage.waitForNavigation({ waitUntil: 'networkidle0' }),
|
|
57
|
-
frameOrPage.click(SAVE_BUTTON_SELECTOR),
|
|
58
|
-
]);
|
|
58
|
+
await frameOrPage.locator(SAVE_BUTTON_SELECTOR).first().click();
|
|
59
|
+
await page.waitForResponse((resp) => new URL(resp.url()).pathname === '/domainname/DomainName.apexp');
|
|
59
60
|
await page.close();
|
|
60
61
|
}
|
|
61
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/security/authentication-configuration/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AASxD,MAAM,cAAc,GAClB,wEAAwE,CAAC;AAE3E,MAAM,mBAAmB,GAAG,sCAAsC,CAAC;AACnE,MAAM,yBAAyB,GAAG,mCAAmC,CAAC;AACtE,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AAElD,MAAM,OAAO,2BAA4B,SAAQ,kBAAkB;IAC1D,KAAK,CAAC,QAAQ,CAAC,UAAkB;QACtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC9D,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,4BAA4B,CACtE,IAAI,EACJ,mBAAmB,CACpB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/security/authentication-configuration/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,11 +9,11 @@ describe(CertificateAndKeyManagement.name, function () {
|
|
|
9
9
|
before(() => {
|
|
10
10
|
pluginCertificateManagement = new CertificateAndKeyManagement(global.bf);
|
|
11
11
|
});
|
|
12
|
-
const
|
|
12
|
+
const configCreatedCert = {
|
|
13
13
|
certificates: [
|
|
14
14
|
{
|
|
15
|
-
name: '
|
|
16
|
-
label: '
|
|
15
|
+
name: 'foo',
|
|
16
|
+
label: 'foo',
|
|
17
17
|
},
|
|
18
18
|
],
|
|
19
19
|
};
|
|
@@ -40,11 +40,11 @@ describe(CertificateAndKeyManagement.name, function () {
|
|
|
40
40
|
assert.deepStrictEqual(sourceDeployCmd.status, 0, sourceDeployCmd.output.toString());
|
|
41
41
|
});
|
|
42
42
|
it('should create a self-signed certificate', async () => {
|
|
43
|
-
await pluginCertificateManagement.apply(
|
|
43
|
+
await pluginCertificateManagement.apply(configCreatedCert);
|
|
44
44
|
});
|
|
45
45
|
it('should not do anything if self-signed certificate is already available', async () => {
|
|
46
46
|
// explictly pass definition to retrieve
|
|
47
|
-
const res = await pluginCertificateManagement.run(
|
|
47
|
+
const res = await pluginCertificateManagement.run(configCreatedCert);
|
|
48
48
|
assert.deepStrictEqual(res, { message: 'no action necessary' });
|
|
49
49
|
});
|
|
50
50
|
it('should import a cert from a keystore', async () => {
|
|
@@ -54,10 +54,27 @@ describe(CertificateAndKeyManagement.name, function () {
|
|
|
54
54
|
const res = await pluginCertificateManagement.run(configImportFromKeystore);
|
|
55
55
|
assert.deepStrictEqual(res, { message: 'no action necessary' });
|
|
56
56
|
});
|
|
57
|
+
it('should disable Identity Provider', async () => {
|
|
58
|
+
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
|
59
|
+
const dir = resolve(join(__dirname, 'sfdx-source', 'disable-identity-provider'));
|
|
60
|
+
const sourceDeployCmd = spawnSync('sf', [
|
|
61
|
+
'project',
|
|
62
|
+
'deploy',
|
|
63
|
+
'start',
|
|
64
|
+
'-d',
|
|
65
|
+
dir,
|
|
66
|
+
'--json',
|
|
67
|
+
]);
|
|
68
|
+
assert.deepStrictEqual(sourceDeployCmd.status, 0, sourceDeployCmd.output.toString());
|
|
69
|
+
});
|
|
57
70
|
it('should delete certificates using Metadata API', async () => {
|
|
58
71
|
const org = await Org.create({});
|
|
59
72
|
const conn = org.getConnection();
|
|
60
|
-
await conn.metadata.delete('Certificate', [
|
|
73
|
+
await conn.metadata.delete('Certificate', [
|
|
74
|
+
'identity_provider',
|
|
75
|
+
'foo',
|
|
76
|
+
'Dummy',
|
|
77
|
+
]);
|
|
61
78
|
});
|
|
62
79
|
});
|
|
63
80
|
//# sourceMappingURL=index.e2e-spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.e2e-spec.js","sourceRoot":"","sources":["../../../../src/plugins/security/certificate-and-key-management/index.e2e-spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAEzD,QAAQ,CAAC,2BAA2B,CAAC,IAAI,EAAE;IACzC,IAAI,2BAAwD,CAAC;IAC7D,MAAM,CAAC,GAAG,EAAE;QACV,2BAA2B,GAAG,IAAI,2BAA2B,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,MAAM,
|
|
1
|
+
{"version":3,"file":"index.e2e-spec.js","sourceRoot":"","sources":["../../../../src/plugins/security/certificate-and-key-management/index.e2e-spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { existsSync } from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import * as queryString from 'querystring';
|
|
4
|
+
import { waitForPageErrors } from '../../../browserforce.js';
|
|
4
5
|
import { BrowserforcePlugin } from '../../../plugin.js';
|
|
5
6
|
const CERT_PREFIX_PATH = '0P1';
|
|
6
7
|
const KEYSTORE_IMPORT_PATH = '_ui/security/certificate/KeyStoreImportUi/e';
|
|
@@ -94,11 +95,9 @@ export class CertificateAndKeyManagement extends BrowserforcePlugin {
|
|
|
94
95
|
urlAttributes['exp'] = certificate.exportable ? 1 : 0;
|
|
95
96
|
}
|
|
96
97
|
const page = await this.browserforce.openPage(`${CERT_PREFIX_PATH}/e?${queryString.stringify(urlAttributes)}`);
|
|
97
|
-
await page.
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
page.click(SAVE_BUTTON_SELECTOR),
|
|
101
|
-
]);
|
|
98
|
+
await page.locator(SAVE_BUTTON_SELECTOR).first().click();
|
|
99
|
+
// -> id (15 character Salesforce ID starting with 0P1)
|
|
100
|
+
await page.waitForURL((url) => /\/0P1\w{12}/.test(url.pathname));
|
|
102
101
|
await page.close();
|
|
103
102
|
}
|
|
104
103
|
}
|
|
@@ -106,8 +105,6 @@ export class CertificateAndKeyManagement extends BrowserforcePlugin {
|
|
|
106
105
|
if (plan.importFromKeystore) {
|
|
107
106
|
for (const certificate of plan.importFromKeystore) {
|
|
108
107
|
const page = await this.browserforce.openPage(`${KEYSTORE_IMPORT_PATH}`);
|
|
109
|
-
await page.waitForSelector(FILE_UPLOAD_SELECTOR);
|
|
110
|
-
const elementHandle = (await page.$(FILE_UPLOAD_SELECTOR));
|
|
111
108
|
// TODO: make relative to this.command.flags.definitionfile
|
|
112
109
|
if (!certificate.filePath) {
|
|
113
110
|
throw new Error(`To import a certificate, the filePath is mandatory.`);
|
|
@@ -116,25 +113,27 @@ export class CertificateAndKeyManagement extends BrowserforcePlugin {
|
|
|
116
113
|
if (!existsSync(filePath)) {
|
|
117
114
|
throw new Error(`file does not exist: ${filePath}`);
|
|
118
115
|
}
|
|
119
|
-
await
|
|
116
|
+
await page.locator(FILE_UPLOAD_SELECTOR).setInputFiles(filePath);
|
|
120
117
|
if (certificate.password) {
|
|
121
|
-
await page
|
|
122
|
-
|
|
118
|
+
await page
|
|
119
|
+
.locator(KEYSTORE_PASSWORD_SELECTOR)
|
|
120
|
+
.fill(certificate.password);
|
|
123
121
|
}
|
|
124
|
-
await page.
|
|
125
|
-
await Promise.
|
|
126
|
-
page.
|
|
127
|
-
|
|
122
|
+
await page.locator(SAVE_BUTTON_SELECTOR).first().click();
|
|
123
|
+
await Promise.race([
|
|
124
|
+
page.waitForURL((url) => url.pathname !== `/${KEYSTORE_IMPORT_PATH}`),
|
|
125
|
+
async () => {
|
|
126
|
+
try {
|
|
127
|
+
await waitForPageErrors(page);
|
|
128
|
+
}
|
|
129
|
+
catch (e) {
|
|
130
|
+
if (e instanceof Error && e.message === 'Data Not Available') {
|
|
131
|
+
throw new Error('Failed to import certificate from Keystore. Please enable Identity Provider first. https://salesforce.stackexchange.com/questions/61618/import-keystore-in-certificate-and-key-management');
|
|
132
|
+
}
|
|
133
|
+
throw e;
|
|
134
|
+
}
|
|
135
|
+
},
|
|
128
136
|
]);
|
|
129
|
-
try {
|
|
130
|
-
await this.browserforce.throwPageErrors(page);
|
|
131
|
-
}
|
|
132
|
-
catch (e) {
|
|
133
|
-
if (e.message === 'Data Not Available') {
|
|
134
|
-
throw new Error('Failed to import certificate from Keystore. Please enable Identity Provider first. https://salesforce.stackexchange.com/questions/61618/import-keystore-in-certificate-and-key-management');
|
|
135
|
-
}
|
|
136
|
-
throw e;
|
|
137
|
-
}
|
|
138
137
|
if (certificate.name) {
|
|
139
138
|
// rename cert as it has the wrong name
|
|
140
139
|
// JKS aliases are case-insensitive (and so lowercase)
|
|
@@ -143,12 +142,11 @@ export class CertificateAndKeyManagement extends BrowserforcePlugin {
|
|
|
143
142
|
.tooling.query(`SELECT Id FROM Certificate WHERE DeveloperName = '${certificate.name.toLowerCase()}'`);
|
|
144
143
|
const importedCert = certsResponse.records[0];
|
|
145
144
|
const certPage = await this.browserforce.openPage(`${importedCert.Id}/e?MasterLabel=${certificate.name}&DeveloperName=${certificate.name}`);
|
|
146
|
-
await certPage.
|
|
147
|
-
await Promise.
|
|
148
|
-
|
|
149
|
-
certPage
|
|
145
|
+
await certPage.locator(SAVE_BUTTON_SELECTOR).first().click();
|
|
146
|
+
await Promise.race([
|
|
147
|
+
await page.waitForURL((url) => url.pathname !== `/${importedCert.Id}/e`),
|
|
148
|
+
waitForPageErrors(certPage),
|
|
150
149
|
]);
|
|
151
|
-
await this.browserforce.throwPageErrors(certPage);
|
|
152
150
|
await certPage.close();
|
|
153
151
|
}
|
|
154
152
|
await page.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/security/certificate-and-key-management/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/security/certificate-and-key-management/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,WAAW,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,oBAAoB,GAAG,6CAA6C,CAAC;AAE3E,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AAClD,MAAM,0BAA0B,GAAG,gBAAgB,CAAC;AACpD,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AA4BlD,MAAM,OAAO,2BAA4B,SAAQ,kBAAkB;IAC1D,KAAK,CAAC,QAAQ,CAAC,UAAkB;QACtC,MAAM,QAAQ,GAAW;YACvB,YAAY,EAAE,EAAE;YAChB,kBAAkB,EAAE,EAAE;SACvB,CAAC;QACF,IAAI,oBAAoB,GAAwB,EAAE,CAAC;QACnD,IACE,UAAU,EAAE,YAAY,EAAE,MAAM;YAChC,UAAU,EAAE,kBAAkB,EAAE,MAAM,EACtC,CAAC;YACD,oBAAoB;gBAClB,+EAA+E;gBAC/E,wEAAwE;gBACxE,CACE,MAAM,IAAI,CAAC,GAAG;qBACX,aAAa,EAAE;qBACf,OAAO,CAAC,KAAK,CACZ,0HAA0H,EAC1H,EAAE,OAAO,EAAE,KAAK,EAAE,CACnB,CACJ,EAAE,OAAO,CAAC;QACf,CAAC;QACD,IAAI,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;YACrC,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;gBAC3C,MAAM,YAAY,GAAG,oBAAoB,CAAC,IAAI,CAC5C,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,KAAK,IAAI,CAAC,IAAI,CACvC,CAAC;gBACF,IAAI,YAAY,EAAE,CAAC;oBACjB,QAAQ,CAAC,YAAa,CAAC,IAAI,CAAC;wBAC1B,GAAG,EAAE,YAAY,CAAC,EAAE;wBACpB,IAAI,EAAE,YAAY,CAAC,aAAa;wBAChC,KAAK,EAAE,YAAY,CAAC,WAAW;wBAC/B,UAAU,EAAE,YAAY,CAAC,6BAA6B;wBACtD,OAAO,EAAE,YAAY,CAAC,OAAO;qBAC9B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,UAAU,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC;YAC3C,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,kBAAkB,EAAE,CAAC;gBACjD,MAAM,YAAY,GAAG,oBAAoB,CAAC,IAAI,CAC5C,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,KAAK,IAAI,CAAC,IAAI,CACvC,CAAC;gBACF,IAAI,YAAY,EAAE,CAAC;oBACjB,QAAQ,CAAC,kBAAmB,CAAC,IAAI,CAAC;wBAChC,IAAI,EAAE,YAAY,CAAC,aAAa;qBACjC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEM,IAAI,CAAC,KAAc,EAAE,UAAmB;QAC7C,MAAM,QAAQ,GAAW,EAAE,CAAC;QAC5B,IAAI,KAAK,IAAI,UAAU,IAAI,KAAK,CAAC,YAAY,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;YACzE,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;gBAC3C,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAC1C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAC5B,CAAC;gBACF,IAAI,YAAY,EAAE,CAAC;oBACjB,2DAA2D;oBAC3D,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC;gBAC9B,CAAC;gBACD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAEjC,CAAC;gBACd,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAC3B,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;wBAC3B,QAAQ,CAAC,YAAY,GAAG,EAAE,CAAC;oBAC7B,CAAC;oBACD,QAAQ,CAAC,YAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,UAAU,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC;YAC3C,MAAM,kBAAkB,GAAG,UAAU,EAAE,kBAAkB,EAAE,MAAM,CAC/D,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,kBAAkB,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CACxE,CAAC;YACF,IAAI,kBAAkB,CAAC,MAAM,EAAE,CAAC;gBAC9B,QAAQ,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;YACnD,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7D,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,IAAY;QAC7B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC5C,IAAI,WAAW,CAAC,GAAG,EAAE,CAAC;oBACpB,SAAS;gBACX,CAAC;qBAAM,CAAC;oBACN,aAAa;oBACb,MAAM,aAAa,GAAuC;wBACxD,aAAa,EAAE,WAAW,CAAC,IAAI;wBAC/B,WAAW,EAAE,WAAW,CAAC,KAAK;qBAC/B,CAAC;oBACF,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;wBACxB,aAAa,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC;oBACjD,CAAC;oBACD,IAAI,WAAW,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;wBACzC,aAAa,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACxD,CAAC;oBACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAC3C,GAAG,gBAAgB,MAAM,WAAW,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,CAChE,CAAC;oBACF,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC;oBACzD,uDAAuD;oBACvD,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACjE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAClD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAC3C,GAAG,oBAAoB,EAAE,CAC1B,CAAC;gBACF,2DAA2D;gBAC3D,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;oBAC1B,MAAM,IAAI,KAAK,CACb,qDAAqD,CACtD,CAAC;gBACJ,CAAC;gBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBACpD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC1B,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,EAAE,CAAC,CAAC;gBACtD,CAAC;gBACD,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACjE,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;oBACzB,MAAM,IAAI;yBACP,OAAO,CAAC,0BAA0B,CAAC;yBACnC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAChC,CAAC;gBACD,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC;gBACzD,MAAM,OAAO,CAAC,IAAI,CAAC;oBACjB,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,IAAI,oBAAoB,EAAE,CAAC;oBACrE,KAAK,IAAI,EAAE;wBACT,IAAI,CAAC;4BACH,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;wBAChC,CAAC;wBAAC,OAAO,CAAC,EAAE,CAAC;4BACX,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,oBAAoB,EAAE,CAAC;gCAC7D,MAAM,IAAI,KAAK,CACb,2LAA2L,CAC5L,CAAC;4BACJ,CAAC;4BACD,MAAM,CAAC,CAAC;wBACV,CAAC;oBACH,CAAC;iBACF,CAAC,CAAC;gBACH,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;oBACrB,uCAAuC;oBACvC,uDAAuD;oBACvD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,GAAG;yBACjC,aAAa,EAAE;yBACf,OAAO,CAAC,KAAK,CACZ,qDAAqD,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CACvF,CAAC;oBACJ,MAAM,YAAY,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC9C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAC/C,GAAG,YAAY,CAAC,EAAE,kBAAkB,WAAW,CAAC,IAAI,kBAAkB,WAAW,CAAC,IAAI,EAAE,CACzF,CAAC;oBACF,MAAM,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC;oBAC7D,MAAM,OAAO,CAAC,IAAI,CAAC;wBACjB,MAAM,IAAI,CAAC,UAAU,CACnB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,IAAI,YAAY,CAAC,EAAE,IAAI,CAClD;wBACD,iBAAiB,CAAC,QAAQ,CAAC;qBAC5B,CAAC,CAAC;oBACH,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACzB,CAAC;gBACD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { waitForPageErrors } from '../../../browserforce.js';
|
|
1
2
|
import { BrowserforcePlugin } from '../../../plugin.js';
|
|
2
3
|
const ADD_BUTTON_SELECTOR = 'a[id$=":duelingListBox:backingList_add"]';
|
|
3
4
|
const CAPACITY_MODEL_SELECTOR = 'select[id$=":capacityModelSection:editCapacityModel"]';
|
|
@@ -6,8 +7,8 @@ const REMOVE_BUTTON_SELECTOR = 'a[id$=":duelingListBox:backingList_remove"]';
|
|
|
6
7
|
const SAVE_BUTTON_SELECTOR = 'input[id$=":save"]';
|
|
7
8
|
const STATUS_FIELD_SELECTOR = 'select[id$=":statusFieldSection:editCapacityModel"]';
|
|
8
9
|
const STATUS_CHANGE_CAPACITY_SELECTOR = 'input[name*=":statusChangeCapacityCheck"]';
|
|
9
|
-
const VALUES_COMPLETED_SELECTOR = 'select[id$=":statusFieldValues:duelingListBox:backingList_a"]
|
|
10
|
-
const VALUES_IN_PROGRESS_SELECTOR = 'select[id$=":statusFieldValues:duelingListBox:backingList_s"]
|
|
10
|
+
const VALUES_COMPLETED_SELECTOR = 'select[id$=":statusFieldValues:duelingListBox:backingList_a"]';
|
|
11
|
+
const VALUES_IN_PROGRESS_SELECTOR = 'select[id$=":statusFieldValues:duelingListBox:backingList_s"]';
|
|
11
12
|
export class Capacity extends BrowserforcePlugin {
|
|
12
13
|
async retrieve(definition) {
|
|
13
14
|
// Query for the service channel
|
|
@@ -18,17 +19,32 @@ export class Capacity extends BrowserforcePlugin {
|
|
|
18
19
|
// Open the service channel setup page
|
|
19
20
|
const page = await this.browserforce.openPage(`${serviceChannel.Id}/e`);
|
|
20
21
|
// Retrieve the service channel config
|
|
21
|
-
|
|
22
|
+
const capacityModelCount = await page
|
|
23
|
+
.locator(CAPACITY_MODEL_SELECTOR)
|
|
24
|
+
.count();
|
|
25
|
+
if (capacityModelCount === 0) {
|
|
26
|
+
await page.close();
|
|
22
27
|
return {};
|
|
23
28
|
}
|
|
24
|
-
const capacityModel = (await page
|
|
29
|
+
const capacityModel = (await page
|
|
30
|
+
.locator(`${CAPACITY_MODEL_SELECTOR} > option[selected]`)
|
|
31
|
+
.evaluate((el) => el.value)) ?? '';
|
|
25
32
|
if (capacityModel === 'StatusBased') {
|
|
26
|
-
const statusField = (await page
|
|
27
|
-
|
|
28
|
-
|
|
33
|
+
const statusField = (await page
|
|
34
|
+
.locator(`${STATUS_FIELD_SELECTOR} > option[selected]`)
|
|
35
|
+
.evaluate((el) => el.value)) ?? '';
|
|
36
|
+
const valuesForInProgress = await page
|
|
37
|
+
.locator(`${VALUES_IN_PROGRESS_SELECTOR} > option:not(:disabled)`)
|
|
38
|
+
.evaluateAll((options) => {
|
|
39
|
+
return options.map((option) => option.title);
|
|
29
40
|
});
|
|
30
|
-
const checkAgentCapacityOnReopenedWorkItems = await page
|
|
31
|
-
|
|
41
|
+
const checkAgentCapacityOnReopenedWorkItems = await page
|
|
42
|
+
.locator(STATUS_CHANGE_CAPACITY_SELECTOR)
|
|
43
|
+
.isChecked();
|
|
44
|
+
const checkAgentCapacityOnReassignedWorkItems = await page
|
|
45
|
+
.locator(OWNER_CHANGE_CAPACITY_SELECTOR)
|
|
46
|
+
.isChecked();
|
|
47
|
+
await page.close();
|
|
32
48
|
return {
|
|
33
49
|
capacityModel,
|
|
34
50
|
statusField,
|
|
@@ -37,6 +53,7 @@ export class Capacity extends BrowserforcePlugin {
|
|
|
37
53
|
checkAgentCapacityOnReassignedWorkItems,
|
|
38
54
|
};
|
|
39
55
|
}
|
|
56
|
+
await page.close();
|
|
40
57
|
return { capacityModel };
|
|
41
58
|
}
|
|
42
59
|
diff(state, definition) {
|
|
@@ -82,49 +99,60 @@ export class Capacity extends BrowserforcePlugin {
|
|
|
82
99
|
// Update the service channel config
|
|
83
100
|
const configCapacity = config.capacity;
|
|
84
101
|
if (configCapacity?.capacityModel) {
|
|
85
|
-
await page
|
|
86
|
-
|
|
102
|
+
await page
|
|
103
|
+
.locator(CAPACITY_MODEL_SELECTOR)
|
|
104
|
+
.selectOption(configCapacity.capacityModel);
|
|
87
105
|
}
|
|
88
106
|
if (configCapacity?.statusField) {
|
|
89
|
-
await page
|
|
90
|
-
|
|
107
|
+
await page
|
|
108
|
+
.locator(STATUS_FIELD_SELECTOR)
|
|
109
|
+
.selectOption(configCapacity.statusField);
|
|
91
110
|
}
|
|
111
|
+
// TODO: find another condition
|
|
112
|
+
await page.waitForLoadState('networkidle');
|
|
92
113
|
if (configCapacity?.valuesForInProgress) {
|
|
93
|
-
await page
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
114
|
+
const completedOptions = await page
|
|
115
|
+
.locator(`${VALUES_COMPLETED_SELECTOR} > option:not(:disabled)`)
|
|
116
|
+
.evaluateAll((options) => {
|
|
117
|
+
return options.map((option) => option.title);
|
|
118
|
+
});
|
|
119
|
+
const inProgressOptions = await page
|
|
120
|
+
.locator(`${VALUES_IN_PROGRESS_SELECTOR} > option:not(:disabled)`)
|
|
121
|
+
.evaluateAll((options) => {
|
|
122
|
+
return options.map((option) => option.title);
|
|
123
|
+
});
|
|
124
|
+
for (const optionTitle of completedOptions) {
|
|
125
|
+
if (configCapacity.valuesForInProgress.includes(optionTitle)) {
|
|
126
|
+
await page
|
|
127
|
+
.getByRole('option', { name: optionTitle, exact: true })
|
|
128
|
+
.click();
|
|
129
|
+
await page.locator(ADD_BUTTON_SELECTOR).click();
|
|
101
130
|
}
|
|
102
131
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
await inprogressElement.click();
|
|
110
|
-
await page.click(REMOVE_BUTTON_SELECTOR);
|
|
132
|
+
for (const optionTitle of inProgressOptions) {
|
|
133
|
+
if (!configCapacity.valuesForInProgress.includes(optionTitle)) {
|
|
134
|
+
await page
|
|
135
|
+
.getByRole('option', { name: optionTitle, exact: true })
|
|
136
|
+
.click();
|
|
137
|
+
await page.locator(REMOVE_BUTTON_SELECTOR).click();
|
|
111
138
|
}
|
|
112
139
|
}
|
|
113
140
|
}
|
|
114
141
|
if (configCapacity?.checkAgentCapacityOnReassignedWorkItems !== undefined) {
|
|
115
|
-
await page
|
|
116
|
-
|
|
117
|
-
|
|
142
|
+
await page
|
|
143
|
+
.locator(STATUS_CHANGE_CAPACITY_SELECTOR)
|
|
144
|
+
.setChecked(configCapacity.checkAgentCapacityOnReassignedWorkItems);
|
|
118
145
|
}
|
|
119
146
|
if (configCapacity?.checkAgentCapacityOnReopenedWorkItems !== undefined) {
|
|
120
|
-
await page
|
|
121
|
-
|
|
122
|
-
|
|
147
|
+
await page
|
|
148
|
+
.locator(OWNER_CHANGE_CAPACITY_SELECTOR)
|
|
149
|
+
.setChecked(configCapacity.checkAgentCapacityOnReopenedWorkItems);
|
|
123
150
|
}
|
|
124
151
|
// Save the settings and wait for page refresh
|
|
125
|
-
await
|
|
126
|
-
|
|
127
|
-
page.
|
|
152
|
+
await page.locator(SAVE_BUTTON_SELECTOR).first().click();
|
|
153
|
+
await Promise.race([
|
|
154
|
+
page.waitForURL((url) => !url.pathname.endsWith('/e')),
|
|
155
|
+
waitForPageErrors(page),
|
|
128
156
|
]);
|
|
129
157
|
// Close the page
|
|
130
158
|
await page.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/service-channels/capacity/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,mBAAmB,GAAG,0CAA0C,CAAC;AACvE,MAAM,uBAAuB,GAC3B,uDAAuD,CAAC;AAC1D,MAAM,8BAA8B,GAClC,0CAA0C,CAAC;AAC7C,MAAM,sBAAsB,GAAG,6CAA6C,CAAC;AAC7E,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AAClD,MAAM,qBAAqB,GACzB,qDAAqD,CAAC;AACxD,MAAM,+BAA+B,GACnC,2CAA2C,CAAC;AAC9C,MAAM,yBAAyB,GAC7B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/service-channels/capacity/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,6 +33,10 @@ describe(ServiceChannels.name, function () {
|
|
|
33
33
|
},
|
|
34
34
|
},
|
|
35
35
|
];
|
|
36
|
+
it('should disable status based capacity model', async () => {
|
|
37
|
+
const omnniChannelPlugin = new OmniChannelSettings(global.bf);
|
|
38
|
+
await omnniChannelPlugin.run({ enableStatusBasedCapacityModel: false });
|
|
39
|
+
});
|
|
36
40
|
it('should create service channel as a prerequisite', () => {
|
|
37
41
|
const sourceDeployCmd = child.spawnSync('sf', [
|
|
38
42
|
'project',
|
|
@@ -53,5 +57,12 @@ describe(ServiceChannels.name, function () {
|
|
|
53
57
|
const res = await plugin.retrieve(configureServiceChannels);
|
|
54
58
|
assert.deepStrictEqual(res, configureServiceChannels);
|
|
55
59
|
});
|
|
60
|
+
it('should delete Service Channels', async () => {
|
|
61
|
+
const conn = global.bf.org.getConnection();
|
|
62
|
+
const result = await conn.query("SELECT Id FROM ServiceChannel WHERE DeveloperName IN ('CaseTest', 'LeadTest')");
|
|
63
|
+
if (result.records?.length) {
|
|
64
|
+
await conn.delete('ServiceChannel', result.records.map((r) => r.Id));
|
|
65
|
+
}
|
|
66
|
+
});
|
|
56
67
|
});
|
|
57
68
|
//# sourceMappingURL=index.e2e-spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.e2e-spec.js","sourceRoot":"","sources":["../../../src/plugins/service-channels/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,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE;IAC7B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,MAAuB,CAAC;IAC5B,MAAM,CAAC,GAAG,EAAE;QACV,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,MAAM,wBAAwB,GAAG;QAC/B;YACE,2BAA2B,EAAE,UAAU;YACvC,QAAQ,EAAE;gBACR,aAAa,EAAE,aAAa;gBAC5B,WAAW,EAAE,WAAW;gBACxB,mBAAmB,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC;gBACjD,qCAAqC,EAAE,IAAI;gBAC3C,uCAAuC,EAAE,IAAI;aAC9C;SACF;QACD;YACE,2BAA2B,EAAE,UAAU;YACvC,QAAQ,EAAE;gBACR,aAAa,EAAE,aAAa;gBAC5B,WAAW,EAAE,eAAe;gBAC5B,mBAAmB,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC;gBACjD,qCAAqC,EAAE,IAAI;gBAC3C,uCAAuC,EAAE,IAAI;aAC9C;SACF;KACF,CAAC;
|
|
1
|
+
{"version":3,"file":"index.e2e-spec.js","sourceRoot":"","sources":["../../../src/plugins/service-channels/index.e2e-spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ export class ServiceChannels extends BrowserforcePlugin {
|
|
|
4
4
|
async retrieve(definition) {
|
|
5
5
|
const pluginCapacity = new Capacity(this.browserforce);
|
|
6
6
|
const serviceChannels = [];
|
|
7
|
-
for
|
|
7
|
+
for (const serviceChannel of definition) {
|
|
8
8
|
serviceChannels.push({
|
|
9
9
|
serviceChannelDeveloperName: serviceChannel.serviceChannelDeveloperName,
|
|
10
10
|
capacity: await pluginCapacity.retrieve(serviceChannel),
|
|
@@ -30,7 +30,7 @@ export class ServiceChannels extends BrowserforcePlugin {
|
|
|
30
30
|
}
|
|
31
31
|
async apply(plan) {
|
|
32
32
|
const pluginCapacity = new Capacity(this.browserforce);
|
|
33
|
-
for
|
|
33
|
+
for (const serviceChannel of plan) {
|
|
34
34
|
await pluginCapacity.apply(serviceChannel);
|
|
35
35
|
}
|
|
36
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/service-channels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAkB,MAAM,qBAAqB,CAAC;AAO/D,MAAM,OAAO,eAAgB,SAAQ,kBAAkB;IAC9C,KAAK,CAAC,QAAQ,CACnB,UAA6B;QAE7B,MAAM,cAAc,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEvD,MAAM,eAAe,GAAqB,EAAE,CAAC;QAE7C,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/service-channels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAkB,MAAM,qBAAqB,CAAC;AAO/D,MAAM,OAAO,eAAgB,SAAQ,kBAAkB;IAC9C,KAAK,CAAC,QAAQ,CACnB,UAA6B;QAE7B,MAAM,cAAc,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEvD,MAAM,eAAe,GAAqB,EAAE,CAAC;QAE7C,KAAK,MAAM,cAAc,IAAI,UAAU,EAAE,CAAC;YACxC,eAAe,CAAC,IAAI,CAAC;gBACnB,2BAA2B,EAAE,cAAc,CAAC,2BAA2B;gBACvE,QAAQ,EAAE,MAAM,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC;aACxD,CAAC,CAAC;QACL,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;IAEM,IAAI,CACT,KAAuB,EACvB,UAA4B;QAE5B,MAAM,cAAc,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEvD,MAAM,eAAe,GAAqB,EAAE,CAAC;QAE7C,KAAK,MAAM,wBAAwB,IAAI,UAAU,EAAE,CAAC;YAClD,MAAM,mBAAmB,GAAG,KAAK,CAAC,IAAI,CACpC,CAAC,mBAAmB,EAAE,EAAE,CACtB,mBAAmB,CAAC,2BAA2B;gBAC/C,wBAAwB,CAAC,2BAA2B,CACvD,CAAC;YAEF,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAClC,mBAAmB,CAAC,QAAQ,EAC5B,wBAAwB,CAAC,QAAQ,CAClC,CAAC;YAEF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,eAAe,CAAC,IAAI,CAAC;oBACnB,2BAA2B,EACzB,wBAAwB,CAAC,2BAA2B;oBACtD,QAAQ;iBACT,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9D,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,IAAsB;QACvC,MAAM,cAAc,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEvD,KAAK,MAAM,cAAc,IAAI,IAAI,EAAE,CAAC;YAClC,MAAM,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { BrowserforcePlugin } from '../../plugin.js';
|
|
2
2
|
const BASE_PATH = 'lightning/setup/SlackSetupAssistant/home';
|
|
3
3
|
const TOS_CHECKBOX = 'setup_service-slack-agree-to-terms input[type="checkbox"]';
|
|
4
|
+
// unfortunately the divs intercept pointer events so we need to click on the label instead
|
|
5
|
+
const TOS_CHECKBOX_TOGGLE = `setup_service-slack-agree-to-terms lightning-primitive-input-toggle`;
|
|
4
6
|
const SALES_CLOUD_FOR_SLACK_CHECKBOX = 'input[type="checkbox"][name="SlkSetupStepSalesCloudForSlack"]';
|
|
7
|
+
// unfortunately the divs intercept pointer events so we need to click on the label instead
|
|
8
|
+
const SALES_CLOUD_FOR_SLACK_CHECKBOX_TOGGLE = `lightning-primitive-input-toggle:has(${SALES_CLOUD_FOR_SLACK_CHECKBOX})`;
|
|
5
9
|
const TOAST_MESSAGE = 'div[id^="toastDescription"]';
|
|
6
10
|
export class Slack extends BrowserforcePlugin {
|
|
7
11
|
async retrieve(definition) {
|
|
8
12
|
const page = await this.browserforce.openPage(BASE_PATH);
|
|
9
13
|
const response = {
|
|
10
|
-
agreeToTermsAndConditions: await page
|
|
11
|
-
.locator(TOS_CHECKBOX)
|
|
12
|
-
.map((checkbox) => checkbox.checked)
|
|
13
|
-
.wait(),
|
|
14
|
+
agreeToTermsAndConditions: await page.locator(TOS_CHECKBOX).isChecked(),
|
|
14
15
|
enableSalesCloudForSlack: await page
|
|
15
16
|
.locator(SALES_CLOUD_FOR_SLACK_CHECKBOX)
|
|
16
|
-
.
|
|
17
|
-
.wait(),
|
|
17
|
+
.isChecked(),
|
|
18
18
|
};
|
|
19
19
|
await page.close();
|
|
20
20
|
return response;
|
|
@@ -26,20 +26,14 @@ export class Slack extends BrowserforcePlugin {
|
|
|
26
26
|
const state = await this.retrieve();
|
|
27
27
|
const page = await this.browserforce.openPage(BASE_PATH);
|
|
28
28
|
if (state.agreeToTermsAndConditions !== config.agreeToTermsAndConditions) {
|
|
29
|
-
await
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
(await page.locator(TOS_CHECKBOX).waitHandle()).evaluate((checkbox) => checkbox.click()),
|
|
33
|
-
]);
|
|
34
|
-
await page.waitForSelector(TOAST_MESSAGE, { hidden: true });
|
|
29
|
+
await page.locator(TOS_CHECKBOX_TOGGLE).click();
|
|
30
|
+
await page.locator(TOAST_MESSAGE).waitFor();
|
|
31
|
+
await page.locator(TOAST_MESSAGE).waitFor({ state: 'hidden' });
|
|
35
32
|
}
|
|
36
33
|
if (state.enableSalesCloudForSlack !== config.enableSalesCloudForSlack) {
|
|
37
|
-
await
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
(await page.locator(SALES_CLOUD_FOR_SLACK_CHECKBOX).waitHandle()).evaluate((checkbox) => checkbox.click()),
|
|
41
|
-
]);
|
|
42
|
-
await page.waitForSelector(TOAST_MESSAGE, { hidden: true });
|
|
34
|
+
await page.locator(SALES_CLOUD_FOR_SLACK_CHECKBOX_TOGGLE).click();
|
|
35
|
+
await page.locator(TOAST_MESSAGE).waitFor();
|
|
36
|
+
await page.locator(TOAST_MESSAGE).waitFor({ state: 'hidden' });
|
|
43
37
|
}
|
|
44
38
|
await page.close();
|
|
45
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/slack/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,SAAS,GAAG,0CAA0C,CAAC;AAE7D,MAAM,YAAY,GAChB,2DAA2D,CAAC;AAC9D,MAAM,8BAA8B,GAClC,+DAA+D,CAAC;AAClE,MAAM,aAAa,GAAG,6BAA6B,CAAC;AAOpD,MAAM,OAAO,KAAM,SAAQ,kBAAkB;IACpC,KAAK,CAAC,QAAQ,CAAC,UAAmB;QACvC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG;YACf,yBAAyB,EAAE,MAAM,IAAI
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/slack/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,SAAS,GAAG,0CAA0C,CAAC;AAE7D,MAAM,YAAY,GAChB,2DAA2D,CAAC;AAC9D,2FAA2F;AAC3F,MAAM,mBAAmB,GAAG,qEAAqE,CAAC;AAClG,MAAM,8BAA8B,GAClC,+DAA+D,CAAC;AAClE,2FAA2F;AAC3F,MAAM,qCAAqC,GAAG,wCAAwC,8BAA8B,GAAG,CAAC;AACxH,MAAM,aAAa,GAAG,6BAA6B,CAAC;AAOpD,MAAM,OAAO,KAAM,SAAQ,kBAAkB;IACpC,KAAK,CAAC,QAAQ,CAAC,UAAmB;QACvC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG;YACf,yBAAyB,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,SAAS,EAAE;YACvE,wBAAwB,EAAE,MAAM,IAAI;iBACjC,OAAO,CAAC,8BAA8B,CAAC;iBACvC,SAAS,EAAE;SACf,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,yBAAyB,KAAK,KAAK,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CACb,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,KAAK,CAAC,yBAAyB,KAAK,MAAM,CAAC,yBAAyB,EAAE,CAAC;YACzE,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC;YAChD,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC;YAC5C,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,KAAK,CAAC,wBAAwB,KAAK,MAAM,CAAC,wBAAwB,EAAE,CAAC;YACvE,MAAM,IAAI,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,KAAK,EAAE,CAAC;YAClE,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC;YAC5C,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -16,8 +16,10 @@ describe(UserAccessPolicies.name, function () {
|
|
|
16
16
|
});
|
|
17
17
|
const configActivate = readJsonFile('./activate.json').settings.userAccessPolicies;
|
|
18
18
|
const configDeactivate = readJsonFile('./deactivate.json').settings.userAccessPolicies;
|
|
19
|
-
const multiConfig = readJsonFile('./multiple-policies.json').settings
|
|
20
|
-
|
|
19
|
+
const multiConfig = readJsonFile('./multiple-policies.json').settings
|
|
20
|
+
.userAccessPolicies;
|
|
21
|
+
const changeTriggerConfig = readJsonFile('./change-trigger-type.json')
|
|
22
|
+
.settings.userAccessPolicies;
|
|
21
23
|
it('should deploy a CustomObject for testing', () => {
|
|
22
24
|
const sourceDeployCmd = child.spawnSync('sf', [
|
|
23
25
|
'project',
|