Skip to content

Commit 4b98fd4

Browse files
committed
feat: add tests
1 parent 4a80a4c commit 4b98fd4

File tree

5 files changed

+234
-26
lines changed

5 files changed

+234
-26
lines changed

src/collections/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { CollectionsRepository } from './infra/repositories/CollectionsRepositor
1010
import { UpdateCollectionFeaturedItems } from './domain/useCases/UpdateCollectionFeaturedItems'
1111
import { DeleteCollectionFeaturedItems } from './domain/useCases/DeleteCollectionFeaturedItems'
1212
import { DeleteCollection } from './domain/useCases/DeleteCollection'
13+
import { GetMyDataCollectionItems } from './domain/useCases/GetMyDataCollectionItems'
1314

1415
const collectionsRepository = new CollectionsRepository()
1516

@@ -18,6 +19,7 @@ const createCollection = new CreateCollection(collectionsRepository)
1819
const getCollectionFacets = new GetCollectionFacets(collectionsRepository)
1920
const getCollectionUserPermissions = new GetCollectionUserPermissions(collectionsRepository)
2021
const getCollectionItems = new GetCollectionItems(collectionsRepository)
22+
const getMyDataCollectionItems = new GetMyDataCollectionItems(collectionsRepository)
2123
const publishCollection = new PublishCollection(collectionsRepository)
2224
const updateCollection = new UpdateCollection(collectionsRepository)
2325
const getCollectionFeaturedItems = new GetCollectionFeaturedItems(collectionsRepository)
@@ -31,6 +33,7 @@ export {
3133
getCollectionFacets,
3234
getCollectionUserPermissions,
3335
getCollectionItems,
36+
getMyDataCollectionItems,
3437
publishCollection,
3538
updateCollection,
3639
getCollectionFeaturedItems,

src/collections/infra/repositories/CollectionsRepository.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import { transformCollectionFeaturedItemsPayloadToCollectionFeaturedItems } from
2626
import { CollectionFeaturedItemsDTO } from '../../domain/dtos/CollectionFeaturedItemsDTO'
2727
import { ApiConstants } from '../../../core/infra/repositories/ApiConstants'
2828
import { PublicationStatus } from '../../../../dist/core/domain/models/PublicationStatus'
29+
import { ReadError } from '../../../core/domain/repositories/ReadError'
2930

3031
export interface NewCollectionRequestPayload {
3132
alias: string
@@ -258,9 +259,16 @@ export class CollectionsRepository extends ApiRepository implements ICollections
258259
)
259260
})
260261

261-
return this.doGet('/retrieve', true, queryParams)
262-
.then((response) => transformMyDataResponseToCollectionItemSubset(response))
262+
return this.doGet('/mydata/retrieve', true, queryParams)
263+
.then((response) => {
264+
if (response.data.success !== true) {
265+
throw new ReadError(response.data.error_message)
266+
}
267+
return transformMyDataResponseToCollectionItemSubset(response)
268+
})
263269
.catch((error) => {
270+
console.error('Error in getMyDataCollectionItems:', error)
271+
console.log('Error response:', error.response)
264272
throw error
265273
})
266274
}

