Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/collections/domain/models/CollectionItemSubset.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export interface CollectionItemSubset {
items: (CollectionPreview | DatasetPreview | FilePreview)[]
facets: CollectionItemsFacet[]
totalItemCount: number
countPerObjectType: CountPerObjectType
}

export interface CollectionItemsFacet {
Expand All @@ -18,3 +19,9 @@ interface CollectionItemsFacetLabel {
name: string
count: number
}

interface CountPerObjectType {
dataverses: number
datasets: number
files: number
}
6 changes: 4 additions & 2 deletions src/collections/infra/repositories/CollectionsRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,8 @@ export enum GetCollectionItemsQueryParams {
PER_PAGE = 'per_page',
START = 'start',
TYPE = 'type',
FILTERQUERY = 'fq'
FILTERQUERY = 'fq',
SHOW_TYPE_COUNTS = 'show_type_counts'
}

export class CollectionsRepository extends ApiRepository implements ICollectionsRepository {
Expand Down Expand Up @@ -135,7 +136,8 @@ export class CollectionsRepository extends ApiRepository implements ICollections
[GetCollectionItemsQueryParams.QUERY]: '*',
[GetCollectionItemsQueryParams.SHOW_FACETS]: 'true',
[GetCollectionItemsQueryParams.SORT]: SortType.DATE,
[GetCollectionItemsQueryParams.ORDER]: OrderType.DESC
[GetCollectionItemsQueryParams.ORDER]: OrderType.DESC,
[GetCollectionItemsQueryParams.SHOW_TYPE_COUNTS]: 'true'
})

