Skip to content

Commit 39c8599

Browse files
committed
Platform event documentation support.
1 parent b3723a0 commit 39c8599

File tree

12 files changed

+118
-1
lines changed

12 files changed

+118
-1
lines changed

examples/vitepress/docs/.vitepress/sidebar.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,10 @@
9494
"text": "Sample_Custom_Setting__c",
9595
"link": "custom-objects/Sample_Custom_Setting__c.md"
9696
},
97+
{
98+
"text": "Sample_Platform_Event__e",
99+
"link": "custom-objects/Sample_Platform_Event__e.md"
100+
},
97101
{
98102
"text": "Speaker__c",
99103
"link": "custom-objects/Speaker__c.md"

examples/vitepress/docs/changelog.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ Represents a line item on a sales order.
7171
Custom object for tracking sales orders.
7272
### Sample_Custom_Setting__c
7373

74+
### Sample_Platform_Event__e
75+
76+
Eu excepteur irure occaecat adipisicing anim non consequat deserunt ipsum id amet eu. Labore aliqua incididunt anim id in aliquip sit excepteur ad dolor irure incididunt. Ipsum eiusmod cillum ex ullamco minim eu nisi dolore ad velit consequat ullamco elit tempor. Occaecat aliquip ex mollit nostrud qui excepteur non commodo dolore ullamco ex voluptate ut. Culpa nostrud reprehenderit ipsum do. Sit deserunt sint occaecat duis eiusmod. Sunt laborum fugiat nulla.
7477
### Speaker__c
7578

7679
Represents a speaker at an event.

examples/vitepress/docs/index.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ Represents a line item on a sales order.
4747

4848
### [Sample_Custom_Setting__c](custom-objects/Sample_Custom_Setting__c)
4949

50+
### [Sample_Platform_Event__e](custom-objects/Sample_Platform_Event__e)
51+
52+
Eu excepteur irure occaecat adipisicing anim non consequat deserunt ipsum id amet eu. Labore aliqua incididunt anim id in aliquip sit excepteur ad dolor irure incididunt. Ipsum eiusmod cillum ex ullamco minim eu nisi dolore ad velit consequat ullamco elit tempor. Occaecat aliquip ex mollit nostrud qui excepteur non commodo dolore ullamco ex voluptate ut. Culpa nostrud reprehenderit ipsum do. Sit deserunt sint occaecat duis eiusmod. Sunt laborum fugiat nulla.
53+
5054
### [Speaker__c](custom-objects/Speaker__c)
5155

5256
Represents a speaker at an event.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
3+
<deploymentStatus>Deployed</deploymentStatus>
4+
<description>Eu excepteur irure occaecat adipisicing anim non consequat deserunt ipsum id amet eu. Labore aliqua incididunt anim id in aliquip sit excepteur ad dolor irure incididunt. Ipsum eiusmod cillum ex ullamco minim eu nisi dolore ad velit consequat ullamco elit tempor. Occaecat aliquip ex mollit nostrud qui excepteur non commodo dolore ullamco ex voluptate ut. Culpa nostrud reprehenderit ipsum do. Sit deserunt sint occaecat duis eiusmod. Sunt laborum fugiat nulla.</description>
5+
<eventType>HighVolume</eventType>
6+
<label>Sample Platform Event</label>
7+
<pluralLabel>Sample Platform Events</pluralLabel>
8+
<publishBehavior>PublishImmediately</publishBehavior>
9+
</CustomObject>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
3+
<fullName>Required_Platform_Event_Field__c</fullName>
4+
<externalId>false</externalId>
5+
<isFilteringDisabled>false</isFilteringDisabled>
6+
<isNameField>false</isNameField>
7+
<isSortingDisabled>false</isSortingDisabled>
8+
<label>Required Platform Event Field</label>
9+
<required>true</required>
10+
<type>Date</type>
11+
</CustomField>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
3+
<fullName>Sample_Platform_Event_Field__c</fullName>
4+
<externalId>false</externalId>
5+
<isFilteringDisabled>false</isFilteringDisabled>
6+
<isNameField>false</isNameField>
7+
<isSortingDisabled>false</isSortingDisabled>
8+
<label>Sample Platform Event Field</label>
9+
<length>255</length>
10+
<required>false</required>
11+
<type>Text</type>
12+
<unique>false</unique>
13+
</CustomField>

src/core/markdown/__test__/generating-custom-object-docs.spec.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
unparsedFieldBundleFromRawString,
77
} from '../../test-helpers/test-data-builders';
88
import { CustomObjectXmlBuilder } from '../../test-helpers/test-data-builders/custom-object-xml-builder';
9+
import { PlatformEventXmlBuilder } from '../../test-helpers/test-data-builders/platform-event-xml-builder';
910

