From 54b9efdc36400c3c7e5a5d50993e734ae04745f1 Mon Sep 17 00:00:00 2001 From: Steve Hetzel Date: Fri, 13 Sep 2024 15:05:54 -0600 Subject: [PATCH] Sh/fix deploy sharing rules (#1419) * fix: convert sharingRules by child * fix: correc the tests --- src/registry/metadataRegistry.json | 16 +- .../destructiveCompSets/snapshots.test.ts | 40 +- .../verify-md-files-SCR.expected/package.xml | 8 + .../sharingRules/account.sharingRules | 989 ++++++++++++++++++ .../verify-md-files-SR.expected/package.xml | 74 ++ .../sharingRules/account.sharingRules | 989 ++++++++++++++++++ .../account.sharingRules-meta.xml | 989 ++++++++++++++++++ .../account.sharingRules-meta.xml | 989 ++++++++++++++++++ .../sharingRules/snapshots.test.ts | 178 +++- 9 files changed, 4235 insertions(+), 37 deletions(-) create mode 100644 test/snapshot/sampleProjects/sharingRules/__snapshots__/verify-md-files-SCR.expected/package.xml create mode 100644 test/snapshot/sampleProjects/sharingRules/__snapshots__/verify-md-files-SCR.expected/sharingRules/account.sharingRules create mode 100644 test/snapshot/sampleProjects/sharingRules/__snapshots__/verify-md-files-SR.expected/package.xml create mode 100644 test/snapshot/sampleProjects/sharingRules/__snapshots__/verify-md-files-SR.expected/sharingRules/account.sharingRules create mode 100644 test/snapshot/sampleProjects/sharingRules/__snapshots__/verify-source-files-SCR.expected/force-app/main/default/sharingRules/account.sharingRules-meta.xml create mode 100644 test/snapshot/sampleProjects/sharingRules/__snapshots__/verify-source-files-SR.expected/force-app/main/default/sharingRules/account.sharingRules-meta.xml diff --git a/src/registry/metadataRegistry.json b/src/registry/metadataRegistry.json index aaba9a3207..9ad3e1e3f5 100644 --- a/src/registry/metadataRegistry.json +++ b/src/registry/metadataRegistry.json @@ -3984,10 +3984,10 @@ "sharingrules": { "children": { "directories": { - "sharingCriteriaRules": "sharingcriteriarule", - "sharingGuestRules": "sharingguestrule", - "sharingOwnerRules": "sharingownerrule", - "sharingTerritoryRules": "sharingterritoryrule" + "sharingCriteriaRules": "sharingRules", + "sharingGuestRules": "sharingRules", + "sharingOwnerRules": "sharingRules", + "sharingTerritoryRules": "sharingRules" }, "suffixes": { "sharingCriteriaRule": "sharingcriteriarule", @@ -3997,7 +3997,7 @@ }, "types": { "sharingcriteriarule": { - "directoryName": "sharingCriteriaRules", + "directoryName": "sharingRules", "id": "sharingcriteriarule", "name": "SharingCriteriaRule", "suffix": "sharingCriteriaRule", @@ -4005,7 +4005,7 @@ "xmlElementName": "sharingCriteriaRules" }, "sharingguestrule": { - "directoryName": "sharingGuestRules", + "directoryName": "sharingRules", "id": "sharingguestrule", "name": "SharingGuestRule", "suffix": "sharingGuestRule", @@ -4013,7 +4013,7 @@ "xmlElementName": "sharingGuestRules" }, "sharingownerrule": { - "directoryName": "sharingOwnerRules", + "directoryName": "sharingRules", "id": "sharingownerrule", "name": "SharingOwnerRule", "suffix": "sharingOwnerRule", @@ -4021,7 +4021,7 @@ "xmlElementName": "sharingOwnerRules" }, "sharingterritoryrule": { - "directoryName": "sharingTerritoryRules", + "directoryName": "sharingRules", "id": "sharingterritoryrule", "name": "SharingTerritoryRule", "suffix": "sharingTerritoryRule", diff --git a/test/snapshot/sampleProjects/destructiveCompSets/snapshots.test.ts b/test/snapshot/sampleProjects/destructiveCompSets/snapshots.test.ts index 547839cf86..0a994710ff 100644 --- a/test/snapshot/sampleProjects/destructiveCompSets/snapshots.test.ts +++ b/test/snapshot/sampleProjects/destructiveCompSets/snapshots.test.ts @@ -57,7 +57,13 @@ describe('Creating and converting ComponentSets with destructive changes', () => for (const file of convertedFiles) { await fileSnap(file, testDir); } - dirsAreIdentical(path.join(snapshotsDir, 'testOutput', 'pre1'), pre1TestOutputDir); + const expectedOutputDir = path.join( + snapshotsDir, + '1-pre-destructive-and-1-deployment.expected', + 'testOutput', + 'pre1' + ); + await dirsAreIdentical(expectedOutputDir, pre1TestOutputDir); }); it('2 pre-destructive and 2 deployments', async () => { @@ -82,7 +88,13 @@ describe('Creating and converting ComponentSets with destructive changes', () => for (const file of convertedFiles) { await fileSnap(file, testDir); } - dirsAreIdentical(path.join(snapshotsDir, 'testOutput', 'pre2'), pre2TestOutputDir); + const expectedOutputDir = path.join( + snapshotsDir, + '2-pre-destructive-and-2-deployments.expected', + 'testOutput', + 'pre2' + ); + await dirsAreIdentical(expectedOutputDir, pre2TestOutputDir); }); it('1 post-destructive and 1 deployment', async () => { @@ -107,7 +119,13 @@ describe('Creating and converting ComponentSets with destructive changes', () => for (const file of convertedFiles) { await fileSnap(file, testDir); } - dirsAreIdentical(path.join(snapshotsDir, 'testOutput', 'post1'), postTestOutputDir); + const expectedOutputDir = path.join( + snapshotsDir, + '1-post-destructive-and-1-deployment.expected', + 'testOutput', + 'post1' + ); + await dirsAreIdentical(expectedOutputDir, postTestOutputDir); }); it('2 post-destructive and 2 deployments', async () => { @@ -132,7 +150,13 @@ describe('Creating and converting ComponentSets with destructive changes', () => for (const file of convertedFiles) { await fileSnap(file, testDir); } - dirsAreIdentical(path.join(snapshotsDir, 'testOutput', 'post2'), post2TestOutputDir); + const expectedOutputDir = path.join( + snapshotsDir, + '2-post-destructive-and-2-deployments.expected', + 'testOutput', + 'post2' + ); + await dirsAreIdentical(expectedOutputDir, post2TestOutputDir); }); it('1 post-destructive and no deployment', async () => { @@ -157,7 +181,13 @@ describe('Creating and converting ComponentSets with destructive changes', () => for (const file of convertedFiles) { await fileSnap(file, testDir); } - dirsAreIdentical(path.join(snapshotsDir, 'testOutput', 'post1-solo'), postTestOutputDir); + const expectedOutputDir = path.join( + snapshotsDir, + '1-post-destructive-and-no-deployment.expected', + 'testOutput', + 'post1-solo' + ); + await dirsAreIdentical(expectedOutputDir, postTestOutputDir); }); it('throws when wildcards are used in destructive changes', async () => { diff --git a/test/snapshot/sampleProjects/sharingRules/__snapshots__/verify-md-files-SCR.expected/package.xml b/test/snapshot/sampleProjects/sharingRules/__snapshots__/verify-md-files-SCR.expected/package.xml new file mode 100644 index 0000000000..fd6211c1ee --- /dev/null +++ b/test/snapshot/sampleProjects/sharingRules/__snapshots__/verify-md-files-SCR.expected/package.xml @@ -0,0 +1,8 @@ + + + + account.AcctCBS_toAllInternal + SharingCriteriaRule + + 52.0 + diff --git a/test/snapshot/sampleProjects/sharingRules/__snapshots__/verify-md-files-SCR.expected/sharingRules/account.sharingRules b/test/snapshot/sampleProjects/sharingRules/__snapshots__/verify-md-files-SCR.expected/sharingRules/account.sharingRules new file mode 100644 index 0000000000..829dce2508 --- /dev/null +++ b/test/snapshot/sampleProjects/sharingRules/__snapshots__/verify-md-files-SCR.expected/sharingRules/account.sharingRules @@ -0,0 +1,989 @@ + + + + AcctCBS2_toTerritory + Read + + None + Read + None + + + + Territory_1 + + + NumberOfEmployees + greaterThan + 200 + + + BillingCity + notEqual + San Francisco + + + + AcctCBS2_toTerritories + Read + + None + Read + None + + + + Territory_1 + + + NumberOfEmployees + greaterThan + 200 + + + BillingCity + notEqual + San Francisco + + + + AcctCBS_toAllCustPortal + Read + + None + Read + None + + + + + + + NumberOfEmployees + greaterThan + 100 + + + BillingCity + notEqual + San Francisco + + + + AcctCBS_toAllInternal + Read + + None + Read + None + + cbs description + + + + + + Name + equals + Test + + + + AcctCBS_toAllPartner + Read + + None + Read + None + + + + + + + BillingCountry + equals + Japan + + + BillingCity + contains + Tokyo + + + + AcctCBS_toTerr + Read + + None + Read + None + + + + Territory_1 + + + AccountNumber + contains + 5 + + + + Acct_CBS_boolean + Read + + None + Read + None + + + + + + (1 AND 2) OR 3 + + IsExcludedFromRealign + equals + True + + + Name + contains + Boolean + + + ShippingCity + equals + Osaka + + + + criteria_group + Read + + None + Read + None + + + + Group2 + + + BillingCity + equals + Fremont + + + + criteria_groups + Read + + None + Read + None + + + + Group2 + + + BillingCity + equals + Fremont + + + + criteria_mgrSubs + Read + + None + Read + None + + + + CEO + + + Name + contains + Test + + + + criteria_mgrs + Read + + None + Read + None + + + + CEO + + + ShippingCountry + notEqual + France + + + + criteria_portal + Read + + None + Read + None + + + + ${portalRoleName} + + + Website + equals + www.salesforce.com + + + + criteria_portalAndSubs + Read + + None + Read + None + + + + ${portalRoleName} + + + NumberOfEmployees + greaterThan + 100 + + + + criteria_role + Read + + None + Read + None + + + + role1 + + + NumberOfEmployees + lessThan + 1000 + + + + criteria_roles + Read + + None + Read + None + + + + role1 + + + NumberOfEmployees + lessThan + 1000 + + + + criteria_roleAndsubsPortal + Read + + None + Read + None + + + + ur1507245197985 + + + ShippingCountry + notEqual + Canada + + + + criteria_rolesAndsubsPortal + Read + + None + Read + None + + + + ur1507245197985 + + + ShippingCountry + notEqual + Canada + + + + criteria_roleandsubs + Read + + None + Read + None + + + + role1_sub_role + + + BillingCity + equals + Tokyo + + + + criteria_terrAndSubs + Read + + None + Read + None + + + + Territory_1 + + + BillingStreet + equals + Main + + + + criteria_terrsAndSubs + Read + + None + Read + None + + + + Territory_1 + + + BillingStreet + equals + Main + + + + AcctOwner_toCustPortal_fromInternal + Read + + None + Read + None + + + + + + + + + + + AcctOwner_toInteral_fromPartner + Read + + None + Read + None + + Account Owner Description + + + + + + + + + + AcctOwner_toPartner_fromCustomerPortal + Read + + None + Read + None + + + + + + + + + + + OwnerGroups + Read + + None + Read + None + + + + Group2 + + + Group1 + + + + OwnerGroups2 + Read + + None + Read + None + + + + Group2 + + + Group1 + + + + owner_FromTerrAndSub_ToTerr + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + owner_FromTerrsAndSub_ToTerrs + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + owner_ToTerrsAndSub_FromTerrs + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + owner_fromPortalSubs_toPortal + Read + + None + Read + None + + + + ${portalRoleName} + + + ${portalRoleName} + + + + owner_fromTerrToTerrAndSub + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + owner_fromportalRole_toAndSubs + Read + + None + Read + None + + + + ${portalRoleName} + + + ${portalRoleName} + + + + owner_managerSubordinates + Read + + None + Read + None + + + + + + + + + + + owner_mgrs + Read + + None + Read + None + + + + + + + + + + + owner_role + Read + + None + Read + None + + + + ur1507245197985 + + + role1 + + + + owner_roles + Read + + None + Read + None + + + + ur1507245197985 + + + role1 + + + + owner_rolesIntAndPortal + Read + + None + Read + None + + + + ur1507245197985 + + + role1_sub_role + + + + owner_rolesIntAndPortal2 + Read + + None + Read + None + + + + ur1507245197985 + + + role1_sub_role + + + + owner_rolesIntSubs + Read + + None + Read + None + + + + role1_sub_role + + + role1 + + + + AcctTerr1_toAllInternal + Read + + None + Read + None + + + + + + + Territory_1 + + + + AcctTerr1s_toAllInternal + Read + + None + Read + None + + + + + + + Territory_1 + + + + AcctTerr_toAllCustPortal + Read + + None + Read + None + + + + + + + Territory_1 + + + + AcctTerr_toAllPartner + Read + + None + Read + None + + Account Territory Description + + + + + + Territory_1 + + + + Terr_Group + Read + + None + Read + None + + + + Group1 + + + Territory_1 + + + + Terr_Groups + Read + + None + Read + None + + + + Group1 + + + Territory_1 + + + + terrAndSubs_mgrSubs + Read + + None + Read + None + + + + + + + Territory_1 + + + + terr_mgrs + Read + + None + Read + None + + + + + + + Territory_1 + + + + terr_portalAndSubs + Read + + None + Read + None + + + + ${portalRoleName} + + + Territory_1 + + + + terr_portalRole + Read + + None + Read + None + + + + ${portalRoleName} + + + Territory_1 + + + + terr_role + Read + + None + Read + None + + + + role1 + + + Territory_1 + + + + terr_roles + Read + + None + Read + None + + + + role1 + + + Territory_1 + + + + terr_roleAndSubPortal + Read + + None + Read + None + + + + ur1507245197985 + + + Territory_1 + + + + terr_rolesAndSubPortal + Read + + None + Read + None + + + + ur1507245197985 + + + Territory_1 + + + + terr_roleAndSubs + Read + + None + Read + None + + + + role1_sub_role + + + Territory_1 + + + + terr_terr + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + terr_terrs + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + terr_terrAndSub + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + terr_terrsAndSub + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + \ No newline at end of file diff --git a/test/snapshot/sampleProjects/sharingRules/__snapshots__/verify-md-files-SR.expected/package.xml b/test/snapshot/sampleProjects/sharingRules/__snapshots__/verify-md-files-SR.expected/package.xml new file mode 100644 index 0000000000..cea14eeef9 --- /dev/null +++ b/test/snapshot/sampleProjects/sharingRules/__snapshots__/verify-md-files-SR.expected/package.xml @@ -0,0 +1,74 @@ + + + + account.AcctCBS2_toTerritories + account.AcctCBS2_toTerritory + account.AcctCBS_toAllCustPortal + account.AcctCBS_toAllInternal + account.AcctCBS_toAllPartner + account.AcctCBS_toTerr + account.Acct_CBS_boolean + account.criteria_group + account.criteria_groups + account.criteria_mgrSubs + account.criteria_mgrs + account.criteria_portal + account.criteria_portalAndSubs + account.criteria_role + account.criteria_roleAndsubsPortal + account.criteria_roleandsubs + account.criteria_roles + account.criteria_rolesAndsubsPortal + account.criteria_terrAndSubs + account.criteria_terrsAndSubs + SharingCriteriaRule + + + account.AcctOwner_toCustPortal_fromInternal + account.AcctOwner_toInteral_fromPartner + account.AcctOwner_toPartner_fromCustomerPortal + account.OwnerGroups + account.OwnerGroups2 + account.owner_FromTerrAndSub_ToTerr + account.owner_FromTerrsAndSub_ToTerrs + account.owner_ToTerrsAndSub_FromTerrs + account.owner_fromPortalSubs_toPortal + account.owner_fromTerrToTerrAndSub + account.owner_fromportalRole_toAndSubs + account.owner_managerSubordinates + account.owner_mgrs + account.owner_role + account.owner_roles + account.owner_rolesIntAndPortal + account.owner_rolesIntAndPortal2 + account.owner_rolesIntSubs + SharingOwnerRule + + + account + SharingRules + + + account.AcctTerr1_toAllInternal + account.AcctTerr1s_toAllInternal + account.AcctTerr_toAllCustPortal + account.AcctTerr_toAllPartner + account.Terr_Group + account.Terr_Groups + account.terrAndSubs_mgrSubs + account.terr_mgrs + account.terr_portalAndSubs + account.terr_portalRole + account.terr_role + account.terr_roleAndSubPortal + account.terr_roleAndSubs + account.terr_roles + account.terr_rolesAndSubPortal + account.terr_terr + account.terr_terrAndSub + account.terr_terrs + account.terr_terrsAndSub + SharingTerritoryRule + + 52.0 + diff --git a/test/snapshot/sampleProjects/sharingRules/__snapshots__/verify-md-files-SR.expected/sharingRules/account.sharingRules b/test/snapshot/sampleProjects/sharingRules/__snapshots__/verify-md-files-SR.expected/sharingRules/account.sharingRules new file mode 100644 index 0000000000..829dce2508 --- /dev/null +++ b/test/snapshot/sampleProjects/sharingRules/__snapshots__/verify-md-files-SR.expected/sharingRules/account.sharingRules @@ -0,0 +1,989 @@ + + + + AcctCBS2_toTerritory + Read + + None + Read + None + + + + Territory_1 + + + NumberOfEmployees + greaterThan + 200 + + + BillingCity + notEqual + San Francisco + + + + AcctCBS2_toTerritories + Read + + None + Read + None + + + + Territory_1 + + + NumberOfEmployees + greaterThan + 200 + + + BillingCity + notEqual + San Francisco + + + + AcctCBS_toAllCustPortal + Read + + None + Read + None + + + + + + + NumberOfEmployees + greaterThan + 100 + + + BillingCity + notEqual + San Francisco + + + + AcctCBS_toAllInternal + Read + + None + Read + None + + cbs description + + + + + + Name + equals + Test + + + + AcctCBS_toAllPartner + Read + + None + Read + None + + + + + + + BillingCountry + equals + Japan + + + BillingCity + contains + Tokyo + + + + AcctCBS_toTerr + Read + + None + Read + None + + + + Territory_1 + + + AccountNumber + contains + 5 + + + + Acct_CBS_boolean + Read + + None + Read + None + + + + + + (1 AND 2) OR 3 + + IsExcludedFromRealign + equals + True + + + Name + contains + Boolean + + + ShippingCity + equals + Osaka + + + + criteria_group + Read + + None + Read + None + + + + Group2 + + + BillingCity + equals + Fremont + + + + criteria_groups + Read + + None + Read + None + + + + Group2 + + + BillingCity + equals + Fremont + + + + criteria_mgrSubs + Read + + None + Read + None + + + + CEO + + + Name + contains + Test + + + + criteria_mgrs + Read + + None + Read + None + + + + CEO + + + ShippingCountry + notEqual + France + + + + criteria_portal + Read + + None + Read + None + + + + ${portalRoleName} + + + Website + equals + www.salesforce.com + + + + criteria_portalAndSubs + Read + + None + Read + None + + + + ${portalRoleName} + + + NumberOfEmployees + greaterThan + 100 + + + + criteria_role + Read + + None + Read + None + + + + role1 + + + NumberOfEmployees + lessThan + 1000 + + + + criteria_roles + Read + + None + Read + None + + + + role1 + + + NumberOfEmployees + lessThan + 1000 + + + + criteria_roleAndsubsPortal + Read + + None + Read + None + + + + ur1507245197985 + + + ShippingCountry + notEqual + Canada + + + + criteria_rolesAndsubsPortal + Read + + None + Read + None + + + + ur1507245197985 + + + ShippingCountry + notEqual + Canada + + + + criteria_roleandsubs + Read + + None + Read + None + + + + role1_sub_role + + + BillingCity + equals + Tokyo + + + + criteria_terrAndSubs + Read + + None + Read + None + + + + Territory_1 + + + BillingStreet + equals + Main + + + + criteria_terrsAndSubs + Read + + None + Read + None + + + + Territory_1 + + + BillingStreet + equals + Main + + + + AcctOwner_toCustPortal_fromInternal + Read + + None + Read + None + + + + + + + + + + + AcctOwner_toInteral_fromPartner + Read + + None + Read + None + + Account Owner Description + + + + + + + + + + AcctOwner_toPartner_fromCustomerPortal + Read + + None + Read + None + + + + + + + + + + + OwnerGroups + Read + + None + Read + None + + + + Group2 + + + Group1 + + + + OwnerGroups2 + Read + + None + Read + None + + + + Group2 + + + Group1 + + + + owner_FromTerrAndSub_ToTerr + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + owner_FromTerrsAndSub_ToTerrs + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + owner_ToTerrsAndSub_FromTerrs + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + owner_fromPortalSubs_toPortal + Read + + None + Read + None + + + + ${portalRoleName} + + + ${portalRoleName} + + + + owner_fromTerrToTerrAndSub + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + owner_fromportalRole_toAndSubs + Read + + None + Read + None + + + + ${portalRoleName} + + + ${portalRoleName} + + + + owner_managerSubordinates + Read + + None + Read + None + + + + + + + + + + + owner_mgrs + Read + + None + Read + None + + + + + + + + + + + owner_role + Read + + None + Read + None + + + + ur1507245197985 + + + role1 + + + + owner_roles + Read + + None + Read + None + + + + ur1507245197985 + + + role1 + + + + owner_rolesIntAndPortal + Read + + None + Read + None + + + + ur1507245197985 + + + role1_sub_role + + + + owner_rolesIntAndPortal2 + Read + + None + Read + None + + + + ur1507245197985 + + + role1_sub_role + + + + owner_rolesIntSubs + Read + + None + Read + None + + + + role1_sub_role + + + role1 + + + + AcctTerr1_toAllInternal + Read + + None + Read + None + + + + + + + Territory_1 + + + + AcctTerr1s_toAllInternal + Read + + None + Read + None + + + + + + + Territory_1 + + + + AcctTerr_toAllCustPortal + Read + + None + Read + None + + + + + + + Territory_1 + + + + AcctTerr_toAllPartner + Read + + None + Read + None + + Account Territory Description + + + + + + Territory_1 + + + + Terr_Group + Read + + None + Read + None + + + + Group1 + + + Territory_1 + + + + Terr_Groups + Read + + None + Read + None + + + + Group1 + + + Territory_1 + + + + terrAndSubs_mgrSubs + Read + + None + Read + None + + + + + + + Territory_1 + + + + terr_mgrs + Read + + None + Read + None + + + + + + + Territory_1 + + + + terr_portalAndSubs + Read + + None + Read + None + + + + ${portalRoleName} + + + Territory_1 + + + + terr_portalRole + Read + + None + Read + None + + + + ${portalRoleName} + + + Territory_1 + + + + terr_role + Read + + None + Read + None + + + + role1 + + + Territory_1 + + + + terr_roles + Read + + None + Read + None + + + + role1 + + + Territory_1 + + + + terr_roleAndSubPortal + Read + + None + Read + None + + + + ur1507245197985 + + + Territory_1 + + + + terr_rolesAndSubPortal + Read + + None + Read + None + + + + ur1507245197985 + + + Territory_1 + + + + terr_roleAndSubs + Read + + None + Read + None + + + + role1_sub_role + + + Territory_1 + + + + terr_terr + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + terr_terrs + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + terr_terrAndSub + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + terr_terrsAndSub + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + \ No newline at end of file diff --git a/test/snapshot/sampleProjects/sharingRules/__snapshots__/verify-source-files-SCR.expected/force-app/main/default/sharingRules/account.sharingRules-meta.xml b/test/snapshot/sampleProjects/sharingRules/__snapshots__/verify-source-files-SCR.expected/force-app/main/default/sharingRules/account.sharingRules-meta.xml new file mode 100644 index 0000000000..829dce2508 --- /dev/null +++ b/test/snapshot/sampleProjects/sharingRules/__snapshots__/verify-source-files-SCR.expected/force-app/main/default/sharingRules/account.sharingRules-meta.xml @@ -0,0 +1,989 @@ + + + + AcctCBS2_toTerritory + Read + + None + Read + None + + + + Territory_1 + + + NumberOfEmployees + greaterThan + 200 + + + BillingCity + notEqual + San Francisco + + + + AcctCBS2_toTerritories + Read + + None + Read + None + + + + Territory_1 + + + NumberOfEmployees + greaterThan + 200 + + + BillingCity + notEqual + San Francisco + + + + AcctCBS_toAllCustPortal + Read + + None + Read + None + + + + + + + NumberOfEmployees + greaterThan + 100 + + + BillingCity + notEqual + San Francisco + + + + AcctCBS_toAllInternal + Read + + None + Read + None + + cbs description + + + + + + Name + equals + Test + + + + AcctCBS_toAllPartner + Read + + None + Read + None + + + + + + + BillingCountry + equals + Japan + + + BillingCity + contains + Tokyo + + + + AcctCBS_toTerr + Read + + None + Read + None + + + + Territory_1 + + + AccountNumber + contains + 5 + + + + Acct_CBS_boolean + Read + + None + Read + None + + + + + + (1 AND 2) OR 3 + + IsExcludedFromRealign + equals + True + + + Name + contains + Boolean + + + ShippingCity + equals + Osaka + + + + criteria_group + Read + + None + Read + None + + + + Group2 + + + BillingCity + equals + Fremont + + + + criteria_groups + Read + + None + Read + None + + + + Group2 + + + BillingCity + equals + Fremont + + + + criteria_mgrSubs + Read + + None + Read + None + + + + CEO + + + Name + contains + Test + + + + criteria_mgrs + Read + + None + Read + None + + + + CEO + + + ShippingCountry + notEqual + France + + + + criteria_portal + Read + + None + Read + None + + + + ${portalRoleName} + + + Website + equals + www.salesforce.com + + + + criteria_portalAndSubs + Read + + None + Read + None + + + + ${portalRoleName} + + + NumberOfEmployees + greaterThan + 100 + + + + criteria_role + Read + + None + Read + None + + + + role1 + + + NumberOfEmployees + lessThan + 1000 + + + + criteria_roles + Read + + None + Read + None + + + + role1 + + + NumberOfEmployees + lessThan + 1000 + + + + criteria_roleAndsubsPortal + Read + + None + Read + None + + + + ur1507245197985 + + + ShippingCountry + notEqual + Canada + + + + criteria_rolesAndsubsPortal + Read + + None + Read + None + + + + ur1507245197985 + + + ShippingCountry + notEqual + Canada + + + + criteria_roleandsubs + Read + + None + Read + None + + + + role1_sub_role + + + BillingCity + equals + Tokyo + + + + criteria_terrAndSubs + Read + + None + Read + None + + + + Territory_1 + + + BillingStreet + equals + Main + + + + criteria_terrsAndSubs + Read + + None + Read + None + + + + Territory_1 + + + BillingStreet + equals + Main + + + + AcctOwner_toCustPortal_fromInternal + Read + + None + Read + None + + + + + + + + + + + AcctOwner_toInteral_fromPartner + Read + + None + Read + None + + Account Owner Description + + + + + + + + + + AcctOwner_toPartner_fromCustomerPortal + Read + + None + Read + None + + + + + + + + + + + OwnerGroups + Read + + None + Read + None + + + + Group2 + + + Group1 + + + + OwnerGroups2 + Read + + None + Read + None + + + + Group2 + + + Group1 + + + + owner_FromTerrAndSub_ToTerr + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + owner_FromTerrsAndSub_ToTerrs + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + owner_ToTerrsAndSub_FromTerrs + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + owner_fromPortalSubs_toPortal + Read + + None + Read + None + + + + ${portalRoleName} + + + ${portalRoleName} + + + + owner_fromTerrToTerrAndSub + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + owner_fromportalRole_toAndSubs + Read + + None + Read + None + + + + ${portalRoleName} + + + ${portalRoleName} + + + + owner_managerSubordinates + Read + + None + Read + None + + + + + + + + + + + owner_mgrs + Read + + None + Read + None + + + + + + + + + + + owner_role + Read + + None + Read + None + + + + ur1507245197985 + + + role1 + + + + owner_roles + Read + + None + Read + None + + + + ur1507245197985 + + + role1 + + + + owner_rolesIntAndPortal + Read + + None + Read + None + + + + ur1507245197985 + + + role1_sub_role + + + + owner_rolesIntAndPortal2 + Read + + None + Read + None + + + + ur1507245197985 + + + role1_sub_role + + + + owner_rolesIntSubs + Read + + None + Read + None + + + + role1_sub_role + + + role1 + + + + AcctTerr1_toAllInternal + Read + + None + Read + None + + + + + + + Territory_1 + + + + AcctTerr1s_toAllInternal + Read + + None + Read + None + + + + + + + Territory_1 + + + + AcctTerr_toAllCustPortal + Read + + None + Read + None + + + + + + + Territory_1 + + + + AcctTerr_toAllPartner + Read + + None + Read + None + + Account Territory Description + + + + + + Territory_1 + + + + Terr_Group + Read + + None + Read + None + + + + Group1 + + + Territory_1 + + + + Terr_Groups + Read + + None + Read + None + + + + Group1 + + + Territory_1 + + + + terrAndSubs_mgrSubs + Read + + None + Read + None + + + + + + + Territory_1 + + + + terr_mgrs + Read + + None + Read + None + + + + + + + Territory_1 + + + + terr_portalAndSubs + Read + + None + Read + None + + + + ${portalRoleName} + + + Territory_1 + + + + terr_portalRole + Read + + None + Read + None + + + + ${portalRoleName} + + + Territory_1 + + + + terr_role + Read + + None + Read + None + + + + role1 + + + Territory_1 + + + + terr_roles + Read + + None + Read + None + + + + role1 + + + Territory_1 + + + + terr_roleAndSubPortal + Read + + None + Read + None + + + + ur1507245197985 + + + Territory_1 + + + + terr_rolesAndSubPortal + Read + + None + Read + None + + + + ur1507245197985 + + + Territory_1 + + + + terr_roleAndSubs + Read + + None + Read + None + + + + role1_sub_role + + + Territory_1 + + + + terr_terr + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + terr_terrs + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + terr_terrAndSub + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + terr_terrsAndSub + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + \ No newline at end of file diff --git a/test/snapshot/sampleProjects/sharingRules/__snapshots__/verify-source-files-SR.expected/force-app/main/default/sharingRules/account.sharingRules-meta.xml b/test/snapshot/sampleProjects/sharingRules/__snapshots__/verify-source-files-SR.expected/force-app/main/default/sharingRules/account.sharingRules-meta.xml new file mode 100644 index 0000000000..829dce2508 --- /dev/null +++ b/test/snapshot/sampleProjects/sharingRules/__snapshots__/verify-source-files-SR.expected/force-app/main/default/sharingRules/account.sharingRules-meta.xml @@ -0,0 +1,989 @@ + + + + AcctCBS2_toTerritory + Read + + None + Read + None + + + + Territory_1 + + + NumberOfEmployees + greaterThan + 200 + + + BillingCity + notEqual + San Francisco + + + + AcctCBS2_toTerritories + Read + + None + Read + None + + + + Territory_1 + + + NumberOfEmployees + greaterThan + 200 + + + BillingCity + notEqual + San Francisco + + + + AcctCBS_toAllCustPortal + Read + + None + Read + None + + + + + + + NumberOfEmployees + greaterThan + 100 + + + BillingCity + notEqual + San Francisco + + + + AcctCBS_toAllInternal + Read + + None + Read + None + + cbs description + + + + + + Name + equals + Test + + + + AcctCBS_toAllPartner + Read + + None + Read + None + + + + + + + BillingCountry + equals + Japan + + + BillingCity + contains + Tokyo + + + + AcctCBS_toTerr + Read + + None + Read + None + + + + Territory_1 + + + AccountNumber + contains + 5 + + + + Acct_CBS_boolean + Read + + None + Read + None + + + + + + (1 AND 2) OR 3 + + IsExcludedFromRealign + equals + True + + + Name + contains + Boolean + + + ShippingCity + equals + Osaka + + + + criteria_group + Read + + None + Read + None + + + + Group2 + + + BillingCity + equals + Fremont + + + + criteria_groups + Read + + None + Read + None + + + + Group2 + + + BillingCity + equals + Fremont + + + + criteria_mgrSubs + Read + + None + Read + None + + + + CEO + + + Name + contains + Test + + + + criteria_mgrs + Read + + None + Read + None + + + + CEO + + + ShippingCountry + notEqual + France + + + + criteria_portal + Read + + None + Read + None + + + + ${portalRoleName} + + + Website + equals + www.salesforce.com + + + + criteria_portalAndSubs + Read + + None + Read + None + + + + ${portalRoleName} + + + NumberOfEmployees + greaterThan + 100 + + + + criteria_role + Read + + None + Read + None + + + + role1 + + + NumberOfEmployees + lessThan + 1000 + + + + criteria_roles + Read + + None + Read + None + + + + role1 + + + NumberOfEmployees + lessThan + 1000 + + + + criteria_roleAndsubsPortal + Read + + None + Read + None + + + + ur1507245197985 + + + ShippingCountry + notEqual + Canada + + + + criteria_rolesAndsubsPortal + Read + + None + Read + None + + + + ur1507245197985 + + + ShippingCountry + notEqual + Canada + + + + criteria_roleandsubs + Read + + None + Read + None + + + + role1_sub_role + + + BillingCity + equals + Tokyo + + + + criteria_terrAndSubs + Read + + None + Read + None + + + + Territory_1 + + + BillingStreet + equals + Main + + + + criteria_terrsAndSubs + Read + + None + Read + None + + + + Territory_1 + + + BillingStreet + equals + Main + + + + AcctOwner_toCustPortal_fromInternal + Read + + None + Read + None + + + + + + + + + + + AcctOwner_toInteral_fromPartner + Read + + None + Read + None + + Account Owner Description + + + + + + + + + + AcctOwner_toPartner_fromCustomerPortal + Read + + None + Read + None + + + + + + + + + + + OwnerGroups + Read + + None + Read + None + + + + Group2 + + + Group1 + + + + OwnerGroups2 + Read + + None + Read + None + + + + Group2 + + + Group1 + + + + owner_FromTerrAndSub_ToTerr + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + owner_FromTerrsAndSub_ToTerrs + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + owner_ToTerrsAndSub_FromTerrs + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + owner_fromPortalSubs_toPortal + Read + + None + Read + None + + + + ${portalRoleName} + + + ${portalRoleName} + + + + owner_fromTerrToTerrAndSub + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + owner_fromportalRole_toAndSubs + Read + + None + Read + None + + + + ${portalRoleName} + + + ${portalRoleName} + + + + owner_managerSubordinates + Read + + None + Read + None + + + + + + + + + + + owner_mgrs + Read + + None + Read + None + + + + + + + + + + + owner_role + Read + + None + Read + None + + + + ur1507245197985 + + + role1 + + + + owner_roles + Read + + None + Read + None + + + + ur1507245197985 + + + role1 + + + + owner_rolesIntAndPortal + Read + + None + Read + None + + + + ur1507245197985 + + + role1_sub_role + + + + owner_rolesIntAndPortal2 + Read + + None + Read + None + + + + ur1507245197985 + + + role1_sub_role + + + + owner_rolesIntSubs + Read + + None + Read + None + + + + role1_sub_role + + + role1 + + + + AcctTerr1_toAllInternal + Read + + None + Read + None + + + + + + + Territory_1 + + + + AcctTerr1s_toAllInternal + Read + + None + Read + None + + + + + + + Territory_1 + + + + AcctTerr_toAllCustPortal + Read + + None + Read + None + + + + + + + Territory_1 + + + + AcctTerr_toAllPartner + Read + + None + Read + None + + Account Territory Description + + + + + + Territory_1 + + + + Terr_Group + Read + + None + Read + None + + + + Group1 + + + Territory_1 + + + + Terr_Groups + Read + + None + Read + None + + + + Group1 + + + Territory_1 + + + + terrAndSubs_mgrSubs + Read + + None + Read + None + + + + + + + Territory_1 + + + + terr_mgrs + Read + + None + Read + None + + + + + + + Territory_1 + + + + terr_portalAndSubs + Read + + None + Read + None + + + + ${portalRoleName} + + + Territory_1 + + + + terr_portalRole + Read + + None + Read + None + + + + ${portalRoleName} + + + Territory_1 + + + + terr_role + Read + + None + Read + None + + + + role1 + + + Territory_1 + + + + terr_roles + Read + + None + Read + None + + + + role1 + + + Territory_1 + + + + terr_roleAndSubPortal + Read + + None + Read + None + + + + ur1507245197985 + + + Territory_1 + + + + terr_rolesAndSubPortal + Read + + None + Read + None + + + + ur1507245197985 + + + Territory_1 + + + + terr_roleAndSubs + Read + + None + Read + None + + + + role1_sub_role + + + Territory_1 + + + + terr_terr + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + terr_terrs + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + terr_terrAndSub + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + + terr_terrsAndSub + Read + + None + Read + None + + + + Territory_1 + + + Territory_1 + + + \ No newline at end of file diff --git a/test/snapshot/sampleProjects/sharingRules/snapshots.test.ts b/test/snapshot/sampleProjects/sharingRules/snapshots.test.ts index 6f206f0d34..84ebd823d2 100644 --- a/test/snapshot/sampleProjects/sharingRules/snapshots.test.ts +++ b/test/snapshot/sampleProjects/sharingRules/snapshots.test.ts @@ -10,43 +10,173 @@ import { FORCE_APP, MDAPI_OUT, dirsAreIdentical, + dirEntsToPaths, fileSnap, mdapiToSource, sourceToMdapi, } from '../../helper/conversions'; +import { MetadataConverter } from '../../../../src/convert/metadataConverter'; +import { ComponentSetBuilder } from '../../../../src/collections/componentSetBuilder'; // we don't want failing tests outputting over each other /* eslint-disable no-await-in-loop */ -describe('Sharing Rules!', () => { +describe('Sharing Rules', () => { const testDir = path.join('test', 'snapshot', 'sampleProjects', 'sharingRules'); - let sourceFiles: string[]; - let mdFiles: string[]; - before(async () => { - await fs.promises.mkdir(path.join(testDir, FORCE_APP), { recursive: true }); - sourceFiles = await mdapiToSource(testDir); - mdFiles = await sourceToMdapi(testDir); - }); - it('verify source files', async () => { - for (const file of sourceFiles) { - await fileSnap(file, testDir); - } - dirsAreIdentical( - path.join(testDir, FORCE_APP), - path.join(testDir, '__snapshots__', 'verify-source-files.expected', FORCE_APP) + // The directory of snapshots containing expected conversion results + const snapshotsDir = path.join(testDir, '__snapshots__'); + + /** Return only the files involved in the conversion */ + const getConvertedFilePaths = async (outputDir: string): Promise => + dirEntsToPaths( + await fs.promises.readdir(outputDir, { + recursive: true, + withFileTypes: true, + }) ); + + describe('convert entire project by path', () => { + let sourceFiles: string[]; + let mdFiles: string[]; + + before(async () => { + sourceFiles = await mdapiToSource(testDir); + mdFiles = await sourceToMdapi(testDir); + }); + after(async () => { + await Promise.all([ + fs.promises.rm(path.join(testDir, FORCE_APP), { recursive: true, force: true }), + fs.promises.rm(path.join(testDir, MDAPI_OUT), { recursive: true, force: true }), + ]); + }); + + it('verify source files', async () => { + for (const file of sourceFiles) { + await fileSnap(file, testDir); + } + dirsAreIdentical( + path.join(testDir, FORCE_APP), + path.join(testDir, '__snapshots__', 'verify-source-files.expected', FORCE_APP) + ); + }); + + it('verify md files', async () => { + for (const file of mdFiles) { + await fileSnap(file, testDir); + } + }); }); - it('verify md files', async () => { - for (const file of mdFiles) { - await fileSnap(file, testDir); - } + + describe('convert SharingRules by SharingCriteriaRule type', () => { + afterEach(async () => { + await Promise.all([ + fs.promises.rm(path.join(testDir, FORCE_APP), { recursive: true, force: true }), + fs.promises.rm(path.join(testDir, MDAPI_OUT), { recursive: true, force: true }), + ]); + }); + it('verify source files SCR', async () => { + // Use expected md files as the project to convert to source format + const projectMdDir = path.join(snapshotsDir, 'verify-md-files.expected'); + const cs = await ComponentSetBuilder.build({ + metadata: { + metadataEntries: ['SharingCriteriaRule:account.AcctCBS_toAllInternal'], + directoryPaths: [projectMdDir], + }, + projectDir: testDir, + }); + const convertOutputDir = path.join(testDir, FORCE_APP); + await new MetadataConverter().convert(cs, 'source', { + type: 'directory', + outputDirectory: convertOutputDir, + genUniqueDir: false, + }); + const convertedFiles = await getConvertedFilePaths(convertOutputDir); + for (const file of convertedFiles) { + await fileSnap(file, testDir); + } + const expectedConvertDir = path.join(snapshotsDir, 'verify-source-files-SCR.expected', 'force-app'); + await dirsAreIdentical(convertOutputDir, expectedConvertDir); + }); + it('verify md files SCR', async () => { + // Use expected source files as the project to convert to mdapi format + const projectSrcDir = path.join(snapshotsDir, 'verify-source-files.expected', 'force-app'); + const cs = await ComponentSetBuilder.build({ + metadata: { + metadataEntries: ['SharingCriteriaRule:account.AcctCBS_toAllInternal'], + directoryPaths: [projectSrcDir], + }, + projectDir: testDir, + }); + const convertOutputDir = path.join(testDir, MDAPI_OUT); + await new MetadataConverter().convert(cs, 'metadata', { + type: 'directory', + outputDirectory: convertOutputDir, + genUniqueDir: false, + }); + + const convertedFiles = await getConvertedFilePaths(convertOutputDir); + for (const file of convertedFiles) { + await fileSnap(file, testDir); + } + const expectedConvertDir = path.join(snapshotsDir, 'verify-md-files-SCR.expected'); + await dirsAreIdentical(convertOutputDir, expectedConvertDir); + }); }); - after(async () => { - await Promise.all([ - fs.promises.rm(path.join(testDir, FORCE_APP), { recursive: true, force: true }), - fs.promises.rm(path.join(testDir, MDAPI_OUT), { recursive: true, force: true }), - ]); + describe('convert SharingRules by SharingRules type', () => { + afterEach(async () => { + await Promise.all([ + fs.promises.rm(path.join(testDir, FORCE_APP), { recursive: true, force: true }), + fs.promises.rm(path.join(testDir, MDAPI_OUT), { recursive: true, force: true }), + ]); + }); + it('verify source files SR', async () => { + // Use expected md files as the project to convert to source format + const projectMdDir = path.join(snapshotsDir, 'verify-md-files.expected'); + const cs = await ComponentSetBuilder.build({ + metadata: { + metadataEntries: ['SharingRules:account'], + directoryPaths: [projectMdDir], + }, + projectDir: testDir, + }); + const convertOutputDir = path.join(testDir, FORCE_APP); + await new MetadataConverter().convert(cs, 'source', { + type: 'directory', + outputDirectory: convertOutputDir, + genUniqueDir: false, + }); + const convertedFiles = await getConvertedFilePaths(convertOutputDir); + for (const file of convertedFiles) { + await fileSnap(file, testDir); + } + const expectedConvertDir = path.join(snapshotsDir, 'verify-source-files-SR.expected', 'force-app'); + await dirsAreIdentical(convertOutputDir, expectedConvertDir); + }); + it('verify md files SR', async () => { + // Use expected source files as the project to convert to mdapi format + const projectSrcDir = path.join(snapshotsDir, 'verify-source-files.expected', 'force-app'); + const cs = await ComponentSetBuilder.build({ + metadata: { + metadataEntries: ['SharingRules:account'], + directoryPaths: [projectSrcDir], + }, + projectDir: testDir, + }); + const convertOutputDir = path.join(testDir, MDAPI_OUT); + await new MetadataConverter().convert(cs, 'metadata', { + type: 'directory', + outputDirectory: convertOutputDir, + genUniqueDir: false, + }); + + const convertedFiles = await getConvertedFilePaths(convertOutputDir); + for (const file of convertedFiles) { + await fileSnap(file, testDir); + } + const expectedConvertDir = path.join(snapshotsDir, 'verify-md-files-SR.expected'); + await dirsAreIdentical(convertOutputDir, expectedConvertDir); + }); }); });