Skip to content

Commit 53b1704

Browse files
committed
test: add unit, integration and functional tests
1 parent 524aede commit 53b1704

File tree

3 files changed

+194
-1
lines changed

3 files changed

+194
-1
lines changed
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
import {
2+
ApiConfig,
3+
createDataset,
4+
CreatedDatasetIdentifiers,
5+
deleteFile,
6+
getDatasetFileCounts,
7+
getDatasetFiles,
8+
WriteError
9+
} from '../../../src'
10+
import { DataverseApiAuthMechanism } from '../../../src/core/infra/repositories/ApiConfig'
11+
import {
12+
createCollectionViaApi,
13+
deleteCollectionViaApi
14+
} from '../../testHelpers/collections/collectionHelper'
15+
import { deleteUnpublishedDatasetViaApi } from '../../testHelpers/datasets/datasetHelper'
16+
import { uploadFileViaApi } from '../../testHelpers/files/filesHelper'
17+
import { TestConstants } from '../../testHelpers/TestConstants'
18+
19+
describe('execute', () => {
20+
const testCollectionAlias = 'deleteFileFunctionalTest'
21+
let testDatasetIds: CreatedDatasetIdentifiers
22+
const testTextFile1Name = 'test-file-1.txt'
23+
24+
beforeAll(async () => {
25+
ApiConfig.init(
26+
TestConstants.TEST_API_URL,
27+
DataverseApiAuthMechanism.API_KEY,
28+
process.env.TEST_API_KEY
29+
)
30+
await createCollectionViaApi(testCollectionAlias)
31+
32+
try {
33+
testDatasetIds = await createDataset.execute(
34+
TestConstants.TEST_NEW_DATASET_DTO,
35+
testCollectionAlias
36+
)
37+
} catch (error) {
38+
throw new Error('Tests beforeAll(): Error while creating test dataset')
39+
}
40+
await uploadFileViaApi(testDatasetIds.numericId, testTextFile1Name).catch(() => {
41+
throw new Error(`Tests beforeAll(): Error while uploading file ${testTextFile1Name}`)
42+
})
43+
})
44+
45+
afterAll(async () => {
46+
try {
47+
await deleteUnpublishedDatasetViaApi(testDatasetIds.numericId)
48+
} catch (error) {
49+
throw new Error('Tests afterAll(): Error while deleting test dataset')
50+
}
51+
try {
52+
await deleteCollectionViaApi(testCollectionAlias)
53+
} catch (error) {
54+
throw new Error('Tests afterAll(): Error while deleting test collection')
55+
}
56+
})
57+
58+
test('should successfully delete a file', async () => {
59+
try {
60+
const datasetFiles = await getDatasetFiles.execute(testDatasetIds.numericId)
61+
console.log({ datasetFiles })
62+
await deleteFile.execute(datasetFiles.files[0].id)
63+
} catch (error) {
64+
throw new Error('File should be deleted')
65+
} finally {
66+
const datasetFileCounts = await getDatasetFileCounts.execute(testDatasetIds.numericId)
67+
console.log({ datasetFileCounts })
68+
expect(datasetFileCounts.total).toEqual(0)
69+
}
70+
})
71+
72+
test('should throw an error when the file id does not exist', async () => {
73+
expect.assertions(2)
74+
let writeError: WriteError | undefined = undefined
75+
const nonExistentFileId = 5
76+
77+
try {
78+
await deleteFile.execute(nonExistentFileId)
79+
throw new Error('Use case should throw an error')
80+
} catch (error) {
81+
writeError = error as WriteError
82+
} finally {
83+
expect(writeError).toBeInstanceOf(WriteError)
84+
expect(writeError?.message).toEqual(
85+
`There was an error when writing the resource. Reason was: [404] File with ID ${nonExistentFileId} not found.`
86+
)
87+
}
88+
})
89+
})

test/integration/files/FilesRepository.test.ts

