Skip to content

Commit f97fb2c

Browse files
committed
Changed: update dataset request transform
1 parent 0335ddb commit f97fb2c

File tree

6 files changed

+136
-27
lines changed

6 files changed

+136
-27
lines changed

src/datasets/infra/repositories/DatasetsRepository.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
import { ApiRepository } from '../../../core/infra/repositories/ApiRepository'
22
import { IDatasetsRepository } from '../../domain/repositories/IDatasetsRepository'
33
import { Dataset, VersionUpdateType } from '../../domain/models/Dataset'
4-
import { transformVersionResponseToDataset } from './transformers/datasetTransformers'
4+
import {
5+
transformVersionResponseToDataset,
6+
transformDatasetModelToUpdateDatasetRequestPayload
7+
} from './transformers/datasetTransformers'
58
import { DatasetUserPermissions } from '../../domain/models/DatasetUserPermissions'
69
import { transformDatasetUserPermissionsResponseToDatasetUserPermissions } from './transformers/datasetUserPermissionsTransformers'
710
import { DatasetLock } from '../../domain/models/DatasetLock'
811
import { CreatedDatasetIdentifiers } from '../../domain/models/CreatedDatasetIdentifiers'
912
import { DatasetPreviewSubset } from '../../domain/models/DatasetPreviewSubset'
1013
import { DatasetDTO } from '../../domain/dtos/DatasetDTO'
1114
import { MetadataBlock } from '../../../metadataBlocks'
12-
import { transformDatasetModelToRequestPayload } from './transformers/datasetTransformers'
15+
import { transformDatasetModelToNewDatasetRequestPayload } from './transformers/datasetTransformers'
1316
import { transformDatasetLocksResponseToDatasetLocks } from './transformers/datasetLocksTransformers'
1417
import { transformDatasetPreviewsResponseToDatasetPreviewSubset } from './transformers/datasetPreviewsTransformers'
1518

