Skip to content
Merged
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 @@ -14,6 +14,8 @@ This changelog follows the principles of [Keep a Changelog](https://keepachangel

### Removed

- Removed date fields validations in create and update dataset use cases, since validation is already handled in the backend and SPA frontend (other clients should perform client side validation also). This avoids duplicated logic and keeps the package focused on its core responsibility.

[Unreleased]: https://github.com/IQSS/dataverse-client-javascript/compare/v2.1.0...develop

---
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,12 @@ import {
DatasetMetadataFieldAndValueInfo
} from './BaseMetadataFieldValidator'
import { ControlledVocabularyFieldError } from './errors/ControlledVocabularyFieldError'
import { DateFormatFieldError } from './errors/DateFormatFieldError'
import { MetadataFieldValidator } from './MetadataFieldValidator'
import { DatasetMetadataChildFieldValueDTO } from '../../dtos/DatasetDTO'
import { MultipleMetadataFieldValidator } from './MultipleMetadataFieldValidator'
import {
MetadataFieldInfo,
MetadataFieldType,
MetadataFieldWatermark
MetadataFieldType
} from '../../../../metadataBlocks/domain/models/MetadataBlock'

export class SingleMetadataFieldValidator extends BaseMetadataFieldValidator {
Expand Down Expand Up @@ -50,10 +48,6 @@ export class SingleMetadataFieldValidator extends BaseMetadataFieldValidator {
this.validateControlledVocabularyFieldValue(datasetMetadataFieldAndValueInfo)
}

if (metadataFieldInfo.type == MetadataFieldType.Date) {
this.validateDateFieldValue(datasetMetadataFieldAndValueInfo)
}

if (metadataFieldInfo.childMetadataFields != undefined) {
this.validateChildMetadataFieldValues(datasetMetadataFieldAndValueInfo)
}
Expand All @@ -76,47 +70,6 @@ export class SingleMetadataFieldValidator extends BaseMetadataFieldValidator {
}
}

private validateDateFieldValue(
datasetMetadataFieldAndValueInfo: DatasetMetadataFieldAndValueInfo
) {
const {
metadataFieldInfo: { watermark },
metadataFieldValue
} = datasetMetadataFieldAndValueInfo

const acceptsAllDateFormats = watermark === MetadataFieldWatermark.YYYYOrYYYYMMOrYYYYMMDD

const YYYY_MM_DD_DATE_FORMAT_REGEX = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/

const YYYY_MM_FORMAT_REGEX = /^\d{4}-(0[1-9]|1[0-2])$/

const YYYY_FORMAT_REGEX = /^\d{4}$/

const isValidDateFormat = (value: string): boolean => {
if (acceptsAllDateFormats) {
// Check if it matches any of the formats
return (
YYYY_MM_DD_DATE_FORMAT_REGEX.test(value) ||
YYYY_MM_FORMAT_REGEX.test(value) ||
YYYY_FORMAT_REGEX.test(value)
)
} else {
// Only accepts YYYY-MM-DD format
return YYYY_MM_DD_DATE_FORMAT_REGEX.test(value)
}
}

if (!isValidDateFormat(metadataFieldValue as string)) {
throw new DateFormatFieldError(
datasetMetadataFieldAndValueInfo.metadataFieldKey,
datasetMetadataFieldAndValueInfo.metadataBlockName,
watermark,
datasetMetadataFieldAndValueInfo.metadataParentFieldKey,
datasetMetadataFieldAndValueInfo.metadataFieldPosition
)
}
}

private validateChildMetadataFieldValues(
datasetMetadataFieldAndValueInfo: DatasetMetadataFieldAndValueInfo
) {
Expand Down

This file was deleted.

4 changes: 2 additions & 2 deletions test/integration/collections/CollectionsRepository.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -996,8 +996,8 @@ describe('CollectionsRepository', () => {
expect(updatedCollection.alias).toBe(testUpdatedCollectionAlias)
expect(updatedCollection.name).toBe(updatedCollectionName)
expect(updatedCollection.affiliation).toBe(updatedCollectionAffiliation)
expect(updatedCollection.inputLevels?.length).toBe(1)
const updatedInputLevel = updatedCollection.inputLevels?.[0]
expect(updatedCollection.inputLevels?.length).toBe(2)
const updatedInputLevel = updatedCollection.inputLevels?.[1]
expect(updatedInputLevel?.datasetFieldName).toBe('country')
expect(updatedInputLevel?.include).toBe(true)
expect(updatedInputLevel?.required).toBe(false)
Expand Down
58 changes: 0 additions & 58 deletions test/unit/datasets/DatasetResourceValidator.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -154,64 +154,6 @@ describe('validate', () => {
expect(() => sut.validate(testDataset, testMetadataBlocks)).not.toThrow()
})

test('should raise a date format validation error when a date field has an invalid format', () => {
const testDataset = createDatasetDTO(undefined, undefined, undefined, '1-1-2020')

expect.assertions(6)
runValidateExpectingFieldValidationError(
testDataset,
'timePeriodCoveredStart',
'There was an error when validating the field timePeriodCoveredStart from metadata block citation. Reason was: The field requires a valid date format (YYYY or YYYY-MM or YYYY-MM-DD).'
)
})

test('should not raise a date format validation error when a date field has a valid YYYY-MM-DD format', () => {
const testDataset = createDatasetDTO(undefined, undefined, undefined, '2020-01-01')
expect(() => sut.validate(testDataset, testMetadataBlocks)).not.toThrow()
})

test('should not raise a date format validation error when a date field has a valid YYYY-MM format', () => {
const testDataset = createDatasetDTO(undefined, undefined, undefined, '2020-01')
expect(() => sut.validate(testDataset, testMetadataBlocks)).not.toThrow()
})

test('should not raise a date format validation error when a date field has a valid YYYY format', () => {
const testDataset = createDatasetDTO(undefined, undefined, undefined, '2020')
expect(() => sut.validate(testDataset, testMetadataBlocks)).not.toThrow()
})

test('should raise a date format validation error when a date field has a wrong date format according to the field watermark', () => {
const testDataset = createDatasetDTO(
undefined,
undefined,
undefined,
undefined,
undefined,
undefined,
'01-03'
)

expect.assertions(6)
runValidateExpectingFieldValidationError(
testDataset,
'dateOfCreation',
'There was an error when validating the field dateOfCreation from metadata block citation. Reason was: The field requires a valid date format (YYYY-MM-DD).'
)
})

test('should not raise a date format validation error when a date field has a valid format according to the field watermark', () => {
const testDataset = createDatasetDTO(
undefined,
undefined,
undefined,
undefined,
undefined,
undefined,
'2024-01-03'
)
expect(() => sut.validate(testDataset, testMetadataBlocks)).not.toThrow()
})

test('should raise a controlled vocabulary error when a controlled vocabulary field has an invalid format', () => {
const testDataset = createDatasetDTO(
undefined,
Expand Down
Loading