src/collections/infra/repositories/transformers/collectionTransformers.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,9 @@ export const transformCollectionItemsResponseToCollectionItemSubset = (
151151
export const transformMyDataResponseToCollectionItemSubset = (
152152
response: AxiosResponse
153153
): MyDataCollectionItemSubset => {
154+
console.log('response', JSON.stringify(response.data))
154155
const responseDataPayload = response.data.data
155-
const itemsPayload = responseDataPayload.items
156+
const itemsPayload = responseDataPayload.items ?? []
156157
const countPerObjectTypePayload = responseDataPayload[
157158
'dvobject_counts'
158159
] as MyDataCountPerObjectTypePayload
Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
import {
2+
ApiConfig,
3+
CreatedDatasetIdentifiers,
4+
DatasetPreview,
5+
FilePreview,
6+
ReadError,
7+
createDataset,
8+
getMyDataCollectionItems
9+
} from '../../../src'
10+
import { TestConstants } from '../../testHelpers/TestConstants'
11+
import { DataverseApiAuthMechanism } from '../../../src/core/infra/repositories/ApiConfig'
12+
import {
13+
createCollectionViaApi,
14+
deleteCollectionViaApi
15+
} from '../../testHelpers/collections/collectionHelper'
16+
import { uploadFileViaApi } from '../../testHelpers/files/filesHelper'
17+
import { deleteUnpublishedDatasetViaApi } from '../../testHelpers/datasets/datasetHelper'
18+
import { CollectionItemType } from '../../../dist'
19+
import { PublicationStatus } from '../../../dist/core/domain/models/PublicationStatus'
20+
21+
const testRoleIds = [1, 2, 3, 4, 5, 6, 7, 8]
22+
const testCollectionItemTypes = [CollectionItemType.DATASET, CollectionItemType.FILE]
23+
const testPublishingStatuses = [
24+
PublicationStatus.Published,
25+
PublicationStatus.Draft,
26+
PublicationStatus.Unpublished
27+
]
28+
29+
describe('execute', () => {
30+
beforeAll(() => {
31+
ApiConfig.init(
32+
TestConstants.TEST_API_URL,
33+
DataverseApiAuthMechanism.API_KEY,
34+
process.env.TEST_API_KEY
35+
)
36+
})
37+
test('should return ? when repository returns empty item subset', async () => {
38+
expect.assertions(2)
39+
let readError: ReadError | undefined = undefined
40+
try {
41+
await getMyDataCollectionItems.execute(
42+
testRoleIds,
43+
testCollectionItemTypes,
44+
testPublishingStatuses,
45+
undefined,
46+
undefined,
47+
undefined
48+
)
49+
throw new Error('Use case should throw an error')
50+
} catch (error) {
51+
readError = error as ReadError
52+
} finally {
53+
expect(readError).toBeInstanceOf(ReadError)
54+
expect(readError?.message).toEqual(
55+
'There was an error when reading the resource. Reason was: Sorry, no results were found.'
56+
)
57+
}
58+
}),
59+
describe('test with created collection items', () => {
60+
const testCollectionAlias = 'collectionsRepositoryFunctionalTestCollection'
61+
let testDatasetIds: CreatedDatasetIdentifiers
62+
const testTextFile1Name = 'test-file-1.txt'
63+
64+
beforeAll(async () => {
65+
await createCollectionViaApi(testCollectionAlias)
66+
try {
67+
testDatasetIds = await createDataset.execute(
68+
TestConstants.TEST_NEW_DATASET_DTO,
69+
testCollectionAlias
70+
)
71+
} catch (error) {
72+
throw new Error('Tests beforeAll(): Error while creating test dataset')
73+
}
74+
await uploadFileViaApi(testDatasetIds.numericId, testTextFile1Name).catch(() => {
75+
throw new Error(`Tests beforeAll(): Error while uploading file ${testTextFile1Name}`)
76+
})
77+
})
78+
79+
afterAll(async () => {
80+
try {
81+
await deleteUnpublishedDatasetViaApi(testDatasetIds.numericId)
82+
} catch (error) {
83+
throw new Error('Tests afterAll(): Error while deleting test dataset')
84+
}
85+
try {
86+
await deleteCollectionViaApi(testCollectionAlias)
87+
} catch (error) {
88+
throw new Error('Tests afterAll(): Error while deleting test collection')
89+
}
90+
})
91+
92+
test('should return items when valid roles,collection types, and publishingStatuses are provided', async () => {
93+
// Give enough time to Solr for indexing
94+
await new Promise((resolve) => setTimeout(resolve, 5000))
95+
96+
try {
97+
const actual = await getMyDataCollectionItems.execute(
98+
testRoleIds,
99+
testCollectionItemTypes,
100+
testPublishingStatuses
101+
)
102+
103+
const actualFilePreview = actual.items[1] as FilePreview
104+
const actualDatasetPreview = actual.items[0] as DatasetPreview
105+
106+
expect(actualFilePreview.name).toBe('test-file-1.txt')
107+
expect(actualDatasetPreview.title).toBe(
108+
'Dataset created using the createDataset use case'
109+
)
110+
111+
expect(actual.totalItemCount).toBe(2)
112+
} catch (error) {
113+
throw new Error('Item subset should be retrieved')
114+
}
115+
})
116+
117+
test('should return an error message when no role is specified', async () => {
118+
expect.assertions(2)
119+
let readError: ReadError | undefined = undefined
120+
try {
121+
await getMyDataCollectionItems.execute([], [], [], undefined, undefined, undefined)
122+
throw new Error('Use case should throw an error')
123+
} catch (error) {
124+
readError = error as ReadError
125+
} finally {
126+
expect(readError).toBeInstanceOf(ReadError)
127+
expect(readError?.message).toEqual(
128+
`There was an error when reading the resource. Reason was: No results. Please select at least one Role.`
129+
)
130+
}
131+
})
132+
test('should return an error message when no publication status is specified', async () => {
133+
expect.assertions(2)
134+
let readError: ReadError | undefined = undefined
135+
try {
136+
await getMyDataCollectionItems.execute(
137+
testRoleIds,
138+
testCollectionItemTypes,
139+
[],
140+
undefined,
141+
undefined,
142+
undefined
143+
)
144+
throw new Error('Use case should throw an error')
145+
} catch (error) {
146+
readError = error as ReadError
147+
} finally {
148+
expect(readError).toBeInstanceOf(ReadError)
149+
expect(readError?.message).toEqual(
150+
`There was an error when reading the resource. Reason was: No user found for: "Published, Unpublished, Draft, In Review, Deaccessioned"`
151+
)
152+
}
153+
})
154+
test('should an error message when no collection type is specified', async () => {
155+
expect.assertions(2)
156+
let readError: ReadError | undefined = undefined
157+
try {
158+
await getMyDataCollectionItems.execute(
159+
testRoleIds,
160+
testCollectionItemTypes,
161+
[],
162+
undefined,
163+
undefined,
164+
undefined
165+
)
166+
throw new Error('Use case should throw an error')
167+
} catch (error) {
168+
readError = error as ReadError
169+
} finally {
170+
expect(readError).toBeInstanceOf(ReadError)
171+
expect(readError?.message).toEqual(
172+
`There was an error when reading the resource. Reason was: No user found for: "Published, Unpublished, Draft, In Review, Deaccessioned"`
173+
)
174+
}
175+
})
176+
})
177+
})

test/unit/collections/GetCollectionItemsByUserRole.test.ts renamed to test/unit/collections/GetMyDataCollectionItems.test.ts

Lines changed: 42 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,51 @@ import { CollectionItemType } from '../../../dist'
55
import { createDatasetPreviewModel } from '../../testHelpers/datasets/datasetPreviewHelper'
66
import { createFilePreviewModel } from '../../testHelpers/files/filePreviewHelper'
77
import { createCollectionPreviewModel } from '../../testHelpers/collections/collectionPreviewHelper'
8-
import { MyDataCollectionItemSubset } from '../../../src/collections/domain/models/CollectionItemSubset'
8+
import {
9+
CollectionItemsFacetLabel,
10+
MyDataCollectionItemSubset
11+
} from '../../../src/collections/domain/models/CollectionItemSubset'
12+
import { PublicationStatus } from '../../../dist/core/domain/models/PublicationStatus'
913

10-
describe('GetCollectionItemsByUserRole', () => {
14+
describe('GetMyDataCollectionItems', () => {
1115
let collectionRepositoryStub: ICollectionsRepository
1216
let testGetMyDataCollectionItems: GetMyDataCollectionItems
1317

1418
const testRoleIds = [1, 2]
1519
const testCollectionItemTypes = [CollectionItemType.DATASET, CollectionItemType.FILE]
20+
const testPublishingStatuses = [
21+
PublicationStatus.Published,
22+
PublicationStatus.Draft,
23+
PublicationStatus.Unpublished
24+
]
1625
const testLimit = 10
1726
const testPage = 1
1827
const testSearchText = 'test'
28+
const testOtherUserName = 'testUser'
1929
const testItems = [
2030
createDatasetPreviewModel(),
2131
createFilePreviewModel(),
2232
createCollectionPreviewModel()
2333
]
24-
34+
const testFacets = [
35+
{
36+
name: 'Published',
37+
count: 10
38+
},
39+
{
40+
name: 'Draft',
41+
count: 5
42+
},
43+
{
44+
name: 'Unpublished',
45+
count: 15
46+
}
47+
] as CollectionItemsFacetLabel[]
2548
const testItemSubset: MyDataCollectionItemSubset = {
2649
items: testItems,
2750
publishingFacet: testFacets,
28-
totalItemCount: testTotalCount,
29-
countPerObjectType: testCountPerObjectType
51+
totalItemCount: 30,
52+
countPerObjectType: { dataverses: 10, datasets: 15, files: 5 }
3053
}
3154
beforeEach(() => {
3255
collectionRepositoryStub = {} as ICollectionsRepository
@@ -39,6 +62,7 @@ describe('GetCollectionItemsByUserRole', () => {
3962
const actual = await testGetMyDataCollectionItems.execute(
4063
testRoleIds,
4164
testCollectionItemTypes,
65+
testPublishingStatuses,
4266
testLimit,
4367
testPage,
4468
testSearchText
@@ -54,36 +78,28 @@ describe('GetCollectionItemsByUserRole', () => {
5478
testGetMyDataCollectionItems.execute(
5579
testRoleIds,
5680
testCollectionItemTypes,
81+
testPublishingStatuses,
5782
testLimit,
5883
testPage,
5984
testSearchText
6085
)
6186
).rejects.toThrow(ReadError)
6287
})
6388

64-
test('should handle roleIds parameter', async () => {
89+
test('should handle required parameters', async () => {
6590
collectionRepositoryStub.getMyDataCollectionItems = jest.fn().mockResolvedValue(testItemSubset)
6691

67-
const actual = await testGetMyDataCollectionItems.execute(testRoleIds, [], undefined)
68-
69-
expect(collectionRepositoryStub.getMyDataCollectionItems).toHaveBeenCalledWith(
92+
const actual = await testGetMyDataCollectionItems.execute(
7093
testRoleIds,
71-
[],
72-
undefined,
73-
undefined,
74-
undefined
94+
testCollectionItemTypes,
95+
testPublishingStatuses
7596
)
76-
expect(actual).toEqual(testItemSubset)
77-
})
78-
79-
test('should handle collectionItemTypes parameter', async () => {
80-
collectionRepositoryStub.getMyDataCollectionItems = jest.fn().mockResolvedValue(testItemSubset)
81-
82-
const actual = await testGetMyDataCollectionItems.execute([], testCollectionItemTypes)
8397

8498
expect(collectionRepositoryStub.getMyDataCollectionItems).toHaveBeenCalledWith(
85-
[],
99+
testRoleIds,
86100
testCollectionItemTypes,
101+
testPublishingStatuses,
102+
undefined,
87103
undefined,
88104
undefined,
89105
undefined
@@ -97,17 +113,20 @@ describe('GetCollectionItemsByUserRole', () => {
97113
const actual = await testGetMyDataCollectionItems.execute(
98114
testRoleIds,
99115
testCollectionItemTypes,
116+
testPublishingStatuses,
100117
testLimit,
101118
testPage,
102-
testSearchText
119+
testSearchText,
120+
testOtherUserName
103121
)
104122

105123
expect(collectionRepositoryStub.getMyDataCollectionItems).toHaveBeenCalledWith(
106124
testRoleIds,
107125
testCollectionItemTypes,
108126
testLimit,
109127
testPage,
110-
testSearchText
128+
testSearchText,
129+
testOtherUserName
111130
)
112131
expect(actual).toEqual(testItemSubset)
113132
})

0 commit comments

Comments
 (0)