Skip to content

Commit 1de7036

Browse files
committed
Merge branch 'develop' into feat/202-featured-items-use-cases
2 parents f58eed6 + d9a70a2 commit 1de7036

File tree

10 files changed

+213
-11
lines changed

10 files changed

+213
-11
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 & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,12 @@ import {
2121
ROOT_COLLECTION_ALIAS
2222
} from '../../testHelpers/collections/collectionHelper'
2323
import { CollectionPayload } from '../../../src/collections/infra/repositories/transformers/CollectionPayload'
24-
import { uploadFileViaApi } from '../../testHelpers/files/filesHelper'
25-
import { deleteUnpublishedDatasetViaApi } from '../../testHelpers/datasets/datasetHelper'
24+
import { updateFileTabularTags, uploadFileViaApi } from '../../testHelpers/files/filesHelper'
25+
import {
26+
deletePublishedDatasetViaApi,
27+
deleteUnpublishedDatasetViaApi,
28+
publishDatasetViaApi
29+
} from '../../testHelpers/datasets/datasetHelper'
2630
import { PublicationStatus } from '../../../src/core/domain/models/PublicationStatus'
2731
import { CollectionType } from '../../../src/collections/domain/models/CollectionType'
2832
import {
@@ -41,7 +45,7 @@ describe('CollectionsRepository', () => {
4145
const testCollectionAlias = 'collectionsRepositoryTestCollection'
4246
const sut: CollectionsRepository = new CollectionsRepository()
4347
let testCollectionId: number
44-
48+
const currentYear = new Date().getFullYear()
4549
beforeAll(async () => {
4650
ApiConfig.init(
4751
TestConstants.TEST_API_URL,
@@ -300,8 +304,7 @@ describe('CollectionsRepository', () => {
300304
const actualCollectionPreview = actual.items[2] as CollectionPreview
301305

302306
const expectedFileMd5 = '68b22040025784da775f55cfcb6dee2e'
303-
const expectedDatasetCitationFragment =
304-
'Admin, Dataverse; Owner, Dataverse, 2025, "Dataset created using the createDataset use case'
307+
const expectedDatasetCitationFragment = `Admin, Dataverse; Owner, Dataverse, ${currentYear}, "Dataset created using the createDataset use case"`
305308
const expectedDatasetDescription = 'Dataset created using the createDataset use case'
306309
const expectedFileName = 'test-file-1.txt'
307310
const expectedCollectionsName = 'Scientific Research'
@@ -386,6 +389,8 @@ describe('CollectionsRepository', () => {
386389
expect(actualFilePreview.url).not.toBeUndefined()
387390
expect(actualFilePreview.releaseOrCreateDate).not.toBeUndefined()
388391
expect(actualFilePreview.type).toBe(CollectionItemType.FILE)
392+
expect(actualFilePreview.restricted).toBe(false)
393+
expect(actualFilePreview.canDownloadFile).toBe(true)
389394

390395
expect(actualDatasetPreview.title).toBe(expectedDatasetDescription)
391396
expect(actualDatasetPreview.citation).toContain(expectedDatasetCitationFragment)
@@ -666,6 +671,156 @@ describe('CollectionsRepository', () => {
666671
})
667672
})
668673

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

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)