Lines changed: 80 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import {
2828
} from '../../../src/datasets'
2929
import { FileModel } from '../../../src/files/domain/models/FileModel'
3030
import { FileCounts } from '../../../src/files/domain/models/FileCounts'
31-
import { FileDownloadSizeMode } from '../../../src'
31+
import { FileDownloadSizeMode, WriteError } from '../../../src'
3232
import {
3333
deaccessionDatasetViaApi,
3434
publishDatasetViaApi,
@@ -646,4 +646,83 @@ describe('FilesRepository', () => {
646646
).rejects.toThrow(errorExpected)
647647
})
648648
})
649+
650+
describe('deleteFile', () => {
651+
let deleFileTestDatasetIds: CreatedDatasetIdentifiers
652+
const testTextFile1Name = 'test-file-1.txt'
653+
654+
beforeEach(async () => {
655+
try {
656+
deleFileTestDatasetIds = await createDataset.execute(TestConstants.TEST_NEW_DATASET_DTO)
657+
} catch (error) {
658+
throw new Error('Tests beforeEach(): Error while creating test dataset')
659+
}
660+
await uploadFileViaApi(deleFileTestDatasetIds.numericId, testTextFile1Name).catch(() => {
661+
throw new Error(`Tests beforeEach(): Error while uploading file ${testTextFile1Name}`)
662+
})
663+
})
664+
665+
test('should successfully delete a file', async () => {
666+
const datasetFiles = await sut.getDatasetFiles(
667+
deleFileTestDatasetIds.numericId,
668+
latestDatasetVersionId,
669+
false,
670+
FileOrderCriteria.NAME_AZ
671+
)
672+
await sut.deleteFile(datasetFiles.files[0].id)
673+
674+
const datasetFileCounts = await sut.getDatasetFileCounts(
675+
deleFileTestDatasetIds.numericId,
676+
latestDatasetVersionId,
677+
false
678+
)
679+
expect(datasetFileCounts.total).toEqual(0)
680+
681+
await deleteUnpublishedDatasetViaApi(deleFileTestDatasetIds.numericId)
682+
})
683+
684+
test('should delete a file from the draft dataset but not from the published dataset', async () => {
685+
await publishDatasetViaApi(deleFileTestDatasetIds.numericId).catch(() => {
686+
throw new Error('Error while publishing test Dataset')
687+
})
688+
689+
await waitForNoLocks(deleFileTestDatasetIds.numericId, 10).catch(() => {
690+
throw new Error('Error while waiting for no locks')
691+
})
692+
693+
const datasetFiles = await sut.getDatasetFiles(
694+
deleFileTestDatasetIds.numericId,
695+
latestDatasetVersionId,
696+
false,
697+
FileOrderCriteria.NAME_AZ
698+
)
699+
await sut.deleteFile(datasetFiles.files[0].id)
700+
701+
const datasetFileCounts = await sut.getDatasetFileCounts(
702+
deleFileTestDatasetIds.numericId,
703+
DatasetNotNumberedVersion.DRAFT,
704+
false
705+
)
706+
707+
expect(datasetFileCounts.total).toEqual(0)
708+
709+
const publishedDatasetFileCounts = await sut.getDatasetFileCounts(
710+
deleFileTestDatasetIds.numericId,
711+
DatasetNotNumberedVersion.LATEST_PUBLISHED,
712+
false
713+
)
714+
715+
expect(publishedDatasetFileCounts.total).toBeGreaterThan(0)
716+
717+
await deletePublishedDatasetViaApi(deleFileTestDatasetIds.persistentId).catch(() => {
718+
throw new Error('Error while deleting published test Dataset')
719+
})
720+
})
721+
722+
test('should return error when file does not exist', async () => {
723+
const expectedError = new WriteError(`[404] File with ID ${nonExistentFiledId} not found.`)
724+
725+
await expect(sut.deleteFile(nonExistentFiledId)).rejects.toThrow(expectedError)
726+
})
727+
})
649728
})

test/unit/files/DeleteFile.test.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { IFilesRepository } from '../../../src/files/domain/repositories/IFilesRepository'
2+
import { WriteError } from '../../../src'
3+
import { DeleteFile } from '../../../src/files/domain/useCases/DeleteFile'
4+
5+
describe('execute', () => {
6+
test('should return undefined when repository call is successful', async () => {
7+
const filesRepositoryStub: IFilesRepository = {} as IFilesRepository
8+
filesRepositoryStub.deleteFile = jest.fn().mockResolvedValue(undefined)
9+
10+
const sut = new DeleteFile(filesRepositoryStub)
11+
12+
const actual = await sut.execute(1)
13+
14+
expect(actual).toEqual(undefined)
15+
})
16+
17+
test('should return error result on repository error', async () => {
18+
const filesRepositoryStub: IFilesRepository = {} as IFilesRepository
19+
filesRepositoryStub.deleteFile = jest.fn().mockRejectedValue(new WriteError())
20+
21+
const sut = new DeleteFile(filesRepositoryStub)
22+
23+
await expect(sut.execute(1)).rejects.toThrow(WriteError)
24+
})
25+
})

0 commit comments

Comments
 (0)