Skip to content

Commit 9d25433

Browse files
committed
Merge branch 'develop' into feat/251-refactor-terms-of-use
2 parents 3479bb1 + fef6bbc commit 9d25433

File tree

4 files changed

+189
-13
lines changed

4 files changed

+189
-13
lines changed

src/collections/domain/dtos/CollectionDTO.ts

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ export interface CollectionDTO {
1010
metadataBlockNames?: string[]
1111
facetIds?: string[]
1212
inputLevels?: CollectionInputLevelDTO[]
13+
inheritMetadataBlocksFromParent: boolean
14+
inheritFacetsFromParent: boolean
1315
}
1416

1517
export interface CollectionInputLevelDTO {

src/collections/infra/repositories/CollectionsRepository.ts

+15-5
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ export interface NewCollectionMetadataBlocksRequestPayload {
4040
metadataBlockNames?: string[]
4141
facetIds?: string[]
4242
inputLevels?: NewCollectionInputLevelRequestPayload[]
43+
inheritMetadataBlocksFromParent?: boolean
44+
inheritFacetsFromParent?: boolean
4345
}
4446

4547
export interface NewCollectionInputLevelRequestPayload {
@@ -192,18 +194,26 @@ export class CollectionsRepository extends ApiRepository implements ICollections
192194
required: inputLevel.required
193195
}))
194196

197+
const metadataBlocksRequestBody: NewCollectionMetadataBlocksRequestPayload = {
198+
...(!collectionDTO.inheritMetadataBlocksFromParent && {
199+
metadataBlockNames: collectionDTO.metadataBlockNames,
200+
inputLevels: inputLevelsRequestBody
201+
}),
202+
...(!collectionDTO.inheritFacetsFromParent && {
203+
facetIds: collectionDTO.facetIds
204+
}),
205+
inheritMetadataBlocksFromParent: collectionDTO.inheritMetadataBlocksFromParent,
206+
inheritFacetsFromParent: collectionDTO.inheritFacetsFromParent
207+
}
208+
195209
return {
196210
alias: collectionDTO.alias,
197211
name: collectionDTO.name,
198212
dataverseContacts: dataverseContacts,
199213
dataverseType: collectionDTO.type,
200214
...(collectionDTO.description && { description: collectionDTO.description }),
201215
...(collectionDTO.affiliation && { affiliation: collectionDTO.affiliation }),
202-
metadataBlocks: {
203-
metadataBlockNames: collectionDTO.metadataBlockNames,
204-
facetIds: collectionDTO.facetIds,
205-
inputLevels: inputLevelsRequestBody
206-
}
216+
metadataBlocks: metadataBlocksRequestBody
207217
}
208218
}
209219

test/integration/collections/CollectionsRepository.test.ts

