Skip to content

Commit 2142915

Browse files
authored
Merge pull request #278 from IQSS/feat/276-add-includeDeaccesioned-option
Compare Dataset Versions use case extension: add includeDeaccessioned option
2 parents 96cab38 + 20fb1df commit 2142915

File tree

7 files changed

+88
-28
lines changed

7 files changed

+88
-28
lines changed

docs/useCases.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,8 @@ The `datasetId` parameter can be a string, for persistent identifiers, or a numb
593593

594594
The `oldVersion` and `newVersion` parameters specify the versions of the dataset to compare.
595595

596+
There is an optional third parameter called `includeDeaccessioned`, by default, deaccessioned dataset versions are not included in the search when applying the `:latest` or `:latest-published` identifiers. If not set, the default value is `false`.
597+
596598
#### List All Datasets
597599

598600
Returns an instance of [DatasetPreviewSubset](../src/datasets/domain/models/DatasetPreviewSubset.ts) that contains reduced information for each dataset that the calling user can access in the installation.

src/datasets/domain/models/DatasetVersionDiff.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { DatasetVersionState } from './Dataset'
2+
13
export interface DatasetVersionDiff {
24
oldVersion: VersionSummary
35
newVersion: VersionSummary
@@ -24,6 +26,7 @@ export interface FileSummary {
2426
export interface VersionSummary {
2527
versionNumber: string
2628
lastUpdatedDate: string
29+
versionState: DatasetVersionState
2730
}
2831
export interface MetadataBlockDiff {
2932
blockName: string

src/datasets/domain/repositories/IDatasetsRepository.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ export interface IDatasetsRepository {
3535
getDatasetVersionDiff(
3636
datasetId: number | string,
3737
newVersionId: string,
38-
oldVersionId: string
38+
oldVersionId: string,
39+
includeDeaccessioned: boolean
3940
): Promise<DatasetVersionDiff>
4041
createDataset(
4142
newDataset: DatasetDTO,

src/datasets/domain/useCases/GetDatasetVersionDiff.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,19 @@ export class GetDatasetVersionDiff implements UseCase<DatasetVersionDiff> {
1414
* @param {number | string} [datasetId] - The dataset identifier, which can be a string (for persistent identifiers), or a number (for numeric identifiers).
1515
* @param {string } [oldVersionId] - The dataset version identifier, which can be a version-specific numeric string (for example, 1.0) or a DatasetNotNumberedVersion enum value.
1616
* @param {string } [newVersionId] - The dataset version identifier, which can be a version-specific numeric string (for example, 1.0) or a DatasetNotNumberedVersion enum value.
17+
* @param {boolean} [includeDeaccessioned=false] - Indicates if you want to include deaccessioned dataset versions. The default value is false
1718
*/
1819
async execute(
1920
datasetId: number | string,
2021
oldVersionId: string,
21-
newVersionId: string
22+
newVersionId: string,
23+
includeDeaccessioned = false
2224
): Promise<DatasetVersionDiff> {
2325
return await this.datasetsRepository.getDatasetVersionDiff(
2426
datasetId,
2527
oldVersionId,
26-
newVersionId
28+
newVersionId,
29+
includeDeaccessioned
2730
)
2831
}
2932
}

src/datasets/infra/repositories/DatasetsRepository.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,15 +149,19 @@ export class DatasetsRepository extends ApiRepository implements IDatasetsReposi
149149
public async getDatasetVersionDiff(
150150
datasetId: string | number,
151151
oldVersionId: string,
152-
newVersionId: string
152+
newVersionId: string,
153+
includeDeaccessioned: boolean
153154
): Promise<DatasetVersionDiff> {
154155
return this.doGet(
155156
this.buildApiEndpoint(
156157
this.datasetsResourceName,
157158
`versions/${oldVersionId}/compare/${newVersionId}`,
158159
datasetId
159160
),
160-
true
161+
true,
162+
{
163+
includeDeaccessioned
164+
}
161165
)
162166
.then((response) => transformDatasetVersionDiffResponseToDatasetVersionDiff(response))
163167
.catch((error) => {

test/integration/datasets/DatasetsRepository.test.ts

Lines changed: 67 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,7 @@ describe('DatasetsRepository', () => {
491491
expect(typeof actualDatasetCitation).toBe('string')
492492
})
493493
})
494+
494495
describe('getDatasetVersionDiff', () => {
495496
let testDatasetIds: CreatedDatasetIdentifiers
496497

@@ -514,7 +515,8 @@ describe('DatasetsRepository', () => {
514515
const actual = await sut.getDatasetVersionDiff(
515516
testDatasetIds.numericId,
516517
'1.0',
517-
DatasetNotNumberedVersion.DRAFT
518+
DatasetNotNumberedVersion.DRAFT,
519+
false
518520
)
519521
expect(actual.metadataChanges?.[0]).not.toBeUndefined()
520522
expect(actual.metadataChanges?.[0].blockName).toEqual('Citation Metadata')
@@ -549,12 +551,13 @@ describe('DatasetsRepository', () => {
549551
const actual = await sut.getDatasetVersionDiff(
550552
testDatasetIds.numericId,
551553
'1.0',
552-
DatasetNotNumberedVersion.DRAFT
554+
DatasetNotNumberedVersion.DRAFT,
555+
false
553556
)
554557
expect(actual.filesAdded).toEqual(expectedFilesAdded)
555558
})
556559

557-
test('should return diff between :latestPublished and :draft', async () => {
560+
test('should return diff between :latestPublished and :draft', async () => {
558561
const fileMetadata = {
559562
description: 'test description',
560563
directoryLabel: 'directoryLabel',
@@ -583,11 +586,42 @@ describe('DatasetsRepository', () => {
583586
const actual = await sut.getDatasetVersionDiff(
584587
testDatasetIds.numericId,
585588
DatasetNotNumberedVersion.LATEST_PUBLISHED,
586-
DatasetNotNumberedVersion.DRAFT
589+
DatasetNotNumberedVersion.DRAFT,
590+
false
587591
)
588592
expect(actual.filesAdded).toEqual(expectedFilesAdded)
589593
})
590594

595+
test('should return diff between :latestPublished deaccessioned and :draft when includeDeaccessioned param is true', async () => {
596+
await deaccessionDatasetViaApi(testDatasetIds.numericId, '1.0')
597+
598+
const metadataBlocksRepository = new MetadataBlocksRepository()
599+
const citationMetadataBlock = await metadataBlocksRepository.getMetadataBlockByName(
600+
'citation'
601+
)
602+
603+
await sut.updateDataset(testDatasetIds.numericId, TEST_DIFF_DATASET_DTO, [
604+
citationMetadataBlock
605+
])
606+
607+
const actual = await sut.getDatasetVersionDiff(
608+
testDatasetIds.numericId,
609+
DatasetNotNumberedVersion.LATEST_PUBLISHED,
610+
DatasetNotNumberedVersion.DRAFT,
611+
true
612+
)
613+
614+
expect(actual).not.toBeUndefined()
615+
expect(actual.oldVersion.versionState).toBe('DEACCESSIONED')
616+
expect(actual.oldVersion.versionNumber).toBe('1.0')
617+
618+
expect(actual.newVersion.versionState).toBe('DRAFT')
619+
expect(actual.newVersion.versionNumber).toBe('DRAFT')
620+
621+
expect(actual.metadataChanges?.[0]).not.toBeUndefined()
622+
expect(actual.metadataChanges?.[0].blockName).toEqual('Citation Metadata')
623+
})
624+
591625
afterEach(async () => {
592626
await deletePublishedDatasetViaApi(testDatasetIds.persistentId)
593627
})
@@ -1245,33 +1279,52 @@ describe('DatasetsRepository', () => {
12451279

12461280
await deletePublishedDatasetViaApi(testDatasetIds.persistentId)
12471281
})
1282+
1283+
test('should return error when dataset does not exist', async () => {
1284+
const expectedError = new ReadError(
1285+
`[404] Dataset with ID ${nonExistentTestDatasetId} not found.`
1286+
)
1287+
1288+
await expect(sut.getDatasetVersionsSummaries(nonExistentTestDatasetId)).rejects.toThrow(
1289+
expectedError
1290+
)
1291+
})
12481292
})
12491293

12501294
describe('getDatasetDownloadCount', () => {
1251-
test('should return download count for a dataset', async () => {
1252-
const testDatasetIds = await createDataset.execute(TestConstants.TEST_NEW_DATASET_DTO)
1295+
const testGetDatasetDownloadCountCollectionAlias = 'testGetDatasetDownloadCountCollection'
1296+
let testDatasetIds: CreatedDatasetIdentifiers
1297+
1298+
beforeAll(async () => {
1299+
await createCollectionViaApi(testGetDatasetDownloadCountCollectionAlias)
1300+
await publishCollectionViaApi(testGetDatasetDownloadCountCollectionAlias)
1301+
testDatasetIds = await createDataset.execute(
1302+
TestConstants.TEST_NEW_DATASET_DTO,
1303+
testGetDatasetDownloadCountCollectionAlias
1304+
)
1305+
12531306
await publishDatasetViaApi(testDatasetIds.numericId)
12541307
await waitForNoLocks(testDatasetIds.numericId, 10)
1308+
})
1309+
1310+
afterAll(async () => {
1311+
await deletePublishedDatasetViaApi(testDatasetIds.persistentId)
1312+
await deleteCollectionViaApi(testGetDatasetDownloadCountCollectionAlias)
1313+
})
1314+
1315+
test('should return download count for a dataset', async () => {
12551316
const actual = await sut.getDatasetDownloadCount(testDatasetIds.numericId)
12561317

12571318
expect(actual.downloadCount).toBe(0)
12581319
})
12591320

12601321
test('should return download count including MDC data', async () => {
1261-
const testDatasetIds = await createDataset.execute(TestConstants.TEST_NEW_DATASET_DTO)
1262-
await publishDatasetViaApi(testDatasetIds.numericId)
1263-
await waitForNoLocks(testDatasetIds.numericId, 10)
1264-
12651322
const actual = await sut.getDatasetDownloadCount(testDatasetIds.numericId, true)
12661323

12671324
expect(actual.downloadCount).toBe(0)
12681325
})
12691326

12701327
test('should return download count including MDC data with persistent ID', async () => {
1271-
const testDatasetIds = await createDataset.execute(TestConstants.TEST_NEW_DATASET_DTO)
1272-
await publishDatasetViaApi(testDatasetIds.numericId)
1273-
await waitForNoLocks(testDatasetIds.numericId, 10)
1274-
12751328
const actual = await sut.getDatasetDownloadCount(testDatasetIds.persistentId, true)
12761329

12771330
expect(actual.downloadCount).toBe(0)
@@ -1281,14 +1334,6 @@ describe('DatasetsRepository', () => {
12811334
await expect(sut.getDatasetDownloadCount(nonExistentTestDatasetId)).rejects.toBeInstanceOf(
12821335
ReadError
12831336
)
1284-
1285-
const expectedError = new ReadError(
1286-
`[404] Dataset with ID ${nonExistentTestDatasetId} not found.`
1287-
)
1288-
1289-
await expect(sut.getDatasetVersionsSummaries(nonExistentTestDatasetId)).rejects.toThrow(
1290-
expectedError
1291-
)
12921337
})
12931338
})
12941339
})

test/testHelpers/datasets/datasetVersionDiffHelper.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { DatasetVersionState } from '../../../src'
12
import {
23
DatasetVersionDiff,
34
VersionSummary,
@@ -11,7 +12,8 @@ import {
1112
export const createDatasetVersionDiff = (): DatasetVersionDiff => {
1213
const versionSummary: VersionSummary = {
1314
versionNumber: '1.0',
14-
lastUpdatedDate: '2023-05-15T08:21:03Z'
15+
lastUpdatedDate: '2023-05-15T08:21:03Z',
16+
versionState: DatasetVersionState.RELEASED
1517
}
1618

1719
const metadataBlockDiff: MetadataBlockDiff = {

0 commit comments

Comments
 (0)