Skip to content

Commit 7a83740

Browse files
authored
Merge pull request #548 from salesforcecli/sm/deb-nuts
Sm/deb-nuts
2 parents a024843 + 7a133a9 commit 7a83740

File tree

152 files changed

+4384
-10
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

152 files changed

+4384
-10
lines changed

.github/workflows/test.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ jobs:
2222
matrix:
2323
os: [ubuntu-latest, windows-latest]
2424
command:
25+
- 'yarn test:nuts:deb'
2526
- 'yarn test:nuts:deploy:metadata:manifest'
2627
- 'yarn test:nuts:deploy:metadata:metadata-dir'
2728
- 'yarn test:nuts:deploy:metadata:metadata'
@@ -35,6 +36,10 @@ jobs:
3536
- 'yarn test:nuts:manifest'
3637
- 'yarn test:nuts:specialTypes'
3738
- 'yarn test:nuts:tracking'
39+
# TODO: get windows nuts to pass for DEB
40+
exclude:
41+
- os: windows-latest
42+
command: yarn test:nuts:deb
3843
fail-fast: false
3944
with:
4045
os: ${{ matrix.os }}

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"@salesforce/kit": "^1.9.2",
1212
"@salesforce/sf-plugins-core": "^2.2.5",
1313
"@salesforce/source-deploy-retrieve": "^7.13.0",
14-
"@salesforce/source-tracking": "^2.2.22",
14+
"@salesforce/source-tracking": "^2.2.26",
1515
"chalk": "^4.1.2",
1616
"fs-extra": "^10.0.1",
1717
"shelljs": "^0.8.5",
@@ -144,6 +144,7 @@
144144
"test": "wireit",
145145
"test:nuts": "ts-node ./test/nuts/generateNuts.ts && nyc mocha \"**/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0 --jobs 10",
146146
"test:nuts:convert": "nyc mocha \"test/nuts/convert/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0 --jobs 20",
147+
"test:nuts:deb": "nyc mocha \"test/nuts/digitalExperienceBundle/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0 --jobs 20",
147148
"test:nuts:delete": "nyc mocha \"test/nuts/delete/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0 --jobs 20",
148149
"test:nuts:deploy:metadata:manifest": "cross-env PLUGIN_DEPLOY_RETRIEVE_SEED_FILTER=deploy.metadata.manifest ts-node ./test/nuts/generateNuts.ts && mocha \"test/nuts/generated/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0 --jobs 20",
149150
"test:nuts:deploy:metadata:metadata": "cross-env PLUGIN_DEPLOY_RETRIEVE_SEED_FILTER=deploy.metadata.metadata ts-node ./test/nuts/generateNuts.ts && mocha \"test/nuts/generated/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0 --jobs 20",
@@ -268,4 +269,4 @@
268269
"output": []
269270
}
270271
}
271-
}
272+
}

src/utils/previewOutput.ts

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -126,15 +126,22 @@ export const compileResults = ({
126126
// There should not be anything in forceignore returned by the componentSet
127127
ignored: [c.xml, c.content].some((v) => v && forceIgnore.denies(v)),
128128
// properties to return if we have an xml path
129-
...(c.xml
130-
? {
131-
path: path.isAbsolute(c.xml) ? c.xml : path.resolve(c.xml),
132-
// for cleaner output
133-
projectRelativePath: path.relative(projectPath, c.xml),
134-
}
135-
: {}),
129+
...getPaths(c),
136130
});
137131

