From 85ef77e3a92f90c159660dafd76b60ef46475a5c Mon Sep 17 00:00:00 2001 From: Piotr Srebniak Date: Wed, 8 Nov 2023 09:46:20 +0100 Subject: [PATCH] #27: fix microsoftsharepointonline object schema --- API.md | 38 +++++++++++++++---- src/microsoftsharepointonline/source.ts | 25 +++++++++--- ...d-microsoftsharepointonline-to-s3.integ.ts | 2 +- test/microsoftsharepointonline/source.test.ts | 8 ++-- 4 files changed, 56 insertions(+), 17 deletions(-) diff --git a/API.md b/API.md index 9f89afad..ace979bf 100644 --- a/API.md +++ b/API.md @@ -6220,12 +6220,29 @@ const microsoftSharepointOnlineObject: MicrosoftSharepointOnlineObject = { ... } | **Name** | **Type** | **Description** | | --- | --- | --- | -| drives | string[] | An array of Microsoft Sharepoint Online site drives from which the documents are to be retrieved. | | site | string | The Microsoft Sharepoint Online site from which the documents are to be retrieved. | +| drives | string[] | An array of Microsoft Sharepoint Online site drives from which the documents are to be retrieved. | +| entities | string[] | An array of Microsoft Sharepoint Online site entities from which the documents are to be retrieved. | + +--- + +##### `site`Required + +```typescript +public readonly site: string; +``` + +- *Type:* string + +The Microsoft Sharepoint Online site from which the documents are to be retrieved. + +Note: requires full name starting with 'sites/' --- -##### `drives`Required +##### ~~`drives`~~Optional + +- *Deprecated:* . This property is deprecated and will be removed in a future release. Use {@link entities} instead ```typescript public readonly drives: string[]; @@ -6239,20 +6256,27 @@ Note: each drive requires full name starting with 'drives/' --- -##### `site`Required +##### `entities`Optional ```typescript -public readonly site: string; +public readonly entities: string[]; ``` -- *Type:* string +- *Type:* string[] -The Microsoft Sharepoint Online site from which the documents are to be retrieved. +An array of Microsoft Sharepoint Online site entities from which the documents are to be retrieved. -Note: requires full name starting with 'sites/' +Note: each entity requires full name starting with 'drives/' followed by driveID and optional '/items/' followed by itemID --- +*Example* + +```typescript +: 'drives/${driveID}/items/${itemID}' +``` + + ### MicrosoftSharepointOnlineRefreshTokenGrantFlow #### Initializer diff --git a/src/microsoftsharepointonline/source.ts b/src/microsoftsharepointonline/source.ts index cf5029d9..3cb0ed33 100644 --- a/src/microsoftsharepointonline/source.ts +++ b/src/microsoftsharepointonline/source.ts @@ -26,8 +26,18 @@ export interface MicrosoftSharepointOnlineObject { * An array of Microsoft Sharepoint Online site drives from which the documents are to be retrieved. * * Note: each drive requires full name starting with 'drives/' + * @deprecated. This property is deprecated and will be removed in a future release. Use {@link entities} instead */ - readonly drives: string[]; + readonly drives?: string[]; + + /** + * An array of Microsoft Sharepoint Online site entities from which the documents are to be retrieved. + * + * Note: each entity requires full name starting with 'drives/' followed by driveID and optional '/items/' followed by itemID + * @example: 'drives/${driveID}' + * @example: 'drives/${driveID}/items/${itemID}' + */ + readonly entities?: string[]; } /** @@ -65,15 +75,20 @@ export class MicrosoftSharepointOnlineSource implements ISource { private buildSourceConnectorProperties(): CfnFlow.SourceConnectorPropertiesProperty { - if (this.props.object.drives.length < 1) { - throw new Error('At least one drive must be specified'); + if (this.props.object.entities && this.props.object.drives) { + throw new Error('Only one of the properties entities or drives should be specified'); + } + + const entities = this.props.object.entities ?? this.props.object.drives ?? []; + if (entities.length < 1) { + throw new Error('At least one entity must be specified'); } return { customConnector: { entityName: this.props.object.site, customProperties: { - subEntities: `["${Fn.join('","', this.props.object.drives)}"]`, + subEntities: `["${Fn.join('","', entities)}"]`, }, }, }; @@ -84,4 +99,4 @@ export class MicrosoftSharepointOnlineSource implements ISource { scope.node.addDependency(resource); } } -} \ No newline at end of file +} diff --git a/test/integ/ondemand-microsoftsharepointonline-to-s3.integ.ts b/test/integ/ondemand-microsoftsharepointonline-to-s3.integ.ts index 9bb06cbe..94b3a7f8 100644 --- a/test/integ/ondemand-microsoftsharepointonline-to-s3.integ.ts +++ b/test/integ/ondemand-microsoftsharepointonline-to-s3.integ.ts @@ -34,7 +34,7 @@ const source = new MicrosoftSharepointOnlineSource({ apiVersion: MicrosoftSharepointOnlineApiVersion.V1, object: { site: secret.secretValueFromJson('site').toString(), - drives: [secret.secretValueFromJson('drive').toString()], + entities: [secret.secretValueFromJson('drive').toString()], }, }); diff --git a/test/microsoftsharepointonline/source.test.ts b/test/microsoftsharepointonline/source.test.ts index b443fde2..02f6992c 100644 --- a/test/microsoftsharepointonline/source.test.ts +++ b/test/microsoftsharepointonline/source.test.ts @@ -24,7 +24,7 @@ describe('MicrosoftSharepointOnlineSource', () => { profile: MicrosoftSharepointOnlineConnectorProfile.fromConnectionProfileName(stack, 'TestProfile', 'dummy-profile'), object: { site: 'sites/dummysite.sharepoint.com,3f42g340-bc23-4a31-b7e5-722e57c39cb8,5bbc39fb-2b17-423b-a007-40ca508389a5', - drives: ['drives/b!fcPDltwTLSougEJuDFjE?U5qHuXbkzlvSaA5oNoMW4tB0y6mebcx9m-ckwA9KtKE'], + entities: ['drives/b!fcPDltwTLSougEJuDFjE?U5qHuXbkzlvSaA5oNoMW4tB0y6mebcx9m-ckwA9KtKE'], }, apiVersion: MicrosoftSharepointOnlineApiVersion.V1, }); @@ -42,7 +42,7 @@ describe('MicrosoftSharepointOnlineSource', () => { profile: MicrosoftSharepointOnlineConnectorProfile.fromConnectionProfileName(stack, 'TestProfile', 'dummy-profile'), object: { site: 'sites/dummysite.sharepoint.com,3f42g340-bc23-4a31-b7e5-722e57c39cb8,5bbc39fb-2b17-423b-a007-40ca508389a5', - drives: ['drives/b!fcPDltwTLSougEJuDFjE?U5qHuXbkzlvSaA5oNoMW4tB0y6mebcx9m-ckwA9KtKE'], + entities: ['drives/b!fcPDltwTLSougEJuDFjE?U5qHuXbkzlvSaA5oNoMW4tB0y6mebcx9m-ckwA9KtKE'], }, apiVersion: MicrosoftSharepointOnlineApiVersion.V1, }); @@ -128,7 +128,7 @@ describe('MicrosoftSharepointOnlineSource', () => { profile: profile, object: { site: 'sites/dummysite.sharepoint.com,3f42g340-bc23-4a31-b7e5-722e57c39cb8,5bbc39fb-2b17-423b-a007-40ca508389a5', - drives: ['drives/b!fcPDltwTLSougEJuDFjE?U5qHuXbkzlvSaA5oNoMW4tB0y6mebcx9m-ckwA9KtKE'], + entities: ['drives/b!fcPDltwTLSougEJuDFjE?U5qHuXbkzlvSaA5oNoMW4tB0y6mebcx9m-ckwA9KtKE'], }, apiVersion: MicrosoftSharepointOnlineApiVersion.V1, }); @@ -227,4 +227,4 @@ describe('MicrosoftSharepointOnlineSource', () => { ], }); }); -}); \ No newline at end of file +});