Skip to content

Commit af00b1a

Browse files
committed
feat: update functional test
1 parent 661d81d commit af00b1a

File tree

2 files changed

+108
-2
lines changed

2 files changed

+108
-2
lines changed

docs/useCases.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1245,7 +1245,7 @@ This use case is designed to update or edit metadata information for a specific
12451245

12461246
###### Example call:
12471247

1248-
````typescript
1248+
```typescript
12491249
import { updateFileMetadata } from '@iqss/dataverse-client-javascript'
12501250

12511251
/* ... */
@@ -1260,6 +1260,7 @@ const updateFileMetadataDTO = {
12601260
await updateFileMetadata.execute(fileId, updateFileMetadataDTO).then((fileId) => {
12611261
console.log(`File updated successfully with file ID: ${fileId}`)
12621262
})
1263+
```
12631264

12641265
_See [use case](../src/files/domain/useCases/UpdateFileMetadata.ts) implementation_.
12651266

@@ -1270,6 +1271,7 @@ This use case supports the following optional parameters for updateFileMetadataD
12701271
- **categories**: (string[])
12711272
- **dataFileTags**: (string[])
12721273
- **restrict**: (boolean)
1274+
12731275
#### Delete a File
12741276

12751277
Deletes a File.
@@ -1286,7 +1288,7 @@ const fileId = 12345
12861288
deleteFile.execute(fileId)
12871289

12881290
/* ... */
1289-
````
1291+
```
12901292

12911293
_See [use case](../src/files/domain/useCases/DeleteFile.ts) implementation_.
12921294

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
import {
2+
ApiConfig,
3+
createDataset,
4+
CreatedDatasetIdentifiers,
5+
WriteError,
6+
updateFileMetadata,
7+
getFile,
8+
DatasetNotNumberedVersion,
9+
getDatasetFiles
10+
} from '../../../src'
11+
import { DataverseApiAuthMechanism } from '../../../src/core/infra/repositories/ApiConfig'
12+
import {
13+
createCollectionViaApi,
14+
deleteCollectionViaApi
15+
} from '../../testHelpers/collections/collectionHelper'
16+
import { deleteUnpublishedDatasetViaApi } from '../../testHelpers/datasets/datasetHelper'
17+
import { uploadFileViaApi } from '../../testHelpers/files/filesHelper'
18+
import { TestConstants } from '../../testHelpers/TestConstants'
19+
import { UpdateFileMetadataDTO } from '../../../src/files/domain/dtos/UpdateFileMetadataDTO'
20+
import { FileModel } from '../../../src/files/domain/models/FileModel'
21+
22+
describe('execute', () => {
23+
const testCollectionAlias = 'updateFileMetadatFunctionalTest'
24+
let testDatasetIds: CreatedDatasetIdentifiers
25+
const testTextFile1Name = 'test-file-1.txt'
26+
const metadataUpdate: UpdateFileMetadataDTO = {
27+
description: 'This is a test file',
28+
categories: ['file'],
29+
restrict: true
30+
}
31+
32+
beforeAll(async () => {
33+
ApiConfig.init(
34+
TestConstants.TEST_API_URL,
35+
DataverseApiAuthMechanism.API_KEY,
36+
process.env.TEST_API_KEY
37+
)
38+
await createCollectionViaApi(testCollectionAlias)
39+
40+
try {
41+
testDatasetIds = await createDataset.execute(
42+
TestConstants.TEST_NEW_DATASET_DTO,
43+
testCollectionAlias
44+
)
45+
} catch (error) {
46+
throw new Error('Tests beforeAll(): Error while creating test dataset')
47+
}
48+
49+
await uploadFileViaApi(testDatasetIds.numericId, testTextFile1Name).catch(() => {
50+
throw new Error(`Tests beforeAll(): Error while uploading file ${testTextFile1Name}`)
51+
})
52+
})
53+
54+
afterAll(async () => {
55+
try {
56+
await deleteUnpublishedDatasetViaApi(testDatasetIds.numericId)
57+
} catch (error) {
58+
throw new Error('Tests afterAll(): Error while deleting test dataset')
59+
}
60+
61+
try {
62+
await deleteCollectionViaApi(testCollectionAlias)
63+
} catch (error) {
64+
throw new Error('Tests afterAll(): Error while deleting test collection')
65+
}
66+
})
67+
68+
test('should successfully update metadata of a file', async () => {
69+
const datasetFiles = await getDatasetFiles.execute(testDatasetIds.numericId)
70+
const fileId = datasetFiles.files[0].id
71+
72+
try {
73+
await updateFileMetadata.execute(fileId, metadataUpdate)
74+
} catch (error) {
75+
throw new Error('File metadata should be updated')
76+
} finally {
77+
const fileInfo: FileModel = (await getFile.execute(
78+
fileId,
79+
DatasetNotNumberedVersion.LATEST
80+
)) as FileModel
81+
82+
expect(fileInfo.description).toEqual(metadataUpdate.description)
83+
expect(fileInfo.categories).toEqual(metadataUpdate.categories)
84+
expect(fileInfo.restricted).toEqual(metadataUpdate.restrict)
85+
}
86+
})
87+
88+
test('should throw an error when the file id does not exist', async () => {
89+
let writeError: WriteError | undefined = undefined
90+
const nonExistentFileId = 5
91+
92+
try {
93+
await updateFileMetadata.execute(nonExistentFileId, metadataUpdate)
94+
throw new Error('Use case should throw an error')
95+
} catch (error) {
96+
writeError = error as WriteError
97+
} finally {
98+
expect(writeError).toBeInstanceOf(WriteError)
99+
expect(writeError?.message).toEqual(
100+
`There was an error when writing the resource. Reason was: [400] Error attempting get the requested data file.`
101+
)
102+
}
103+
})
104+
})

0 commit comments

Comments
 (0)