132+
/** resolve absolute and relative paths for a source component, with a preference for the xml file, but able to use the content file as backup */
133+
const getPaths = (c: SourceComponent): Pick<PreviewFile, 'path' | 'projectRelativePath'> => {
134+
const someFile = c.xml ?? c.content;
135+
if (someFile) {
136+
return {
137+
path: path.isAbsolute(someFile) ? someFile : path.resolve(someFile),
138+
// for cleaner output
139+
projectRelativePath: path.relative(projectPath, someFile),
140+
};
141+
}
142+
return {};
143+
};
144+
138145
const actionableFiles = componentSet
139146
.toArray()
140147
.map((c) => sourceBackedComponents.get(makeKey(c)) ?? c)
Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
/*
2+
* Copyright (c) 2020, salesforce.com, inc.
3+
* All rights reserved.
4+
* Licensed under the BSD 3-Clause license.
5+
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
6+
*/
7+
8+
import { join, sep } from 'path';
9+
import { TestSessionOptions } from '@salesforce/cli-plugins-testkit/lib/testSession';
10+
import { MetadataType, registry } from '@salesforce/source-deploy-retrieve';
11+
import { META_XML_SUFFIX } from '@salesforce/source-deploy-retrieve/lib/src/common';
12+
13+
export const SOURCE_BASE_RELATIVE_PATH = join('force-app', 'main', 'default');
14+
export const DEB_NUTS_PATH = join(process.cwd(), 'test', 'nuts', 'digitalExperienceBundle');
15+
16+
export const TYPES = {
17+
DEB: registry.types.digitalexperiencebundle,
18+
DE: registry.types.digitalexperiencebundle.children?.types.digitalexperience as MetadataType,
19+
DEC: registry.types.digitalexperienceconfig,
20+
NETWORK: registry.types.network,
21+
CUSTOM_SITE: registry.types.customsite,
22+
APEX_PAGE: registry.types.apexpage,
23+
APEX_CLASS: registry.types.apexclass,
24+
} as const;
25+
26+
export const DIR_NAMES = {
27+
PROJECT: 'project',
28+
STORE: 'store',
29+
COMPONENTS: 'components',
30+
MANIFESTS: 'manifests',
31+
NETWORKS: TYPES.NETWORK.directoryName,
32+
SITES: TYPES.CUSTOM_SITE.directoryName,
33+
DIGITAL_EXPERIENCE_CONFIGS: TYPES.DEC.directoryName,
34+
DIGITAL_EXPERIENCES: TYPES.DEB.directoryName,
35+
SITE: 'site',
36+
HOME: 'home',
37+
DEB_A: 'Capricorn_Coffee_A1',
38+
DEB_B: 'Capricorn_Coffee_B1',
39+
DE_VIEW: 'sfdc_cms__view',
40+
DE_ROUTE: 'sfdc_cms__route',
41+
VIEW_DOCUMENT_DETAIL: 'documentDetail',
42+
ROUTE_DOCUMENT_DETAIL: 'Document_Detail__c',
43+
} as const;
44+
45+
export const DEBS_RELATIVE_PATH = join(
46+
SOURCE_BASE_RELATIVE_PATH,
47+
DIR_NAMES.DIGITAL_EXPERIENCES as string,
48+
DIR_NAMES.SITE
49+
);
50+
export const DEB_A_RELATIVE_PATH = join(DEBS_RELATIVE_PATH, DIR_NAMES.DEB_A);
51+
export const DEB_B_RELATIVE_PATH = join(DEBS_RELATIVE_PATH, DIR_NAMES.DEB_B);
52+
53+
export const STORE_PATH = join(DEB_NUTS_PATH, DIR_NAMES.STORE);
54+
export const STORE_COMPONENTS_PATH = join(STORE_PATH, DIR_NAMES.COMPONENTS);
55+
export const STORE_MANIFESTS_PATH = join(STORE_PATH, DIR_NAMES.MANIFESTS);
56+
57+
export const FULL_NAMES = {
58+
DEB_A: join(DIR_NAMES.SITE, DIR_NAMES.DEB_A),
59+
DEB_B: join(DIR_NAMES.SITE, DIR_NAMES.DEB_B),
60+
DE_VIEW_HOME_A: join(DIR_NAMES.SITE, `${DIR_NAMES.DEB_A}.${DIR_NAMES.DE_VIEW}`, DIR_NAMES.HOME),
61+
DE_VIEW_HOME_B: join(DIR_NAMES.SITE, `${DIR_NAMES.DEB_B}.${DIR_NAMES.DE_VIEW}`, DIR_NAMES.HOME),
62+
DE_VIEW_DOCUMENT_DETAIL_A: join(
63+
DIR_NAMES.SITE,
64+
`${DIR_NAMES.DEB_A}.${DIR_NAMES.DE_VIEW}`,
65+
DIR_NAMES.VIEW_DOCUMENT_DETAIL
66+
),
67+
DE_ROUTE_DOCUMENT_DETAIL_A: join(
68+
DIR_NAMES.SITE,
69+
`${DIR_NAMES.DEB_A}.${DIR_NAMES.DE_ROUTE}`,
70+
DIR_NAMES.ROUTE_DOCUMENT_DETAIL
71+
),
72+
} as const;
73+
74+
export const FILE_NAMES = {
75+
CONTENT: {
76+
DE_MAIN: 'content.json',
77+
DE_FRENCH_VARIANT: 'fr.json',
78+
},
79+
META: {
80+
DEB_A: `${DIR_NAMES.DEB_A}.${TYPES.DEB.suffix}${META_XML_SUFFIX}`,
81+
DEB_B: `${DIR_NAMES.DEB_B}.${TYPES.DEB.suffix}${META_XML_SUFFIX}`,
82+
DE: TYPES.DE.metaFileSuffix as string, // metaFileName = metaFileSuffix in case of DigitalExperience
83+
},
84+
} as const;
85+
86+
export const DIR_RELATIVE_PATHS = {
87+
NETWORKS: join(SOURCE_BASE_RELATIVE_PATH, DIR_NAMES.NETWORKS as string),
88+
SITES: join(SOURCE_BASE_RELATIVE_PATH, DIR_NAMES.SITES as string),
89+
DIGITAL_EXPERIENCE_CONFIGS: join(SOURCE_BASE_RELATIVE_PATH, DIR_NAMES.DIGITAL_EXPERIENCE_CONFIGS as string),
90+
DE_VIEW_A: join(DEB_A_RELATIVE_PATH, DIR_NAMES.DE_VIEW),
91+
DE_VIEW_B: join(DEB_B_RELATIVE_PATH, DIR_NAMES.DE_VIEW),
92+
DE_ROUTE_A: join(DEB_A_RELATIVE_PATH, DIR_NAMES.DE_ROUTE),
93+
DE_ROUTE_B: join(DEB_B_RELATIVE_PATH, DIR_NAMES.DE_ROUTE),
94+
DE_VIEW_HOME_A: join(DEB_A_RELATIVE_PATH, DIR_NAMES.DE_VIEW, DIR_NAMES.HOME),
95+
DE_VIEW_HOME_B: join(DEB_B_RELATIVE_PATH, DIR_NAMES.DE_VIEW, DIR_NAMES.HOME),
96+
DE_VIEW_DOCUMENT_DETAIL_A: join(DEB_A_RELATIVE_PATH, DIR_NAMES.DE_VIEW, DIR_NAMES.VIEW_DOCUMENT_DETAIL),
97+
DE_ROUTE_DOCUMENT_DETAIL_A: join(DEB_A_RELATIVE_PATH, DIR_NAMES.DE_ROUTE, DIR_NAMES.ROUTE_DOCUMENT_DETAIL),
98+
} as const;
99+
100+
export const FILE_RELATIVE_PATHS = {
101+
DEB_META_A: join(DEB_A_RELATIVE_PATH, FILE_NAMES.META.DEB_A),
102+
DEB_META_B: join(DEB_B_RELATIVE_PATH, FILE_NAMES.META.DEB_B),
103+
DE_VIEW_HOME_META_A: join(DIR_RELATIVE_PATHS.DE_VIEW_HOME_A, FILE_NAMES.META.DE),
104+
DE_VIEW_HOME_META_B: join(DIR_RELATIVE_PATHS.DE_VIEW_HOME_B, FILE_NAMES.META.DE),
105+
DE_VIEW_HOME_COMPONENT_A: DIR_RELATIVE_PATHS.DE_VIEW_HOME_A,
106+
DE_VIEW_HOME_COMPONENT_B: DIR_RELATIVE_PATHS.DE_VIEW_HOME_B,
107+
DE_VIEW_HOME_CONTENT_A: join(DIR_RELATIVE_PATHS.DE_VIEW_HOME_A, FILE_NAMES.CONTENT.DE_MAIN),
108+
DE_VIEW_HOME_CONTENT_B: join(DIR_RELATIVE_PATHS.DE_VIEW_HOME_B, FILE_NAMES.CONTENT.DE_MAIN),
109+
DE_VIEW_HOME_FR_VARIANT_A: join(DIR_RELATIVE_PATHS.DE_VIEW_HOME_A, FILE_NAMES.CONTENT.DE_FRENCH_VARIANT),
110+
DE_VIEW_HOME_FR_VARIANT_B: join(DIR_RELATIVE_PATHS.DE_VIEW_HOME_B, FILE_NAMES.CONTENT.DE_FRENCH_VARIANT),
111+
DE_VIEW_DOCUMENT_DETAIL_COMPONENT_A: DIR_RELATIVE_PATHS.DE_VIEW_DOCUMENT_DETAIL_A,
112+
DE_VIEW_DOCUMENT_DETAIL_META_A: join(DIR_RELATIVE_PATHS.DE_VIEW_DOCUMENT_DETAIL_A, FILE_NAMES.META.DE),
113+
DE_VIEW_DOCUMENT_DETAIL_CONTENT_A: join(DIR_RELATIVE_PATHS.DE_VIEW_DOCUMENT_DETAIL_A, FILE_NAMES.CONTENT.DE_MAIN),
114+
DE_ROUTE_DOCUMENT_DETAIL_COMPONENT_A: DIR_RELATIVE_PATHS.DE_ROUTE_DOCUMENT_DETAIL_A,
115+
DE_ROUTE_DOCUMENT_DETAIL_META_A: join(DIR_RELATIVE_PATHS.DE_ROUTE_DOCUMENT_DETAIL_A, FILE_NAMES.META.DE),
116+
DE_ROUTE_DOCUMENT_DETAIL_CONTENT_A: join(DIR_RELATIVE_PATHS.DE_ROUTE_DOCUMENT_DETAIL_A, FILE_NAMES.CONTENT.DE_MAIN),
117+
} as const;
118+
119+
export const STORE = {
120+
COMPONENTS: {
121+
DE_VIEW_DOCUMENT_DETAIL: join(STORE_COMPONENTS_PATH, DIR_NAMES.DE_VIEW, DIR_NAMES.VIEW_DOCUMENT_DETAIL),
122+
DE_ROUTE_DOCUMENT_DETAIL: join(STORE_COMPONENTS_PATH, DIR_NAMES.DE_ROUTE, DIR_NAMES.ROUTE_DOCUMENT_DETAIL),
123+
},
124+
MANIFESTS: {
125+
ALL_DEBS: join(STORE_MANIFESTS_PATH, 'all-debs-package.xml'),
126+
ALL_DE: join(STORE_MANIFESTS_PATH, 'all-de-package.xml'),
127+
ALL_DE_OF_DEB_A: join(STORE_MANIFESTS_PATH, 'all-de-of-deb-a-package.xml'),
128+
FULL_SITE_DEB_A_AND_B: join(STORE_MANIFESTS_PATH, 'full-site-deb-a-and-b-package.xml'),
129+
JUST_DEB_A: join(STORE_MANIFESTS_PATH, 'just-deb-a-package.xml'),
130+
DE_VIEW_HOME_OF_DEB_A: join(STORE_MANIFESTS_PATH, 'de-view-home-of-deb-a-package.xml'),
131+
DE_DOCUMENT_DETAIL_PAGE_A: join(STORE_MANIFESTS_PATH, 'de-document-detail-page-a-package.xml'),
132+
EMPTY_PACKAGE_XML: join(STORE_MANIFESTS_PATH, 'empty-package.xml'),
133+
ALL_DEBS_SOURCE_PATH_GEN: 'all-debs-sourcepath-gen-package.xml',
134+
ALL_DEBS_METADATA_GEN: 'all-debs-metadata-gen-package.xml',
135+
},
136+
} as const;
137+
138+
export const METADATA = {
139+
ALL_DEBS: TYPES.DEB.name,
140+
ALL_DE: TYPES.DE.name,
141+
ALL_DE_OF_DEB_B: `${TYPES.DE.name}:${DIR_NAMES.SITE}${sep}${DIR_NAMES.DEB_B}.*`,
142+
FULL_SITE_DEB_A_AND_B: `${TYPES.DEB.name},${TYPES.DEC.name},${TYPES.NETWORK.name},${TYPES.CUSTOM_SITE.name}`,
143+
JUST_DEB_B: `${TYPES.DEB.name}:${FULL_NAMES.DEB_B}`,
144+
DE_VIEW_HOME_OF_DEB_B: `${TYPES.DE.name}:${FULL_NAMES.DE_VIEW_HOME_B}`,
145+
DE_DOCUMENT_DETAIL_PAGE_A: `${TYPES.DE.name}:${FULL_NAMES.DE_VIEW_DOCUMENT_DETAIL_A},${TYPES.DE.name}:${FULL_NAMES.DE_ROUTE_DOCUMENT_DETAIL_A}`,
146+
};
147+
148+
export const TEST_SESSION_OPTIONS: TestSessionOptions = {
149+
project: {
150+
sourceDir: join(DEB_NUTS_PATH, DIR_NAMES.PROJECT),
151+
},
152+
devhubAuthStrategy: 'AUTO',
153+
scratchOrgs: [
154+
{
155+
setDefault: true,
156+
config: join('config', 'project-scratch-def.json'),
157+
},
158+
],
159+
};

0 commit comments

Comments
 (0)