Skip to content

Commit b000b3d

Browse files
committed
Stash: createCollection unit tests WIP (failing)
1 parent ba8fddd commit b000b3d

File tree

3 files changed

+93
-4
lines changed

3 files changed

+93
-4
lines changed

src/collections/infra/repositories/CollectionsRepository.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,17 @@ import { transformCollectionResponseToCollection } from './transformers/collecti
44
import { Collection, ROOT_COLLECTION_ALIAS } from '../../domain/models/Collection'
55
import { CollectionDTO } from '../../domain/dtos/CollectionDTO'
66

7+
export interface NewCollectionRequestPayload {
8+
alias: string,
9+
name: string,
10+
dataverseContacts: NewCollectionContactRequestPayload[],
11+
dataverseType: string
12+
}
13+
14+
export interface NewCollectionContactRequestPayload {
15+
contactEmail: string
16+
}
17+
718
export class CollectionsRepository extends ApiRepository implements ICollectionsRepository {
819
private readonly collectionsResourceName: string = 'dataverses'
920

@@ -23,11 +34,11 @@ export class CollectionsRepository extends ApiRepository implements ICollections
2334
collectionDTO: CollectionDTO,
2435
parentCollectionId: number | string = ROOT_COLLECTION_ALIAS
2536
): Promise<number> {
26-
const dataverseContacts = collectionDTO.contacts.map((contact) => ({
37+
const dataverseContacts: NewCollectionContactRequestPayload[] = collectionDTO.contacts.map((contact) => ({
2738
contactEmail: contact
2839
}))
2940

30-
const requestBody = {
41+
const requestBody: NewCollectionRequestPayload = {
3142
alias: collectionDTO.alias,
3243
name: collectionDTO.name,
3344
dataverseContacts: dataverseContacts,

test/testHelpers/collections/collectionHelper.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { CollectionPayload } from '../../../src/collections/infra/repositories/t
44
import { TestConstants } from '../TestConstants'
55
import axios from 'axios'
66
import { CollectionDTO, CollectionType } from '../../../src/collections/domain/dtos/CollectionDTO'
7+
import { NewCollectionRequestPayload } from '../../../src/collections/infra/repositories/CollectionsRepository'
78

89
const COLLECTION_ID = 11111
910
const COLLECTION_IS_RELEASED = 'true'
@@ -110,3 +111,16 @@ export const createCollectionDTO = (alias: string = 'test-collection'): Collecti
110111
type: CollectionType.DEPARTMENT
111112
}
112113
}
114+
115+
export const createNewCollectionRequestPayload = (): NewCollectionRequestPayload => {
116+
return {
117+
alias: 'test-collection',
118+
name: 'Test Collection',
119+
dataverseContacts: [
120+
{
121+
contactEmail: '[email protected]'
122+
}
123+
],
124+
dataverseType: 'DEPARTMENT'
125+
}
126+
}

test/unit/collections/CollectionsRepository.test.ts

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ import {
55
DataverseApiAuthMechanism
66
} from '../../../src/core/infra/repositories/ApiConfig'
77
import {
8+
createCollectionDTO,
89
createCollectionModel,
9-
createCollectionPayload
10+
createCollectionPayload,
11+
createNewCollectionRequestPayload
1012
} from '../../testHelpers/collections/collectionHelper'
1113
import { TestConstants } from '../../testHelpers/TestConstants'
12-
import { ReadError } from '../../../src'
14+
import { ReadError, WriteError } from '../../../src'
1315
import { ROOT_COLLECTION_ALIAS } from '../../../src/collections/domain/models/Collection'
1416

1517
describe('CollectionsRepository', () => {
@@ -28,7 +30,10 @@ describe('CollectionsRepository', () => {
2830
DataverseApiAuthMechanism.API_KEY,
2931
TestConstants.TEST_DUMMY_API_KEY
3032
)
33+
34+
jest.clearAllMocks()
3135
})
36+
3237
describe('getCollection', () => {
3338
const expectedRequestConfigApiKey = {
3439
params: {
@@ -108,4 +113,63 @@ describe('CollectionsRepository', () => {
108113
})
109114
})
110115
})
116+
117+
describe('createCollection', () => {
118+
const testNewCollection = createCollectionDTO()
119+
120+
const testCreatedCollectionId = 1
121+
const testCreateCollectionResponse = {
122+
data: {
123+
status: 'OK',
124+
data: {
125+
id: testCreatedCollectionId,
126+
}
127+
}
128+
}
129+
130+
const expectedNewCollectionRequestPayloadJson = JSON.stringify(createNewCollectionRequestPayload())
131+
const expectedApiEndpoint = `${TestConstants.TEST_API_URL}/dataverses/root`
132+
133+
test('should call the API with a correct request payload', async () => {
134+
jest.spyOn(axios, 'post').mockResolvedValue(testCreateCollectionResponse)
135+
136+
// API Key auth
137+
let actual = await sut.createCollection(testNewCollection)
138+
139+
expect(axios.post).toHaveBeenCalledWith(
140+
expectedApiEndpoint,
141+
expectedNewCollectionRequestPayloadJson,
142+
TestConstants.TEST_EXPECTED_AUTHENTICATED_REQUEST_CONFIG_API_KEY
143+
)
144+
expect(actual).toStrictEqual(testCreatedCollectionId)
145+
146+
// Session cookie auth
147+
ApiConfig.init(TestConstants.TEST_API_URL, DataverseApiAuthMechanism.SESSION_COOKIE)
148+
149+
actual = await sut.createCollection(testNewCollection)
150+
151+
expect(axios.post).toHaveBeenCalledWith(
152+
expectedApiEndpoint,
153+
expectedNewCollectionRequestPayloadJson,
154+
TestConstants.TEST_EXPECTED_AUTHENTICATED_REQUEST_CONFIG_SESSION_COOKIE
155+
)
156+
expect(actual).toStrictEqual(testCreatedCollectionId)
157+
})
158+
159+
test('should return error result on error response', async () => {
160+
jest.spyOn(axios, 'post').mockRejectedValue(TestConstants.TEST_ERROR_RESPONSE)
161+
162+
let error = undefined as unknown as WriteError
163+
await sut
164+
.createCollection(testNewCollection)
165+
.catch((e) => (error = e))
166+
167+
expect(axios.post).toHaveBeenCalledWith(
168+
expectedApiEndpoint,
169+
expectedNewCollectionRequestPayloadJson,
170+
TestConstants.TEST_EXPECTED_AUTHENTICATED_REQUEST_CONFIG_API_KEY
171+
)
172+
expect(error).toBeInstanceOf(Error)
173+
})
174+
})
111175
})

0 commit comments

Comments
 (0)