From 9ab1045543ef53f4edfc0101a93573661673a0f2 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Wed, 5 Feb 2025 09:54:49 -0500 Subject: [PATCH 1/3] feat: update Dataset model terms of use --- src/datasets/domain/models/Dataset.ts | 18 ++- src/datasets/index.ts | 3 +- .../transformers/datasetTransformers.ts | 51 ++++++-- test/functional/datasets/GetDataset.test.ts | 13 ++ test/testHelpers/datasets/datasetHelper.ts | 37 ++++-- test/unit/datasets/DatasetsRepository.test.ts | 120 ++++++++++++++++++ 6 files changed, 223 insertions(+), 19 deletions(-) diff --git a/src/datasets/domain/models/Dataset.ts b/src/datasets/domain/models/Dataset.ts index f879eb22..a9f6cc71 100644 --- a/src/datasets/domain/models/Dataset.ts +++ b/src/datasets/domain/models/Dataset.ts @@ -36,9 +36,19 @@ export interface DatasetLicense { iconUri?: string } -export interface TermsOfUse { +export interface CustomTerms { + termsOfUse: string + confidentialityDeclaration?: string + specialPermissions?: string + restrictions?: string + citationRequirements?: string + depositorRequirements?: string + conditions?: string + disclaimer?: string +} +export interface TermsOfAccess { fileAccessRequest: boolean - termsOfAccess?: string + termsOfAccessForRestrictedFiles?: string dataAccessPlace?: string originalArchive?: string availabilityStatus?: string @@ -47,6 +57,10 @@ export interface TermsOfUse { studyCompletion?: string } +export interface TermsOfUse { + termsOfAccess: TermsOfAccess + customTerms?: CustomTerms +} export type DatasetMetadataBlocks = [CitationMetadataBlock, ...DatasetMetadataBlock[]] export interface DatasetMetadataBlock { diff --git a/src/datasets/index.ts b/src/datasets/index.ts index 2eaaed5d..40533d37 100644 --- a/src/datasets/index.ts +++ b/src/datasets/index.ts @@ -73,7 +73,8 @@ export { DatasetMetadataBlocks, DatasetMetadataFields, DatasetMetadataSubField, - DatasetMetadataFieldValue + DatasetMetadataFieldValue, + TermsOfUse } from './domain/models/Dataset' export { DatasetPreview } from './domain/models/DatasetPreview' export { DatasetVersionDiff } from './domain/models/DatasetVersionDiff' diff --git a/src/datasets/infra/repositories/transformers/datasetTransformers.ts b/src/datasets/infra/repositories/transformers/datasetTransformers.ts index 6968e779..015fd003 100644 --- a/src/datasets/infra/repositories/transformers/datasetTransformers.ts +++ b/src/datasets/infra/repositories/transformers/datasetTransformers.ts @@ -235,14 +235,19 @@ export const transformVersionPayloadToDataset = ( releaseTime: new Date(versionPayload.releaseTime) }, termsOfUse: { - fileAccessRequest: versionPayload.fileAccessRequest, - termsOfAccess: versionPayload.termsOfAccess, - dataAccessPlace: versionPayload.dataAccessPlace, - originalArchive: versionPayload.originalArchive, - availabilityStatus: versionPayload.availabilityStatus, - contactForAccess: versionPayload.contactForAccess, - sizeOfCollection: versionPayload.sizeOfCollection, - studyCompletion: versionPayload.studyCompletion + termsOfAccess: { + fileAccessRequest: versionPayload.fileAccessRequest, + termsOfAccessForRestrictedFiles: transformPayloadText( + keepRawFields, + versionPayload.termsOfAccess + ), + dataAccessPlace: transformPayloadText(keepRawFields, versionPayload.dataAccessPlace), + originalArchive: transformPayloadText(keepRawFields, versionPayload.originalArchive), + availabilityStatus: transformPayloadText(keepRawFields, versionPayload.availabilityStatus), + contactForAccess: transformPayloadText(keepRawFields, versionPayload.contactForAccess), + sizeOfCollection: transformPayloadText(keepRawFields, versionPayload.sizeOfCollection), + studyCompletion: transformPayloadText(keepRawFields, versionPayload.studyCompletion) + } }, metadataBlocks: transformPayloadToDatasetMetadataBlocks( versionPayload.metadataBlocks, @@ -256,6 +261,26 @@ export const transformVersionPayloadToDataset = ( datasetModel.license = transformPayloadToDatasetLicense( versionPayload.license as LicensePayload ) + } else { + datasetModel.termsOfUse.customTerms = { + termsOfUse: transformPayloadText(keepRawFields, versionPayload.termsOfUse) as string, + confidentialityDeclaration: transformPayloadText( + keepRawFields, + versionPayload.confidentialityDeclaration + ), + specialPermissions: transformPayloadText(keepRawFields, versionPayload.specialPermissions), + restrictions: transformPayloadText(keepRawFields, versionPayload.restrictions), + citationRequirements: transformPayloadText( + keepRawFields, + versionPayload.citationRequirements + ), + depositorRequirements: transformPayloadText( + keepRawFields, + versionPayload.depositorRequirements + ), + conditions: transformPayloadText(keepRawFields, versionPayload.conditions), + disclaimer: transformPayloadText(keepRawFields, versionPayload.disclaimer) + } } if ('alternativePersistentId' in versionPayload) { datasetModel.alternativePersistentId = versionPayload.alternativePersistentId @@ -281,6 +306,16 @@ const transformPayloadToDatasetLicense = (licensePayload: LicensePayload): Datas return datasetLicense } +const transformPayloadText = ( + keepRawFields: boolean, + text: string | undefined +): string | undefined => { + if (!text) { + return undefined + } + return keepRawFields ? text : transformHtmlToMarkdown(text) +} + const transformPayloadToDatasetMetadataBlocks = ( metadataBlocksPayload: MetadataBlocksPayload, keepRawFields: boolean diff --git a/test/functional/datasets/GetDataset.test.ts b/test/functional/datasets/GetDataset.test.ts index 012393b2..25186b40 100644 --- a/test/functional/datasets/GetDataset.test.ts +++ b/test/functional/datasets/GetDataset.test.ts @@ -90,6 +90,19 @@ describe('execute', () => { await deleteUnpublishedDatasetViaApi(createdDatasetIdentifiers.numericId) }) + test('should return terms of use fields in markdown format when keepRawFields is false', async () => { + const versionPayload = createDatasetVersionPayload() + versionPayload.termsOfAccess = 'Hello world' + const dataset = transformVersionPayloadToDataset(versionPayload, false) + expect(dataset.termsOfUse.termsOfAccess.termsOfAccessForRestrictedFiles).toBe('Hello **world**') + }) + + test('should return terms of use fields in html format when keepRawFields is true', async () => { + const versionPayload = createDatasetVersionPayload() + const dataset = transformVersionPayloadToDataset(versionPayload, true) + expect(dataset.termsOfUse.termsOfAccess.contactForAccess).toBe(versionPayload.contactForAccess) + }) + test('should not return metadata fields in markdown format when keepRawFields is true', async () => { const createdDatasetIdentifiers = await createDataset.execute(testNewDataset) diff --git a/test/testHelpers/datasets/datasetHelper.ts b/test/testHelpers/datasets/datasetHelper.ts index 3c4bac4f..592139ef 100644 --- a/test/testHelpers/datasets/datasetHelper.ts +++ b/test/testHelpers/datasets/datasetHelper.ts @@ -53,14 +53,16 @@ export const createDatasetModel = ( releaseTime: new Date(DATASET_RELEASE_TIME_STR) }, termsOfUse: { - fileAccessRequest: true, - termsOfAccess: 'Terms of access', - dataAccessPlace: 'Data access place', - originalArchive: 'Original archive', - availabilityStatus: 'Availability status', - contactForAccess: 'Contact for access', - sizeOfCollection: 'Size of collection', - studyCompletion: 'Study completion' + termsOfAccess: { + fileAccessRequest: true, + termsOfAccessForRestrictedFiles: 'Terms of access', + dataAccessPlace: 'Data access place', + originalArchive: 'Original archive', + availabilityStatus: 'Availability status', + contactForAccess: 'Contact for access', + sizeOfCollection: 'Size of collection', + studyCompletion: 'Study completion' + } }, publicationDate: DATASET_PUBLICATION_DATE_STR, metadataBlocks: [ @@ -97,6 +99,17 @@ export const createDatasetModel = ( } if (license !== undefined) { datasetModel.license = license + } else { + datasetModel.termsOfUse.customTerms = { + termsOfUse: 'Terms of use', + confidentialityDeclaration: 'Confidentiality declaration', + specialPermissions: 'Special permissions', + restrictions: 'Restrictions', + citationRequirements: 'Citation requirements', + depositorRequirements: 'Depositor requirements', + conditions: 'Conditions', + disclaimer: 'Disclaimer' + } } if (addOptionalParameters) { datasetModel.alternativePersistentId = 'doi:10.5072/FK2/HC6KTB' @@ -129,6 +142,14 @@ export const createDatasetVersionPayload = ( contactForAccess: 'Contact for access', sizeOfCollection: 'Size of collection', studyCompletion: 'Study completion', + termsOfUse: 'Terms of use', + confidentialityDeclaration: 'Confidentiality declaration', + specialPermissions: 'Special permissions', + restrictions: 'Restrictions', + citationRequirements: 'Citation requirements', + depositorRequirements: 'Depositor requirements', + conditions: 'Conditions', + disclaimer: 'Disclaimer', metadataBlocks: { citation: { name: 'citation', diff --git a/test/unit/datasets/DatasetsRepository.test.ts b/test/unit/datasets/DatasetsRepository.test.ts index 55671c8b..396a2849 100644 --- a/test/unit/datasets/DatasetsRepository.test.ts +++ b/test/unit/datasets/DatasetsRepository.test.ts @@ -115,7 +115,127 @@ describe('DatasetsRepository', () => { TestConstants.TEST_EXPECTED_AUTHENTICATED_REQUEST_CONFIG_SESSION_COOKIE.withCredentials, headers: TestConstants.TEST_EXPECTED_AUTHENTICATED_REQUEST_CONFIG_SESSION_COOKIE.headers } + describe('with custom terms of use', () => { + test('should return Dataset with customTerms when license is undefined', async () => { + jest.spyOn(axios, 'get').mockResolvedValue(testDatasetVersionSuccessfulResponse) + const expectedApiEndpoint = `${TestConstants.TEST_API_URL}/datasets/${testDatasetModel.id}/versions/${testVersionId}` + + // API Key auth + let actual = await sut.getDataset( + testDatasetModel.id, + testVersionId, + testIncludeDeaccessioned, + false + ) + + expect(axios.get).toHaveBeenCalledWith(expectedApiEndpoint, expectedRequestConfigApiKey) + expect(actual).toStrictEqual(testDatasetModel) + + // Session cookie auth + ApiConfig.init(TestConstants.TEST_API_URL, DataverseApiAuthMechanism.SESSION_COOKIE) + actual = await sut.getDataset( + testDatasetModel.id, + testVersionId, + testIncludeDeaccessioned, + false + ) + expect(axios.get).toHaveBeenCalledWith( + expectedApiEndpoint, + expectedRequestConfigSessionCookie + ) + expect(actual).toStrictEqual(testDatasetModel) + }) + + test('should return Dataset when providing id, version id, and response with license is successful', async () => { + const testDatasetLicense = createDatasetLicenseModel() + const testDatasetVersionWithLicenseSuccessfulResponse = { + data: { + status: 'OK', + data: createDatasetVersionPayload(testDatasetLicense) + } + } + jest.spyOn(axios, 'get').mockResolvedValue(testDatasetVersionWithLicenseSuccessfulResponse) + + const actual = await sut.getDataset( + testDatasetModel.id, + testVersionId, + testIncludeDeaccessioned, + false + ) + + expect(axios.get).toHaveBeenCalledWith( + `${TestConstants.TEST_API_URL}/datasets/${testDatasetModel.id}/versions/${testVersionId}`, + expectedRequestConfigApiKey + ) + expect(actual).toStrictEqual(createDatasetModel(testDatasetLicense)) + }) + + test('should return Dataset when providing id, version id, and response with license without icon URI is successful', async () => { + const testDatasetLicenseWithoutIconUri = createDatasetLicenseModel(false) + const testDatasetVersionWithLicenseSuccessfulResponse = { + data: { + status: 'OK', + data: createDatasetVersionPayload(testDatasetLicenseWithoutIconUri) + } + } + jest.spyOn(axios, 'get').mockResolvedValue(testDatasetVersionWithLicenseSuccessfulResponse) + + const actual = await sut.getDataset( + testDatasetModel.id, + testVersionId, + testIncludeDeaccessioned, + false + ) + + expect(axios.get).toHaveBeenCalledWith( + `${TestConstants.TEST_API_URL}/datasets/${testDatasetModel.id}/versions/${testVersionId}`, + expectedRequestConfigApiKey + ) + expect(actual).toStrictEqual(createDatasetModel(testDatasetLicenseWithoutIconUri)) + }) + + test('should return dataset with alternative persistent id, publication date and citation date when they are present in the response', async () => { + const testDatasetVersionWithAlternativePersistentIdAndDatesSuccessfulResponse = { + data: { + status: 'OK', + data: createDatasetVersionPayload(undefined, true) + } + } + jest + .spyOn(axios, 'get') + .mockResolvedValue( + testDatasetVersionWithAlternativePersistentIdAndDatesSuccessfulResponse + ) + const actual = await sut.getDataset( + testDatasetModel.id, + testVersionId, + testIncludeDeaccessioned, + false + ) + + expect(axios.get).toHaveBeenCalledWith( + `${TestConstants.TEST_API_URL}/datasets/${testDatasetModel.id}/versions/${testVersionId}`, + expectedRequestConfigApiKey + ) + expect(actual).toStrictEqual(createDatasetModel(undefined, true)) + }) + + test('should return error on repository read error', async () => { + jest.spyOn(axios, 'get').mockRejectedValue(TestConstants.TEST_ERROR_RESPONSE) + + let error = undefined as unknown as ReadError + await sut + .getDataset(testDatasetModel.id, testVersionId, testIncludeDeaccessioned, false) + .catch((e) => (error = e)) + + expect(axios.get).toHaveBeenCalledWith( + `${TestConstants.TEST_API_URL}/datasets/${testDatasetModel.id}/versions/${testVersionId}`, + expectedRequestConfigApiKey + ) + expect(error).toBeInstanceOf(Error) + }) + }) describe('by numeric id', () => { test('should return Dataset when providing id, version id, and response is successful', async () => { jest.spyOn(axios, 'get').mockResolvedValue(testDatasetVersionSuccessfulResponse) From 03b7ae1a9a5d8fc40e2196475f8233233e198697 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Wed, 5 Feb 2025 10:32:53 -0500 Subject: [PATCH 2/3] fix: tests and remove console.logs() --- test/functional/datasets/GetDataset.test.ts | 18 +++++++++++++++--- test/testHelpers/datasets/datasetHelper.ts | 11 +++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/test/functional/datasets/GetDataset.test.ts b/test/functional/datasets/GetDataset.test.ts index 5ff15bc1..3c7bfc6e 100644 --- a/test/functional/datasets/GetDataset.test.ts +++ b/test/functional/datasets/GetDataset.test.ts @@ -76,7 +76,17 @@ describe('execute', () => { await expect(getDataset.execute(nonExistentTestDatasetId)).rejects.toThrow(expectedError) }) - + test('should not return custom terms if license is set', async () => { + const versionPayload = createDatasetVersionPayload() + versionPayload.license = { + name: 'CC0', + uri: 'https://creativecommons.org/publicdomain/zero/1.0/', + iconUri: 'https://creativecommons.org/publicdomain/zero/1.0/' + } + const dataset = transformVersionPayloadToDataset(versionPayload, false) + expect(dataset.termsOfUse.termsOfAccess.termsOfAccessForRestrictedFiles).toBe('Terms of access') + expect(dataset.termsOfUse.customTerms).toBe(undefined) + }) test('should return metadata fields in markdown format when keepRawFields is false', async () => { const createdDatasetIdentifiers = await createDataset.execute(testNewDataset) @@ -98,13 +108,15 @@ describe('execute', () => { const versionPayload = createDatasetVersionPayload() versionPayload.termsOfAccess = 'Hello world' const dataset = transformVersionPayloadToDataset(versionPayload, false) - expect(dataset.termsOfUse.termsOfAccess).toBe('Hello **world**') + expect(dataset.termsOfUse.termsOfAccess.termsOfAccessForRestrictedFiles).toBe('Hello **world**') }) test('should return terms of use fields in html format when keepRawFields is true', async () => { const versionPayload = createDatasetVersionPayload() const dataset = transformVersionPayloadToDataset(versionPayload, true) - expect(dataset.termsOfUse.termsOfAccess).toBe(versionPayload.termsOfAccess) + expect(dataset.termsOfUse.termsOfAccess.termsOfAccessForRestrictedFiles).toBe( + versionPayload.termsOfAccess + ) }) test('should not return metadata fields in markdown format when keepRawFields is true', async () => { diff --git a/test/testHelpers/datasets/datasetHelper.ts b/test/testHelpers/datasets/datasetHelper.ts index f6b28557..592139ef 100644 --- a/test/testHelpers/datasets/datasetHelper.ts +++ b/test/testHelpers/datasets/datasetHelper.ts @@ -99,6 +99,17 @@ export const createDatasetModel = ( } if (license !== undefined) { datasetModel.license = license + } else { + datasetModel.termsOfUse.customTerms = { + termsOfUse: 'Terms of use', + confidentialityDeclaration: 'Confidentiality declaration', + specialPermissions: 'Special permissions', + restrictions: 'Restrictions', + citationRequirements: 'Citation requirements', + depositorRequirements: 'Depositor requirements', + conditions: 'Conditions', + disclaimer: 'Disclaimer' + } } if (addOptionalParameters) { datasetModel.alternativePersistentId = 'doi:10.5072/FK2/HC6KTB' From 3479bb13ade3caa20df7a3f7e42e1a39ea0da44d Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Thu, 6 Feb 2025 14:28:45 -0500 Subject: [PATCH 3/3] fix: datasetTransformers.ts tests --- .../transformers/datasetTransformers.ts | 9 +- test/functional/datasets/GetDataset.test.ts | 6 ++ test/testHelpers/datasets/datasetHelper.ts | 17 ++-- test/unit/datasets/DatasetsRepository.test.ts | 96 ++++--------------- 4 files changed, 40 insertions(+), 88 deletions(-) diff --git a/src/datasets/infra/repositories/transformers/datasetTransformers.ts b/src/datasets/infra/repositories/transformers/datasetTransformers.ts index 015fd003..b9e19378 100644 --- a/src/datasets/infra/repositories/transformers/datasetTransformers.ts +++ b/src/datasets/infra/repositories/transformers/datasetTransformers.ts @@ -294,7 +294,13 @@ export const transformVersionPayloadToDataset = ( return datasetModel } -const transformPayloadToDatasetLicense = (licensePayload: LicensePayload): DatasetLicense => { +const transformPayloadToDatasetLicense = ( + licensePayload: LicensePayload +): DatasetLicense | undefined => { + if (!licensePayload) { + return undefined + } + const datasetLicense: DatasetLicense = { name: licensePayload.name, uri: licensePayload.uri @@ -303,6 +309,7 @@ const transformPayloadToDatasetLicense = (licensePayload: LicensePayload): Datas if ('iconUri' in licensePayload) { datasetLicense.iconUri = licensePayload.iconUri } + return datasetLicense } diff --git a/test/functional/datasets/GetDataset.test.ts b/test/functional/datasets/GetDataset.test.ts index 3c7bfc6e..771e432d 100644 --- a/test/functional/datasets/GetDataset.test.ts +++ b/test/functional/datasets/GetDataset.test.ts @@ -87,6 +87,12 @@ describe('execute', () => { expect(dataset.termsOfUse.termsOfAccess.termsOfAccessForRestrictedFiles).toBe('Terms of access') expect(dataset.termsOfUse.customTerms).toBe(undefined) }) + test('should return custom terms if license is undefined', async () => { + const versionPayload = createDatasetVersionPayload() + const dataset = transformVersionPayloadToDataset(versionPayload, false) + expect(dataset.termsOfUse.termsOfAccess.termsOfAccessForRestrictedFiles).toBe('Terms of access') + expect(dataset.termsOfUse.customTerms?.termsOfUse).toBe('Terms of use') + }) test('should return metadata fields in markdown format when keepRawFields is false', async () => { const createdDatasetIdentifiers = await createDataset.execute(testNewDataset) diff --git a/test/testHelpers/datasets/datasetHelper.ts b/test/testHelpers/datasets/datasetHelper.ts index 592139ef..66a24da8 100644 --- a/test/testHelpers/datasets/datasetHelper.ts +++ b/test/testHelpers/datasets/datasetHelper.ts @@ -142,14 +142,6 @@ export const createDatasetVersionPayload = ( contactForAccess: 'Contact for access', sizeOfCollection: 'Size of collection', studyCompletion: 'Study completion', - termsOfUse: 'Terms of use', - confidentialityDeclaration: 'Confidentiality declaration', - specialPermissions: 'Special permissions', - restrictions: 'Restrictions', - citationRequirements: 'Citation requirements', - depositorRequirements: 'Depositor requirements', - conditions: 'Conditions', - disclaimer: 'Disclaimer', metadataBlocks: { citation: { name: 'citation', @@ -245,6 +237,15 @@ export const createDatasetVersionPayload = ( } if (license !== undefined) { datasetPayload.license = license + } else { + datasetPayload.termsOfUse = 'Terms of use' + datasetPayload.confidentialityDeclaration = 'Confidentiality declaration' + datasetPayload.specialPermissions = 'Special permissions' + datasetPayload.restrictions = 'Restrictions' + datasetPayload.citationRequirements = 'Citation requirements' + datasetPayload.depositorRequirements = 'Depositor requirements' + datasetPayload.conditions = 'Conditions' + datasetPayload.disclaimer = 'Disclaimer' } if (addOptionalProperties) { datasetPayload.alternativePersistentId = 'doi:10.5072/FK2/HC6KTB' diff --git a/test/unit/datasets/DatasetsRepository.test.ts b/test/unit/datasets/DatasetsRepository.test.ts index 396a2849..50d5b3cd 100644 --- a/test/unit/datasets/DatasetsRepository.test.ts +++ b/test/unit/datasets/DatasetsRepository.test.ts @@ -115,8 +115,9 @@ describe('DatasetsRepository', () => { TestConstants.TEST_EXPECTED_AUTHENTICATED_REQUEST_CONFIG_SESSION_COOKIE.withCredentials, headers: TestConstants.TEST_EXPECTED_AUTHENTICATED_REQUEST_CONFIG_SESSION_COOKIE.headers } - describe('with custom terms of use', () => { - test('should return Dataset with customTerms when license is undefined', async () => { + + describe('by numeric id', () => { + test('should return Dataset when providing id, version id, and response is successful', async () => { jest.spyOn(axios, 'get').mockResolvedValue(testDatasetVersionSuccessfulResponse) const expectedApiEndpoint = `${TestConstants.TEST_API_URL}/datasets/${testDatasetModel.id}/versions/${testVersionId}` @@ -220,24 +221,7 @@ describe('DatasetsRepository', () => { ) expect(actual).toStrictEqual(createDatasetModel(undefined, true)) }) - - test('should return error on repository read error', async () => { - jest.spyOn(axios, 'get').mockRejectedValue(TestConstants.TEST_ERROR_RESPONSE) - - let error = undefined as unknown as ReadError - await sut - .getDataset(testDatasetModel.id, testVersionId, testIncludeDeaccessioned, false) - .catch((e) => (error = e)) - - expect(axios.get).toHaveBeenCalledWith( - `${TestConstants.TEST_API_URL}/datasets/${testDatasetModel.id}/versions/${testVersionId}`, - expectedRequestConfigApiKey - ) - expect(error).toBeInstanceOf(Error) - }) - }) - describe('by numeric id', () => { - test('should return Dataset when providing id, version id, and response is successful', async () => { + test('should return Dataset with customTerms when license is undefined', async () => { jest.spyOn(axios, 'get').mockResolvedValue(testDatasetVersionSuccessfulResponse) const expectedApiEndpoint = `${TestConstants.TEST_API_URL}/datasets/${testDatasetModel.id}/versions/${testVersionId}` @@ -266,80 +250,34 @@ describe('DatasetsRepository', () => { ) expect(actual).toStrictEqual(testDatasetModel) }) + test('should return Dataset without customTerms when license is defined', async () => { + jest.spyOn(axios, 'get').mockResolvedValue(testDatasetVersionSuccessfulResponse) + const expectedApiEndpoint = `${TestConstants.TEST_API_URL}/datasets/${testDatasetModel.id}/versions/${testVersionId}` - test('should return Dataset when providing id, version id, and response with license is successful', async () => { - const testDatasetLicense = createDatasetLicenseModel() - const testDatasetVersionWithLicenseSuccessfulResponse = { - data: { - status: 'OK', - data: createDatasetVersionPayload(testDatasetLicense) - } - } - jest.spyOn(axios, 'get').mockResolvedValue(testDatasetVersionWithLicenseSuccessfulResponse) - - const actual = await sut.getDataset( - testDatasetModel.id, - testVersionId, - testIncludeDeaccessioned, - false - ) - - expect(axios.get).toHaveBeenCalledWith( - `${TestConstants.TEST_API_URL}/datasets/${testDatasetModel.id}/versions/${testVersionId}`, - expectedRequestConfigApiKey - ) - expect(actual).toStrictEqual(createDatasetModel(testDatasetLicense)) - }) - - test('should return Dataset when providing id, version id, and response with license without icon URI is successful', async () => { - const testDatasetLicenseWithoutIconUri = createDatasetLicenseModel(false) - const testDatasetVersionWithLicenseSuccessfulResponse = { - data: { - status: 'OK', - data: createDatasetVersionPayload(testDatasetLicenseWithoutIconUri) - } - } - jest.spyOn(axios, 'get').mockResolvedValue(testDatasetVersionWithLicenseSuccessfulResponse) - - const actual = await sut.getDataset( + // API Key auth + let actual = await sut.getDataset( testDatasetModel.id, testVersionId, testIncludeDeaccessioned, false ) - expect(axios.get).toHaveBeenCalledWith( - `${TestConstants.TEST_API_URL}/datasets/${testDatasetModel.id}/versions/${testVersionId}`, - expectedRequestConfigApiKey - ) - expect(actual).toStrictEqual(createDatasetModel(testDatasetLicenseWithoutIconUri)) - }) - - test('should return dataset with alternative persistent id, publication date and citation date when they are present in the response', async () => { - const testDatasetVersionWithAlternativePersistentIdAndDatesSuccessfulResponse = { - data: { - status: 'OK', - data: createDatasetVersionPayload(undefined, true) - } - } - jest - .spyOn(axios, 'get') - .mockResolvedValue( - testDatasetVersionWithAlternativePersistentIdAndDatesSuccessfulResponse - ) + expect(axios.get).toHaveBeenCalledWith(expectedApiEndpoint, expectedRequestConfigApiKey) + expect(actual).toStrictEqual(testDatasetModel) - const actual = await sut.getDataset( + // Session cookie auth + ApiConfig.init(TestConstants.TEST_API_URL, DataverseApiAuthMechanism.SESSION_COOKIE) + actual = await sut.getDataset( testDatasetModel.id, testVersionId, testIncludeDeaccessioned, false ) - expect(axios.get).toHaveBeenCalledWith( - `${TestConstants.TEST_API_URL}/datasets/${testDatasetModel.id}/versions/${testVersionId}`, - expectedRequestConfigApiKey + expectedApiEndpoint, + expectedRequestConfigSessionCookie ) - expect(actual).toStrictEqual(createDatasetModel(undefined, true)) + expect(actual).toStrictEqual(testDatasetModel) }) test('should return error on repository read error', async () => {