@@ -144,7 +147,7 @@ export class DatasetsRepository extends ApiRepository implements IDatasetsReposi
144147
): Promise<CreatedDatasetIdentifiers> {
145148
return this.doPost(
146149
`/dataverses/${collectionId}/datasets`,
147-
transformDatasetModelToRequestPayload(newDataset, datasetMetadataBlocks)
150+
transformDatasetModelToNewDatasetRequestPayload(newDataset, datasetMetadataBlocks)
148151
)
149152
.then((response) => {
150153
const responseData = response.data.data
@@ -182,7 +185,8 @@ export class DatasetsRepository extends ApiRepository implements IDatasetsReposi
182185
): Promise<void> {
183186
return this.doPut(
184187
this.buildApiEndpoint(this.datasetsResourceName, `editMetadata`, datasetId),
185-
transformDatasetModelToRequestPayload(dataset, datasetMetadataBlocks)
188+
transformDatasetModelToUpdateDatasetRequestPayload(dataset, datasetMetadataBlocks),
189+
{ replace: true }
186190
)
187191
.then(() => undefined)
188192
.catch((error) => {

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

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,46 @@ export type MetadataFieldValueRequestPayload =
5555
| Record<string, MetadataFieldRequestPayload>
5656
| Record<string, MetadataFieldRequestPayload>[]
5757

58-
export const transformDatasetModelToRequestPayload = (
58+
export interface UpdateDatasetRequestPayload {
59+
fields: MetadataFieldRequestPayload[]
60+
}
61+
62+
export const transformDatasetModelToUpdateDatasetRequestPayload = (
63+
dataset: DatasetDTO,
64+
metadataBlocks: MetadataBlock[]
65+
): UpdateDatasetRequestPayload => {
66+
const metadataFieldsRequestPayload: MetadataFieldRequestPayload[] = []
67+
const datasetMetadataBlocksValues: DatasetMetadataBlockValuesDTO[] = dataset.metadataBlockValues
68+
datasetMetadataBlocksValues.forEach(function (
69+
newDatasetMetadataBlockValues: DatasetMetadataBlockValuesDTO
70+
) {
71+
const metadataBlock: MetadataBlock = metadataBlocks.find(
72+
(metadataBlock) => metadataBlock.name == newDatasetMetadataBlockValues.name
73+
)
74+
const metadataBlockFieldsPayload: MetadataFieldRequestPayload[] = []
75+
const metadataBlockFields = metadataBlock.metadataFields
76+
const datasetMetadataFields = newDatasetMetadataBlockValues.fields
77+
for (const metadataFieldKey of Object.keys(datasetMetadataFields)) {
78+
const datasetMetadataFieldValue: DatasetMetadataFieldValueDTO =
79+
datasetMetadataFields[metadataFieldKey]
80+
metadataBlockFieldsPayload.push({
81+
value: transformMetadataFieldValueToRequestPayload(
82+
datasetMetadataFieldValue,
83+
metadataBlockFields[metadataFieldKey]
84+
),
85+
typeClass: metadataBlockFields[metadataFieldKey].typeClass,
86+
multiple: metadataBlockFields[metadataFieldKey].multiple,
87+
typeName: metadataFieldKey
88+
})
89+
}
90+
metadataFieldsRequestPayload.push(...metadataBlockFieldsPayload)
91+
})
92+
return {
93+
fields: metadataFieldsRequestPayload
94+
}
95+
}
96+
97+
export const transformDatasetModelToNewDatasetRequestPayload = (
5998
dataset: DatasetDTO,
6099
metadataBlocks: MetadataBlock[]
61100
): NewDatasetRequestPayload => {

test/integration/datasets/DatasetsRepository.test.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -588,15 +588,12 @@ describe('DatasetsRepository', () => {
588588
(actualCreatedDataset.metadataBlocks[0].fields.dsDescription[0] as DatasetDescription)
589589
.dsDescriptionValue
590590
).toBe('This is the description of the dataset.')
591-
591+
592592
const updatedDsDescription = 'This is the updated description of the dataset.'
593-
testDataset.metadataBlockValues[0].fields.dsDescription[0].dsDescriptionValue = updatedDsDescription
593+
testDataset.metadataBlockValues[0].fields.dsDescription[0].dsDescriptionValue =
594+
updatedDsDescription
594595

595-
await sut.updateDataset(
596-
createdDataset.numericId,
597-
testDataset,
598-
[citationMetadataBlock]
599-
)
596+
await sut.updateDataset(createdDataset.numericId, testDataset, [citationMetadataBlock])
600597

601598
const actualUpdatedDataset = await sut.getDataset(
602599
createdDataset.numericId,

test/testHelpers/datasets/datasetHelper.ts

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ import {
1313
DatasetMetadataFieldValueDTO
1414
} from '../../../src/datasets/domain/dtos/DatasetDTO'
1515
import { MetadataBlock, MetadataFieldType } from '../../../src'
16-
import { NewDatasetRequestPayload } from '../../../src/datasets/infra/repositories/transformers/datasetTransformers'
16+
import {
17+
NewDatasetRequestPayload,
18+
UpdateDatasetRequestPayload
19+
} from '../../../src/datasets/infra/repositories/transformers/datasetTransformers'
1720
import {
1821
MetadataFieldWatermark,
1922
MetadataFieldTypeClass
@@ -615,7 +618,9 @@ export const createDatasetMetadataBlockModel = (): MetadataBlock => {
615618
}
616619
}
617620

618-
export const createDatasetRequestPayload = (license?: DatasetLicense): NewDatasetRequestPayload => {
621+
export const createNewDatasetRequestPayload = (
622+
license?: DatasetLicense
623+
): NewDatasetRequestPayload => {
619624
return {
620625
datasetVersion: {
621626
...(license && { license }),
@@ -676,3 +681,57 @@ export const createDatasetRequestPayload = (license?: DatasetLicense): NewDatase
676681
}
677682
}
678683
}
684+
685+
export const createUpdateDatasetRequestPayload = (): UpdateDatasetRequestPayload => {
686+
return {
687+
fields: [
688+
{
689+
value: 'test dataset',
690+
typeClass: 'primitive',
691+
multiple: false,
692+
typeName: 'title'
693+
},
694+
{
695+
value: [
696+
{
697+
authorName: {
698+
value: 'Admin, Dataverse',
699+
typeClass: 'primitive',
700+
multiple: false,
701+
typeName: 'authorName'
702+
},
703+
authorAffiliation: {
704+
value: 'Dataverse.org',
705+
typeClass: 'primitive',
706+
multiple: false,
707+
typeName: 'authorAffiliation'
708+
}
709+
},
710+
{
711+
authorName: {
712+
value: 'Owner, Dataverse',
713+
typeClass: 'primitive',
714+
multiple: false,
715+
typeName: 'authorName'
716+
},
717+
authorAffiliation: {
718+
value: 'Dataverse.org',
719+
typeClass: 'primitive',
720+
multiple: false,
721+
typeName: 'authorAffiliation'
722+
}
723+
}
724+
],
725+
typeClass: 'compound',
726+
multiple: true,
727+
typeName: 'author'
728+
},
729+
{
730+
value: ['alternative1', 'alternative2'],
731+
typeClass: 'primitive',
732+
multiple: true,
733+
typeName: 'alternativeRequiredTitle'
734+
}
735+
]
736+
}
737+
}

test/unit/datasets/DatasetsRepository.test.ts

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ import {
88
import {
99
createDatasetModel,
1010
createDatasetVersionPayload,
11-
createDatasetLicenseModel
11+
createDatasetLicenseModel,
12+
createUpdateDatasetRequestPayload
1213
} from '../../testHelpers/datasets/datasetHelper'
1314
import { TestConstants } from '../../testHelpers/TestConstants'
1415
import { DatasetNotNumberedVersion, DatasetPreviewSubset } from '../../../src/datasets'
@@ -24,7 +25,7 @@ import {
2425
import {
2526
createDatasetDTO,
2627
createDatasetMetadataBlockModel,
27-
createDatasetRequestPayload
28+
createNewDatasetRequestPayload
2829
} from '../../testHelpers/datasets/datasetHelper'
2930
import { WriteError } from '../../../src'
3031
import { VersionUpdateType } from '../../../src/datasets/domain/models/Dataset'
@@ -717,7 +718,7 @@ describe('DatasetsRepository', () => {
717718
const testNewDataset = createDatasetDTO()
718719
const testMetadataBlocks = [createDatasetMetadataBlockModel()]
719720
const testCollectionName = 'test'
720-
const expectedNewDatasetRequestPayloadJson = JSON.stringify(createDatasetRequestPayload())
721+
const expectedNewDatasetRequestPayloadJson = JSON.stringify(createNewDatasetRequestPayload())
721722

722723
const testCreatedDatasetIdentifiers = {
723724
persistentId: 'test',
@@ -835,7 +836,16 @@ describe('DatasetsRepository', () => {
835836
describe('updateDataset', () => {
836837
const testNewDataset = createDatasetDTO()
837838
const testMetadataBlocks = [createDatasetMetadataBlockModel()]
838-
const expectedNewDatasetRequestPayloadJson = JSON.stringify(createDatasetRequestPayload())
839+
const expectedNewDatasetRequestPayloadJson = JSON.stringify(createUpdateDatasetRequestPayload())
840+
841+
const expectedApiKeyRequestConfig = {
842+
...TestConstants.TEST_EXPECTED_AUTHENTICATED_REQUEST_CONFIG_API_KEY,
843+
params: { replace: true }
844+
}
845+
const expectedCookieRequestConfig = {
846+
...TestConstants.TEST_EXPECTED_AUTHENTICATED_REQUEST_CONFIG_SESSION_COOKIE,
847+
params: { replace: true }
848+
}
839849

840850
const expectedApiEndpoint = `${TestConstants.TEST_API_URL}/datasets/${testDatasetModel.id}/editMetadata`
841851

@@ -848,7 +858,7 @@ describe('DatasetsRepository', () => {
848858
expect(axios.put).toHaveBeenCalledWith(
849859
expectedApiEndpoint,
850860
expectedNewDatasetRequestPayloadJson,
851-
TestConstants.TEST_EXPECTED_AUTHENTICATED_REQUEST_CONFIG_API_KEY
861+
expectedApiKeyRequestConfig
852862
)
853863
expect(actual).toBeUndefined()
854864

@@ -860,7 +870,7 @@ describe('DatasetsRepository', () => {
860870
expect(axios.put).toHaveBeenCalledWith(
861871
expectedApiEndpoint,
862872
expectedNewDatasetRequestPayloadJson,
863-
TestConstants.TEST_EXPECTED_AUTHENTICATED_REQUEST_CONFIG_SESSION_COOKIE
873+
expectedCookieRequestConfig
864874
)
865875
expect(actual).toBeUndefined()
866876
})
@@ -876,7 +886,7 @@ describe('DatasetsRepository', () => {
876886
expect(axios.put).toHaveBeenCalledWith(
877887
expectedApiEndpoint,
878888
expectedNewDatasetRequestPayloadJson,
879-
TestConstants.TEST_EXPECTED_AUTHENTICATED_REQUEST_CONFIG_API_KEY
889+
expectedApiKeyRequestConfig
880890
)
881891
expect(error).toBeInstanceOf(Error)
882892
})

test/unit/datasets/datasetTransformers.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import {
22
createDatasetMetadataBlockModel,
33
createDatasetDTO,
4-
createDatasetRequestPayload
4+
createNewDatasetRequestPayload
55
} from '../../testHelpers/datasets/datasetHelper'
6-
import { transformDatasetModelToRequestPayload } from '../../../src/datasets/infra/repositories/transformers/datasetTransformers'
76
import { createDatasetLicenseModel } from '../../testHelpers/datasets/datasetHelper'
7+
import { transformDatasetModelToNewDatasetRequestPayload } from '../../../src/datasets/infra/repositories/transformers/datasetTransformers'
88

99
describe('transformNewDatasetModelToRequestPayload', () => {
1010
test('should correctly transform a new dataset model to a new dataset request payload', async () => {
1111
const testDataset = createDatasetDTO()
1212
const testMetadataBlocks = [createDatasetMetadataBlockModel()]
13-
const expectedNewDatasetRequestPayload = createDatasetRequestPayload()
14-
const actual = transformDatasetModelToRequestPayload(testDataset, testMetadataBlocks)
13+
const expectedNewDatasetRequestPayload = createNewDatasetRequestPayload()
14+
const actual = transformDatasetModelToNewDatasetRequestPayload(testDataset, testMetadataBlocks)
1515

1616
expect(actual).toEqual(expectedNewDatasetRequestPayload)
1717
})
@@ -26,10 +26,10 @@ describe('transformNewDatasetModelToRequestPayload', () => {
2626
createDatasetLicenseModel()
2727
)
2828
const testMetadataBlocks = [createDatasetMetadataBlockModel()]
29-
const expectedNewDatasetRequestPayload = createDatasetRequestPayload(
29+
const expectedNewDatasetRequestPayload = createNewDatasetRequestPayload(
3030
createDatasetLicenseModel()
3131
)
32-
const actual = transformDatasetModelToRequestPayload(testDataset, testMetadataBlocks)
32+
const actual = transformDatasetModelToNewDatasetRequestPayload(testDataset, testMetadataBlocks)
3333

3434
expect(actual).toEqual(expectedNewDatasetRequestPayload)
3535
})

0 commit comments

Comments
 (0)