Skip to content

Commit 53eb9e1

Browse files
committed
feat: add includeDeaccessioned param
1 parent 96cab38 commit 53eb9e1

File tree

6 files changed

+57
-9
lines changed

6 files changed

+57
-9
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: 39 additions & 4 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,43 @@ 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+
// Update dataset
599+
const metadataBlocksRepository = new MetadataBlocksRepository()
600+
const citationMetadataBlock = await metadataBlocksRepository.getMetadataBlockByName(
601+
'citation'
602+
)
603+
604+
await sut.updateDataset(testDatasetIds.numericId, TEST_DIFF_DATASET_DTO, [
605+
citationMetadataBlock
606+
])
607+
608+
const actual = await sut.getDatasetVersionDiff(
609+
testDatasetIds.numericId,
610+
DatasetNotNumberedVersion.LATEST_PUBLISHED,
611+
DatasetNotNumberedVersion.DRAFT,
612+
true
613+
)
614+
615+
expect(actual).not.toBeUndefined()
616+
expect(actual.oldVersion.versionState).toBe('DEACCESSIONED')
617+
expect(actual.oldVersion.versionNumber).toBe('1.0')
618+
619+
expect(actual.newVersion.versionState).toBe('DRAFT')
620+
expect(actual.newVersion.versionNumber).toBe('DRAFT')
621+
622+
expect(actual.metadataChanges?.[0]).not.toBeUndefined()
623+
expect(actual.metadataChanges?.[0].blockName).toEqual('Citation Metadata')
624+
})
625+
591626
afterEach(async () => {
592627
await deletePublishedDatasetViaApi(testDatasetIds.persistentId)
593628
})

0 commit comments

Comments
 (0)