diff --git a/src/datasets/domain/models/Dataset.ts b/src/datasets/domain/models/Dataset.ts index f879eb22..819b3dd8 100644 --- a/src/datasets/domain/models/Dataset.ts +++ b/src/datasets/domain/models/Dataset.ts @@ -45,6 +45,14 @@ export interface TermsOfUse { contactForAccess?: string sizeOfCollection?: string studyCompletion?: string + termsOfUse?: string + confidentialityDeclaration?: string + specialPermissions?: string + restrictions?: string + citationRequirements?: string + depositorRequirements?: string + conditions?: string + disclaimer?: string } export type DatasetMetadataBlocks = [CitationMetadataBlock, ...DatasetMetadataBlock[]] diff --git a/src/datasets/infra/repositories/transformers/DatasetPayload.ts b/src/datasets/infra/repositories/transformers/DatasetPayload.ts index 8619c21f..db359a4f 100644 --- a/src/datasets/infra/repositories/transformers/DatasetPayload.ts +++ b/src/datasets/infra/repositories/transformers/DatasetPayload.ts @@ -24,6 +24,14 @@ export interface DatasetPayload { contactForAccess?: string sizeOfCollection?: string studyCompletion?: string + termsOfUse?: string + confidentialityDeclaration?: string + specialPermissions?: string + restrictions?: string + citationRequirements?: string + depositorRequirements?: string + conditions?: string + disclaimer?: string files: FilePayload[] isPartOf: OwnerNodePayload } diff --git a/src/datasets/infra/repositories/transformers/datasetTransformers.ts b/src/datasets/infra/repositories/transformers/datasetTransformers.ts index 6968e779..22c06b35 100644 --- a/src/datasets/infra/repositories/transformers/datasetTransformers.ts +++ b/src/datasets/infra/repositories/transformers/datasetTransformers.ts @@ -236,13 +236,30 @@ export const transformVersionPayloadToDataset = ( }, 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: 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), + termsOfUse: transformPayloadText(keepRawFields, versionPayload.termsOfUse), + 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) }, metadataBlocks: transformPayloadToDatasetMetadataBlocks( versionPayload.metadataBlocks, @@ -281,6 +298,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..5ff15bc1 100644 --- a/test/functional/datasets/GetDataset.test.ts +++ b/test/functional/datasets/GetDataset.test.ts @@ -1,8 +1,12 @@ import { ApiConfig, createDataset, getDataset, ReadError } from '../../../src' import { DataverseApiAuthMechanism } from '../../../src/core/infra/repositories/ApiConfig' import { DatasetDescription } from '../../../src/datasets/domain/models/Dataset' -import { deleteUnpublishedDatasetViaApi } from '../../testHelpers/datasets/datasetHelper' +import { + createDatasetVersionPayload, + deleteUnpublishedDatasetViaApi +} from '../../testHelpers/datasets/datasetHelper' import { TestConstants } from '../../testHelpers/TestConstants' +import { transformVersionPayloadToDataset } from '../../../src/datasets/infra/repositories/transformers/datasetTransformers' const testNewDataset = { metadataBlockValues: [ @@ -90,6 +94,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).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) + }) + test('should not return metadata fields in markdown format when keepRawFields is true', async () => { const createdDatasetIdentifiers = await createDataset.execute(testNewDataset) diff --git a/test/functional/metadataBlocks/GetAllFacetableMetadataFields.test.ts b/test/functional/metadataBlocks/GetAllFacetableMetadataFields.test.ts index 3678cee7..44dc67f9 100644 --- a/test/functional/metadataBlocks/GetAllFacetableMetadataFields.test.ts +++ b/test/functional/metadataBlocks/GetAllFacetableMetadataFields.test.ts @@ -18,7 +18,7 @@ describe('execute', () => { } catch (error) { throw new Error('Should not raise an error') } finally { - expect(metadataFieldInfos?.length).toBe(59) + expect(metadataFieldInfos?.length).toBe(64) expect(metadataFieldInfos?.[0].name).toBe('authorName') expect(metadataFieldInfos?.[0].displayName).toBe('Author Name') } diff --git a/test/functional/metadataBlocks/GetAllMetadataBlocks.test.ts b/test/functional/metadataBlocks/GetAllMetadataBlocks.test.ts index a8bfab2c..8b72a9d3 100644 --- a/test/functional/metadataBlocks/GetAllMetadataBlocks.test.ts +++ b/test/functional/metadataBlocks/GetAllMetadataBlocks.test.ts @@ -19,7 +19,7 @@ describe('execute', () => { throw new Error('Should not raise an error') } finally { expect(metadataBlocks).not.toBeNull() - expect(metadataBlocks?.length).toBe(6) + expect(metadataBlocks?.length).toBe(7) expect(metadataBlocks?.[0].metadataFields.title.name).toBe('title') } }) diff --git a/test/integration/metadataBlocks/MetadataBlocksRepository.test.ts b/test/integration/metadataBlocks/MetadataBlocksRepository.test.ts index 3cf9a002..0adab583 100644 --- a/test/integration/metadataBlocks/MetadataBlocksRepository.test.ts +++ b/test/integration/metadataBlocks/MetadataBlocksRepository.test.ts @@ -59,7 +59,7 @@ describe('MetadataBlocksRepository', () => { describe('getAllMetadataBlocks', () => { test('should return all metadata blocks', async () => { const actual = await sut.getAllMetadataBlocks() - expect(actual.length).toBe(6) + expect(actual.length).toBe(7) expect(actual[0].name).toBe(citationMetadataBlockName) expect(actual[0].metadataFields.title.name).toBe('title') }) diff --git a/test/integration/metadataBlocks/MetadataFieldsInfoRepository.test.ts b/test/integration/metadataBlocks/MetadataFieldsInfoRepository.test.ts index ffd2e394..de94eb7c 100644 --- a/test/integration/metadataBlocks/MetadataFieldsInfoRepository.test.ts +++ b/test/integration/metadataBlocks/MetadataFieldsInfoRepository.test.ts @@ -19,7 +19,7 @@ describe('getAllFacetableMetadataFields', () => { test('should return all facetable metadata fields', async () => { const actual = await sut.getAllFacetableMetadataFields() - expect(actual.length).toBe(59) + expect(actual.length).toBe(64) expect(actual[0].name).toBe('authorName') expect(actual[0].displayName).toBe('Author Name') }) diff --git a/test/testHelpers/datasets/datasetHelper.ts b/test/testHelpers/datasets/datasetHelper.ts index 3c4bac4f..50e4e1d1 100644 --- a/test/testHelpers/datasets/datasetHelper.ts +++ b/test/testHelpers/datasets/datasetHelper.ts @@ -60,7 +60,15 @@ export const createDatasetModel = ( availabilityStatus: 'Availability status', contactForAccess: 'Contact for access', sizeOfCollection: 'Size of collection', - studyCompletion: 'Study completion' + 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' }, publicationDate: DATASET_PUBLICATION_DATE_STR, metadataBlocks: [ @@ -129,6 +137,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',