From 4d53c5273d47808df47b87e0be90bf67724daf5f Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Mon, 2 Jun 2025 14:52:59 -0400 Subject: [PATCH 1/8] change return type of getMyDataCollectionItems use case --- .../domain/models/CollectionItemSubset.ts | 2 +- .../models/MyDataCollectionItemSubset.ts | 17 ++++ .../repositories/ICollectionsRepository.ts | 3 +- .../useCases/GetMyDataCollectionItems.ts | 6 +- .../repositories/CollectionsRepository.ts | 3 +- .../transformers/collectionTransformers.ts | 54 ++++++------ src/core/domain/models/PublicationStatus.ts | 6 +- .../GetMyDataCollectionItems.test.ts | 44 ++++------ .../collections/CollectionsRepository.test.ts | 86 +++++++------------ 9 files changed, 108 insertions(+), 113 deletions(-) create mode 100644 src/collections/domain/models/MyDataCollectionItemSubset.ts diff --git a/src/collections/domain/models/CollectionItemSubset.ts b/src/collections/domain/models/CollectionItemSubset.ts index 59bb3fb5..195f2c3e 100644 --- a/src/collections/domain/models/CollectionItemSubset.ts +++ b/src/collections/domain/models/CollectionItemSubset.ts @@ -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..32783317 --- /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 '../../../../src/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..87009112 100644 --- a/src/collections/domain/repositories/ICollectionsRepository.ts +++ b/src/collections/domain/repositories/ICollectionsRepository.ts @@ -4,6 +4,7 @@ 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' @@ -35,7 +36,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/GetMyDataCollectionItems.ts b/src/collections/domain/useCases/GetMyDataCollectionItems.ts index 5af00187..fe23c82c 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' -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 4123d181..c840c6c5 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, @@ -209,7 +210,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..874a0434 100644 --- a/src/collections/infra/repositories/transformers/collectionTransformers.ts +++ b/src/collections/infra/repositories/transformers/collectionTransformers.ts @@ -10,7 +10,6 @@ import { CollectionFacet } from '../../../domain/models/CollectionFacet' import { CollectionFacetPayload } from './CollectionFacetPayload' import { CollectionItemsFacet, - CollectionItemsFacetLabel, CollectionItemSubset } from '../../../domain/models/CollectionItemSubset' import { DatasetPreview } from '../../../../datasets' @@ -39,7 +38,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 '../../../../../src/core/domain/models/PublicationStatus' export const transformCollectionResponseToCollection = (response: AxiosResponse): Collection => { const collectionPayload = response.data.data @@ -149,7 +152,7 @@ export const transformCollectionItemsResponseToCollectionItemSubset = ( export const transformMyDataResponseToCollectionItemSubset = ( response: AxiosResponse -): CollectionItemSubset => { +): MyDataCollectionItemSubset => { const responseDataPayload = response.data.data const itemsPayload = responseDataPayload.items const countPerObjectTypePayload = responseDataPayload[ @@ -188,14 +191,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 +230,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/domain/models/PublicationStatus.ts b/src/core/domain/models/PublicationStatus.ts index d2266979..35670d77 100644 --- a/src/core/domain/models/PublicationStatus.ts +++ b/src/core/domain/models/PublicationStatus.ts @@ -1,7 +1,7 @@ export enum PublicationStatus { + Deaccessioned = 'Deaccessioned', + InReview = 'InReview', Published = 'Published', Unpublished = 'Unpublished', - Draft = 'Draft', - Deaccessioned = 'Deaccessioned', - InReview = 'In Review' + Draft = 'Draft' } 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 83b026e2..c323a0b6 100644 --- a/test/integration/collections/CollectionsRepository.test.ts +++ b/test/integration/collections/CollectionsRepository.test.ts @@ -487,8 +487,9 @@ describe('CollectionsRepository', () => { expect(actualFilePreview.fileType).toBe('Plain Text') expect(actualFilePreview.md5).toBe(expectedFileMd5) expect(actualFilePreview.name).toBe(expectedFileName) - expect(actualFilePreview.publicationStatuses[0]).toBe(PublicationStatus.Unpublished) - expect(actualFilePreview.publicationStatuses[1]).toBe(PublicationStatus.Draft) + expect(actualFilePreview.publicationStatuses.length).toBe(2) + expect(actualFilePreview.publicationStatuses).toContain(PublicationStatus.Unpublished) + expect(actualFilePreview.publicationStatuses).toContain(PublicationStatus.Draft) expect(actualFilePreview.sizeInBytes).toBe(12) expect(actualFilePreview.url).not.toBeUndefined() expect(actualFilePreview.releaseOrCreateDate).not.toBeUndefined() @@ -1420,19 +1421,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: 'InReview', count: 0 }, + { publicationStatus: 'Deaccessioned', count: 0 } ] + expect(actual.items.length).toBe(3) expect(actual.totalItemCount).toBe(3) expect(actual.countPerObjectType.collections).toBe(1) @@ -1450,9 +1446,9 @@ describe('CollectionsRepository', () => { expect(actualFilePreview.fileId).not.toBeUndefined() expect(actualFilePreview.fileType).toBe('Plain Text') expect(actualFilePreview.md5).toBe(expectedFileMd5) - expect(actualFilePreview.name).toBe(expectedFileName) - expect(actualFilePreview.publicationStatuses[0]).toBe(PublicationStatus.Unpublished) - expect(actualFilePreview.publicationStatuses[1]).toBe(PublicationStatus.Draft) + expect(actualFilePreview.publicationStatuses.length).toBe(2) + expect(actualFilePreview.publicationStatuses).toContain(PublicationStatus.Unpublished) + expect(actualFilePreview.publicationStatuses).toContain(PublicationStatus.Draft) expect(actualFilePreview.sizeInBytes).toBe(12) expect(actualFilePreview.url).not.toBeUndefined() expect(actualFilePreview.releaseOrCreateDate).not.toBeUndefined() @@ -1490,7 +1486,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( @@ -1568,18 +1564,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: 'InReview', count: 0 }, + { publicationStatus: 'Deaccessioned', count: 0 } ]) expect(actual.countPerObjectType.collections).toBe(1) expect(actual.countPerObjectType.datasets).toBe(0) @@ -1597,18 +1587,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: 'InReview', count: 0 }, + { publicationStatus: 'Deaccessioned', count: 0 } ]) expect(actual.countPerObjectType.collections).toBe(0) expect(actual.countPerObjectType.datasets).toBe(1) @@ -1627,18 +1611,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: 'InReview', count: 0 }, + { publicationStatus: 'Deaccessioned', count: 0 } ]) expect(actual.countPerObjectType.collections).toBe(0) From d56bf8b1cf76adc10044b9a585656ed7afc4ac7a Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Mon, 2 Jun 2025 15:36:53 -0400 Subject: [PATCH 2/8] fix: InReview publication status --- test/functional/collections/GetMyDataCollectionItems.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/functional/collections/GetMyDataCollectionItems.test.ts b/test/functional/collections/GetMyDataCollectionItems.test.ts index 5a9c43ec..77653f2c 100644 --- a/test/functional/collections/GetMyDataCollectionItems.test.ts +++ b/test/functional/collections/GetMyDataCollectionItems.test.ts @@ -120,7 +120,7 @@ describe('execute', () => { count: 0 }, { - publicationStatus: 'In Review', + publicationStatus: 'InReview', count: 0 }, { From f85b2749ded9c376fde1c7041498a48e7141a2b0 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Mon, 2 Jun 2025 17:21:49 -0400 Subject: [PATCH 3/8] revert to 'In Review' --- src/core/domain/models/PublicationStatus.ts | 2 +- .../collections/GetMyDataCollectionItems.test.ts | 2 +- .../integration/collections/CollectionsRepository.test.ts | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/core/domain/models/PublicationStatus.ts b/src/core/domain/models/PublicationStatus.ts index 35670d77..ee24e997 100644 --- a/src/core/domain/models/PublicationStatus.ts +++ b/src/core/domain/models/PublicationStatus.ts @@ -1,6 +1,6 @@ export enum PublicationStatus { Deaccessioned = 'Deaccessioned', - InReview = 'InReview', + InReview = 'In Review', Published = 'Published', Unpublished = 'Unpublished', Draft = 'Draft' diff --git a/test/functional/collections/GetMyDataCollectionItems.test.ts b/test/functional/collections/GetMyDataCollectionItems.test.ts index 77653f2c..5a9c43ec 100644 --- a/test/functional/collections/GetMyDataCollectionItems.test.ts +++ b/test/functional/collections/GetMyDataCollectionItems.test.ts @@ -120,7 +120,7 @@ describe('execute', () => { count: 0 }, { - publicationStatus: 'InReview', + publicationStatus: 'In Review', count: 0 }, { diff --git a/test/integration/collections/CollectionsRepository.test.ts b/test/integration/collections/CollectionsRepository.test.ts index 8e9e6a7c..03de24ca 100644 --- a/test/integration/collections/CollectionsRepository.test.ts +++ b/test/integration/collections/CollectionsRepository.test.ts @@ -1425,7 +1425,7 @@ describe('CollectionsRepository', () => { { publicationStatus: 'Published', count: 0 }, { publicationStatus: 'Unpublished', count: 3 }, { publicationStatus: 'Draft', count: 2 }, - { publicationStatus: 'InReview', count: 0 }, + { publicationStatus: 'In Review', count: 0 }, { publicationStatus: 'Deaccessioned', count: 0 } ] @@ -1569,7 +1569,7 @@ describe('CollectionsRepository', () => { { publicationStatus: 'Published', count: 0 }, { publicationStatus: 'Unpublished', count: 1 }, { publicationStatus: 'Draft', count: 0 }, - { publicationStatus: 'InReview', count: 0 }, + { publicationStatus: 'In Review', count: 0 }, { publicationStatus: 'Deaccessioned', count: 0 } ]) expect(actual.countPerObjectType.collections).toBe(1) @@ -1592,7 +1592,7 @@ describe('CollectionsRepository', () => { { publicationStatus: 'Published', count: 0 }, { publicationStatus: 'Unpublished', count: 1 }, { publicationStatus: 'Draft', count: 1 }, - { publicationStatus: 'InReview', count: 0 }, + { publicationStatus: 'In Review', count: 0 }, { publicationStatus: 'Deaccessioned', count: 0 } ]) expect(actual.countPerObjectType.collections).toBe(0) @@ -1616,7 +1616,7 @@ describe('CollectionsRepository', () => { { publicationStatus: 'Published', count: 0 }, { publicationStatus: 'Unpublished', count: 1 }, { publicationStatus: 'Draft', count: 1 }, - { publicationStatus: 'InReview', count: 0 }, + { publicationStatus: 'In Review', count: 0 }, { publicationStatus: 'Deaccessioned', count: 0 } ]) From c60a7d9d4b12a7fc9b44372f51a9e757707b0395 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Tue, 3 Jun 2025 09:45:50 -0400 Subject: [PATCH 4/8] keep PublicationStatus enum in the same order --- src/core/domain/models/PublicationStatus.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core/domain/models/PublicationStatus.ts b/src/core/domain/models/PublicationStatus.ts index ee24e997..d2266979 100644 --- a/src/core/domain/models/PublicationStatus.ts +++ b/src/core/domain/models/PublicationStatus.ts @@ -1,7 +1,7 @@ export enum PublicationStatus { - Deaccessioned = 'Deaccessioned', - InReview = 'In Review', Published = 'Published', Unpublished = 'Unpublished', - Draft = 'Draft' + Draft = 'Draft', + Deaccessioned = 'Deaccessioned', + InReview = 'In Review' } From 7a3b15056f585f981981063cdf0c0575e2df2b99 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Tue, 3 Jun 2025 13:49:07 -0400 Subject: [PATCH 5/8] add PublicationStatus to exports --- src/core/index.ts | 1 + 1 file changed, 1 insertion(+) 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' From b280b7739c7c0abb385f2c4140ae164e43982cfa Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Tue, 3 Jun 2025 14:25:26 -0400 Subject: [PATCH 6/8] fix import statement --- .../infra/repositories/transformers/collectionTransformers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/collections/infra/repositories/transformers/collectionTransformers.ts b/src/collections/infra/repositories/transformers/collectionTransformers.ts index 874a0434..69b00ee2 100644 --- a/src/collections/infra/repositories/transformers/collectionTransformers.ts +++ b/src/collections/infra/repositories/transformers/collectionTransformers.ts @@ -42,7 +42,7 @@ import { MyDataCollectionItemSubset, PublicationStatusCount } from '../../../domain/models/MyDataCollectionItemSubset' -import { PublicationStatus } from '../../../../../src/core/domain/models/PublicationStatus' +import { PublicationStatus } from '../../../../core/domain/models/PublicationStatus' export const transformCollectionResponseToCollection = (response: AxiosResponse): Collection => { const collectionPayload = response.data.data From 5e6ee4219d7c9a037af3291d57cc66e1971acd4f Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Tue, 3 Jun 2025 14:47:16 -0400 Subject: [PATCH 7/8] remove 'src' from relative path of import statements that are not test code --- src/collections/domain/models/MyDataCollectionItemSubset.ts | 2 +- src/collections/domain/repositories/ICollectionsRepository.ts | 4 ++-- src/collections/domain/useCases/GetMyDataCollectionItems.ts | 4 ++-- src/collections/infra/repositories/CollectionsRepository.ts | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/collections/domain/models/MyDataCollectionItemSubset.ts b/src/collections/domain/models/MyDataCollectionItemSubset.ts index 32783317..3d18a61d 100644 --- a/src/collections/domain/models/MyDataCollectionItemSubset.ts +++ b/src/collections/domain/models/MyDataCollectionItemSubset.ts @@ -2,7 +2,7 @@ import { CollectionPreview } from './CollectionPreview' import { DatasetPreview } from '../../../datasets' import { FilePreview } from '../../../files' import { CountPerObjectType } from './CollectionItemSubset' -import { PublicationStatus } from '../../../../src/core/domain/models/PublicationStatus' +import { PublicationStatus } from '../../../core/domain/models/PublicationStatus' export interface MyDataCollectionItemSubset { items: (CollectionPreview | DatasetPreview | FilePreview)[] diff --git a/src/collections/domain/repositories/ICollectionsRepository.ts b/src/collections/domain/repositories/ICollectionsRepository.ts index 87009112..cebd46d9 100644 --- a/src/collections/domain/repositories/ICollectionsRepository.ts +++ b/src/collections/domain/repositories/ICollectionsRepository.ts @@ -7,8 +7,8 @@ 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 diff --git a/src/collections/domain/useCases/GetMyDataCollectionItems.ts b/src/collections/domain/useCases/GetMyDataCollectionItems.ts index fe23c82c..96522783 100644 --- a/src/collections/domain/useCases/GetMyDataCollectionItems.ts +++ b/src/collections/domain/useCases/GetMyDataCollectionItems.ts @@ -1,8 +1,8 @@ import { UseCase } from '../../../core/domain/useCases/UseCase' 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 { private collectionsRepository: ICollectionsRepository diff --git a/src/collections/infra/repositories/CollectionsRepository.ts b/src/collections/infra/repositories/CollectionsRepository.ts index ee1a0a07..191a5efa 100644 --- a/src/collections/infra/repositories/CollectionsRepository.ts +++ b/src/collections/infra/repositories/CollectionsRepository.ts @@ -23,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 { From 1839da517d6663e0214713804305c32c21e187e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Saracca?= Date: Thu, 5 Jun 2025 16:13:16 -0300 Subject: [PATCH 8/8] feat: get collection items optional show type counts param --- .../domain/models/CollectionItemSubset.ts | 2 +- .../repositories/ICollectionsRepository.ts | 3 +- .../domain/useCases/GetCollectionItems.ts | 7 +- .../repositories/CollectionsRepository.ts | 10 ++- .../transformers/collectionTransformers.ts | 23 ++++--- .../collections/CollectionsRepository.test.ts | 60 ++++------------- .../collections/CollectionsRepository.test.ts | 8 +-- .../collections/GetCollectionItems.test.ts | 67 +++++++++++++++---- 8 files changed, 95 insertions(+), 85 deletions(-) diff --git a/src/collections/domain/models/CollectionItemSubset.ts b/src/collections/domain/models/CollectionItemSubset.ts index 195f2c3e..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 { diff --git a/src/collections/domain/repositories/ICollectionsRepository.ts b/src/collections/domain/repositories/ICollectionsRepository.ts index cebd46d9..6c0baf35 100644 --- a/src/collections/domain/repositories/ICollectionsRepository.ts +++ b/src/collections/domain/repositories/ICollectionsRepository.ts @@ -26,7 +26,8 @@ export interface ICollectionsRepository { collectionId?: string, limit?: number, offset?: number, - collectionSearchCriteria?: CollectionSearchCriteria + collectionSearchCriteria?: CollectionSearchCriteria, + showTypeCounts?: boolean ): Promise getMyDataCollectionItems( roleIds: number[], 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/infra/repositories/CollectionsRepository.ts b/src/collections/infra/repositories/CollectionsRepository.ts index 191a5efa..eb3f2e81 100644 --- a/src/collections/infra/repositories/CollectionsRepository.ts +++ b/src/collections/infra/repositories/CollectionsRepository.ts @@ -156,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) { @@ -178,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) } diff --git a/src/collections/infra/repositories/transformers/collectionTransformers.ts b/src/collections/infra/repositories/transformers/collectionTransformers.ts index 69b00ee2..43802706 100644 --- a/src/collections/infra/repositories/transformers/collectionTransformers.ts +++ b/src/collections/infra/repositories/transformers/collectionTransformers.ts @@ -10,7 +10,8 @@ import { CollectionFacet } from '../../../domain/models/CollectionFacet' import { CollectionFacetPayload } from './CollectionFacetPayload' import { CollectionItemsFacet, - CollectionItemSubset + CollectionItemSubset, + CountPerObjectType } from '../../../domain/models/CollectionItemSubset' import { DatasetPreview } from '../../../../datasets' import { FilePreview } from '../../../../files' @@ -101,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)[] = [] @@ -136,17 +137,19 @@ 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 }) } } diff --git a/test/integration/collections/CollectionsRepository.test.ts b/test/integration/collections/CollectionsRepository.test.ts index 03de24ca..b741537a 100644 --- a/test/integration/collections/CollectionsRepository.test.ts +++ b/test/integration/collections/CollectionsRepository.test.ts @@ -530,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) @@ -554,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' @@ -570,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') @@ -585,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( @@ -599,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 = @@ -616,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([ @@ -634,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([ @@ -652,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([ @@ -672,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() @@ -692,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() @@ -712,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() @@ -732,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() @@ -752,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 = @@ -770,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 = @@ -790,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 = @@ -809,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 () => { 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) })