sf-browserforce 1.0.0 → 1.1.0

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 CHANGED
@@ -2,10 +2,10 @@
2
2
 
3
3
  > sf plugin to apply settings in the Salesforce Setup Menu using browser automation
4
4
 
5
- [![Actions Status](https://github.com/amtrack/sfdx-browserforce-plugin/actions/workflows/default.yml/badge.svg?branch=main)](https://github.com/amtrack/sfdx-browserforce-plugin/actions?query=branch:main)
5
+ [![Actions Status](https://github.com/jrupesh/sfdx-browserforce-plugin/actions/workflows/default.yml/badge.svg?branch=main)](https://github.com/jrupesh/sfdx-browserforce-plugin/actions?query=branch:main)
6
6
 
7
7
  > [!NOTE]
8
- > Since v6 we're using Playwright instead of Puppeteer. Please see the [release notes](https://github.com/amtrack/sfdx-browserforce-plugin/releases) for migration instructions.
8
+ > Since v6 we're using Playwright instead of Puppeteer. Please see the [release notes](https://github.com/jrupesh/sfdx-browserforce-plugin/releases) for migration instructions.
9
9
 
10
10
  ✅ Most settings in the Salesforce Setup Menu are represented as [Settings](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_settings.htm) in the Metadata API.
11
11
 
@@ -33,7 +33,7 @@ To change the Currency Locale, the Browserforce config file (here: `./config/cur
33
33
 
34
34
  ```json
35
35
  {
36
- "$schema": "https://raw.githubusercontent.com/amtrack/sfdx-browserforce-plugin/main/src/plugins/schema.json",
36
+ "$schema": "https://raw.githubusercontent.com/jrupesh/sfdx-browserforce-plugin/main/src/plugins/schema.json",
37
37
  "settings": {
38
38
  "companyInformation": {
39
39
  "defaultCurrencyIsoCode": "English (South Africa) - ZAR"
@@ -86,8 +86,8 @@ Top settings:
86
86
 
87
87
  But there's more:
88
88
 
89
- - Please see the [Browserforce Settings](https://github.com/amtrack/sfdx-browserforce-plugin/wiki/Browserforce-Settings) wiki page with screenshots.
90
- - Explore the JSON schema powered configuration using a [full-blown example](https://github.dev/amtrack/sfdx-browserforce-plugin/blob/main/examples/full.json) or start with an [empty configuration](https://github.dev/amtrack/sfdx-browserforce-plugin/blob/main/examples/empty.json).
89
+ - Please see the [Browserforce Settings](https://github.com/jrupesh/sfdx-browserforce-plugin/wiki/Browserforce-Settings) wiki page with screenshots.
90
+ - Explore the JSON schema powered configuration using a [full-blown example](https://github.dev/jrupesh/sfdx-browserforce-plugin/blob/main/examples/full.json) or start with an [empty configuration](https://github.dev/jrupesh/sfdx-browserforce-plugin/blob/main/examples/empty.json).
91
91
 
92
92
  ## Installation
93
93
 
@@ -197,7 +197,7 @@ FLAG DESCRIPTIONS
197
197
  The trace file can be viewed with "sf browserforce playwright -- show-trace trace-<date>.zip".
198
198
  ```
199
199
 
200
- _See code: [src/commands/browserforce/apply.ts](https://github.com/jrupesh/sfdx-browserforce-plugin/blob/v1.0.0/src/commands/browserforce/apply.ts)_
200
+ _See code: [src/commands/browserforce/apply.ts](https://github.com/jrupesh/sfdx-browserforce-plugin/blob/v1.1.0/src/commands/browserforce/apply.ts)_
201
201
 
202
202
  ## `sf browserforce playwright`
203
203
 
@@ -220,7 +220,7 @@ EXAMPLES
220
220
  $ sf browserforce playwright -- install chromium
221
221
  ```
222
222
 
223
- _See code: [src/commands/browserforce/playwright.ts](https://github.com/jrupesh/sfdx-browserforce-plugin/blob/v1.0.0/src/commands/browserforce/playwright.ts)_
223
+ _See code: [src/commands/browserforce/playwright.ts](https://github.com/jrupesh/sfdx-browserforce-plugin/blob/v1.1.0/src/commands/browserforce/playwright.ts)_
224
224
  <!-- commandsstop -->
225
225
 
226
226
  ## Playwright
@@ -263,4 +263,4 @@ Please see [CONTRIBUTING.md](CONTRIBUTING.md) for getting started.
263
263
 
264
264
  ## License
265
265
 
266
- MIT © [Matthias Rolke](mailto:mr.amtrack@gmail.com)
266
+ MIT © [Rupesh J](mailto:rupesh.j0701@gmail.com)
@@ -8,6 +8,7 @@ import { HighVelocitySalesSettings as highVelocitySalesSettings } from './high-v
8
8
  import { HistoryTracking as historyTracking } from './history-tracking/index.js';
9
9
  import { HomePageLayouts as homePageLayouts } from './home-page-layouts/index.js';
10
10
  import { LightningExperienceSettings as lightningExperienceSettings } from './lightning-experience-settings/index.js';
11
+ import { ListViewCustomButtons as listViewCustomButtons } from './list-view-custom-buttons/index.js';
11
12
  import { LinkedInSalesNavigatorSettings as linkedInSalesNavigatorSettings } from './linkedin-sales-navigator-settings/index.js';
12
13
  import { LoginAsUser as loginAsUser } from './login-as-user/index.js';
13
14
  import { LogoutLoginAsUser as logoutLoginAsUser } from './logout-login-as-user/index.js';
@@ -25,4 +26,4 @@ import { Security as security } from './security/index.js';
25
26
  import { ServiceChannels as serviceChannels } from './service-channels/index.js';
26
27
  import { Slack as slack } from './slack/index.js';
27
28
  import { UserAccessPolicies as userAccessPolicies } from './user-access-policies/index.js';
28
- export { activitySettings, authProviders, companyInformation, customerPortal, densitySettings, emailDeliverability, highVelocitySalesSettings, historyTracking, homePageLayouts, lightningExperienceSettings, linkedInSalesNavigatorSettings, loginAsUser, logoutLoginAsUser, omniChannelSettings, opportunitySplits, permissionSets, picklists, recordTypes, relateContactToMultipleAccounts, reportsAndDashboards, scheduledBatches, salesforceCpqConfig, salesforceToSalesforce, security, serviceChannels, slack, userAccessPolicies, };
29
+ export { activitySettings, authProviders, companyInformation, customerPortal, densitySettings, emailDeliverability, highVelocitySalesSettings, historyTracking, homePageLayouts, lightningExperienceSettings, listViewCustomButtons, linkedInSalesNavigatorSettings, loginAsUser, logoutLoginAsUser, omniChannelSettings, opportunitySplits, permissionSets, picklists, recordTypes, relateContactToMultipleAccounts, reportsAndDashboards, scheduledBatches, salesforceCpqConfig, salesforceToSalesforce, security, serviceChannels, slack, userAccessPolicies, };
@@ -8,6 +8,7 @@ import { HighVelocitySalesSettings as highVelocitySalesSettings } from './high-v
8
8
  import { HistoryTracking as historyTracking } from './history-tracking/index.js';
9
9
  import { HomePageLayouts as homePageLayouts } from './home-page-layouts/index.js';
10
10
  import { LightningExperienceSettings as lightningExperienceSettings } from './lightning-experience-settings/index.js';
11
+ import { ListViewCustomButtons as listViewCustomButtons } from './list-view-custom-buttons/index.js';
11
12
  import { LinkedInSalesNavigatorSettings as linkedInSalesNavigatorSettings } from './linkedin-sales-navigator-settings/index.js';
12
13
  import { LoginAsUser as loginAsUser } from './login-as-user/index.js';
13
14
  import { LogoutLoginAsUser as logoutLoginAsUser } from './logout-login-as-user/index.js';
@@ -25,5 +26,5 @@ import { Security as security } from './security/index.js';
25
26
  import { ServiceChannels as serviceChannels } from './service-channels/index.js';
26
27
  import { Slack as slack } from './slack/index.js';
27
28
  import { UserAccessPolicies as userAccessPolicies } from './user-access-policies/index.js';
28
- export { activitySettings, authProviders, companyInformation, customerPortal, densitySettings, emailDeliverability, highVelocitySalesSettings, historyTracking, homePageLayouts, lightningExperienceSettings, linkedInSalesNavigatorSettings, loginAsUser, logoutLoginAsUser, omniChannelSettings, opportunitySplits, permissionSets, picklists, recordTypes, relateContactToMultipleAccounts, reportsAndDashboards, scheduledBatches, salesforceCpqConfig, salesforceToSalesforce, security, serviceChannels, slack, userAccessPolicies, };
29
+ export { activitySettings, authProviders, companyInformation, customerPortal, densitySettings, emailDeliverability, highVelocitySalesSettings, historyTracking, homePageLayouts, lightningExperienceSettings, listViewCustomButtons, linkedInSalesNavigatorSettings, loginAsUser, logoutLoginAsUser, omniChannelSettings, opportunitySplits, permissionSets, picklists, recordTypes, relateContactToMultipleAccounts, reportsAndDashboards, scheduledBatches, salesforceCpqConfig, salesforceToSalesforce, security, serviceChannels, slack, userAccessPolicies, };
29
30
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,IAAI,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,EAAE,aAAa,IAAI,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,kBAAkB,IAAI,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAC1F,OAAO,EAAE,cAAc,IAAI,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,eAAe,IAAI,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,mBAAmB,IAAI,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC7F,OAAO,EAAE,yBAAyB,IAAI,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACjH,OAAO,EAAE,eAAe,IAAI,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,eAAe,IAAI,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAE,2BAA2B,IAAI,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AACtH,OAAO,EAAE,8BAA8B,IAAI,8BAA8B,EAAE,MAAM,8CAA8C,CAAC;AAChI,OAAO,EAAE,WAAW,IAAI,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,iBAAiB,IAAI,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzF,OAAO,EAAE,mBAAmB,IAAI,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC9F,OAAO,EAAE,iBAAiB,IAAI,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,cAAc,IAAI,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,SAAS,IAAI,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,WAAW,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,+BAA+B,IAAI,+BAA+B,EAAE,MAAM,gDAAgD,CAAC;AACpI,OAAO,EAAE,oBAAoB,IAAI,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACjG,OAAO,EAAE,gBAAgB,IAAI,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,EAAE,mBAAmB,IAAI,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC9F,OAAO,EAAE,sBAAsB,IAAI,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AACvG,OAAO,EAAE,QAAQ,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,eAAe,IAAI,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,kBAAkB,IAAI,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAE3F,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,eAAe,EACf,eAAe,EACf,2BAA2B,EAC3B,8BAA8B,EAC9B,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,WAAW,EACX,+BAA+B,EAC/B,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,QAAQ,EACR,eAAe,EACf,KAAK,EACL,kBAAkB,GACnB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,IAAI,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,EAAE,aAAa,IAAI,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,kBAAkB,IAAI,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAC1F,OAAO,EAAE,cAAc,IAAI,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,eAAe,IAAI,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,mBAAmB,IAAI,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC7F,OAAO,EAAE,yBAAyB,IAAI,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACjH,OAAO,EAAE,eAAe,IAAI,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,eAAe,IAAI,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAE,2BAA2B,IAAI,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AACtH,OAAO,EAAE,qBAAqB,IAAI,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AACrG,OAAO,EAAE,8BAA8B,IAAI,8BAA8B,EAAE,MAAM,8CAA8C,CAAC;AAChI,OAAO,EAAE,WAAW,IAAI,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,iBAAiB,IAAI,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzF,OAAO,EAAE,mBAAmB,IAAI,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC9F,OAAO,EAAE,iBAAiB,IAAI,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,cAAc,IAAI,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,SAAS,IAAI,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,WAAW,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,+BAA+B,IAAI,+BAA+B,EAAE,MAAM,gDAAgD,CAAC;AACpI,OAAO,EAAE,oBAAoB,IAAI,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACjG,OAAO,EAAE,gBAAgB,IAAI,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,EAAE,mBAAmB,IAAI,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC9F,OAAO,EAAE,sBAAsB,IAAI,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AACvG,OAAO,EAAE,QAAQ,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,eAAe,IAAI,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,kBAAkB,IAAI,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAE3F,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,eAAe,EACf,eAAe,EACf,2BAA2B,EAC3B,qBAAqB,EACrB,8BAA8B,EAC9B,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,WAAW,EACX,+BAA+B,EAC/B,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,QAAQ,EACR,eAAe,EACf,KAAK,EACL,kBAAkB,GACnB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { BrowserforcePlugin } from '../../plugin.js';
2
+ type ListViewCustomButtonsConfig = {
3
+ objectApiName: string;
4
+ buttons: string[];
5
+ removeOtherButtons?: boolean | false;
6
+ };
7
+ export declare class ListViewCustomButtons extends BrowserforcePlugin {
8
+ retrieve(definition?: ListViewCustomButtonsConfig[]): Promise<ListViewCustomButtonsConfig[]>;
9
+ apply(plan: ListViewCustomButtonsConfig[]): Promise<void>;
10
+ private queryWebLinks;
11
+ }
12
+ export {};
@@ -0,0 +1,89 @@
1
+ import assert from 'assert';
2
+ import * as child from 'child_process';
3
+ import { fileURLToPath } from 'node:url';
4
+ import * as path from 'path';
5
+ import { ListViewCustomButtons } from './index.js';
6
+ const __dirname = fileURLToPath(new URL('.', import.meta.url));
7
+ describe(ListViewCustomButtons.name, function () {
8
+ let plugin;
9
+ before(() => {
10
+ plugin = new ListViewCustomButtons(global.browserforce);
11
+ });
12
+ const enableButtons = [
13
+ {
14
+ objectApiName: 'Task',
15
+ buttons: ['TestListButton', 'TestListButton2'],
16
+ removeOtherButtons: false,
17
+ },
18
+ {
19
+ objectApiName: 'Event',
20
+ buttons: ['TestListButton', 'TestListButton2'],
21
+ removeOtherButtons: false,
22
+ },
23
+ ];
24
+ const enableSingleButton = [
25
+ {
26
+ objectApiName: 'Task',
27
+ buttons: ['TestListButton'],
28
+ removeOtherButtons: false,
29
+ },
30
+ ];
31
+ const disableButtons = [
32
+ {
33
+ objectApiName: 'Task',
34
+ buttons: [],
35
+ removeOtherButtons: true,
36
+ },
37
+ ];
38
+ const missingButton = [
39
+ {
40
+ objectApiName: 'Task',
41
+ buttons: ['TestListButton', 'NonExistentButton'],
42
+ removeOtherButtons: false,
43
+ },
44
+ ];
45
+ it('should deploy test WebLink buttons as a prerequisite', () => {
46
+ const sourceDeployCmd = child.spawnSync('sf', [
47
+ 'project',
48
+ 'deploy',
49
+ 'start',
50
+ '-d',
51
+ path.join(__dirname, 'sfdx-source'),
52
+ '--json',
53
+ ]);
54
+ assert.deepStrictEqual(sourceDeployCmd.status, 0, sourceDeployCmd.output.toString());
55
+ });
56
+ it('should add both custom buttons to the list view', async () => {
57
+ await plugin.apply(enableButtons);
58
+ const res = await plugin.retrieve(enableButtons);
59
+ assert.deepStrictEqual(res, enableButtons);
60
+ });
61
+ it('should be idempotent when buttons are already selected', async () => {
62
+ const result = await plugin.run(enableButtons);
63
+ assert.deepStrictEqual(result, { message: 'no action necessary' });
64
+ });
65
+ it('should remove other buttons when removeOtherButtons is true', async () => {
66
+ await plugin.apply([{ objectApiName: 'Task', buttons: ['TestListButton'], removeOtherButtons: true }]);
67
+ const res = await plugin.retrieve([
68
+ { objectApiName: 'Task', buttons: ['TestListButton'], removeOtherButtons: true },
69
+ ]);
70
+ assert.deepStrictEqual(res, [{ objectApiName: 'Task', buttons: ['TestListButton'], removeOtherButtons: true }]);
71
+ });
72
+ it('should remove one button and keep the other', async () => {
73
+ await plugin.apply(enableSingleButton);
74
+ const res = await plugin.retrieve(enableSingleButton);
75
+ assert.deepStrictEqual(res, enableSingleButton);
76
+ });
77
+ it('should remove all custom buttons', async () => {
78
+ await plugin.apply(disableButtons);
79
+ const res = await plugin.retrieve(disableButtons);
80
+ assert.deepStrictEqual(res, disableButtons);
81
+ });
82
+ it('should add found button and warn about missing button without failing', async () => {
83
+ await plugin.apply(missingButton);
84
+ const res = await plugin.retrieve([{ objectApiName: 'Task', buttons: ['TestListButton'] }]);
85
+ assert.strictEqual(res[0].buttons.length, 1);
86
+ assert.strictEqual(res[0].buttons[0], 'TestListButton');
87
+ });
88
+ });
89
+ //# sourceMappingURL=index.e2e-spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.e2e-spec.js","sourceRoot":"","sources":["../../../src/plugins/list-view-custom-buttons/index.e2e-spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ import { waitForPageErrors } from '../../browserforce.js';
2
+ import { BrowserforcePlugin } from '../../plugin.js';
3
+ const AVAILABLE_LISTBOX_NAME = 'Available Buttons';
4
+ const SELECTED_LISTBOX_NAME = 'Selected Buttons';
5
+ const SAVE_BUTTON_SELECTOR = 'input[name="save"]';
6
+ function buildPagePath(objectApiName) {
7
+ let pageObjApiName = objectApiName;
8
+ if (objectApiName === 'Task' || objectApiName === 'Event') {
9
+ pageObjApiName = 'Activity';
10
+ }
11
+ return `/p/setup/layout/ListButtonsEdit?LayoutEntity=${pageObjApiName}&retURL=${encodeURIComponent('/setup/forcecomHomepage.apexp')}`;
12
+ }
13
+ export class ListViewCustomButtons extends BrowserforcePlugin {
14
+ async retrieve(definition) {
15
+ const results = [];
16
+ for (const entry of definition) {
17
+ const page = await this.browserforce.openPage(buildPagePath(entry.objectApiName));
18
+ const selectedListbox = page.getByRole('listbox', { name: SELECTED_LISTBOX_NAME });
19
+ await selectedListbox.waitFor();
20
+ const buttonIds = (await Promise.all((await selectedListbox.locator('option').all()).map((opt) => opt.getAttribute('value'))))
21
+ .filter((b) => b?.trim() !== '')
22
+ .map((b) => `'${b?.trim()}'`);
23
+ const result = buttonIds.length > 0
24
+ ? await this.browserforce.connection.query(`SELECT Id, Name, NamespacePrefix FROM WebLink WHERE Id IN (${buttonIds.join(',')}) AND PageOrSobjectType = '${entry.objectApiName}'`)
25
+ : { records: [] };
26
+ const buttons = [];
27
+ for (const record of result.records) {
28
+ const fullApiName = record.NamespacePrefix ? `${record.NamespacePrefix}__${record.Name}` : record.Name;
29
+ buttons.push(fullApiName);
30
+ }
31
+ results.push({
32
+ objectApiName: entry.objectApiName,
33
+ buttons: buttons.sort(),
34
+ removeOtherButtons: entry.removeOtherButtons,
35
+ });
36
+ }
37
+ return results;
38
+ }
39
+ async apply(plan) {
40
+ for (const entry of plan) {
41
+ const buttons = await this.queryWebLinks(entry.buttons, entry.objectApiName);
42
+ const buttonApiNames = new Set(buttons.map((b) => (b.NamespacePrefix ? `${b.NamespacePrefix}__${b.Name}` : b.Name)));
43
+ const missingButtons = entry.buttons.filter((b) => !buttonApiNames.has(b));
44
+ if (missingButtons.length > 0) {
45
+ this.browserforce.logger?.warn(`[${entry.objectApiName}] WebLink(s) not found for button API name(s): ${missingButtons.map((b) => `"${b}"`).join(', ')}. Skipping missing buttons.`);
46
+ }
47
+ const targetButtonIds = buttons.map((b) => b.Id.slice(0, 15));
48
+ const page = await this.browserforce.openPage(buildPagePath(entry.objectApiName));
49
+ const availableListbox = page.getByRole('listbox', { name: AVAILABLE_LISTBOX_NAME });
50
+ const selectedListbox = page.getByRole('listbox', { name: SELECTED_LISTBOX_NAME });
51
+ await availableListbox.waitFor();
52
+ const availableButtonIds = (await Promise.all((await availableListbox.locator('option').all()).map((opt) => opt.getAttribute('value')))).map((b) => b?.trim() ?? '');
53
+ const selectedButtonIds = (await Promise.all((await selectedListbox.locator('option').all()).map((opt) => opt.getAttribute('value'))))
54
+ .map((b) => b?.trim() ?? '')
55
+ .filter((b) => b !== '');
56
+ const addButton = page.locator('img.rightArrowIcon');
57
+ const removeButton = page.locator('img.leftArrowIcon');
58
+ for (const buttonId of targetButtonIds) {
59
+ if (availableButtonIds.includes(buttonId) && !selectedButtonIds.includes(buttonId)) {
60
+ await availableListbox.selectOption({ value: buttonId });
61
+ await addButton.click();
62
+ await selectedListbox.locator(`option[value="${buttonId}"]`).waitFor();
63
+ }
64
+ }
65
+ if (entry.removeOtherButtons) {
66
+ for (const buttonId of selectedButtonIds) {
67
+ if (!targetButtonIds.includes(buttonId)) {
68
+ await selectedListbox.selectOption({ value: buttonId });
69
+ await removeButton.click();
70
+ await availableListbox.locator(`option[value="${buttonId}"]`).waitFor();
71
+ }
72
+ }
73
+ }
74
+ await page.locator(SAVE_BUTTON_SELECTOR).click();
75
+ await Promise.race([
76
+ page.waitForURL((url) => url.pathname === '/setup/forcecomHomepage.apexp'),
77
+ waitForPageErrors(page),
78
+ ]);
79
+ }
80
+ }
81
+ async queryWebLinks(apiNames, objectApiName) {
82
+ if (!apiNames?.length) {
83
+ return [];
84
+ }
85
+ const conditions = [];
86
+ for (const name of apiNames) {
87
+ const parts = name.split('__');
88
+ if (parts.length > 1) {
89
+ const namespace = parts[0];
90
+ const devName = parts.slice(1).join('__');
91
+ conditions.push(`(Name = '${devName}' AND NamespacePrefix = '${namespace}')`);
92
+ }
93
+ else {
94
+ conditions.push(`(Name = '${name}' AND NamespacePrefix = NULL)`);
95
+ }
96
+ }
97
+ const result = await this.browserforce.connection.query(`SELECT Id, Name, NamespacePrefix FROM WebLink WHERE (${conditions.join(' OR ')}) AND PageOrSobjectType = '${objectApiName}'`);
98
+ return result.records;
99
+ }
100
+ }
101
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/list-view-custom-buttons/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,113 @@
1
+ import assert from 'assert';
2
+ import * as child from 'child_process';
3
+ import { fileURLToPath } from 'node:url';
4
+ import * as path from 'path';
5
+ import { ScheduledBatches } from './index.js';
6
+ const __dirname = fileURLToPath(new URL('.', import.meta.url));
7
+ describe(ScheduledBatches.name, function () {
8
+ this.timeout('10m');
9
+ let plugin;
10
+ let scheduleObjectApi;
11
+ let namespace;
12
+ let permissionSetName;
13
+ let assignedPermissionSetInTest = false;
14
+ let createdRecordIds = [];
15
+ before(async () => {
16
+ plugin = new ScheduledBatches(global.browserforce);
17
+ const sourceDeployCmd = child.spawnSync('sf', [
18
+ 'project',
19
+ 'deploy',
20
+ 'start',
21
+ '-d',
22
+ path.join(__dirname, 'sfdx-source'),
23
+ '--json',
24
+ ]);
25
+ assert.deepStrictEqual(sourceDeployCmd.status, 0, sourceDeployCmd.output.toString());
26
+ scheduleObjectApi = await resolveScheduleObjectApiName();
27
+ namespace = scheduleObjectApi.replace(/BatchJobSchedule__c$/, '');
28
+ permissionSetName = await resolvePermissionSetName();
29
+ const username = global.browserforce.connection.getUsername();
30
+ const userIdsResult = (await global.browserforce.connection.query(`SELECT Id FROM User WHERE Username = '${username}' LIMIT 1`));
31
+ const userId = userIdsResult.records[0]?.Id;
32
+ assert.ok(userId, 'Could not resolve current user id');
33
+ const existingPsa = (await global.browserforce.connection.query(`SELECT Id FROM PermissionSetAssignment WHERE PermissionSet.Name='${permissionSetName}' AND AssigneeId='${userId}'`));
34
+ if (existingPsa.records.length === 0) {
35
+ const permSetAssignCmd = child.spawnSync('sf', ['org', 'assign', 'permset', '-n', permissionSetName, '--json']);
36
+ assert.deepStrictEqual(permSetAssignCmd.status, 0, permSetAssignCmd.output.toString());
37
+ assignedPermissionSetInTest = true;
38
+ }
39
+ });
40
+ beforeEach(async () => {
41
+ createdRecordIds = [];
42
+ const testSuffix = Date.now().toString();
43
+ const createResult = await global.browserforce.connection.sobject(scheduleObjectApi).create([
44
+ {
45
+ Name: `ScheduledBatchA-${testSuffix}`,
46
+ Enabled__c: false,
47
+ },
48
+ {
49
+ Name: `ScheduledBatchB-${testSuffix}`,
50
+ Enabled__c: false,
51
+ },
52
+ ]);
53
+ const results = Array.isArray(createResult) ? createResult : [createResult];
54
+ for (const result of results) {
55
+ assert.strictEqual(result.success, true, result.errors?.join(','));
56
+ createdRecordIds.push(result.id);
57
+ }
58
+ });
59
+ afterEach(async () => {
60
+ if (createdRecordIds.length) {
61
+ await global.browserforce.connection.delete(scheduleObjectApi, createdRecordIds);
62
+ createdRecordIds = [];
63
+ }
64
+ });
65
+ after(async () => {
66
+ if (!assignedPermissionSetInTest) {
67
+ return;
68
+ }
69
+ const userId = global.browserforce.connection.userInfo?.id;
70
+ if (userId) {
71
+ const psaResult = (await global.browserforce.connection.query(`SELECT Id FROM PermissionSetAssignment WHERE PermissionSet.Name='${permissionSetName}' AND AssigneeId='${userId}'`));
72
+ if (psaResult.records.length) {
73
+ await global.browserforce.connection.delete('PermissionSetAssignment', psaResult.records.map((record) => record.Id));
74
+ }
75
+ }
76
+ });
77
+ it('should apply scheduled checkbox changes for selected jobs', async () => {
78
+ const records = (await global.browserforce.connection.query(`SELECT Id, Name, Enabled__c FROM ${scheduleObjectApi} WHERE Id IN ('${createdRecordIds.join("','")}') ORDER BY Name`));
79
+ const selectedName = records.records[0].Name;
80
+ const config = {
81
+ namespace,
82
+ jobScheduleNames: [selectedName],
83
+ };
84
+ await plugin.apply(config);
85
+ const updated = (await global.browserforce.connection.query(`SELECT Name, Enabled__c FROM ${scheduleObjectApi} WHERE Id IN ('${createdRecordIds.join("','")}') ORDER BY Name`));
86
+ assert.strictEqual(updated.records.find((record) => record.Name === selectedName)?.Enabled__c, true, 'Selected job should be enabled');
87
+ });
88
+ it('should retrieve currently scheduled jobs', async () => {
89
+ const records = (await global.browserforce.connection.query(`SELECT Id, Name, Enabled__c FROM ${scheduleObjectApi} WHERE Id IN ('${createdRecordIds.join("','")}') ORDER BY Name`));
90
+ const selectedName = records.records[0].Name;
91
+ await plugin.apply({
92
+ namespace,
93
+ jobScheduleNames: [selectedName],
94
+ });
95
+ const retrieved = await plugin.retrieve({
96
+ namespace,
97
+ allJobScheduleNames: true,
98
+ });
99
+ assert.ok(retrieved?.jobScheduleNames?.includes(selectedName), 'retrieve() should return enabled test job');
100
+ });
101
+ });
102
+ async function resolveScheduleObjectApiName() {
103
+ const globalDescribe = await global.browserforce.connection.describeGlobal();
104
+ const match = globalDescribe.sobjects.find((sobject) => sobject.name.endsWith('BatchJobSchedule__c'));
105
+ assert.ok(match, 'Could not find BatchJobSchedule__c object after metadata deployment');
106
+ return match.name;
107
+ }
108
+ async function resolvePermissionSetName() {
109
+ const result = (await global.browserforce.connection.query("SELECT Name FROM PermissionSet WHERE Name LIKE '%BatchJobSchedule' ORDER BY Name DESC LIMIT 1"));
110
+ assert.ok(result.records.length > 0, 'Could not find BatchJobSchedule permission set after metadata deployment');
111
+ return result.records[0].Name;
112
+ }
113
+ //# sourceMappingURL=index.e2e-spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.e2e-spec.js","sourceRoot":"","sources":["../../../src/plugins/scheduled-batches/index.e2e-spec.ts"],"names":[],"mappings":"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"}
@@ -59,21 +59,18 @@ export class ScheduledBatches extends BrowserforcePlugin {
59
59
  async retrieve(definition) {
60
60
  const env_1 = { stack: [], error: void 0, hasError: false };
61
61
  try {
62
- if (!definition?.namespace) {
63
- return undefined;
64
- }
65
62
  if (!definition.allJobScheduleNames && (!definition.jobScheduleNames || definition.jobScheduleNames.length === 0)) {
66
63
  throw new Error('jobScheduleNames or allJobScheduleNames is required');
67
64
  }
68
- const page = __addDisposableResource(env_1, await this.browserforce.openPage(BASE_PATH.replace('{NAMESPACE}', definition.namespace)), true);
65
+ const page = __addDisposableResource(env_1, await this.browserforce.openPage(BASE_PATH.replace('{NAMESPACE}', definition.namespace || '')), true);
69
66
  const frameOrPage = await this.browserforce.waitForSelectorInFrameOrPage(page, ScheduledBatchesPage.getTableSelector());
70
67
  const scheduledBatchesPage = new ScheduledBatchesPage(frameOrPage);
71
68
  let jobScheduleNames = [];
72
69
  if (definition.allJobScheduleNames) {
73
- jobScheduleNames = await scheduledBatchesPage.resolveAllJobScheduleNames(this.browserforce, SCHEDULE_OBJECT_API.replace('{NAMESPACE}', definition.namespace));
70
+ jobScheduleNames = await scheduledBatchesPage.resolveAllJobScheduleNames(this.browserforce, SCHEDULE_OBJECT_API.replace('{NAMESPACE}', definition.namespace || ''));
74
71
  }
75
72
  else {
76
- jobScheduleNames = await scheduledBatchesPage.resolveJobScheduleNames(this.browserforce, definition.jobScheduleNames, SCHEDULE_OBJECT_API.replace('{NAMESPACE}', definition.namespace));
73
+ jobScheduleNames = await scheduledBatchesPage.resolveJobScheduleNames(this.browserforce, definition.jobScheduleNames, SCHEDULE_OBJECT_API.replace('{NAMESPACE}', definition.namespace || ''));
77
74
  }
78
75
  const scheduled = [];
79
76
  for (const jobSchedule of jobScheduleNames) {
@@ -106,21 +103,18 @@ export class ScheduledBatches extends BrowserforcePlugin {
106
103
  async apply(config) {
107
104
  const env_2 = { stack: [], error: void 0, hasError: false };
108
105
  try {
109
- if (!config.namespace) {
110
- throw new Error('namespace is required');
111
- }
112
106
  if (!config.allJobScheduleNames && (!config.jobScheduleNames || config.jobScheduleNames.length === 0)) {
113
107
  throw new Error('jobScheduleNames is required when allJobScheduleNames is false');
114
108
  }
115
- const page = __addDisposableResource(env_2, await this.browserforce.openPage(BASE_PATH.replace('{NAMESPACE}', config.namespace)), true);
109
+ const page = __addDisposableResource(env_2, await this.browserforce.openPage(BASE_PATH.replace('{NAMESPACE}', config.namespace || '')), true);
116
110
  const frameOrPage = await this.browserforce.waitForSelectorInFrameOrPage(page, ScheduledBatchesPage.getTableSelector());
117
111
  const scheduledBatchesPage = new ScheduledBatchesPage(frameOrPage);
118
112
  let jobScheduleNames = [];
119
113
  if (config.allJobScheduleNames) {
120
- jobScheduleNames = await scheduledBatchesPage.resolveAllJobScheduleNames(this.browserforce, SCHEDULE_OBJECT_API.replace('{NAMESPACE}', config.namespace));
114
+ jobScheduleNames = await scheduledBatchesPage.resolveAllJobScheduleNames(this.browserforce, SCHEDULE_OBJECT_API.replace('{NAMESPACE}', config.namespace || ''));
121
115
  }
122
116
  else {
123
- jobScheduleNames = await scheduledBatchesPage.resolveJobScheduleNames(this.browserforce, config.jobScheduleNames, SCHEDULE_OBJECT_API.replace('{NAMESPACE}', config.namespace));
117
+ jobScheduleNames = await scheduledBatchesPage.resolveJobScheduleNames(this.browserforce, config.jobScheduleNames, SCHEDULE_OBJECT_API.replace('{NAMESPACE}', config.namespace || ''));
124
118
  }
125
119
  for (const jobSchedule of jobScheduleNames) {
126
120
  const checkbox = frameOrPage.locator(SCHEDULED_CHECKBOX_SELECTOR.replace('{ID}', jobSchedule.id));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/scheduled-batches/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/scheduled-batches/index.ts"],"names":[],"mappings":"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"}
@@ -173,5 +173,5 @@
173
173
  ]
174
174
  }
175
175
  },
176
- "version": "1.0.0"
176
+ "version": "1.1.0"
177
177
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sf-browserforce",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "sfdx plugin for browser automation",
5
5
  "author": "Rupesh J <j.rupesh@gmail.com>",
6
6
  "type": "module",