1011
describe('Generates Custom Object documentation', () => {
1112
beforeAll(() => {
@@ -207,5 +208,29 @@ describe('Generates Custom Object documentation', () => {
207208
assertEither(result, (data) => expect(data).firstDocContains('TestObject.TestField__c'));
208209
});
209210
});
211+
212+
describe('when documenting Platform Events', () => {
213+
test('displays the publish behavior (publish immediately)', async () => {
214+
const customObjectBundle = unparsedObjectBundleFromRawString({
215+
rawContent: new PlatformEventXmlBuilder().build(),
216+
filePath: 'src/object/TestObject__e.object-meta.xml',
217+
});
218+
219+
const result = await generateDocs([customObjectBundle])();
220+
expect(result).documentationBundleHasLength(1);
221+
assertEither(result, (data) => expect(data).firstDocContains('Publish Immediately'));
222+
});
223+
224+
test('displays the publish behavior (publish after commit)', async () => {
225+
const customObjectBundle = unparsedObjectBundleFromRawString({
226+
rawContent: new PlatformEventXmlBuilder().withPublishBehavior('PublishAfterCommit').build(),
227+
filePath: 'src/object/TestObject__e.object-meta.xml',
228+
});
229+
230+
const result = await generateDocs([customObjectBundle])();
231+
expect(result).documentationBundleHasLength(1);
232+
assertEither(result, (data) => expect(data).firstDocContains('Publish After Commit'));
233+
});
234+
});
210235
});
211236
});

src/core/markdown/adapters/type-to-renderable.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import { adaptConstructor, adaptMethod } from './methods-and-constructors';
1919
import { adaptFieldOrProperty } from './fields-and-properties';
2020
import { MarkdownGeneratorConfig } from '../generate-docs';
2121
import { ExternalMetadata, SourceFileMetadata } from '../../shared/types';
22-
import { CustomObjectMetadata } from '../../reflection/sobject/reflect-custom-object-sources';
22+
import { CustomObjectMetadata, PublishBehavior } from '../../reflection/sobject/reflect-custom-object-sources';
2323
import { getTypeGroup, isInSource } from '../../shared/utils';
2424
import { CustomFieldMetadata } from '../../reflection/sobject/reflect-custom-field-source';
2525
import { CustomMetadataMetadata } from '../../reflection/sobject/reflect-custom-metadata-source';
@@ -252,6 +252,17 @@ function objectMetadataToRenderable(
252252
objectMetadata: CustomObjectMetadata,
253253
config: MarkdownGeneratorConfig,
254254
): RenderableCustomObject {
255+
function toRenderablePublishBehavior(publishBehavior: PublishBehavior | undefined): string | null {
256+
switch (publishBehavior) {
257+
case 'PublishImmediately':
258+
return 'Publish Immediately';
259+
case 'PublishAfterCommit':
260+
return 'Publish After Commit';
261+
default:
262+
return null;
263+
}
264+
}
265+
255266
return {
256267
type: 'customobject',
257268
headingLevel: 1,
@@ -274,6 +285,7 @@ function objectMetadataToRenderable(
274285
heading: 'Records',
275286
value: objectMetadata.metadataRecords.map((metadata) => customMetadataToRenderable(metadata, 3)),
276287
},
288+
publishBehavior: toRenderablePublishBehavior(objectMetadata.publishBehavior),
277289
};
278290
}
279291

src/core/markdown/templates/custom-object-template.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ export const customObjectTemplate = `
66
## API Name
77
\`{{apiName}}\`
88
9+
{{#if publishBehavior}}
10+
## Publish Behavior
11+
12+
**{{publishBehavior}}**
13+
{{/if}}
14+
915
{{#if hasFields}}
1016
{{ heading fields.headingLevel fields.heading }}
1117
{{#each fields.value}}

src/core/reflection/sobject/reflect-custom-object-sources.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import { CustomFieldMetadata } from './reflect-custom-field-source';
1111
import { getPickListValues } from './parse-picklist-values';
1212
import { CustomMetadataMetadata } from './reflect-custom-metadata-source';
1313

14+
export type PublishBehavior = 'PublishImmediately' | 'PublishAfterCommit';
15+
1416
export type CustomObjectMetadata = {
1517
type_name: 'customobject';
1618
deploymentStatus: string;
@@ -20,6 +22,7 @@ export type CustomObjectMetadata = {
2022
description: string | null;
2123
fields: CustomFieldMetadata[];
2224
metadataRecords: CustomMetadataMetadata[];
25+
publishBehavior?: PublishBehavior;
2326
};
2427

2528
export function reflectCustomObjectSources(

0 commit comments

Comments
 (0)