Skip to content

Commit 1baa0cd

Browse files
committed
Merge branch 'develop' into feat/236-strict-ts-config
2 parents 3624ee1 + d9a70a2 commit 1baa0cd

File tree

10 files changed

+213
-10
lines changed

10 files changed

+213
-10
lines changed

src/datasets/domain/models/DatasetPreview.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,5 @@ export interface DatasetPreview {
1313
publicationStatuses: PublicationStatus[]
1414
parentCollectionName: string
1515
parentCollectionAlias: string
16+
imageUrl?: string
1617
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@ export interface DatasetPreviewPayload {
1414
publicationStatuses: string[]
1515
identifier_of_dataverse: string
1616
name_of_dataverse: string
17+
image_url?: string
1718
}

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ export const transformDatasetPreviewPayloadToDatasetPreview = (
4747
description: datasetPreviewPayload.description,
4848
publicationStatuses: publicationStatuses,
4949
parentCollectionAlias: datasetPreviewPayload.identifier_of_dataverse,
50-
parentCollectionName: datasetPreviewPayload.name_of_dataverse
50+
parentCollectionName: datasetPreviewPayload.name_of_dataverse,
51+
...(datasetPreviewPayload.image_url && {
52+
imageUrl: datasetPreviewPayload.image_url
53+
})
5154
}
5255
}

src/files/domain/models/FilePreview.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@ export interface FilePreview {
2121
datasetCitation: string
2222
publicationStatuses: PublicationStatus[]
2323
releaseOrCreateDate: Date
24+
restricted: boolean
25+
canDownloadFile: boolean
26+
categories?: string[]
27+
tabularTags?: string[]
28+
variables?: number
29+
observations?: number
2430
}
2531

