Skip to content

Commit 448cb00

Browse files
committed
Add use cases for new settings
1 parent 9c7e9d8 commit 448cb00

File tree

6 files changed

+120
-2
lines changed

6 files changed

+120
-2
lines changed

src/info/domain/repositories/IDataverseInfoRepository.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,6 @@ export interface IDataverseInfoRepository {
77
getMaxEmbargoDurationInMonths(): Promise<number>
88
getApplicationTermsOfUse(lang?: string): Promise<string>
99
getAvailableDatasetMetadataExportFormats(): Promise<DatasetMetadataExportFormats>
10+
getDatasetPublishPopupCustomText(): Promise<string>
11+
getPublishDatasetDisclaimerText(): Promise<string>
1012
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { IDataverseInfoRepository } from '../repositories/IDataverseInfoRepository'
3+
4+
export class GetDatasetPublishPopupCustomText implements UseCase<string> {
5+
private dataverseInfoRepository: IDataverseInfoRepository
6+
7+
constructor(dataverseInfoRepository: IDataverseInfoRepository) {
8+
this.dataverseInfoRepository = dataverseInfoRepository
9+
}
10+
11+
/**
12+
* Returns a string containing custom text for the Publish Dataset modal.
13+
*
14+
* @returns {Promise<string>}
15+
*/
16+
async execute(): Promise<string> {
17+
return await this.dataverseInfoRepository.getDatasetPublishPopupCustomText()
18+
}
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { IDataverseInfoRepository } from '../repositories/IDataverseInfoRepository'
3+
4+
export class GetPublishDatasetDisclaimerText implements UseCase<string> {
5+
private dataverseInfoRepository: IDataverseInfoRepository
6+
7+
constructor(dataverseInfoRepository: IDataverseInfoRepository) {
8+
this.dataverseInfoRepository = dataverseInfoRepository
9+
}
10+
11+
/**
12+
* Returns a string containing the disclaimer text for the Publish Dataset modal.
13+
*
14+
* @returns {Promise<string>}
15+
*/
16+
async execute(): Promise<string> {
17+
return await this.dataverseInfoRepository.getPublishDatasetDisclaimerText()
18+
}
19+
}

src/info/infra/repositories/DataverseInfoRepository.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,26 @@ export class DataverseInfoRepository extends ApiRepository implements IDataverse
6666
throw error
6767
})
6868
}
69+
public async getDatasetPublishPopupCustomText(): Promise<string> {
70+
return this.doGet(
71+
this.buildApiEndpoint(this.infoResourceName, `settings/:DatasetPublishPopupCustomText`)
72+
)
73+
.then((response: AxiosResponse<{ data: { message: string } }>) => {
74+
return response.data.data.message
75+
})
76+
.catch((error) => {
77+
throw error
78+
})
79+
}
80+
public async getPublishDatasetDisclaimerText(): Promise<string> {
81+
return this.doGet(
82+
this.buildApiEndpoint(this.infoResourceName, `settings/:PublishDatasetDisclaimerText`)
83+
)
84+
.then((response: AxiosResponse<{ data: { message: string } }>) => {
85+
return response.data.data.message
86+
})
87+
.catch((error) => {
88+
throw error
89+
})
90+
}
6991
}

test/integration/info/DataverseInfoRepository.test.ts

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ import { TestConstants } from '../../testHelpers/TestConstants'
77
import {
88
deleteApplicationTermsOfUseViaApi,
99
setApplicationTermsOfUseViaApi,
10-
setMaxEmbargoDurationInMonthsViaApi
10+
setDatasetPublishPopupCustomTextViaApi,
11+
setMaxEmbargoDurationInMonthsViaApi,
12+
setPublishDatasetDisclaimerTextViaApi
1113
} from '../../testHelpers/info/infoHelper'
1214
import { ReadError } from '../../../src/core/domain/repositories/ReadError'
1315

@@ -53,7 +55,40 @@ describe('DataverseInfoRepository', () => {
5355
expect(actual).toBe(testMaxEmbargoDurationInMonths)
5456
})
5557
})
58+
describe('getPublishDatasetDisclaimerText', () => {
59+
test('should return error when the setting does not exist', async () => {
60+
const errorExpected: ReadError = new ReadError(
61+
'[404] Setting :PublishDatasetDisclaimerText not found'
62+
)
63+
64+
await expect(sut.getPublishDatasetDisclaimerText()).rejects.toThrow(errorExpected)
65+
})
5666

67+
test('should return text when the setting exists', async () => {
68+
const testPublishDatasetDisclaimerText = 'please read and accept'
69+
await setPublishDatasetDisclaimerTextViaApi(testPublishDatasetDisclaimerText)
70+
const actual = await sut.getPublishDatasetDisclaimerText()
71+
72+
expect(actual).toBe(testPublishDatasetDisclaimerText)
73+
})
74+
})
75+
describe('getDatasetPublishPopupCustomText', () => {
76+
test('should return error when the setting does not exist', async () => {
77+
const errorExpected: ReadError = new ReadError(
78+
'[404] Setting :DatasetPublishPopupCustomText not found'
79+
)
80+
81+
await expect(sut.getDatasetPublishPopupCustomText()).rejects.toThrow(errorExpected)
82+
})
83+
84+
test('should return text when the setting exists', async () => {
85+
const testDatasetPublishPopupCustomText = 'custom publish popup text'
86+
await setDatasetPublishPopupCustomTextViaApi(testDatasetPublishPopupCustomText)
87+
const actual = await sut.getDatasetPublishPopupCustomText()
88+
89+
expect(actual).toBe(testDatasetPublishPopupCustomText)
90+
})
91+
})
5792
describe('getApplicationTermsOfUse', () => {
5893
test('should return no terms message when terms are not set', async () => {
5994
const defaultNoTermsOfUseMessage =

test/testHelpers/info/infoHelper.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,28 @@ export const setApplicationTermsOfUseViaApi = async (
2424
}
2525
)
2626
}
27-
27+
export const setDatasetPublishPopupCustomTextViaApi = async (
28+
datasetPublishPopupCustomText: string
29+
): Promise<AxiosResponse> => {
30+
return await axios.put(
31+
`${TestConstants.TEST_API_URL}/admin/settings/:DatasetPublishPopupCustomText`,
32+
datasetPublishPopupCustomText,
33+
{
34+
headers: { 'Content-Type': 'text/plain' }
35+
}
36+
)
37+
}
38+
export const setPublishDatasetDisclaimerTextViaApi = async (
39+
publishDatasetDisclaimerText: string
40+
): Promise<AxiosResponse> => {
41+
return await axios.put(
42+
`${TestConstants.TEST_API_URL}/admin/settings/:PublishDatasetDisclaimerText`,
43+
publishDatasetDisclaimerText,
44+
{
45+
headers: { 'Content-Type': 'text/plain' }
46+
}
47+
)
48+
}
2849
export const deleteApplicationTermsOfUseViaApi = async (): Promise<AxiosResponse> => {
2950
return await axios.delete(`${TestConstants.TEST_API_URL}/admin/settings/:ApplicationTermsOfUse`)
3051
}

0 commit comments

Comments
 (0)