Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@
*/
import * as path from 'path';
import { CreateUtil } from '../utils';
import { DxpSiteOptions } from '../utils/types';
import { DigitalExperienceSiteOptions } from '../utils/types';
import { BaseGenerator } from './baseGenerator';
import { nls } from '../i18n';

const TEMPLATE_ROOT = 'dxpsite';
const TEMPLATE_ROOT = 'digitalExperienceSite';

export default class DxpSiteGenerator extends BaseGenerator<DxpSiteOptions> {
export default class DigitalExperienceSiteGenerator extends BaseGenerator<DigitalExperienceSiteOptions> {
private uuidCache: Record<string, string> = {};

constructor(options: DxpSiteOptions) {
constructor(options: DigitalExperienceSiteOptions) {
super(options);
}

Expand Down
10 changes: 5 additions & 5 deletions src/utils/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import LightningComponentGenerator from '../generators/lightningComponentGenerat
import LightningEventGenerator from '../generators/lightningEventGenerator';
import LightningInterfaceGenerator from '../generators/lightningInterfaceGenerator';
import LightningTestGenerator from '../generators/lightningTestGenerator';
import DxpSiteGenerator from '../generators/dxpSiteGenerator';
import DigitalExperienceSiteGenerator from '../generators/digitalExperienceSiteGenerator';
import ProjectGenerator from '../generators/projectGenerator';
import StaticResourceGenerator from '../generators/staticResourceGenerator';
import VisualforceComponentGenerator from '../generators/visualforceComponentGenerator';
Expand All @@ -36,7 +36,7 @@ export type Generators =
| typeof LightningEventGenerator
| typeof LightningTestGenerator
| typeof LightningInterfaceGenerator
| typeof DxpSiteGenerator
| typeof DigitalExperienceSiteGenerator
| typeof ProjectGenerator
| typeof StaticResourceGenerator
| typeof VisualforceComponentGenerator
Expand All @@ -60,7 +60,7 @@ export enum TemplateType {
LightningEvent,
LightningInterface,
LightningTest,
DxpSite,
DigitalExperienceSite,
Project,
VisualforceComponent,
VisualforcePage,
Expand All @@ -78,7 +78,7 @@ export const generators = new Map<TemplateType, GeneratorClass<any>>([
[TemplateType.LightningEvent, LightningEventGenerator],
[TemplateType.LightningInterface, LightningInterfaceGenerator],
[TemplateType.LightningTest, LightningTestGenerator],
[TemplateType.DxpSite, DxpSiteGenerator],
[TemplateType.DigitalExperienceSite, DigitalExperienceSiteGenerator],
[TemplateType.Project, ProjectGenerator],
[TemplateType.StaticResource, StaticResourceGenerator],
[TemplateType.VisualforceComponent, VisualforceComponentGenerator],
Expand Down Expand Up @@ -219,7 +219,7 @@ export interface FlexipageOptions extends TemplateOptions {
detailFields?: string[]; // Fields to display in the Details tab field section (e.g., ['Name', 'Phone', 'Industry'])
}

export interface DxpSiteOptions extends TemplateOptions {
export interface DigitalExperienceSiteOptions extends TemplateOptions {
template: string;
sitename: string;
urlpathprefix: string;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@
import * as sinon from 'sinon';
import { expect } from 'chai';
import * as path from 'path';
import { CreateUtil, DxpSiteOptions } from '../../src';
import DxpSiteGenerator from '../../src/generators/dxpSiteGenerator';
import { CreateUtil, DigitalExperienceSiteOptions } from '../../src';
import DigitalExperienceSiteGenerator from '../../src/generators/digitalExperienceSiteGenerator';

describe('DxpSiteGenerator', () => {
const defaultMockInputs: DxpSiteOptions = {
template: 'build_your_own_lwr',
describe('DigitalExperienceSiteGenerator', () => {
const defaultMockInputs: DigitalExperienceSiteOptions = {
template: 'BuildYourOwnLWR',
sitename: 'TestSite',
urlpathprefix: 'testprefix',
adminemail: 'test@salesforce.com',
Expand All @@ -30,8 +30,13 @@ describe('DxpSiteGenerator', () => {
['empty string', ''],
].forEach(([description, urlpathprefix]) => {
it(`should accept urlpathprefix ${description}`, () => {
const options: DxpSiteOptions = { ...defaultMockInputs, urlpathprefix };
expect(() => new DxpSiteGenerator(options)).to.not.throw();
const options: DigitalExperienceSiteOptions = {
...defaultMockInputs,
urlpathprefix,
};
expect(
() => new DigitalExperienceSiteGenerator(options)
).to.not.throw();
});
});

Expand All @@ -41,17 +46,20 @@ describe('DxpSiteGenerator', () => {
['special characters', 'test@prefix!'],
].forEach(([description, urlpathprefix]) => {
it(`should reject urlpathprefix with ${description}`, () => {
const options: DxpSiteOptions = { ...defaultMockInputs, urlpathprefix };
expect(() => new DxpSiteGenerator(options)).to.throw(
const options: DigitalExperienceSiteOptions = {
...defaultMockInputs,
urlpathprefix,
};
expect(() => new DigitalExperienceSiteGenerator(options)).to.throw(
'url-path-prefix must contain only alphanumeric characters.'
);
});
});

it('should call CreateUtil.checkInputs for template validation', () => {
const checkInputsStub = sinon.stub(CreateUtil, 'checkInputs').returns('');
new DxpSiteGenerator(defaultMockInputs);
expect(checkInputsStub.calledOnceWith('build_your_own_lwr')).to.be.true;
new DigitalExperienceSiteGenerator(defaultMockInputs);
expect(checkInputsStub.calledOnceWith('BuildYourOwnLWR')).to.be.true;
});
});

Expand All @@ -60,12 +68,12 @@ describe('DxpSiteGenerator', () => {

beforeEach(() => {
renderStub = sinon
.stub(DxpSiteGenerator.prototype as any, 'render')
.stub(DigitalExperienceSiteGenerator.prototype as any, 'render')
.resolves();
});

it('should generate network file with correct path and variables', async () => {
const generator = new DxpSiteGenerator(defaultMockInputs);
const generator = new DigitalExperienceSiteGenerator(defaultMockInputs);
await generator.generate();

const networkCall = renderStub
Expand All @@ -85,7 +93,7 @@ describe('DxpSiteGenerator', () => {
});

it('should generate custom site file with correct path and variables', async () => {
const generator = new DxpSiteGenerator(defaultMockInputs);
const generator = new DigitalExperienceSiteGenerator(defaultMockInputs);
await generator.generate();

const siteCall = renderStub
Expand All @@ -103,7 +111,7 @@ describe('DxpSiteGenerator', () => {
});

it('should generate digital experience config file', async () => {
const generator = new DxpSiteGenerator(defaultMockInputs);
const generator = new DigitalExperienceSiteGenerator(defaultMockInputs);
await generator.generate();

const configCall = renderStub
Expand All @@ -121,7 +129,7 @@ describe('DxpSiteGenerator', () => {
});

it('should generate digital experience bundle meta', async () => {
const generator = new DxpSiteGenerator(defaultMockInputs);
const generator = new DigitalExperienceSiteGenerator(defaultMockInputs);
await generator.generate();

const metaCall = renderStub
Expand Down Expand Up @@ -150,7 +158,7 @@ describe('DxpSiteGenerator', () => {
'Too_Many_Requests',
].forEach((route) => {
it(`should generate route: ${route}`, async () => {
const generator = new DxpSiteGenerator(defaultMockInputs);
const generator = new DigitalExperienceSiteGenerator(defaultMockInputs);
await generator.generate();

const routeContentCall = renderStub
Expand Down Expand Up @@ -185,7 +193,7 @@ describe('DxpSiteGenerator', () => {
'tooManyRequests',
].forEach((view) => {
it(`should generate view: ${view}`, async () => {
const generator = new DxpSiteGenerator(defaultMockInputs);
const generator = new DigitalExperienceSiteGenerator(defaultMockInputs);
await generator.generate();

const viewContentCall = renderStub
Expand All @@ -211,7 +219,7 @@ describe('DxpSiteGenerator', () => {

['scopedHeaderAndFooter', 'snaThemeLayout'].forEach((layout) => {
it(`should generate theme layout: ${layout}`, async () => {
const generator = new DxpSiteGenerator(defaultMockInputs);
const generator = new DigitalExperienceSiteGenerator(defaultMockInputs);
await generator.generate();

const layoutContentCall = renderStub
Expand Down Expand Up @@ -248,7 +256,7 @@ describe('DxpSiteGenerator', () => {
['theme', 'sfdc_cms__theme', 'Build_Your_Own_LWR'],
].forEach(([name, type, folder]) => {
it(`should generate ${name} files`, async () => {
const generator = new DxpSiteGenerator(defaultMockInputs);
const generator = new DigitalExperienceSiteGenerator(defaultMockInputs);
await generator.generate();

const contentCall = renderStub
Expand All @@ -267,11 +275,11 @@ describe('DxpSiteGenerator', () => {
});

it('should generate site content with correct urlName transformation', async () => {
const options: DxpSiteOptions = {
const options: DigitalExperienceSiteOptions = {
...defaultMockInputs,
sitename: 'My "Test" Site!',
};
const generator = new DxpSiteGenerator(options);
const generator = new DigitalExperienceSiteGenerator(options);
await generator.generate();

const siteContentCall = renderStub
Expand All @@ -292,7 +300,7 @@ describe('DxpSiteGenerator', () => {

beforeEach(() => {
renderStub = sinon
.stub(DxpSiteGenerator.prototype as any, 'render')
.stub(DigitalExperienceSiteGenerator.prototype as any, 'render')
.resolves();
});

Expand All @@ -304,11 +312,11 @@ describe('DxpSiteGenerator', () => {
].forEach(
([description, sitename, expectedDevName, expectedPicassoDevName]) => {
it(`should transform site name: ${description}`, async () => {
const options: DxpSiteOptions = {
const options: DigitalExperienceSiteOptions = {
...defaultMockInputs,
sitename,
};
const generator = new DxpSiteGenerator(options);
const generator = new DigitalExperienceSiteGenerator(options);
await generator.generate();

const networkCall = renderStub
Expand All @@ -323,11 +331,11 @@ describe('DxpSiteGenerator', () => {
);

it('should encode special characters in network file name', async () => {
const options: DxpSiteOptions = {
const options: DigitalExperienceSiteOptions = {
...defaultMockInputs,
sitename: "Site ~!.'()@#$%&+= Name",
};
const generator = new DxpSiteGenerator(options);
const generator = new DigitalExperienceSiteGenerator(options);
await generator.generate();

const networkCall = renderStub
Expand All @@ -344,12 +352,12 @@ describe('DxpSiteGenerator', () => {

beforeEach(() => {
renderStub = sinon
.stub(DxpSiteGenerator.prototype as any, 'render')
.stub(DigitalExperienceSiteGenerator.prototype as any, 'render')
.resolves();
});

it('should generate valid UUID format', async () => {
const generator = new DxpSiteGenerator(defaultMockInputs);
const generator = new DigitalExperienceSiteGenerator(defaultMockInputs);
await generator.generate();

const viewContentCalls = renderStub
Expand All @@ -369,7 +377,7 @@ describe('DxpSiteGenerator', () => {
});

it('should cache UUIDs by key', async () => {
const generator = new DxpSiteGenerator(defaultMockInputs);
const generator = new DigitalExperienceSiteGenerator(defaultMockInputs);
await generator.generate();

const viewContentCalls = renderStub
Expand All @@ -390,7 +398,7 @@ describe('DxpSiteGenerator', () => {
});

it('should generate different UUIDs for different keys', async () => {
const generator = new DxpSiteGenerator(defaultMockInputs);
const generator = new DigitalExperienceSiteGenerator(defaultMockInputs);
await generator.generate();

const viewContentCalls = renderStub
Expand All @@ -410,7 +418,7 @@ describe('DxpSiteGenerator', () => {
});

it('should generate different UUIDs when called without key', async () => {
const generator = new DxpSiteGenerator(defaultMockInputs);
const generator = new DigitalExperienceSiteGenerator(defaultMockInputs);
await generator.generate();

const viewContentCalls = renderStub
Expand Down
Loading