Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ This changelog follows the principles of [Keep a Changelog](https://keepachangel

### Added

- Collections: Added optional `ignoreSettingExcludeEmailFromExport` support to `getCollection`.

### Changed

### Fixed
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,10 @@ import { LinkingObjectType } from '../useCases/GetCollectionsForLinking'
import { RoleAlias } from '../../../roles/domain/models/RoleAlias'

export interface ICollectionsRepository {
getCollection(collectionIdOrAlias: number | string): Promise<Collection>
getCollection(
collectionIdOrAlias: number | string,
ignoreSettingExcludeEmailFromExport?: boolean
): Promise<Collection>
getCollectionStorageDriver(
collectionIdOrAlias: number | string,
getEffective?: boolean
Expand Down
11 changes: 9 additions & 2 deletions src/collections/domain/useCases/GetCollection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,16 @@ export class GetCollection implements UseCase<Collection> {
*
* @param {number | string} [collectionIdOrAlias = ':root'] - A generic collection identifier, which can be either a string (for queries by CollectionAlias), or a number (for queries by CollectionId)
* If this parameter is not set, the default value is: ':root'
* @param {boolean} ignoreSettingExcludeEmailFromExport - This prevents the contact emails from being excluded when the setting `ExcludeEmailFromExport` is set to true and the user has EditDataverse permissions.
* @returns {Promise<Collection>}
*/
async execute(collectionIdOrAlias: number | string = ROOT_COLLECTION_ID): Promise<Collection> {
return await this.collectionsRepository.getCollection(collectionIdOrAlias)
async execute(
collectionIdOrAlias: number | string = ROOT_COLLECTION_ID,
ignoreSettingExcludeEmailFromExport?: boolean
): Promise<Collection> {
return await this.collectionsRepository.getCollection(
collectionIdOrAlias,
ignoreSettingExcludeEmailFromExport
)
}
}
6 changes: 4 additions & 2 deletions src/collections/infra/repositories/CollectionsRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -99,11 +99,13 @@ export enum GetMyDataCollectionItemsQueryParams {
export class CollectionsRepository extends ApiRepository implements ICollectionsRepository {
private readonly collectionsResourceName: string = 'dataverses'
public async getCollection(
collectionIdOrAlias: number | string = ROOT_COLLECTION_ID
collectionIdOrAlias: number | string = ROOT_COLLECTION_ID,
ignoreSettingExcludeEmailFromExport?: boolean
): Promise<Collection> {
return this.doGet(`/${this.collectionsResourceName}/${collectionIdOrAlias}`, true, {
returnOwners: true,
returnChildCount: true
returnChildCount: true,
ignoreSettingExcludeEmailFromExport: ignoreSettingExcludeEmailFromExport
})
.then((response) => transformCollectionResponseToCollection(response))
.catch((error) => {
Expand Down
46 changes: 46 additions & 0 deletions test/integration/collections/CollectionsRepository.test.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import axios from 'axios'
import { CollectionsRepository } from '../../../src/collections/infra/repositories/CollectionsRepository'
import { TestConstants } from '../../testHelpers/TestConstants'
import {
Expand Down Expand Up @@ -196,6 +197,51 @@ describe('CollectionsRepository', () => {
actual.allowedDatasetTypes === undefined || Array.isArray(actual.allowedDatasetTypes)
).toBe(true)
})

describe('ignoreSettingExcludeEmailFromExport', () => {
const settingEndpoint = `${TestConstants.TEST_API_URL}/admin/settings/:ExcludeEmailFromExport`
let originalSetting: string | undefined
let settingLoaded = false

beforeAll(async () => {
const response = await axios.get(settingEndpoint, {
validateStatus: (status) => status === 200 || status === 404
})
originalSetting = response.status === 200 ? response.data.data : undefined
settingLoaded = true
await axios.put(settingEndpoint, 'true')
})

afterAll(async () => {
if (settingLoaded) {
if (originalSetting === undefined) {
await axios.delete(settingEndpoint)
} else {
await axios.put(settingEndpoint, originalSetting)
}
}
})

test.each([true, false, undefined])(
'should send ignoreSettingExcludeEmailFromExport=%s as query parameter',
async (ignoreSettingExcludeEmailFromExport) => {
const actual = await sut.getCollection(
testCollectionAlias,
ignoreSettingExcludeEmailFromExport
)

expect(actual.id).toBe(testCollectionId)
expect(actual.contacts).toEqual(
ignoreSettingExcludeEmailFromExport
? [
{ email: 'pi@example.edu', displayOrder: 0 },
{ email: 'student@example.edu', displayOrder: 1 }
]
: undefined
)
}
)
})
})

describe('publishCollection', () => {
Expand Down
25 changes: 25 additions & 0 deletions test/unit/collections/CollectionsRepository.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,31 @@ describe('CollectionsRepository', () => {
expect(error).toBeInstanceOf(Error)
})
})

test.each([true, false, undefined])(
'should send ignoreSettingExcludeEmailFromExport=%s as query parameter',
async (ignoreSettingExcludeEmailFromExport) => {
jest.spyOn(axios, 'get').mockResolvedValue(testCollectionSuccessfulResponse)

const actual = await sut.getCollection(
testCollectionModel.alias,
ignoreSettingExcludeEmailFromExport
)

expect(axios.get).toHaveBeenCalledWith(
`${TestConstants.TEST_API_URL}/dataverses/${testCollectionModel.alias}`,
{
...expectedRequestConfigApiKey,
params: {
returnOwners: true,
returnChildCount: true,
ignoreSettingExcludeEmailFromExport
}
}
)
expect(actual).toStrictEqual(testCollectionModel)
}
)
})

describe('getCollectionStorageDriver', () => {
Expand Down
Loading