Skip to content

Commit 3ebfc7d

Browse files
authored
Merge pull request #248 from IQSS/feat/247-custom-terms-of-use
Get Dataset: add custom terms of use
2 parents 19924ed + 539112d commit 3ebfc7d

File tree

9 files changed

+89
-13
lines changed

9 files changed

+89
-13
lines changed

src/datasets/domain/models/Dataset.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,14 @@ export interface TermsOfUse {
4545
contactForAccess?: string
4646
sizeOfCollection?: string
4747
studyCompletion?: string
48+
termsOfUse?: string
49+
confidentialityDeclaration?: string
50+
specialPermissions?: string
51+
restrictions?: string
52+
citationRequirements?: string
53+
depositorRequirements?: string
54+
conditions?: string
55+
disclaimer?: string
4856
}
4957

5058
export type DatasetMetadataBlocks = [CitationMetadataBlock, ...DatasetMetadataBlock[]]

src/datasets/infra/repositories/transformers/DatasetPayload.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,14 @@ export interface DatasetPayload {
2424
contactForAccess?: string
2525
sizeOfCollection?: string
2626
studyCompletion?: string
27+
termsOfUse?: string
28+
confidentialityDeclaration?: string
29+
specialPermissions?: string
30+
restrictions?: string
31+
citationRequirements?: string
32+
depositorRequirements?: string
33+
conditions?: string
34+
disclaimer?: string
2735
files: FilePayload[]
2836
isPartOf: OwnerNodePayload
2937
}

src/datasets/infra/repositories/transformers/datasetTransformers.ts

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -236,13 +236,30 @@ export const transformVersionPayloadToDataset = (
236236
},
237237
termsOfUse: {
238238
fileAccessRequest: versionPayload.fileAccessRequest,
239-
termsOfAccess: versionPayload.termsOfAccess,
240-
dataAccessPlace: versionPayload.dataAccessPlace,
241-
originalArchive: versionPayload.originalArchive,
242-
availabilityStatus: versionPayload.availabilityStatus,
243-
contactForAccess: versionPayload.contactForAccess,
244-
sizeOfCollection: versionPayload.sizeOfCollection,
245-
studyCompletion: versionPayload.studyCompletion
239+
termsOfAccess: transformPayloadText(keepRawFields, versionPayload.termsOfAccess),
240+
dataAccessPlace: transformPayloadText(keepRawFields, versionPayload.dataAccessPlace),
241+
originalArchive: transformPayloadText(keepRawFields, versionPayload.originalArchive),
242+
availabilityStatus: transformPayloadText(keepRawFields, versionPayload.availabilityStatus),
243+
contactForAccess: transformPayloadText(keepRawFields, versionPayload.contactForAccess),
244+
sizeOfCollection: transformPayloadText(keepRawFields, versionPayload.sizeOfCollection),
245+
studyCompletion: transformPayloadText(keepRawFields, versionPayload.studyCompletion),
246+
termsOfUse: transformPayloadText(keepRawFields, versionPayload.termsOfUse),
247+
confidentialityDeclaration: transformPayloadText(
248+
keepRawFields,
249+
versionPayload.confidentialityDeclaration
250+
),
251+
specialPermissions: transformPayloadText(keepRawFields, versionPayload.specialPermissions),
252+
restrictions: transformPayloadText(keepRawFields, versionPayload.restrictions),
253+
citationRequirements: transformPayloadText(
254+
keepRawFields,
255+
versionPayload.citationRequirements
256+
),
257+
depositorRequirements: transformPayloadText(
258+
keepRawFields,
259+
versionPayload.depositorRequirements
260+
),
261+
conditions: transformPayloadText(keepRawFields, versionPayload.conditions),
262+
disclaimer: transformPayloadText(keepRawFields, versionPayload.disclaimer)
246263
},
247264
metadataBlocks: transformPayloadToDatasetMetadataBlocks(
248265
versionPayload.metadataBlocks,
@@ -281,6 +298,16 @@ const transformPayloadToDatasetLicense = (licensePayload: LicensePayload): Datas
281298
return datasetLicense
282299
}
283300

