Skip to content

Commit 3fe0ecb

Browse files
committed
Added: create collection use case, pending data access logic
1 parent bc437b0 commit 3fe0ecb

File tree

7 files changed

+82
-0
lines changed

7 files changed

+82
-0
lines changed

docs/useCases.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ The different use cases currently available in the package are classified below,
1111
- [Collections](#Collections)
1212
- [Collections read use cases](#collections-read-use-cases)
1313
- [Get a Collection](#get-a-collection)
14+
- [Collections write use cases](#collections-write-use-cases)
15+
- [Create a Collection](#create-a-collection)
1416
- [Datasets](#Datasets)
1517
- [Datasets read use cases](#datasets-read-use-cases)
1618
- [Get a Dataset](#get-a-dataset)
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
export interface CollectionDTO {
2+
alias: string
3+
name: string
4+
contacts: string[]
5+
type: CollectionType
6+
}
7+
8+
export enum CollectionType {
9+
RESEARCHERS,
10+
RESEARCH_PROJECTS,
11+
JOURNALS,
12+
ORGANIZATIONS_INSTITUTIONS,
13+
TEACHING_COURSES,
14+
UNCATEGORIZED,
15+
LABORATORY,
16+
RESEARCH_GROUP,
17+
DEPARTMENT
18+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import { CollectionDTO } from '../dtos/CollectionDTO'
12
import { Collection } from '../models/Collection'
23

34
export interface ICollectionsRepository {
45
getCollection(collectionIdOrAlias: number | string): Promise<Collection>
6+
createCollection(collectionDTO: CollectionDTO): Promise<void>
57
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { CollectionDTO } from '../dtos/CollectionDTO'
3+
import { ICollectionsRepository } from '../repositories/ICollectionsRepository'
4+
5+
export class CreateCollection implements UseCase<void> {
6+
private collectionsRepository: ICollectionsRepository
7+
8+
constructor(collectionsRepository: ICollectionsRepository) {
9+
this.collectionsRepository = collectionsRepository
10+
}
11+
12+
/**
13+
* TODO
14+
*/
15+
async execute(newCollection: CollectionDTO): Promise<void> {
16+
await this.collectionsRepository.createCollection(newCollection)
17+
}
18+
}

src/collections/infra/repositories/CollectionsRepository.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { ApiRepository } from '../../../core/infra/repositories/ApiRepository'
22
import { ICollectionsRepository } from '../../domain/repositories/ICollectionsRepository'
33
import { transformCollectionResponseToCollection } from './transformers/collectionTransformers'
44
import { Collection, ROOT_COLLECTION_ALIAS } from '../../domain/models/Collection'
5+
import { CollectionDTO } from '../../domain/dtos/CollectionDTO'
56

67
export class CollectionsRepository extends ApiRepository implements ICollectionsRepository {
78
private readonly collectionsResourceName: string = 'dataverses'
@@ -17,4 +18,9 @@ export class CollectionsRepository extends ApiRepository implements ICollections
1718
throw error
1819
})
1920
}
21+
22+
public async createCollection(collectionDTO: CollectionDTO): Promise<void> {
23+
console.log(collectionDTO.alias)
24+
// TODO
25+
}
2026
}

test/testHelpers/collections/collectionHelper.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { DvObjectType } from '../../../src'
33
import { CollectionPayload } from '../../../src/collections/infra/repositories/transformers/CollectionPayload'
44
import { TestConstants } from '../TestConstants'
55
import axios from 'axios'
6+
import { CollectionDTO, CollectionType } from '../../../src/collections/domain/dtos/CollectionDTO'
67

78
const COLLECTION_ID = 11111
89
const COLLECTION_IS_RELEASED = 'true'
@@ -100,3 +101,12 @@ export async function setStorageDriverViaApi(
100101
throw new Error(`Error while setting storage driver for collection ${collectionAlias}`)
101102
}
102103
}
104+
105+
export const createCollectionDTO = (): CollectionDTO => {
106+
return {
107+
alias: 'test-collection',
108+
name: 'Test Collection',
109+
contacts: ['[email protected]'],
110+
type: CollectionType.DEPARTMENT
111+
}
112+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { CreateCollection } from '../../../src/collections/domain/useCases/CreateCollection'
2+
import { ICollectionsRepository } from '../../../src/collections/domain/repositories/ICollectionsRepository'
3+
import { WriteError } from '../../../src'
4+
import { createCollectionDTO } from '../../testHelpers/collections/collectionHelper'
5+
6+
describe('execute', () => {
7+
const testCollectionDTO = createCollectionDTO()
8+
9+
test('should return undefined on repository success', async () => {
10+
const collectionRepositoryStub: ICollectionsRepository = {} as ICollectionsRepository
11+
collectionRepositoryStub.createCollection = jest.fn().mockResolvedValue(undefined)
12+
const testCreateCollection = new CreateCollection(collectionRepositoryStub)
13+
14+
const actual = await testCreateCollection.execute(testCollectionDTO)
15+
16+
expect(actual).toEqual(undefined)
17+
})
18+
19+
test('should return error result on repository error', async () => {
20+
const collectionRepositoryStub: ICollectionsRepository = {} as ICollectionsRepository
21+
collectionRepositoryStub.createCollection = jest.fn().mockRejectedValue(new WriteError())
22+
const testCreateCollection = new CreateCollection(collectionRepositoryStub)
23+
24+
await expect(testCreateCollection.execute(testCollectionDTO)).rejects.toThrow(WriteError)
25+
})
26+
})

0 commit comments

Comments
 (0)