diff --git a/src/collections/domain/models/CollectionItemSubset.ts b/src/collections/domain/models/CollectionItemSubset.ts index 59bb3fb5..7a5637ab 100644 --- a/src/collections/domain/models/CollectionItemSubset.ts +++ b/src/collections/domain/models/CollectionItemSubset.ts @@ -6,7 +6,7 @@ export interface CollectionItemSubset { items: (CollectionPreview | DatasetPreview | FilePreview)[] facets: CollectionItemsFacet[] totalItemCount: number - countPerObjectType: CountPerObjectType + countPerObjectType?: CountPerObjectType } export interface CollectionItemsFacet { @@ -20,7 +20,7 @@ export interface CollectionItemsFacetLabel { count: number } -interface CountPerObjectType { +export interface CountPerObjectType { collections: number datasets: number files: number diff --git a/src/collections/domain/models/MyDataCollectionItemSubset.ts b/src/collections/domain/models/MyDataCollectionItemSubset.ts new file mode 100644 index 00000000..3d18a61d --- /dev/null +++ b/src/collections/domain/models/MyDataCollectionItemSubset.ts @@ -0,0 +1,17 @@ +import { CollectionPreview } from './CollectionPreview' +import { DatasetPreview } from '../../../datasets' +import { FilePreview } from '../../../files' +import { CountPerObjectType } from './CollectionItemSubset' +import { PublicationStatus } from '../../../core/domain/models/PublicationStatus' + +export interface MyDataCollectionItemSubset { + items: (CollectionPreview | DatasetPreview | FilePreview)[] + publicationStatusCounts: PublicationStatusCount[] + totalItemCount: number + countPerObjectType: CountPerObjectType +} + +export interface PublicationStatusCount { + publicationStatus: PublicationStatus + count: number +} diff --git a/src/collections/domain/repositories/ICollectionsRepository.ts b/src/collections/domain/repositories/ICollectionsRepository.ts index c8fc6549..6c0baf35 100644 --- a/src/collections/domain/repositories/ICollectionsRepository.ts +++ b/src/collections/domain/repositories/ICollectionsRepository.ts @@ -4,10 +4,11 @@ import { Collection } from '../models/Collection' import { CollectionFacet } from '../models/CollectionFacet' import { CollectionFeaturedItem } from '../models/CollectionFeaturedItem' import { CollectionItemSubset } from '../models/CollectionItemSubset' +import { MyDataCollectionItemSubset } from '../models/MyDataCollectionItemSubset' import { CollectionSearchCriteria } from '../models/CollectionSearchCriteria' import { CollectionUserPermissions } from '../models/CollectionUserPermissions' -import { PublicationStatus } from '../../../../src/core/domain/models/PublicationStatus' -import { CollectionItemType } from '../../../../src/collections/domain/models/CollectionItemType' +import { PublicationStatus } from '../../../core/domain/models/PublicationStatus' +import { CollectionItemType } from '../../../collections/domain/models/CollectionItemType' export interface ICollectionsRepository { getCollection(collectionIdOrAlias: number | string): Promise @@ -25,7 +26,8 @@ export interface ICollectionsRepository { collectionId?: string, limit?: number, offset?: number, - collectionSearchCriteria?: CollectionSearchCriteria + collectionSearchCriteria?: CollectionSearchCriteria, + showTypeCounts?: boolean ): Promise getMyDataCollectionItems( roleIds: number[], @@ -35,7 +37,7 @@ export interface ICollectionsRepository { selectedPage?: number, searchText?: string, otherUserName?: string - ): Promise + ): Promise updateCollection( collectionIdOrAlias: number | string, updatedCollection: CollectionDTO diff --git a/src/collections/domain/useCases/GetCollectionItems.ts b/src/collections/domain/useCases/GetCollectionItems.ts index aa3e2c55..1c85b202 100644 --- a/src/collections/domain/useCases/GetCollectionItems.ts +++ b/src/collections/domain/useCases/GetCollectionItems.ts @@ -18,19 +18,22 @@ export class GetCollectionItems implements UseCase { * @param {number} [limit] - Limit for pagination (optional). * @param {number} [offset] - Offset for pagination (optional). * @param {CollectionSearchCriteria} [collectionSearchCriteria] - Supports filtering the collection items by different properties (optional). + * @param {boolean} [showTypeCounts] - If true, the response will include the count per object type (optional). * @returns {Promise} */ async execute( collectionId?: string, limit?: number, offset?: number, - collectionSearchCriteria?: CollectionSearchCriteria + collectionSearchCriteria?: CollectionSearchCriteria, + showTypeCounts = false ): Promise { return await this.collectionsRepository.getCollectionItems( collectionId, limit, offset, - collectionSearchCriteria + collectionSearchCriteria, + showTypeCounts ) } } diff --git a/src/collections/domain/useCases/GetMyDataCollectionItems.ts b/src/collections/domain/useCases/GetMyDataCollectionItems.ts index 5af00187..96522783 100644 --- a/src/collections/domain/useCases/GetMyDataCollectionItems.ts +++ b/src/collections/domain/useCases/GetMyDataCollectionItems.ts @@ -1,10 +1,10 @@ import { UseCase } from '../../../core/domain/useCases/UseCase' -import { CollectionItemSubset } from '../models/CollectionItemSubset' +import { MyDataCollectionItemSubset } from '../models/MyDataCollectionItemSubset' import { ICollectionsRepository } from '../repositories/ICollectionsRepository' -import { CollectionItemType } from '../../../../src/collections/domain/models/CollectionItemType' -import { PublicationStatus } from '../../../../src/core/domain/models/PublicationStatus' +import { CollectionItemType } from '../../../collections/domain/models/CollectionItemType' +import { PublicationStatus } from '../../../core/domain/models/PublicationStatus' -export class GetMyDataCollectionItems implements UseCase { +export class GetMyDataCollectionItems implements UseCase { private collectionsRepository: ICollectionsRepository constructor(collectionsRepository: ICollectionsRepository) { @@ -31,7 +31,7 @@ export class GetMyDataCollectionItems implements UseCase { selectedPage?: number, searchText?: string, otherUserName?: string - ): Promise { + ): Promise { return this.collectionsRepository.getMyDataCollectionItems( roleIds, collectionItemTypes, diff --git a/src/collections/infra/repositories/CollectionsRepository.ts b/src/collections/infra/repositories/CollectionsRepository.ts index 2be641b0..eb3f2e81 100644 --- a/src/collections/infra/repositories/CollectionsRepository.ts +++ b/src/collections/infra/repositories/CollectionsRepository.ts @@ -12,6 +12,7 @@ import { CollectionFacet } from '../../domain/models/CollectionFacet' import { CollectionUserPermissions } from '../../domain/models/CollectionUserPermissions' import { transformCollectionUserPermissionsResponseToCollectionUserPermissions } from './transformers/collectionUserPermissionsTransformers' import { CollectionItemSubset } from '../../domain/models/CollectionItemSubset' +import { MyDataCollectionItemSubset } from '../../domain/models/MyDataCollectionItemSubset' import { CollectionSearchCriteria, OrderType, @@ -22,7 +23,7 @@ import { CollectionFeaturedItem } from '../../domain/models/CollectionFeaturedIt import { transformCollectionFeaturedItemsPayloadToCollectionFeaturedItems } from './transformers/collectionFeaturedItemsTransformer' import { CollectionFeaturedItemsDTO } from '../../domain/dtos/CollectionFeaturedItemsDTO' import { ApiConstants } from '../../../core/infra/repositories/ApiConstants' -import { PublicationStatus } from '../../../../src/core/domain/models/PublicationStatus' +import { PublicationStatus } from '../../../core/domain/models/PublicationStatus' import { ReadError } from '../../../core/domain/repositories/ReadError' export interface NewCollectionRequestPayload { @@ -155,14 +156,14 @@ export class CollectionsRepository extends ApiRepository implements ICollections collectionId?: string, limit?: number, offset?: number, - collectionSearchCriteria?: CollectionSearchCriteria + collectionSearchCriteria?: CollectionSearchCriteria, + showTypeCounts?: boolean ): Promise { const queryParams = new URLSearchParams({ [GetCollectionItemsQueryParams.QUERY]: '*', [GetCollectionItemsQueryParams.SHOW_FACETS]: 'true', [GetCollectionItemsQueryParams.SORT]: SortType.DATE, - [GetCollectionItemsQueryParams.ORDER]: OrderType.DESC, - [GetCollectionItemsQueryParams.SHOW_TYPE_COUNTS]: 'true' + [GetCollectionItemsQueryParams.ORDER]: OrderType.DESC }) if (collectionId) { @@ -177,6 +178,10 @@ export class CollectionsRepository extends ApiRepository implements ICollections queryParams.set(GetCollectionItemsQueryParams.START, offset.toString()) } + if (showTypeCounts) { + queryParams.set(GetCollectionItemsQueryParams.SHOW_TYPE_COUNTS, 'true') + } + if (collectionSearchCriteria) { this.applyCollectionSearchCriteriaToQueryParams(queryParams, collectionSearchCriteria) } @@ -209,7 +214,7 @@ export class CollectionsRepository extends ApiRepository implements ICollections selectedPage?: number, searchText?: string, userIdentifier?: string - ): Promise { + ): Promise { const queryParams = new URLSearchParams() if (limit) { diff --git a/src/collections/infra/repositories/transformers/collectionTransformers.ts b/src/collections/infra/repositories/transformers/collectionTransformers.ts index aed10e29..43802706 100644 --- a/src/collections/infra/repositories/transformers/collectionTransformers.ts +++ b/src/collections/infra/repositories/transformers/collectionTransformers.ts @@ -10,8 +10,8 @@ import { CollectionFacet } from '../../../domain/models/CollectionFacet' import { CollectionFacetPayload } from './CollectionFacetPayload' import { CollectionItemsFacet, - CollectionItemsFacetLabel, - CollectionItemSubset + CollectionItemSubset, + CountPerObjectType } from '../../../domain/models/CollectionItemSubset' import { DatasetPreview } from '../../../../datasets' import { FilePreview } from '../../../../files' @@ -39,7 +39,11 @@ import { MyDataFilePreviewPayload } from '../../../../files/infra/repositories/t import { MyDataDatasetPreviewPayload } from '../../../../datasets/infra/repositories/transformers/MyDataDatasetPreviewPayload' import { MyDataCollectionPreviewPayload } from './MyDataCollectionPreviewPayload' import { MyDataCountPerObjectTypePayload } from './MyDataCountPerObjectTypePayload' -import { MyDataPublicationStatusCountsPayload } from './MyDataPublicationStatusCountsPayload' +import { + MyDataCollectionItemSubset, + PublicationStatusCount +} from '../../../domain/models/MyDataCollectionItemSubset' +import { PublicationStatus } from '../../../../core/domain/models/PublicationStatus' export const transformCollectionResponseToCollection = (response: AxiosResponse): Collection => { const collectionPayload = response.data.data @@ -98,9 +102,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 countPerObjectTypePayload = responseDataPayload['total_count_per_object_type'] as + | CollectionItemsCountPerObjectTypePayload + | undefined const items: (DatasetPreview | FilePreview | CollectionPreview)[] = [] @@ -133,23 +137,25 @@ export const transformCollectionItemsResponseToCollectionItemSubset = ( }) ) - const countPerObjectType = { - collections: countPerObjectTypePayload['Dataverses'], - datasets: countPerObjectTypePayload['Datasets'], - files: countPerObjectTypePayload['Files'] - } + const countPerObjectType: CountPerObjectType | undefined = countPerObjectTypePayload + ? { + collections: countPerObjectTypePayload['Dataverses'], + datasets: countPerObjectTypePayload['Datasets'], + files: countPerObjectTypePayload['Files'] + } + : undefined return { items, facets, totalItemCount: responseDataPayload.total_count, - countPerObjectType + ...(countPerObjectType && { countPerObjectType }) } } export const transformMyDataResponseToCollectionItemSubset = ( response: AxiosResponse -): CollectionItemSubset => { +): MyDataCollectionItemSubset => { const responseDataPayload = response.data.data const itemsPayload = responseDataPayload.items const countPerObjectTypePayload = responseDataPayload[ @@ -188,14 +194,32 @@ export const transformMyDataResponseToCollectionItemSubset = ( datasets: countPerObjectTypePayload['datasets_count'], files: countPerObjectTypePayload['files_count'] } - const publishingFacet: CollectionItemsFacet = transformPublicationStatusResponseToFacet( - responseDataPayload.pubstatus_counts as MyDataPublicationStatusCountsPayload - ) - const facets: CollectionItemsFacet[] = [publishingFacet] + const publicationStatusCounts: PublicationStatusCount[] = [ + { + publicationStatus: PublicationStatus.Published, + count: responseDataPayload.pubstatus_counts.published_count + }, + { + publicationStatus: PublicationStatus.Unpublished, + count: responseDataPayload.pubstatus_counts.unpublished_count + }, + { + publicationStatus: PublicationStatus.Draft, + count: responseDataPayload.pubstatus_counts.draft_count + }, + { + publicationStatus: PublicationStatus.InReview, + count: responseDataPayload.pubstatus_counts.in_review_count + }, + { + publicationStatus: PublicationStatus.Deaccessioned, + count: responseDataPayload.pubstatus_counts.deaccessioned_count + } + ] return { items, - facets, + publicationStatusCounts, totalItemCount: responseDataPayload.pagination.numResults, countPerObjectType } @@ -209,20 +233,3 @@ const transformContactsPayloadToContacts = ( displayOrder: contactPayload.displayOrder })) } - -const transformPublicationStatusResponseToFacet = ( - publicationStatusCounts: MyDataPublicationStatusCountsPayload -): CollectionItemsFacet => { - const labels: CollectionItemsFacetLabel[] = [ - { name: 'Published', count: publicationStatusCounts.published_count }, - { name: 'Unpublished', count: publicationStatusCounts.unpublished_count }, - { name: 'Draft', count: publicationStatusCounts.draft_count }, - { name: 'In Review', count: publicationStatusCounts.in_review_count }, - { name: 'Deaccessioned', count: publicationStatusCounts.deaccessioned_count } - ] - return { - name: 'publicationStatus', - friendlyName: 'Publication Status', - labels - } -} diff --git a/src/core/index.ts b/src/core/index.ts index 369532c0..e7cb65f8 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -2,3 +2,4 @@ export { ReadError } from './domain/repositories/ReadError' export { WriteError } from './domain/repositories/WriteError' export { ApiConfig } from './infra/repositories/ApiConfig' export { DvObjectOwnerNode, DvObjectType } from './domain/models/DvObjectOwnerNode' +export { PublicationStatus } from './domain/models/PublicationStatus' diff --git a/test/functional/collections/GetMyDataCollectionItems.test.ts b/test/functional/collections/GetMyDataCollectionItems.test.ts index 0c303d5e..5a9c43ec 100644 --- a/test/functional/collections/GetMyDataCollectionItems.test.ts +++ b/test/functional/collections/GetMyDataCollectionItems.test.ts @@ -106,32 +106,26 @@ describe('execute', () => { expect(actualCollectionPreview.alias).toBe(testCollectionAlias) expect(actual.totalItemCount).toBe(1) - expect(actual.facets).toEqual([ + expect(actual.publicationStatusCounts).toEqual([ { - name: 'publicationStatus', - friendlyName: 'Publication Status', - labels: [ - { - name: 'Published', - count: 0 - }, - { - name: 'Unpublished', - count: 1 - }, - { - name: 'Draft', - count: 0 - }, - { - name: 'In Review', - count: 0 - }, - { - name: 'Deaccessioned', - count: 0 - } - ] + publicationStatus: 'Published', + count: 0 + }, + { + publicationStatus: 'Unpublished', + count: 1 + }, + { + publicationStatus: 'Draft', + count: 0 + }, + { + publicationStatus: 'In Review', + count: 0 + }, + { + publicationStatus: 'Deaccessioned', + count: 0 } ]) expect(actual.countPerObjectType).toEqual({ diff --git a/test/integration/collections/CollectionsRepository.test.ts b/test/integration/collections/CollectionsRepository.test.ts index e759e106..b741537a 100644 --- a/test/integration/collections/CollectionsRepository.test.ts +++ b/test/integration/collections/CollectionsRepository.test.ts @@ -487,6 +487,7 @@ describe('CollectionsRepository', () => { expect(actualFilePreview.fileType).toBe('Plain Text') expect(actualFilePreview.md5).toBe(expectedFileMd5) expect(actualFilePreview.name).toBe(expectedFileName) + expect(actualFilePreview.publicationStatuses.length).toBe(2) expect(actualFilePreview.publicationStatuses).toContain(PublicationStatus.Unpublished) expect(actualFilePreview.publicationStatuses).toContain(PublicationStatus.Draft) expect(actualFilePreview.sizeInBytes).toBe(12) @@ -529,9 +530,6 @@ describe('CollectionsRepository', () => { expect(actualCollectionPreview.type).toBe(CollectionItemType.COLLECTION) expect(actual.totalItemCount).toBe(3) - expect(actual.countPerObjectType.collections).toBe(1) - expect(actual.countPerObjectType.datasets).toBe(1) - expect(actual.countPerObjectType.files).toBe(1) expect(actual.facets).toEqual(expectedFacetsAll) @@ -553,9 +551,6 @@ describe('CollectionsRepository', () => { ) expect(actual.totalItemCount).toBe(1) expect((actual.items[0] as FilePreview).name).toBe(expectedFileName) - expect(actual.countPerObjectType.collections).toBe(0) - expect(actual.countPerObjectType.datasets).toBe(0) - expect(actual.countPerObjectType.files).toBe(1) const collectionSearchCriteriaForDataset = new CollectionSearchCriteria().withSearchText( 'Dataset created using' @@ -569,9 +564,6 @@ describe('CollectionsRepository', () => { expect(actual.totalItemCount).toBe(1) expect((actual.items[0] as DatasetPreview).title).toBe(expectedDatasetDescription) - expect(actual.countPerObjectType.collections).toBe(0) - expect(actual.countPerObjectType.datasets).toBe(1) - expect(actual.countPerObjectType.files).toBe(0) const collectionSearchCriteriaForDatasetAndCollection = new CollectionSearchCriteria().withSearchText('the') @@ -584,9 +576,6 @@ 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.collections).toBe(1) - expect(actual.countPerObjectType.datasets).toBe(1) - expect(actual.countPerObjectType.files).toBe(0) // Test search text, limit and offset actual = await sut.getCollectionItems( @@ -598,9 +587,6 @@ 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.collections).toBe(1) - expect(actual.countPerObjectType.datasets).toBe(1) - expect(actual.countPerObjectType.files).toBe(0) // Test type collection const collectionSearchCriteriaForCollectionType = @@ -615,9 +601,6 @@ describe('CollectionsRepository', () => { expect(actual.totalItemCount).toBe(1) expect((actual.items[0] as CollectionPreview).name).toBe(expectedCollectionsName) expect(actual.facets).toEqual(expectedFacetsFromCollectionOnly) - expect(actual.countPerObjectType.collections).toBe(1) - expect(actual.countPerObjectType.datasets).toBe(1) - expect(actual.countPerObjectType.files).toBe(1) // Test type dataset const collectionSearchCriteriaForDatasetType = new CollectionSearchCriteria().withItemTypes([ @@ -633,9 +616,6 @@ describe('CollectionsRepository', () => { expect(actual.totalItemCount).toBe(1) expect((actual.items[0] as DatasetPreview).title).toBe(expectedDatasetDescription) expect(actual.facets).toEqual(expectedFacetsFromDatasetOnly) - expect(actual.countPerObjectType.collections).toBe(1) - expect(actual.countPerObjectType.datasets).toBe(1) - expect(actual.countPerObjectType.files).toBe(1) // Test type file const collectionSearchCriteriaForFileType = new CollectionSearchCriteria().withItemTypes([ @@ -651,9 +631,6 @@ describe('CollectionsRepository', () => { expect(actual.totalItemCount).toBe(1) expect((actual.items[0] as FilePreview).name).toBe(expectedFileName) expect(actual.facets).toEqual(expectedFacetsFromFileOnly) - expect(actual.countPerObjectType.collections).toBe(1) - expect(actual.countPerObjectType.datasets).toBe(1) - expect(actual.countPerObjectType.files).toBe(1) // Test multiple types const collectionSearchCriteriaForMultiTypes = new CollectionSearchCriteria().withItemTypes([ @@ -671,9 +648,6 @@ 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.collections).toBe(1) - expect(actual.countPerObjectType.datasets).toBe(1) - expect(actual.countPerObjectType.files).toBe(1) // Test Sort by name ascending const collectionSearchCriteriaNameAscending = new CollectionSearchCriteria() @@ -691,9 +665,6 @@ 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.collections).toBe(1) - expect(actual.countPerObjectType.datasets).toBe(1) - expect(actual.countPerObjectType.files).toBe(1) // Test Sort by name descending const collectionSearchCriteriaNameDescending = new CollectionSearchCriteria() @@ -711,9 +682,6 @@ 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.collections).toBe(1) - expect(actual.countPerObjectType.datasets).toBe(1) - expect(actual.countPerObjectType.files).toBe(1) // Test Sort by date ascending const collectionSearchCriteriaDateAscending = new CollectionSearchCriteria() @@ -731,9 +699,6 @@ 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.collections).toBe(1) - expect(actual.countPerObjectType.datasets).toBe(1) - expect(actual.countPerObjectType.files).toBe(1) // Test Sort by date descending const collectionSearchCriteriaDateDescending = new CollectionSearchCriteria() @@ -751,9 +716,6 @@ describe('CollectionsRepository', () => { expect((actual.items[0] as DatasetPreview).type).toBe(CollectionItemType.DATASET) expect((actual.items[1] as FilePreview).type).toBe(CollectionItemType.FILE) expect((actual.items[2] as CollectionPreview).type).toBe(CollectionItemType.COLLECTION) - expect(actual.countPerObjectType.collections).toBe(1) - expect(actual.countPerObjectType.datasets).toBe(1) - expect(actual.countPerObjectType.files).toBe(1) // Test with Filter query related to the collection const collectionSearchCriteriaFilterQueryCollection = @@ -769,9 +731,6 @@ describe('CollectionsRepository', () => { expect(actual.totalItemCount).toBe(1) expect((actual.items[0] as CollectionPreview).name).toBe(expectedCollectionsName) expect(actual.facets).toEqual(expectedFacetsFromCollectionOnly) - expect(actual.countPerObjectType.collections).toBe(1) - expect(actual.countPerObjectType.datasets).toBe(0) - expect(actual.countPerObjectType.files).toBe(0) // Test with Filter query related to the dataset const collectionSearchCriteriaFilterQueryDataset = @@ -789,9 +748,6 @@ describe('CollectionsRepository', () => { expect(actual.totalItemCount).toBe(1) expect((actual.items[0] as DatasetPreview).title).toBe(expectedDatasetDescription) expect(actual.facets).toEqual(expectedFacetsFromDatasetOnly) - expect(actual.countPerObjectType.collections).toBe(0) - expect(actual.countPerObjectType.datasets).toBe(1) - expect(actual.countPerObjectType.files).toBe(0) // Test with Filter query related to the file const collectionSearchCriteriaFilterQuerieCollAndFile = @@ -808,9 +764,18 @@ describe('CollectionsRepository', () => { expect(actual.totalItemCount).toBe(1) expect((actual.items[0] as FilePreview).name).toBe(expectedFileName) expect(actual.facets).toEqual(expectedFacetsFromFileOnly) - expect(actual.countPerObjectType.collections).toBe(0) - expect(actual.countPerObjectType.datasets).toBe(0) - expect(actual.countPerObjectType.files).toBe(1) + + // Test with showTypeCounts param in true + actual = await sut.getCollectionItems( + testCollectionAlias, + undefined, + undefined, + undefined, + true + ) + expect(actual.countPerObjectType?.collections).toBe(1) + expect(actual.countPerObjectType?.datasets).toBe(1) + expect(actual.countPerObjectType?.files).toBe(1) }) test('should return error when collection does not exist', async () => { @@ -1420,19 +1385,14 @@ describe('CollectionsRepository', () => { const expectedFileName = 'test-file-2.txt' const expectedCollectionsName = 'Test Collection' - const expectedFacetsAll = [ - { - name: 'publicationStatus', - friendlyName: 'Publication Status', - labels: [ - { name: 'Published', count: 0 }, - { name: 'Unpublished', count: 3 }, - { name: 'Draft', count: 2 }, - { name: 'In Review', count: 0 }, - { name: 'Deaccessioned', count: 0 } - ] - } + const expectedPublicationStatusCounts = [ + { publicationStatus: 'Published', count: 0 }, + { publicationStatus: 'Unpublished', count: 3 }, + { publicationStatus: 'Draft', count: 2 }, + { publicationStatus: 'In Review', count: 0 }, + { publicationStatus: 'Deaccessioned', count: 0 } ] + expect(actual.items.length).toBe(3) expect(actual.totalItemCount).toBe(3) expect(actual.countPerObjectType.collections).toBe(1) @@ -1490,7 +1450,7 @@ describe('CollectionsRepository', () => { expect(actualCollectionPreview.affiliation).toBe('test affiliation') expect(actualCollectionPreview.type).toBe(CollectionItemType.COLLECTION) - expect(actual.facets).toEqual(expectedFacetsAll) + expect(actual.publicationStatusCounts).toEqual(expectedPublicationStatusCounts) // Test limit and selectedPage actual = await sut.getMyDataCollectionItems( @@ -1569,18 +1529,12 @@ describe('CollectionsRepository', () => { expect(actual.items.length).toBe(1) expect(actual.totalItemCount).toBe(1) expect((actual.items[0] as CollectionPreview).name).toBe(expectedCollectionsName) - expect(actual.facets).toEqual([ - { - name: 'publicationStatus', - friendlyName: 'Publication Status', - labels: [ - { name: 'Published', count: 0 }, - { name: 'Unpublished', count: 1 }, - { name: 'Draft', count: 0 }, - { name: 'In Review', count: 0 }, - { name: 'Deaccessioned', count: 0 } - ] - } + expect(actual.publicationStatusCounts).toEqual([ + { publicationStatus: 'Published', count: 0 }, + { publicationStatus: 'Unpublished', count: 1 }, + { publicationStatus: 'Draft', count: 0 }, + { publicationStatus: 'In Review', count: 0 }, + { publicationStatus: 'Deaccessioned', count: 0 } ]) expect(actual.countPerObjectType.collections).toBe(1) expect(actual.countPerObjectType.datasets).toBe(0) @@ -1598,18 +1552,12 @@ describe('CollectionsRepository', () => { expect(actual.items.length).toBe(1) expect(actual.totalItemCount).toBe(1) expect((actual.items[0] as DatasetPreview).title).toBe(expectedDatasetDescription) - expect(actual.facets).toEqual([ - { - name: 'publicationStatus', - friendlyName: 'Publication Status', - labels: [ - { name: 'Published', count: 0 }, - { name: 'Unpublished', count: 1 }, - { name: 'Draft', count: 1 }, - { name: 'In Review', count: 0 }, - { name: 'Deaccessioned', count: 0 } - ] - } + expect(actual.publicationStatusCounts).toEqual([ + { publicationStatus: 'Published', count: 0 }, + { publicationStatus: 'Unpublished', count: 1 }, + { publicationStatus: 'Draft', count: 1 }, + { publicationStatus: 'In Review', count: 0 }, + { publicationStatus: 'Deaccessioned', count: 0 } ]) expect(actual.countPerObjectType.collections).toBe(0) expect(actual.countPerObjectType.datasets).toBe(1) @@ -1628,18 +1576,12 @@ describe('CollectionsRepository', () => { expect(actual.items.length).toBe(1) expect(actual.totalItemCount).toBe(1) expect((actual.items[0] as FilePreview).name).toBe(expectedFileName) - expect(actual.facets).toEqual([ - { - name: 'publicationStatus', - friendlyName: 'Publication Status', - labels: [ - { name: 'Published', count: 0 }, - { name: 'Unpublished', count: 1 }, - { name: 'Draft', count: 1 }, - { name: 'In Review', count: 0 }, - { name: 'Deaccessioned', count: 0 } - ] - } + expect(actual.publicationStatusCounts).toEqual([ + { publicationStatus: 'Published', count: 0 }, + { publicationStatus: 'Unpublished', count: 1 }, + { publicationStatus: 'Draft', count: 1 }, + { publicationStatus: 'In Review', count: 0 }, + { publicationStatus: 'Deaccessioned', count: 0 } ]) expect(actual.countPerObjectType.collections).toBe(0) diff --git a/test/unit/collections/CollectionsRepository.test.ts b/test/unit/collections/CollectionsRepository.test.ts index e0092222..950a9cdf 100644 --- a/test/unit/collections/CollectionsRepository.test.ts +++ b/test/unit/collections/CollectionsRepository.test.ts @@ -419,8 +419,7 @@ describe('CollectionsRepository', () => { [GetCollectionItemsQueryParams.QUERY]: '*', [GetCollectionItemsQueryParams.SHOW_FACETS]: 'true', [GetCollectionItemsQueryParams.SORT]: SortType.DATE, - [GetCollectionItemsQueryParams.ORDER]: OrderType.DESC, - [GetCollectionItemsQueryParams.SHOW_TYPE_COUNTS]: 'true' + [GetCollectionItemsQueryParams.ORDER]: OrderType.DESC }) const expectedRequestConfigApiKey = { @@ -465,7 +464,6 @@ 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() }) @@ -513,7 +511,6 @@ describe('CollectionsRepository', () => { [GetCollectionItemsQueryParams.SHOW_FACETS]: 'true', [GetCollectionItemsQueryParams.SORT]: SortType.DATE, [GetCollectionItemsQueryParams.ORDER]: OrderType.DESC, - [GetCollectionItemsQueryParams.SHOW_TYPE_COUNTS]: 'true', [GetCollectionItemsQueryParams.SUBTREE]: testCollectionId }) @@ -557,8 +554,7 @@ describe('CollectionsRepository', () => { [GetCollectionItemsQueryParams.QUERY]: '*', [GetCollectionItemsQueryParams.SHOW_FACETS]: 'true', [GetCollectionItemsQueryParams.SORT]: SortType.DATE, - [GetCollectionItemsQueryParams.ORDER]: OrderType.DESC, - [GetCollectionItemsQueryParams.SHOW_TYPE_COUNTS]: 'true' + [GetCollectionItemsQueryParams.ORDER]: OrderType.DESC }) const expectedRequestConfigApiKey = { diff --git a/test/unit/collections/GetCollectionItems.test.ts b/test/unit/collections/GetCollectionItems.test.ts index cf2e7448..33c8ecbc 100644 --- a/test/unit/collections/GetCollectionItems.test.ts +++ b/test/unit/collections/GetCollectionItems.test.ts @@ -18,17 +18,11 @@ describe('execute', () => { ] const testTotalCount = 3 const testFacets = createCollectionItemsFacetsModel() - const testCountPerObjectType = { - collections: 1, - datasets: 1, - files: 1 - } const testItemSubset: CollectionItemSubset = { items: testItems, facets: testFacets, - totalItemCount: testTotalCount, - countPerObjectType: testCountPerObjectType + totalItemCount: testTotalCount } beforeEach(() => { @@ -60,7 +54,8 @@ describe('execute', () => { collectionId, undefined, undefined, - undefined + undefined, + false ) expect(actual).toEqual(testItemSubset) }) @@ -75,7 +70,8 @@ describe('execute', () => { undefined, limit, undefined, - undefined + undefined, + false ) expect(actual).toEqual(testItemSubset) }) @@ -90,7 +86,8 @@ describe('execute', () => { undefined, undefined, offset, - undefined + undefined, + false ) expect(actual).toEqual(testItemSubset) }) @@ -105,18 +102,53 @@ describe('execute', () => { undefined, undefined, undefined, - searchCriteria + searchCriteria, + false ) expect(collectionRepositoryStub.getCollectionItems).toHaveBeenCalledWith( undefined, undefined, undefined, - searchCriteria + searchCriteria, + false ) expect(actual).toEqual(testItemSubset) }) + test('should handle showTypeCounts parameter', async () => { + const testItemSubsetWithCount = { + ...testItemSubset, + countPerObjectType: { + collections: 1, + datasets: 1, + files: 1 + } + } + collectionRepositoryStub.getCollectionItems = jest + .fn() + .mockResolvedValue(testItemSubsetWithCount) + + const showTypeCounts = true + + const actual = await testGetCollectionItems.execute( + undefined, + undefined, + undefined, + undefined, + showTypeCounts + ) + + expect(collectionRepositoryStub.getCollectionItems).toHaveBeenCalledWith( + undefined, + undefined, + undefined, + undefined, + showTypeCounts + ) + expect(actual).toEqual(testItemSubsetWithCount) + }) + test('should handle all parameters', async () => { const collectionId = 'test-collection-id' const limit = 10 @@ -127,13 +159,20 @@ describe('execute', () => { collectionRepositoryStub.getCollectionItems = jest.fn().mockResolvedValue(testItemSubset) - const actual = await testGetCollectionItems.execute(collectionId, limit, offset, searchCriteria) + const actual = await testGetCollectionItems.execute( + collectionId, + limit, + offset, + searchCriteria, + false + ) expect(collectionRepositoryStub.getCollectionItems).toHaveBeenCalledWith( collectionId, limit, offset, - searchCriteria + searchCriteria, + false ) expect(actual).toEqual(testItemSubset) })