diff --git a/src/datasets/domain/models/Dataset.ts b/src/datasets/domain/models/Dataset.ts index f879eb22..413062fc 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 + confidentialDeclaration?: 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..b7b26cfe 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 + confidentialDeclaration?: 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..fbb908aa 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), + confidentialDeclaration: transformPayloadText( + keepRawFields, + versionPayload.confidentialDeclaration + ), + 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/environment/.env b/test/environment/.env index 80e9a14e..e4f7111d 100644 --- a/test/environment/.env +++ b/test/environment/.env @@ -4,3 +4,4 @@ SOLR_VERSION=9.3.0 DATAVERSE_IMAGE_REGISTRY=docker.io DATAVERSE_IMAGE_TAG=unstable DATAVERSE_BOOTSTRAP_TIMEOUT=5m +STORAGE_DIR=/tmp/dataverse \ No newline at end of file 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/testHelpers/datasets/datasetHelper.ts b/test/testHelpers/datasets/datasetHelper.ts index 3c4bac4f..cb1c0c32 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', + confidentialDeclaration: 'Confidential 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', + confidentialDeclaration: 'Confidential declaration', + specialPermissions: 'Special permissions', + restrictions: 'Restrictions', + citationRequirements: 'Citation requirements', + depositorRequirements: 'Depositor requirements', + conditions: 'Conditions', + disclaimer: 'Disclaimer', metadataBlocks: { citation: { name: 'citation',