From 190cbaf839d1053861f277fcf21ab3e4a3b3e492 Mon Sep 17 00:00:00 2001 From: cesarParra Date: Mon, 11 Nov 2024 13:00:10 -0400 Subject: [PATCH] New members include their descriptions (if present) --- examples/vitepress/docs/changelog.md | 2 +- .../vitepress/docs/custom-objects/Contact.md | 2 ++ .../Contact/fields/PhotoUrl__c.field-meta.xml | 1 + .../__test__/processing-changelog.spec.ts | 36 ++++++++++++++++++- src/core/changelog/process-changelog.ts | 10 ++++-- src/core/changelog/renderable-changelog.ts | 17 ++++++--- 6 files changed, 58 insertions(+), 10 deletions(-) diff --git a/examples/vitepress/docs/changelog.md b/examples/vitepress/docs/changelog.md index 48cb2485..d957d61d 100644 --- a/examples/vitepress/docs/changelog.md +++ b/examples/vitepress/docs/changelog.md @@ -75,4 +75,4 @@ These custom fields have been added or removed. ### Contact -- New Field: PhotoUrl__c \ No newline at end of file +- New Field: PhotoUrl__c. URL of the contact's photo \ No newline at end of file diff --git a/examples/vitepress/docs/custom-objects/Contact.md b/examples/vitepress/docs/custom-objects/Contact.md index 9f96853f..1297e574 100644 --- a/examples/vitepress/docs/custom-objects/Contact.md +++ b/examples/vitepress/docs/custom-objects/Contact.md @@ -10,6 +10,8 @@ title: Contact ## Fields ### PhotoUrl +URL of the contact's photo + **API Name** `apexdocs__PhotoUrl__c` diff --git a/examples/vitepress/force-app/main/default/objects/Contact/fields/PhotoUrl__c.field-meta.xml b/examples/vitepress/force-app/main/default/objects/Contact/fields/PhotoUrl__c.field-meta.xml index a9117781..aad01dc8 100644 --- a/examples/vitepress/force-app/main/default/objects/Contact/fields/PhotoUrl__c.field-meta.xml +++ b/examples/vitepress/force-app/main/default/objects/Contact/fields/PhotoUrl__c.field-meta.xml @@ -6,4 +6,5 @@ false false Url + URL of the contact's photo diff --git a/src/core/changelog/__test__/processing-changelog.spec.ts b/src/core/changelog/__test__/processing-changelog.spec.ts index 0168d724..b9b207b3 100644 --- a/src/core/changelog/__test__/processing-changelog.spec.ts +++ b/src/core/changelog/__test__/processing-changelog.spec.ts @@ -14,19 +14,25 @@ function apexTypeFromRawString(raw: string): Type { class CustomFieldMetadataBuilder { name: string = 'MyField'; + description: string | null = null; withName(name: string): CustomFieldMetadataBuilder { this.name = name; return this; } + withDescription(testDescription: string) { + this.description = testDescription; + return this; + } + build(): CustomFieldMetadata { return { type: 'Text', type_name: 'customfield', label: 'MyField', name: this.name, - description: null, + description: this.description, parentName: 'MyObject', }; } @@ -178,6 +184,7 @@ describe('when generating a changelog', () => { { __typename: 'NewField', name: newField.name, + description: null, }, ], }, @@ -605,6 +612,33 @@ describe('when generating a changelog', () => { { __typename: 'NewField', name: newField.name, + description: null, + }, + ], + }, + ]); + }); + + it('includes the description of new fields', () => { + const oldField = new CustomFieldMetadataBuilder().build(); + const newField = new CustomFieldMetadataBuilder() + .withName('NewField') + .withDescription('Test description') + .build(); + + const oldManifest = { types: [oldField] }; + const newManifest = { types: [oldField, newField] }; + + const changeLog = processChangelog(oldManifest, newManifest); + + expect(changeLog.customObjectModifications).toEqual([ + { + typeName: newField.parentName, + modifications: [ + { + __typename: 'NewField', + name: newField.name, + description: 'Test description', }, ], }, diff --git a/src/core/changelog/process-changelog.ts b/src/core/changelog/process-changelog.ts index c5ab2b30..d689db40 100644 --- a/src/core/changelog/process-changelog.ts +++ b/src/core/changelog/process-changelog.ts @@ -23,6 +23,7 @@ type ModificationTypes = export type MemberModificationType = { __typename: ModificationTypes; name: string; + description?: string | null | undefined; }; export type NewOrModifiedMember = { @@ -142,7 +143,10 @@ function getNewOrModifiedExtensionFields( ...previous.filter((parent) => parent.typeName !== parentName), { typeName: parentName, - modifications: [...additionsToParent, { __typename: 'NewField', name: currentField.name }], + modifications: [ + ...additionsToParent, + { __typename: 'NewField', name: currentField.name, description: currentField.description }, + ], }, ] as NewOrModifiedMember[]; }, [] as NewOrModifiedMember[]); @@ -284,6 +288,7 @@ function getCustomObjectsInBothVersions( type NameAware = { name: string; + description?: string | null; }; type AreEqualFn = (oldValue: T, newValue: T) => boolean; @@ -301,8 +306,7 @@ function getNewValues !oldPlaceToSearch[keyToSearch].some((oldValue) => areEqualFn(oldValue, newValue))) - .map((value) => value.name) - .map((name) => ({ __typename: typeName, name })); + .map(({ name, description }) => ({ __typename: typeName, name, description })); } function getRemovedValues, K extends keyof T>( diff --git a/src/core/changelog/renderable-changelog.ts b/src/core/changelog/renderable-changelog.ts index 7b898c8e..0b72ed1c 100644 --- a/src/core/changelog/renderable-changelog.ts +++ b/src/core/changelog/renderable-changelog.ts @@ -151,25 +151,32 @@ function toRenderableModification(newOrModifiedMember: NewOrModifiedMember): New } function toRenderableModificationDescription(memberModificationType: MemberModificationType): string { + function withDescription(memberModificationType: MemberModificationType): string { + if (memberModificationType.description) { + return `${memberModificationType.name}. ${memberModificationType.description}`; + } + return memberModificationType.name; + } + switch (memberModificationType.__typename) { case 'NewEnumValue': - return `New Enum Value: ${memberModificationType.name}`; + return `New Enum Value: ${withDescription(memberModificationType)}`; case 'RemovedEnumValue': return `Removed Enum Value: ${memberModificationType.name}`; case 'NewMethod': - return `New Method: ${memberModificationType.name}`; + return `New Method: ${withDescription(memberModificationType)}`; case 'RemovedMethod': return `Removed Method: ${memberModificationType.name}`; case 'NewProperty': - return `New Property: ${memberModificationType.name}`; + return `New Property: ${withDescription(memberModificationType)}`; case 'RemovedProperty': return `Removed Property: ${memberModificationType.name}`; case 'NewField': - return `New Field: ${memberModificationType.name}`; + return `New Field: ${withDescription(memberModificationType)}`; case 'RemovedField': return `Removed Field: ${memberModificationType.name}`; case 'NewType': - return `New Type: ${memberModificationType.name}`; + return `New Type: ${withDescription(memberModificationType)}`; case 'RemovedType': return `Removed Type: ${memberModificationType.name}`; }