+165-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { CollectionsRepository } from '../../../src/collections/infra/repositories/CollectionsRepository'
22
import { TestConstants } from '../../testHelpers/TestConstants'
33
import {
4+
CollectionDTO,
45
CollectionFeaturedItemsDTO,
56
CollectionItemType,
67
CollectionPreview,
@@ -149,11 +150,15 @@ describe('CollectionsRepository', () => {
149150
const testCreateCollectionAlias1 = 'createCollection-test-1'
150151
const testCreateCollectionAlias2 = 'createCollection-test-2'
151152
const testCreateCollectionAlias3 = 'createCollection-test-3'
153+
const testCreateCollectionAlias4 = 'createCollection-test-4'
154+
const testCreateCollectionAlias5 = 'createCollection-test-5'
152155

153156
afterAll(async () => {
154157
await deleteCollectionViaApi(testCreateCollectionAlias1)
155158
await deleteCollectionViaApi(testCreateCollectionAlias2)
156159
await deleteCollectionViaApi(testCreateCollectionAlias3)
160+
await deleteCollectionViaApi(testCreateCollectionAlias4)
161+
await deleteCollectionViaApi(testCreateCollectionAlias5)
157162
})
158163

159164
test('should create collection in root when no parent collection is set', async () => {
@@ -184,13 +189,48 @@ describe('CollectionsRepository', () => {
184189
testCollectionId
185190
)
186191
expect(typeof actualId).toBe('number')
192+
193+
const collectionCreated = await sut.getCollection(actualId)
194+
195+
expect(collectionCreated.isMetadataBlockRoot).toBe(true)
196+
expect(collectionCreated.isFacetRoot).toBe(true)
187197
})
188198

189-
test('should create collection without input levels', async () => {
190-
const newCollectionDTO = createCollectionDTO(testCreateCollectionAlias3)
191-
newCollectionDTO.inputLevels = undefined
192-
const actualId = await sut.createCollection(newCollectionDTO, testCollectionId)
193-
expect(typeof actualId).toBe('number')
199+
test('should create a collection to inherit metadata blocks from parent collection', async () => {
200+
const childCollectionDTO = createCollectionDTO(testCreateCollectionAlias3)
201+
childCollectionDTO.inheritMetadataBlocksFromParent = true
202+
203+
const childCollectionId = await sut.createCollection(childCollectionDTO)
204+
205+
const childCollection = await sut.getCollection(childCollectionId)
206+
207+
expect(childCollection.isMetadataBlockRoot).toBe(false)
208+
expect(childCollection.isFacetRoot).toBe(true)
209+
})
210+
211+
test('should create a collection to inherit facets from parent collection', async () => {
212+
const childCollectionDTO = createCollectionDTO(testCreateCollectionAlias4)
213+
childCollectionDTO.inheritFacetsFromParent = true
214+
215+
const childCollectionId = await sut.createCollection(childCollectionDTO)
216+
217+
const childCollection = await sut.getCollection(childCollectionId)
218+
219+
expect(childCollection.isMetadataBlockRoot).toBe(true)
220+
expect(childCollection.isFacetRoot).toBe(false)
221+
})
222+
223+
test('should create a collection to inherit metadata blocks and facets from parent collection', async () => {
224+
const childCollectionDTO = createCollectionDTO(testCreateCollectionAlias5)
225+
childCollectionDTO.inheritMetadataBlocksFromParent = true
226+
childCollectionDTO.inheritFacetsFromParent = true
227+
228+
const childCollectionId = await sut.createCollection(childCollectionDTO)
229+
230+
const childCollection = await sut.getCollection(childCollectionId)
231+
232+
expect(childCollection.isMetadataBlockRoot).toBe(false)
233+
expect(childCollection.isFacetRoot).toBe(false)
194234
})
195235

196236
test('should return error when parent collection does not exist', async () => {
@@ -918,6 +958,126 @@ describe('CollectionsRepository', () => {
918958
expect(updatedInputLevel?.required).toBe(false)
919959
})
920960

961+
test('should update the collection to inherit metadata blocks from parent collection', async () => {
962+
const parentCollectionAlias = 'inherit-metablocks-parent-update'
963+
const parentCollectionDTO = createCollectionDTO(parentCollectionAlias)
964+
const parentCollectionId = await sut.createCollection(parentCollectionDTO)
965+
966+
const childCollectionAlias = 'inherit-metablocks-child-update'
967+
const childCollectionDTO = createCollectionDTO(childCollectionAlias)
968+
969+
const childCollectionId = await sut.createCollection(childCollectionDTO, parentCollectionId)
970+
971+
const childCollection = await sut.getCollection(childCollectionId)
972+
973+
expect(childCollection.isMetadataBlockRoot).toBe(true)
974+
expect(childCollection.isFacetRoot).toBe(true)
975+
976+
const updatedChildCollectionDTO = createCollectionDTO(childCollectionAlias)
977+
updatedChildCollectionDTO.inheritMetadataBlocksFromParent = true
978+
979+
await sut.updateCollection(childCollectionId, updatedChildCollectionDTO)
980+
981+
const childCollectionAfterUpdate = await sut.getCollection(childCollectionId)
982+
983+
expect(childCollectionAfterUpdate.isMetadataBlockRoot).toBe(false)
984+
expect(childCollectionAfterUpdate.isFacetRoot).toBe(true)
985+
986+
await deleteCollectionViaApi(childCollectionAlias)
987+
await deleteCollectionViaApi(parentCollectionAlias)
988+
})
989+
990+
test('should update the collection to inherit facets from parent collection', async () => {
991+
const parentCollectionAlias = 'inherit-facets-parent-update'
992+
const parentCollectionDTO = createCollectionDTO(parentCollectionAlias)
993+
const parentCollectionId = await sut.createCollection(parentCollectionDTO)
994+
995+
const childCollectionAlias = 'inherit-facets-child-update'
996+
const childCollectionDTO = createCollectionDTO(childCollectionAlias)
997+
998+
const childCollectionId = await sut.createCollection(childCollectionDTO, parentCollectionId)
999+
1000+
const childCollection = await sut.getCollection(childCollectionId)
1001+
1002+
expect(childCollection.isMetadataBlockRoot).toBe(true)
1003+
expect(childCollection.isFacetRoot).toBe(true)
1004+
1005+
const updatedChildCollectionDTO = createCollectionDTO(childCollectionAlias)
1006+
updatedChildCollectionDTO.inheritFacetsFromParent = true
1007+
1008+
await sut.updateCollection(childCollectionId, updatedChildCollectionDTO)
1009+
1010+
const childCollectionAfterUpdate = await sut.getCollection(childCollectionId)
1011+
1012+
expect(childCollectionAfterUpdate.isMetadataBlockRoot).toBe(true)
1013+
expect(childCollectionAfterUpdate.isFacetRoot).toBe(false)
1014+
1015+
await deleteCollectionViaApi(childCollectionAlias)
1016+
await deleteCollectionViaApi(parentCollectionAlias)
1017+
})
1018+
1019+
test('should update the collection to inherit metadata blocks and facets from parent collection', async () => {
1020+
const parentCollectionAlias = 'inherit-metablocks-facets-parent-update'
1021+
const parentCollectionDTO = createCollectionDTO(parentCollectionAlias)
1022+
const parentCollectionId = await sut.createCollection(parentCollectionDTO)
1023+
1024+
const childCollectionAlias = 'inherit-metablocks-facets-child-update'
1025+
const childCollectionDTO = createCollectionDTO(childCollectionAlias)
1026+
1027+
const childCollectionId = await sut.createCollection(childCollectionDTO, parentCollectionId)
1028+
1029+
const childCollection = await sut.getCollection(childCollectionId)
1030+
1031+
expect(childCollection.isMetadataBlockRoot).toBe(true)
1032+
expect(childCollection.isFacetRoot).toBe(true)
1033+
1034+
const updatedChildCollectionDTO = createCollectionDTO(childCollectionAlias)
1035+
updatedChildCollectionDTO.inheritFacetsFromParent = true
1036+
updatedChildCollectionDTO.inheritMetadataBlocksFromParent = true
1037+
1038+
await sut.updateCollection(childCollectionId, updatedChildCollectionDTO)
1039+
1040+
const childCollectionAfterUpdate = await sut.getCollection(childCollectionId)
1041+
1042+
expect(childCollectionAfterUpdate.isMetadataBlockRoot).toBe(false)
1043+
expect(childCollectionAfterUpdate.isFacetRoot).toBe(false)
1044+
1045+
await deleteCollectionViaApi(childCollectionAlias)
1046+
await deleteCollectionViaApi(parentCollectionAlias)
1047+
})
1048+
1049+
test('should not update root collection facets and keep isMetadataBlockRoot and isFacetRoot in true if facet ids are sent as undefined', async () => {
1050+
const rootCollection = await sut.getCollection()
1051+
1052+
const rootCollectionFacets = await sut.getCollectionFacets(rootCollection.alias)
1053+
1054+
const updatedRootCollectionDTO: CollectionDTO = {
1055+
alias: rootCollection.alias,
1056+
name: rootCollection.name,
1057+
contacts: [rootCollection.contacts?.[0].email as string],
1058+
type: rootCollection.type,
1059+
description: rootCollection.description,
1060+
affiliation: rootCollection.affiliation,
1061+
metadataBlockNames: undefined,
1062+
facetIds: undefined,
1063+
inputLevels: undefined,
1064+
inheritFacetsFromParent: false,
1065+
inheritMetadataBlocksFromParent: false
1066+
}
1067+
1068+
await sut.updateCollection(rootCollection.id, updatedRootCollectionDTO)
1069+
1070+
const rootCollectionAfterUpdate = await sut.getCollection()
1071+
1072+
const rootCollectionFacetsAfterUpdate = await sut.getCollectionFacets(rootCollection.alias)
1073+
1074+
expect(rootCollectionFacets).toStrictEqual(rootCollectionFacetsAfterUpdate)
1075+
expect(rootCollection.isMetadataBlockRoot).toBe(true)
1076+
expect(rootCollection.isFacetRoot).toBe(true)
1077+
expect(rootCollectionAfterUpdate.isMetadataBlockRoot).toBe(true)
1078+
expect(rootCollectionAfterUpdate.isFacetRoot).toBe(true)
1079+
})
1080+
9211081
test('should return error when collection does not exist', async () => {
9221082
const expectedError = new WriteError(
9231083
`[404] Can't find dataverse with identifier='${TestConstants.TEST_DUMMY_COLLECTION_ID}'`

test/testHelpers/collections/collectionHelper.ts

+7-3
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,9 @@ export const createCollectionDTO = (alias = 'test-collection'): CollectionDTO =>
162162
required: true,
163163
include: true
164164
}
165-
]
165+
],
166+
inheritFacetsFromParent: false,
167+
inheritMetadataBlocksFromParent: false
166168
}
167169
}
168170

@@ -180,14 +182,16 @@ export const createNewCollectionRequestPayload = (): NewCollectionRequestPayload
180182
affiliation: 'test affiliation',
181183
metadataBlocks: {
182184
metadataBlockNames: ['citation', 'geospatial'],
183-
facetIds: ['authorName', 'authorAffiliation'],
184185
inputLevels: [
185186
{
186187
datasetFieldTypeName: 'geographicCoverage',
187188
include: true,
188189
required: true
189190
}
190-
]
191+
],
192+
facetIds: ['authorName', 'authorAffiliation'],
193+
inheritMetadataBlocksFromParent: false,
194+
inheritFacetsFromParent: false
191195
}
192196
}
193197
}

0 commit comments

Comments
 (0)