301+
const transformPayloadText = (
302+
keepRawFields: boolean,
303+
text: string | undefined
304+
): string | undefined => {
305+
if (!text) {
306+
return undefined
307+
}
308+
return keepRawFields ? text : transformHtmlToMarkdown(text)
309+
}
310+
284311
const transformPayloadToDatasetMetadataBlocks = (
285312
metadataBlocksPayload: MetadataBlocksPayload,
286313
keepRawFields: boolean

test/functional/datasets/GetDataset.test.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
import { ApiConfig, createDataset, getDataset, ReadError } from '../../../src'
22
import { DataverseApiAuthMechanism } from '../../../src/core/infra/repositories/ApiConfig'
33
import { DatasetDescription } from '../../../src/datasets/domain/models/Dataset'
4-
import { deleteUnpublishedDatasetViaApi } from '../../testHelpers/datasets/datasetHelper'
4+
import {
5+
createDatasetVersionPayload,
6+
deleteUnpublishedDatasetViaApi
7+
} from '../../testHelpers/datasets/datasetHelper'
58
import { TestConstants } from '../../testHelpers/TestConstants'
9+
import { transformVersionPayloadToDataset } from '../../../src/datasets/infra/repositories/transformers/datasetTransformers'
610

711
const testNewDataset = {
812
metadataBlockValues: [
@@ -90,6 +94,19 @@ describe('execute', () => {
9094
await deleteUnpublishedDatasetViaApi(createdDatasetIdentifiers.numericId)
9195
})
9296

97+
test('should return terms of use fields in markdown format when keepRawFields is false', async () => {
98+
const versionPayload = createDatasetVersionPayload()
99+
versionPayload.termsOfAccess = 'Hello <b>world</b>'
100+
const dataset = transformVersionPayloadToDataset(versionPayload, false)
101+
expect(dataset.termsOfUse.termsOfAccess).toBe('Hello **world**')
102+
})
103+
104+
test('should return terms of use fields in html format when keepRawFields is true', async () => {
105+
const versionPayload = createDatasetVersionPayload()
106+
const dataset = transformVersionPayloadToDataset(versionPayload, true)
107+
expect(dataset.termsOfUse.termsOfAccess).toBe(versionPayload.termsOfAccess)
108+
})
109+
93110
test('should not return metadata fields in markdown format when keepRawFields is true', async () => {
94111
const createdDatasetIdentifiers = await createDataset.execute(testNewDataset)
95112

test/functional/metadataBlocks/GetAllFacetableMetadataFields.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ describe('execute', () => {
1818
} catch (error) {
1919
throw new Error('Should not raise an error')
2020
} finally {
21-
expect(metadataFieldInfos?.length).toBe(59)
21+
expect(metadataFieldInfos?.length).toBe(64)
2222
expect(metadataFieldInfos?.[0].name).toBe('authorName')
2323
expect(metadataFieldInfos?.[0].displayName).toBe('Author Name')
2424
}

test/functional/metadataBlocks/GetAllMetadataBlocks.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ describe('execute', () => {
1919
throw new Error('Should not raise an error')
2020
} finally {
2121
expect(metadataBlocks).not.toBeNull()
22-
expect(metadataBlocks?.length).toBe(6)
22+
expect(metadataBlocks?.length).toBe(7)
2323
expect(metadataBlocks?.[0].metadataFields.title.name).toBe('title')
2424
}
2525
})

test/integration/metadataBlocks/MetadataBlocksRepository.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ describe('MetadataBlocksRepository', () => {
5959
describe('getAllMetadataBlocks', () => {
6060
test('should return all metadata blocks', async () => {
6161
const actual = await sut.getAllMetadataBlocks()
62-
expect(actual.length).toBe(6)
62+
expect(actual.length).toBe(7)
6363
expect(actual[0].name).toBe(citationMetadataBlockName)
6464
expect(actual[0].metadataFields.title.name).toBe('title')
6565
})

test/integration/metadataBlocks/MetadataFieldsInfoRepository.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ describe('getAllFacetableMetadataFields', () => {
1919
test('should return all facetable metadata fields', async () => {
2020
const actual = await sut.getAllFacetableMetadataFields()
2121

22-
expect(actual.length).toBe(59)
22+
expect(actual.length).toBe(64)
2323
expect(actual[0].name).toBe('authorName')
2424
expect(actual[0].displayName).toBe('Author Name')
2525
})

test/testHelpers/datasets/datasetHelper.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,15 @@ export const createDatasetModel = (
6060
availabilityStatus: 'Availability status',
6161
contactForAccess: 'Contact for access',
6262
sizeOfCollection: 'Size of collection',
63-
studyCompletion: 'Study completion'
63+
studyCompletion: 'Study completion',
64+
termsOfUse: 'Terms of use',
65+
confidentialityDeclaration: 'Confidentiality declaration',
66+
specialPermissions: 'Special permissions',
67+
restrictions: 'Restrictions',
68+
citationRequirements: 'Citation requirements',
69+
depositorRequirements: 'Depositor requirements',
70+
conditions: 'Conditions',
71+
disclaimer: 'Disclaimer'
6472
},
6573
publicationDate: DATASET_PUBLICATION_DATE_STR,
6674
metadataBlocks: [
@@ -129,6 +137,14 @@ export const createDatasetVersionPayload = (
129137
contactForAccess: 'Contact for access',
130138
sizeOfCollection: 'Size of collection',
131139
studyCompletion: 'Study completion',
140+
termsOfUse: 'Terms of use',
141+
confidentialityDeclaration: 'Confidentiality declaration',
142+
specialPermissions: 'Special permissions',
143+
restrictions: 'Restrictions',
144+
citationRequirements: 'Citation requirements',
145+
depositorRequirements: 'Depositor requirements',
146+
conditions: 'Conditions',
147+
disclaimer: 'Disclaimer',
132148
metadataBlocks: {
133149
citation: {
134150
name: 'citation',

0 commit comments

Comments
 (0)