if (collectionId) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export interface CollectionItemsCountPerObjectTypePayload {
Dataverses: number
Datasets: number
Files: number
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import { CollectionPreview } from '../../../domain/models/CollectionPreview'
import { CollectionContact } from '../../../domain/models/CollectionContact'
import { CollectionType } from '../../../domain/models/CollectionType'
import { CollectionItemsFacetPayload } from './CollectionItemsFacetsPayload'
import { CollectionItemsCountPerObjectTypePayload } from './CollectionItemsCountPerObjectTypePayload'

export const transformCollectionResponseToCollection = (response: AxiosResponse): Collection => {
const collectionPayload = response.data.data
Expand Down Expand Up @@ -84,6 +85,9 @@ export const transformCollectionItemsResponseToCollectionItemSubset = (
const responseDataPayload = response.data.data
const itemsPayload = responseDataPayload.items
const facetsPayload = responseDataPayload.facets as CollectionItemsFacetPayload
const countPerObjectTypePayload = responseDataPayload[
'total_count_per_object_type'
] as CollectionItemsCountPerObjectTypePayload

const items: (DatasetPreview | FilePreview | CollectionPreview)[] = []

Expand Down Expand Up @@ -116,10 +120,17 @@ export const transformCollectionItemsResponseToCollectionItemSubset = (
})
)

const countPerObjectType = {
dataverses: countPerObjectTypePayload['Dataverses'],
datasets: countPerObjectTypePayload['Datasets'],
files: countPerObjectTypePayload['Files']
}

return {
items,
facets,
totalItemCount: responseDataPayload.total_count
totalItemCount: responseDataPayload.total_count,
countPerObjectType
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ describe('execute', () => {
} catch (error) {
throw new Error('Should not raise an error')
} finally {
expect(metadataFieldInfos?.length).toBe(59)
expect(metadataFieldInfos?.length).toBe(64)
expect(metadataFieldInfos?.[0].name).toBe('authorName')
expect(metadataFieldInfos?.[0].displayName).toBe('Author Name')
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ describe('execute', () => {
throw new Error('Should not raise an error')
} finally {
expect(metadataBlocks).not.toBeNull()
expect(metadataBlocks?.length).toBe(6)
expect(metadataBlocks?.length).toBe(7)
expect(metadataBlocks?.[0].metadataFields.title.name).toBe('title')
}
})
Expand Down
48 changes: 48 additions & 0 deletions test/integration/collections/CollectionsRepository.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -425,6 +425,9 @@ describe('CollectionsRepository', () => {
expect(actualCollectionPreview.type).toBe(CollectionItemType.COLLECTION)

expect(actual.totalItemCount).toBe(3)
expect(actual.countPerObjectType.dataverses).toBe(1)
expect(actual.countPerObjectType.datasets).toBe(1)
expect(actual.countPerObjectType.files).toBe(1)

expect(actual.facets).toEqual(expectedFacetsAll)

Expand All @@ -446,6 +449,9 @@ describe('CollectionsRepository', () => {
)
expect(actual.totalItemCount).toBe(1)
expect((actual.items[0] as FilePreview).name).toBe(expectedFileName)
expect(actual.countPerObjectType.dataverses).toBe(0)
expect(actual.countPerObjectType.datasets).toBe(0)
expect(actual.countPerObjectType.files).toBe(1)

const collectionSearchCriteriaForDataset = new CollectionSearchCriteria().withSearchText(
'This is the description'
Expand All @@ -458,6 +464,9 @@ describe('CollectionsRepository', () => {
)
expect(actual.totalItemCount).toBe(1)
expect((actual.items[0] as DatasetPreview).title).toBe(expectedDatasetDescription)
expect(actual.countPerObjectType.dataverses).toBe(0)
expect(actual.countPerObjectType.datasets).toBe(1)
expect(actual.countPerObjectType.files).toBe(0)

const collectionSearchCriteriaForDatasetAndCollection =
new CollectionSearchCriteria().withSearchText('the')
Expand All @@ -470,6 +479,9 @@ describe('CollectionsRepository', () => {
expect(actual.totalItemCount).toBe(2)
expect((actual.items[0] as DatasetPreview).title).toBe(expectedDatasetDescription)
expect((actual.items[1] as CollectionPreview).name).toBe(expectedCollectionsName)
expect(actual.countPerObjectType.dataverses).toBe(1)
expect(actual.countPerObjectType.datasets).toBe(1)
expect(actual.countPerObjectType.files).toBe(0)

// Test search text, limit and offset
actual = await sut.getCollectionItems(
Expand All @@ -481,6 +493,9 @@ describe('CollectionsRepository', () => {
expect(actual.items.length).toBe(1)
expect(actual.totalItemCount).toBe(2)
expect((actual.items[0] as CollectionPreview).name).toBe(expectedCollectionsName)
expect(actual.countPerObjectType.dataverses).toBe(1)
expect(actual.countPerObjectType.datasets).toBe(1)
expect(actual.countPerObjectType.files).toBe(0)

// Test type collection
const collectionSearchCriteriaForCollectionType =
Expand All @@ -495,6 +510,9 @@ describe('CollectionsRepository', () => {
expect(actual.totalItemCount).toBe(1)
expect((actual.items[0] as CollectionPreview).name).toBe(expectedCollectionsName)
expect(actual.facets).toEqual(expectedFacetsFromCollectionOnly)
expect(actual.countPerObjectType.dataverses).toBe(1)
expect(actual.countPerObjectType.datasets).toBe(0)
expect(actual.countPerObjectType.files).toBe(0)

// Test type dataset
const collectionSearchCriteriaForDatasetType = new CollectionSearchCriteria().withItemTypes([
Expand All @@ -510,6 +528,9 @@ describe('CollectionsRepository', () => {
expect(actual.totalItemCount).toBe(1)
expect((actual.items[0] as DatasetPreview).title).toBe(expectedDatasetDescription)
expect(actual.facets).toEqual(expectedFacetsFromDatasetOnly)
expect(actual.countPerObjectType.dataverses).toBe(0)
expect(actual.countPerObjectType.datasets).toBe(1)
expect(actual.countPerObjectType.files).toBe(0)

// Test type file
const collectionSearchCriteriaForFileType = new CollectionSearchCriteria().withItemTypes([
Expand All @@ -525,6 +546,9 @@ describe('CollectionsRepository', () => {
expect(actual.totalItemCount).toBe(1)
expect((actual.items[0] as FilePreview).name).toBe(expectedFileName)
expect(actual.facets).toEqual(expectedFacetsFromFileOnly)
expect(actual.countPerObjectType.dataverses).toBe(0)
expect(actual.countPerObjectType.datasets).toBe(0)
expect(actual.countPerObjectType.files).toBe(1)

// Test multiple types
const collectionSearchCriteriaForMultiTypes = new CollectionSearchCriteria().withItemTypes([
Expand All @@ -542,6 +566,9 @@ describe('CollectionsRepository', () => {
expect((actual.items[0] as FilePreview).name).toBe(expectedFileName)
expect((actual.items[1] as CollectionPreview).name).toBe(expectedCollectionsName)
expect(actual.facets).toEqual(expectedFacetsFromCollectionAndFile)
expect(actual.countPerObjectType.dataverses).toBe(1)
expect(actual.countPerObjectType.datasets).toBe(0)
expect(actual.countPerObjectType.files).toBe(1)

// Test Sort by name ascending
const collectionSearchCriteriaNameAscending = new CollectionSearchCriteria()
Expand All @@ -559,6 +586,9 @@ describe('CollectionsRepository', () => {
expect((actual.items[0] as DatasetPreview).type).toBe(CollectionItemType.DATASET)
expect((actual.items[1] as CollectionPreview).type).toBe(CollectionItemType.COLLECTION)
expect((actual.items[2] as FilePreview).type).toBe(CollectionItemType.FILE)
expect(actual.countPerObjectType.dataverses).toBe(1)
expect(actual.countPerObjectType.datasets).toBe(1)
expect(actual.countPerObjectType.files).toBe(1)

// Test Sort by name descending
const collectionSearchCriteriaNameDescending = new CollectionSearchCriteria()
Expand All @@ -576,6 +606,9 @@ describe('CollectionsRepository', () => {
expect((actual.items[0] as FilePreview).type).toBe(CollectionItemType.FILE)
expect((actual.items[1] as CollectionPreview).type).toBe(CollectionItemType.COLLECTION)
expect((actual.items[2] as DatasetPreview).type).toBe(CollectionItemType.DATASET)
expect(actual.countPerObjectType.dataverses).toBe(1)
expect(actual.countPerObjectType.datasets).toBe(1)
expect(actual.countPerObjectType.files).toBe(1)

// Test Sort by date ascending
const collectionSearchCriteriaDateAscending = new CollectionSearchCriteria()
Expand All @@ -593,6 +626,9 @@ describe('CollectionsRepository', () => {
expect((actual.items[0] as CollectionPreview).type).toBe(CollectionItemType.COLLECTION)
expect((actual.items[1] as DatasetPreview).type).toBe(CollectionItemType.DATASET)
expect((actual.items[2] as FilePreview).type).toBe(CollectionItemType.FILE)
expect(actual.countPerObjectType.dataverses).toBe(1)
expect(actual.countPerObjectType.datasets).toBe(1)
expect(actual.countPerObjectType.files).toBe(1)

// Test Sort by date descending
const collectionSearchCriteriaDateDescending = new CollectionSearchCriteria()
Expand All @@ -610,6 +646,9 @@ describe('CollectionsRepository', () => {
expect((actual.items[0] as FilePreview).type).toBe(CollectionItemType.FILE)
expect((actual.items[1] as DatasetPreview).type).toBe(CollectionItemType.DATASET)
expect((actual.items[2] as CollectionPreview).type).toBe(CollectionItemType.COLLECTION)
expect(actual.countPerObjectType.dataverses).toBe(1)
expect(actual.countPerObjectType.datasets).toBe(1)
expect(actual.countPerObjectType.files).toBe(1)

// Test with Filter query related to the collection
const collectionSearchCriteriaFilterQueryCollection =
Expand All @@ -625,6 +664,9 @@ describe('CollectionsRepository', () => {
expect(actual.totalItemCount).toBe(1)
expect((actual.items[0] as CollectionPreview).name).toBe(expectedCollectionsName)
expect(actual.facets).toEqual(expectedFacetsFromCollectionOnly)
expect(actual.countPerObjectType.dataverses).toBe(1)
expect(actual.countPerObjectType.datasets).toBe(0)
expect(actual.countPerObjectType.files).toBe(0)

// Test with Filter query related to the dataset
const collectionSearchCriteriaFilterQueryDataset =
Expand All @@ -642,6 +684,9 @@ describe('CollectionsRepository', () => {
expect(actual.totalItemCount).toBe(1)
expect((actual.items[0] as DatasetPreview).title).toBe(expectedDatasetDescription)
expect(actual.facets).toEqual(expectedFacetsFromDatasetOnly)
expect(actual.countPerObjectType.dataverses).toBe(0)
expect(actual.countPerObjectType.datasets).toBe(1)
expect(actual.countPerObjectType.files).toBe(0)

// Test with Filter query related to the file
const collectionSearchCriteriaFilterQuerieCollAndFile =
Expand All @@ -658,6 +703,9 @@ describe('CollectionsRepository', () => {
expect(actual.totalItemCount).toBe(1)
expect((actual.items[0] as FilePreview).name).toBe(expectedFileName)
expect(actual.facets).toEqual(expectedFacetsFromFileOnly)
expect(actual.countPerObjectType.dataverses).toBe(0)
expect(actual.countPerObjectType.datasets).toBe(0)
expect(actual.countPerObjectType.files).toBe(1)
})

test('should return error when collection does not exist', async () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ describe('MetadataBlocksRepository', () => {
describe('getAllMetadataBlocks', () => {
test('should return all metadata blocks', async () => {
const actual = await sut.getAllMetadataBlocks()
expect(actual.length).toBe(6)
expect(actual.length).toBe(7)
expect(actual[0].name).toBe(citationMetadataBlockName)
expect(actual[0].metadataFields.title.name).toBe('title')
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ describe('getAllFacetableMetadataFields', () => {
test('should return all facetable metadata fields', async () => {
const actual = await sut.getAllFacetableMetadataFields()

expect(actual.length).toBe(59)
expect(actual.length).toBe(64)
expect(actual[0].name).toBe('authorName')
expect(actual[0].displayName).toBe('Author Name')
})
Expand Down
23 changes: 19 additions & 4 deletions test/unit/collections/CollectionsRepository.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -373,11 +373,17 @@ describe('CollectionsRepository', () => {
]
const testTotalCount = 2
const testFacets = createCollectionItemsFacetsModel()
const testCountPerObjectType = {
dataverses: 0,
datasets: 1,
files: 1
}

const testItemSubset: CollectionItemSubset = {
items: testItems,
facets: testFacets,
totalItemCount: testTotalCount
totalItemCount: testTotalCount,
countPerObjectType: testCountPerObjectType
}

const testItemPreviewsResponse = {
Expand All @@ -390,7 +396,12 @@ describe('CollectionsRepository', () => {
createFilePreviewPayload(),
createCollectionPreviewPayload()
],
facets: createCollectionItemsFacetsPayload()
facets: createCollectionItemsFacetsPayload(),
total_count_per_object_type: {
Dataverses: 0,
Datasets: 1,
Files: 1
}
}
}
}
Expand All @@ -407,7 +418,8 @@ describe('CollectionsRepository', () => {
[GetCollectionItemsQueryParams.QUERY]: '*',
[GetCollectionItemsQueryParams.SHOW_FACETS]: 'true',
[GetCollectionItemsQueryParams.SORT]: SortType.DATE,
[GetCollectionItemsQueryParams.ORDER]: OrderType.DESC
[GetCollectionItemsQueryParams.ORDER]: OrderType.DESC,
[GetCollectionItemsQueryParams.SHOW_TYPE_COUNTS]: 'true'
})

const expectedRequestConfigApiKey = {
Expand Down Expand Up @@ -452,6 +464,7 @@ describe('CollectionsRepository', () => {
[GetCollectionItemsQueryParams.SHOW_FACETS]: 'true',
[GetCollectionItemsQueryParams.SORT]: SortType.DATE,
[GetCollectionItemsQueryParams.ORDER]: OrderType.DESC,
[GetCollectionItemsQueryParams.SHOW_TYPE_COUNTS]: 'true',
[GetCollectionItemsQueryParams.PER_PAGE]: testLimit.toString(),
[GetCollectionItemsQueryParams.START]: testOffset.toString()
})
Expand Down Expand Up @@ -499,6 +512,7 @@ describe('CollectionsRepository', () => {
[GetCollectionItemsQueryParams.SHOW_FACETS]: 'true',
[GetCollectionItemsQueryParams.SORT]: SortType.DATE,
[GetCollectionItemsQueryParams.ORDER]: OrderType.DESC,
[GetCollectionItemsQueryParams.SHOW_TYPE_COUNTS]: 'true',
[GetCollectionItemsQueryParams.SUBTREE]: testCollectionId
})

Expand Down Expand Up @@ -542,7 +556,8 @@ describe('CollectionsRepository', () => {
[GetCollectionItemsQueryParams.QUERY]: '*',
[GetCollectionItemsQueryParams.SHOW_FACETS]: 'true',
[GetCollectionItemsQueryParams.SORT]: SortType.DATE,
[GetCollectionItemsQueryParams.ORDER]: OrderType.DESC
[GetCollectionItemsQueryParams.ORDER]: OrderType.DESC,
[GetCollectionItemsQueryParams.SHOW_TYPE_COUNTS]: 'true'
})

const expectedRequestConfigApiKey = {
Expand Down
8 changes: 7 additions & 1 deletion test/unit/collections/GetCollectionItems.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,17 @@ describe('execute', () => {
]
const testTotalCount = 3
const testFacets = createCollectionItemsFacetsModel()
const testCountPerObjectType = {
dataverses: 1,
datasets: 1,
files: 1
}

const testItemSubset: CollectionItemSubset = {
items: testItems,
facets: testFacets,
totalItemCount: testTotalCount
totalItemCount: testTotalCount,
countPerObjectType: testCountPerObjectType
}

beforeEach(() => {
Expand Down