diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ea3e0f7..cb116c44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 --- diff --git a/src/datasets/domain/useCases/validators/SingleMetadataFieldValidator.ts b/src/datasets/domain/useCases/validators/SingleMetadataFieldValidator.ts index f39f0ed4..f233e450 100644 --- a/src/datasets/domain/useCases/validators/SingleMetadataFieldValidator.ts +++ b/src/datasets/domain/useCases/validators/SingleMetadataFieldValidator.ts @@ -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 { @@ -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) } @@ -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 ) { diff --git a/src/datasets/domain/useCases/validators/errors/DateFormatFieldError.ts b/src/datasets/domain/useCases/validators/errors/DateFormatFieldError.ts deleted file mode 100644 index 6a174837..00000000 --- a/src/datasets/domain/useCases/validators/errors/DateFormatFieldError.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { FieldValidationError } from './FieldValidationError' - -export class DateFormatFieldError extends FieldValidationError { - constructor( - metadataFieldName: string, - citationBlockName: string, - validDateFormat: string, - parentMetadataFieldName?: string, - fieldPosition?: number - ) { - super( - metadataFieldName, - citationBlockName, - parentMetadataFieldName, - fieldPosition, - `The field requires a valid date format (${validDateFormat}).` - ) - } -} diff --git a/test/integration/collections/CollectionsRepository.test.ts b/test/integration/collections/CollectionsRepository.test.ts index d1afd76d..2974e482 100644 --- a/test/integration/collections/CollectionsRepository.test.ts +++ b/test/integration/collections/CollectionsRepository.test.ts @@ -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) diff --git a/test/unit/datasets/DatasetResourceValidator.test.ts b/test/unit/datasets/DatasetResourceValidator.test.ts index 91d5f10e..c83bb241 100644 --- a/test/unit/datasets/DatasetResourceValidator.test.ts +++ b/test/unit/datasets/DatasetResourceValidator.test.ts @@ -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,