2632
export interface FilePreviewChecksum {

src/files/infra/repositories/transformers/FilePreviewPayload.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ export interface FilePreviewPayload {
1919
dataset_citation: string
2020
publicationStatuses: string[]
2121
releaseOrCreateDate: string
22+
restricted: boolean
23+
canDownloadFile: boolean
24+
categories?: string[]
25+
tabularTags?: string[]
26+
variables?: number
27+
observations?: number
2228
}
2329

2430
export interface FilePreviewChecksumPayload {

src/files/infra/repositories/transformers/filePreviewTransformers.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,14 @@ export const transformFilePreviewPayloadToFilePreview = (
3636
datasetPersistentId: filePreviewPayload.dataset_persistent_id,
3737
datasetCitation: filePreviewPayload.dataset_citation,
3838
publicationStatuses: publicationStatuses,
39-
releaseOrCreateDate: new Date(filePreviewPayload.releaseOrCreateDate)
39+
releaseOrCreateDate: new Date(filePreviewPayload.releaseOrCreateDate),
40+
restricted: filePreviewPayload.restricted,
41+
canDownloadFile: filePreviewPayload.canDownloadFile,
42+
...(filePreviewPayload.categories && { categories: filePreviewPayload.categories }),
43+
...(filePreviewPayload.tabularTags && {
44+
tabularTags: filePreviewPayload.tabularTags
45+
}),
46+
...(filePreviewPayload.variables && { variables: filePreviewPayload.variables }),
47+
...(filePreviewPayload.observations && { observations: filePreviewPayload.observations })
4048
}
4149
}

test/integration/collections/CollectionsRepository.test.ts

Lines changed: 160 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,12 @@ import {
2020
ROOT_COLLECTION_ALIAS
2121
} from '../../testHelpers/collections/collectionHelper'
2222
import { CollectionPayload } from '../../../src/collections/infra/repositories/transformers/CollectionPayload'
23-
import { uploadFileViaApi } from '../../testHelpers/files/filesHelper'
24-
import { deleteUnpublishedDatasetViaApi } from '../../testHelpers/datasets/datasetHelper'
23+
import { updateFileTabularTags, uploadFileViaApi } from '../../testHelpers/files/filesHelper'
24+
import {
25+
deletePublishedDatasetViaApi,
26+
deleteUnpublishedDatasetViaApi,
27+
publishDatasetViaApi
28+
} from '../../testHelpers/datasets/datasetHelper'
2529
import { PublicationStatus } from '../../../src/core/domain/models/PublicationStatus'
2630
import { CollectionType } from '../../../src/collections/domain/models/CollectionType'
2731
import {
@@ -33,7 +37,7 @@ describe('CollectionsRepository', () => {
3337
const testCollectionAlias = 'collectionsRepositoryTestCollection'
3438
const sut: CollectionsRepository = new CollectionsRepository()
3539
let testCollectionId: number
36-
40+
const currentYear = new Date().getFullYear()
3741
beforeAll(async () => {
3842
ApiConfig.init(
3943
TestConstants.TEST_API_URL,
@@ -292,7 +296,7 @@ describe('CollectionsRepository', () => {
292296
const actualCollectionPreview = actual.items[2] as CollectionPreview
293297

294298
const expectedFileMd5 = '68b22040025784da775f55cfcb6dee2e'
295-
const expectedDatasetCitationFragment = `Admin, Dataverse; Owner, Dataverse, ${new Date().getFullYear()}, "Dataset created using the createDataset use case`
299+
const expectedDatasetCitationFragment = `Admin, Dataverse; Owner, Dataverse, ${currentYear}, "Dataset created using the createDataset use case"`
296300
const expectedDatasetDescription = 'Dataset created using the createDataset use case'
297301
const expectedFileName = 'test-file-1.txt'
298302
const expectedCollectionsName = 'Scientific Research'
@@ -377,6 +381,8 @@ describe('CollectionsRepository', () => {
377381
expect(actualFilePreview.url).not.toBeUndefined()
378382
expect(actualFilePreview.releaseOrCreateDate).not.toBeUndefined()
379383
expect(actualFilePreview.type).toBe(CollectionItemType.FILE)
384+
expect(actualFilePreview.restricted).toBe(false)
385+
expect(actualFilePreview.canDownloadFile).toBe(true)
380386

381387
expect(actualDatasetPreview.title).toBe(expectedDatasetDescription)
382388
expect(actualDatasetPreview.citation).toContain(expectedDatasetCitationFragment)
@@ -657,6 +663,156 @@ describe('CollectionsRepository', () => {
657663
})
658664
})
659665

666+
describe('getCollectionItems for published tabular file', () => {
667+
let testDatasetIds: CreatedDatasetIdentifiers
668+
const testTextFile4Name = 'test-file-4.tab'
669+
const testSubCollectionAlias = 'collectionsRepositoryTestSubCollection'
670+
671+
beforeAll(async () => {
672+
await sut.publishCollection(testCollectionId).catch(() => {
673+
throw new Error(`Tests beforeAll(): Error while publishing collection ${testCollectionId}`)
674+
})
675+
676+
const collectionPayload = await createCollectionViaApi(
677+
testSubCollectionAlias,
678+
testCollectionAlias
679+
).catch(() => {
680+
throw new Error(
681+
`Tests beforeAll(): Error while creating subcollection ${testSubCollectionAlias}`
682+
)
683+
})
684+
685+
await sut.publishCollection(collectionPayload.id).catch(() => {
686+
throw new Error(`Tests beforeAll(): Error while publishing collection ${testCollectionId}`)
687+
})
688+
689+
try {
690+
testDatasetIds = await createDataset.execute(
691+
TestConstants.TEST_NEW_DATASET_DTO,
692+
testSubCollectionAlias
693+
)
694+
} catch (error) {
695+
throw new Error('Tests beforeAll(): Error while creating test dataset')
696+
}
697+
const uploadFileViaApiResult = await uploadFileViaApi(
698+
testDatasetIds.numericId,
699+
testTextFile4Name,
700+
{
701+
categories: ['tabular data']
702+
}
703+
).catch(() => {
704+
throw new Error(`Tests beforeAll(): Error while uploading file ${testTextFile4Name}`)
705+
})
706+
await new Promise((resolve) => setTimeout(resolve, 5000))
707+
708+
await updateFileTabularTags(uploadFileViaApiResult.data.data.files[0].dataFile.id, [
709+
'Survey',
710+
'Genomics'
711+
]).catch(() => {
712+
throw new Error(
713+
`Tests beforeAll(): Error while updating file tabular tags ${uploadFileViaApiResult.data.data.files[0].dataFile.id}`
714+
)
715+
})
716+
717+
await publishDatasetViaApi(testDatasetIds.numericId).catch(() => {
718+
throw new Error(
719+
`Tests beforeAll(): Error while publishing dataset ${testDatasetIds.numericId}`
720+
)
721+
})
722+
})
723+
724+
afterAll(async () => {
725+
try {
726+
await deletePublishedDatasetViaApi(testDatasetIds.persistentId)
727+
} catch (error) {
728+
throw new Error(
729+
`Tests afterAll(): Error while deleting test dataset ${testDatasetIds.persistentId}`
730+
)
731+
}
732+
try {
733+
await deleteCollectionViaApi(testSubCollectionAlias)
734+
} catch (error) {
735+
throw new Error(
736+
`Tests afterAll(): Error while deleting subcollection ${testSubCollectionAlias}`
737+
)
738+
}
739+
})
740+
741+
test('should return collection items given a valid collection alias', async () => {
742+
// Give enough time to Solr for indexing
743+
await new Promise((resolve) => setTimeout(resolve, 5000))
744+
745+
const actual = await sut.getCollectionItems(testCollectionAlias)
746+
const actualFilePreview = actual.items[1] as FilePreview
747+
const actualDatasetPreview = actual.items[0] as DatasetPreview
748+
const actualCollectionPreview = actual.items[2] as CollectionPreview
749+
750+
const expectedFileMd5 = '77c7f03a7d7772907b43f0b322cef723'
751+
752+
const expectedDatasetCitationFragment = `Admin, Dataverse; Owner, Dataverse, ${currentYear}, "Dataset created using the createDataset use case`
753+
const expectedDatasetDescription = 'Dataset created using the createDataset use case'
754+
const expectedFileName = 'test-file-4.tab'
755+
const expectedCollectionsName = 'Scientific Research'
756+
757+
expect(actualFilePreview.checksum?.type).toBe('MD5')
758+
expect(actualFilePreview.checksum?.value).toBe(expectedFileMd5)
759+
expect(actualFilePreview.datasetCitation).toContain(expectedDatasetCitationFragment)
760+
expect(actualFilePreview.datasetId).toBe(testDatasetIds.numericId)
761+
expect(actualFilePreview.datasetName).toBe(expectedDatasetDescription)
762+
expect(actualFilePreview.datasetPersistentId).toBe(testDatasetIds.persistentId)
763+
expect(actualFilePreview.description).toBe('')
764+
expect(actualFilePreview.fileContentType).toBe('text/tab-separated-values')
765+
expect(actualFilePreview.fileId).not.toBeUndefined()
766+
expect(actualFilePreview.fileType).toBe('Tab-Delimited')
767+
expect(actualFilePreview.md5).toBe(expectedFileMd5)
768+
expect(actualFilePreview.name).toBe(expectedFileName)
769+
expect(actualFilePreview.publicationStatuses[0]).toBe(PublicationStatus.Published)
770+
expect(actualFilePreview.sizeInBytes).toBe(137)
771+
expect(actualFilePreview.url).not.toBeUndefined()
772+
expect(actualFilePreview.releaseOrCreateDate).not.toBeUndefined()
773+
expect(actualFilePreview.type).toBe(CollectionItemType.FILE)
774+
expect(actualFilePreview.restricted).toBe(false)
775+
expect(actualFilePreview.canDownloadFile).toBe(true)
776+
expect(actualFilePreview.categories).toEqual(['tabular data'])
777+
expect(actualFilePreview.tabularTags).toEqual(['Genomics', 'Survey'])
778+
expect(actualFilePreview.observations).toBe(10)
779+
expect(actualFilePreview.variables).toBe(3)
780+
781+
expect(actualDatasetPreview.title).toBe(expectedDatasetDescription)
782+
expect(actualDatasetPreview.citation).toContain(expectedDatasetCitationFragment)
783+
expect(actualDatasetPreview.description).toBe('This is the description of the dataset.')
784+
expect(actualDatasetPreview.persistentId).not.toBeUndefined()
785+
expect(actualDatasetPreview.persistentId).not.toBeUndefined()
786+
expect(actualDatasetPreview.publicationStatuses[0]).toBe(PublicationStatus.Published)
787+
expect(actualDatasetPreview.versionId).not.toBeUndefined()
788+
expect(actualDatasetPreview.versionInfo.createTime).not.toBeUndefined()
789+
expect(actualDatasetPreview.versionInfo.lastUpdateTime).not.toBeUndefined()
790+
expect(actualDatasetPreview.versionInfo.majorNumber).toBe(1)
791+
expect(actualDatasetPreview.versionInfo.minorNumber).toBe(0)
792+
expect(actualDatasetPreview.versionInfo.state).toBe('RELEASED')
793+
expect(actualDatasetPreview.parentCollectionAlias).toBe(
794+
'collectionsRepositoryTestSubCollection'
795+
)
796+
expect(actualDatasetPreview.parentCollectionName).toBe(expectedCollectionsName)
797+
expect(actualDatasetPreview.type).toBe(CollectionItemType.DATASET)
798+
799+
expect(actualCollectionPreview.name).toBe(expectedCollectionsName)
800+
expect(actualCollectionPreview.alias).toBe(testSubCollectionAlias)
801+
expect(actualCollectionPreview.description).toBe('We do all the science.')
802+
expect(actualCollectionPreview.imageUrl).toBe(undefined)
803+
expect(actualCollectionPreview.parentAlias).toBe(testCollectionAlias)
804+
expect(actualCollectionPreview.parentName).toBe(expectedCollectionsName)
805+
expect(actualCollectionPreview.publicationStatuses[0]).toBe(PublicationStatus.Published)
806+
expect(actualCollectionPreview.releaseOrCreateDate).not.toBeUndefined()
807+
expect(actualCollectionPreview.affiliation).toBe('Scientific Research University')
808+
expect(actualCollectionPreview.parentAlias).toBe('collectionsRepositoryTestCollection')
809+
expect(actualCollectionPreview.parentName).toBe(expectedCollectionsName)
810+
expect(actualCollectionPreview.type).toBe(CollectionItemType.COLLECTION)
811+
812+
expect(actual.totalItemCount).toBe(3)
813+
})
814+
})
815+
660816
describe('updateCollection', () => {
661817
const testUpdatedCollectionAlias = 'updateCollection-test-updatedAlias'
662818

test/testHelpers/datasets/datasetPreviewHelper.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ export const createDatasetPreviewModel = (): DatasetPreview => {
2929
description: 'test',
3030
publicationStatuses: [PublicationStatus.Draft, PublicationStatus.Unpublished],
3131
parentCollectionAlias: 'parentCollection',
32-
parentCollectionName: 'Parent Collection'
32+
parentCollectionName: 'Parent Collection',
33+
imageUrl: 'http://dataverse.com'
3334
}
3435
return datasetPreviewModel
3536
}
@@ -50,6 +51,7 @@ export const createDatasetPreviewPayload = (): DatasetPreviewPayload => {
5051
type: 'dataset',
5152
publicationStatuses: ['Draft', 'Unpublished'],
5253
identifier_of_dataverse: 'parentCollection',
53-
name_of_dataverse: 'Parent Collection'
54+
name_of_dataverse: 'Parent Collection',
55+
image_url: 'http://dataverse.com'
5456
}
5557
}

test/testHelpers/files/filePreviewHelper.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ export const createFilePreviewModel = (): FilePreview => {
2525
datasetPersistentId: 'test pid1',
2626
datasetCitation: 'test citation',
2727
publicationStatuses: [PublicationStatus.Published],
28-
releaseOrCreateDate: new Date('2023-05-15T08:21:01Z')
28+
releaseOrCreateDate: new Date('2023-05-15T08:21:01Z'),
29+
canDownloadFile: true,
30+
restricted: false
2931
}
3032
return filePreviewModel
3133
}
@@ -53,6 +55,8 @@ export const createFilePreviewPayload = (): FilePreviewPayload => {
5355
dataset_persistent_id: 'test pid1',
5456
dataset_citation: 'test citation',
5557
publicationStatuses: ['Published'],
56-
releaseOrCreateDate: '2023-05-15T08:21:01Z'
58+
releaseOrCreateDate: '2023-05-15T08:21:01Z',
59+
canDownloadFile: true,
60+
restricted: false
5761
}
5862
}

test/testHelpers/files/filesHelper.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,3 +211,19 @@ async function createBlobWithSize(size: number): Promise<Blob> {
211211
const arrayBuffer = new ArrayBuffer(size)
212212
return new Blob([arrayBuffer])
213213
}
214+
215+
export const updateFileTabularTags = async (
216+
fileId: number,
217+
tabularTags: string[]
218+
): Promise<AxiosResponse> => {
219+
return await axios.post(
220+
`${TestConstants.TEST_API_URL}/files/${fileId}/metadata/tabularTags`,
221+
{ tabularTags },
222+
{
223+
headers: {
224+
'Content-type': 'application/json',
225+
'X-Dataverse-Key': process.env.TEST_API_KEY
226+
}
227+
}
228+
)
229+
}

0 commit comments

Comments
 (0)