diff --git a/src/Squidex.Domain.Apps.Core.Operations/EnrichContent/DefaultValueFactory.cs b/src/Squidex.Domain.Apps.Core.Operations/EnrichContent/DefaultValueFactory.cs index 0cbd275e2..643e17fb9 100644 --- a/src/Squidex.Domain.Apps.Core.Operations/EnrichContent/DefaultValueFactory.cs +++ b/src/Squidex.Domain.Apps.Core.Operations/EnrichContent/DefaultValueFactory.cs @@ -1,11 +1,12 @@ // ========================================================================== -// ValidatorsFactory.cs +// DefaultValueFactory.cs // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex Group // All rights reserved. // ========================================================================== +using System.Globalization; using Newtonsoft.Json.Linq; using NodaTime; using Squidex.Domain.Apps.Core.Schemas; @@ -78,7 +79,7 @@ namespace Squidex.Domain.Apps.Core.EnrichContent if (properties.CalculatedDefaultValue == DateTimeCalculatedDefaultValue.Today) { - return now.ToString().Substring(10); + return now.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture); } return properties.DefaultValue?.ToString(); diff --git a/src/Squidex/app/shared/services/schemas.fields.spec.ts b/src/Squidex/app/shared/services/schemas.fields.spec.ts index 0ac71ed4e..60feab7ec 100644 --- a/src/Squidex/app/shared/services/schemas.fields.spec.ts +++ b/src/Squidex/app/shared/services/schemas.fields.spec.ts @@ -5,6 +5,8 @@ * Copyright (c) Sebastian Stehle. All rights reserved */ +import { DateTime } from 'framework'; + import { AssetsFieldPropertiesDto, BooleanFieldPropertiesDto, @@ -84,6 +86,10 @@ describe('AssetsField', () => { it('should return zero formatting if other type', () => { expect(field.formatValue(1)).toBe('0 Assets'); }); + + it('should return null for default properties', () => { + expect(field.defaultValue()).toBeNull(); + }); }); describe('TagsField', () => { @@ -104,6 +110,10 @@ describe('TagsField', () => { it('should return zero formatting if other type', () => { expect(field.formatValue(1)).toBe(''); }); + + it('should return null for default properties', () => { + expect(field.defaultValue()).toBeNull(); + }); }); describe('BooleanField', () => { @@ -124,9 +134,16 @@ describe('BooleanField', () => { it('should format to minus if false', () => { expect(field.formatValue(false)).toBe('-'); }); + + it('should return default value for default properties', () => { + Object.assign(field.properties, { defaultValue : true }); + + expect(field.defaultValue()).toBeTruthy(); + }); }); describe('DateTimeField', () => { + const now = DateTime.parseISO_UTC('2017-10-12T16:30:10Z'); const field = createField(new DateTimeFieldPropertiesDto(null, null, null, true, false, 'Date')); it('should create validators', () => { @@ -147,10 +164,28 @@ describe('DateTimeField', () => { expect(dateField.formatValue('2017-12-12T16:00:00Z')).toBe('2017-12-12'); }); - it('should format to date', () => { + it('should format to date time', () => { const dateTimeField = createField(new DateTimeFieldPropertiesDto(null, null, null, true, false, 'DateTime')); - expect(dateTimeField.formatValue('2017-12-12T16:00:00Z').substr(0, 10)).toBe('2017-12-12'); + expect(dateTimeField.formatValue('2017-12-12T16:00:00Z')).toBe('2017-12-12 16:00:00'); + }); + + it('should return default for DateFieldProperties', () => { + Object.assign(field.properties, { defaultValue: '2017-10-12T16:00:00Z' }); + + expect(field.defaultValue()).toEqual('2017-10-12T16:00:00Z'); + }); + + it('should return calculated date when Today for DateFieldProperties', () => { + Object.assign(field.properties, { calculatedDefaultValue: 'Today' }); + + expect((field).properties.getDefaultValue(now)).toEqual('2017-10-12'); + }); + + it('should return calculated date when Now for DateFieldProperties', () => { + Object.assign(field.properties, { calculatedDefaultValue: 'Now' }); + + expect((field).properties.getDefaultValue(now)).toEqual('2017-10-12T16:30:10Z'); }); }); @@ -168,6 +203,10 @@ describe('GeolocationField', () => { it('should format to latitude and longitude', () => { expect(field.formatValue({ latitude: 42, longitude: 3.14 })).toBe('3.14, 42'); }); + + it('should return null for default properties', () => { + expect(field.defaultValue()).toBeNull(); + }); }); describe('JsonField', () => { @@ -184,6 +223,10 @@ describe('JsonField', () => { it('should format to constant', () => { expect(field.formatValue({})).toBe(''); }); + + it('should return null for default properties', () => { + expect(field.defaultValue()).toBeNull(); + }); }); describe('NumberField', () => { @@ -200,6 +243,12 @@ describe('NumberField', () => { it('should format to number', () => { expect(field.formatValue(42)).toBe(42); }); + + it('should return default value for default properties', () => { + Object.assign(field.properties, { defaultValue: 13 }); + + expect(field.defaultValue()).toEqual(13); + }); }); describe('ReferencesField', () => { @@ -220,9 +269,13 @@ describe('ReferencesField', () => { it('should return zero formatting if other type', () => { expect(field.formatValue(1)).toBe('0 References'); }); + + it('should return null for default properties', () => { + expect(field.defaultValue()).toBeNull(); + }); }); -describe('NumberField', () => { +describe('StringField', () => { const field = createField(new StringFieldPropertiesDto(null, null, null, true, false, 'Input', undefined, 'pattern', undefined, 3, 1, ['1', '2'])); it('should create validators', () => { @@ -236,6 +289,12 @@ describe('NumberField', () => { it('should format to string', () => { expect(field.formatValue('hello')).toBe('hello'); }); + + it('should return default value for default properties', () => { + Object.assign(field.properties, { defaultValue: 'MyDefault' }); + + expect(field.defaultValue()).toEqual('MyDefault'); + }); }); function createField(properties: FieldPropertiesDto) { diff --git a/src/Squidex/app/shared/services/schemas.service.spec.ts b/src/Squidex/app/shared/services/schemas.service.spec.ts index 891991edd..2f8ec096e 100644 --- a/src/Squidex/app/shared/services/schemas.service.spec.ts +++ b/src/Squidex/app/shared/services/schemas.service.spec.ts @@ -12,18 +12,15 @@ import { AddFieldDto, AnalyticsService, ApiUrlConfig, - AssetsFieldPropertiesDto, CreateSchemaDto, createProperties, DateTime, - DateTimeFieldPropertiesDto, FieldDto, LocalCacheService, SchemaDetailsDto, SchemaDto, SchemaPropertiesDto, SchemasService, - StringFieldPropertiesDto, UpdateFieldDto, UpdateSchemaDto, UpdateSchemaScriptsDto, @@ -685,34 +682,4 @@ describe('SchemasService', () => { req.flush({}); })); -}); - -describe('FieldPropertiesDto', () => { - it('should return default value for StringFieldProperties', () => { - const dto = new StringFieldPropertiesDto(null, null, null, false, false, 'Input', 'Default Value'); - expect(dto.getDefaultValue()).toEqual('Default Value'); - }); - - it('should return default for DateFieldProperties', () => { - const now = DateTime.now(); - const dto = new DateTimeFieldPropertiesDto(null, null, null, false, false, 'Input', now.toISOString()); - expect(dto.getDefaultValue()).toEqual(now.toISOString()); - }); - - it('should return calculated date when Today for DateFieldProperties', () => { - const now = DateTime.now().date; - const dto = new DateTimeFieldPropertiesDto(null, null, null, false, false, 'Input', null, null, null, 'Today'); - expect(dto.getDefaultValue()).toEqual(now.toUTCStringFormat('ddd, DD MMM YYYY hh:mm:ss Z')); - }); - - it('should return calculated date when Now for DateFieldProperties', () => { - const now = DateTime.now(); - const dto = new DateTimeFieldPropertiesDto(null, null, null, false, false, 'Input', null, null, null, 'Now'); - expect(dto.getDefaultValue()).toEqual(now.toUTCStringFormat('ddd, DD MMM YYYY hh:mm:ss Z')); - }); - - it('should return null for default properties', () => { - const dto = new AssetsFieldPropertiesDto(null, null, null, false, false); - expect(dto.getDefaultValue()).toEqual(null); - }); }); \ No newline at end of file diff --git a/src/Squidex/app/shared/services/schemas.service.ts b/src/Squidex/app/shared/services/schemas.service.ts index d21777b4e..c5904552d 100644 --- a/src/Squidex/app/shared/services/schemas.service.ts +++ b/src/Squidex/app/shared/services/schemas.service.ts @@ -494,15 +494,16 @@ export class DateTimeFieldPropertiesDto extends FieldPropertiesDto { return validators; } - public getDefaultValue(): any { - if (this.calculatedDefaultValue != null) { - let now = DateTime.now(); - if (this.calculatedDefaultValue === 'Today') { - now = now.date; - } - return now.toUTCStringFormat('ddd, DD MMM YYYY hh:mm:ss Z'); + public getDefaultValue(now?: DateTime): any { + now = now || DateTime.now(); + + if (this.calculatedDefaultValue === 'Now') { + return now.toUTCStringFormat('YYYY-MM-DDTHH:mm:ss') + 'Z'; + } else if (this.calculatedDefaultValue === 'Today') { + return now.toUTCStringFormat('YYYY-MM-DD'); + } else { + return this.defaultValue; } - return this.defaultValue; } } diff --git a/tests/Squidex.Domain.Apps.Core.Tests/Operations/EnrichContent/ContentEnrichmentTests.cs b/tests/Squidex.Domain.Apps.Core.Tests/Operations/EnrichContent/ContentEnrichmentTests.cs index dcf494b7b..e0dd18b87 100644 --- a/tests/Squidex.Domain.Apps.Core.Tests/Operations/EnrichContent/ContentEnrichmentTests.cs +++ b/tests/Squidex.Domain.Apps.Core.Tests/Operations/EnrichContent/ContentEnrichmentTests.cs @@ -22,7 +22,7 @@ namespace Squidex.Domain.Apps.Core.Operations.EnrichContent { public class ContentEnrichmentTests { - private static readonly Instant Now = SystemClock.Instance.GetCurrentInstant(); + private static readonly Instant Now = Instant.FromDateTimeUtc(new DateTime(2017, 10, 12, 16, 30, 10, DateTimeKind.Utc)); private readonly LanguagesConfig languagesConfig = LanguagesConfig.Build(Language.DE, Language.EN); private readonly Schema schema; @@ -119,7 +119,7 @@ namespace Squidex.Domain.Apps.Core.Operations.EnrichContent new DateTimeField(1, "1", Partitioning.Invariant, new DateTimeFieldProperties { CalculatedDefaultValue = DateTimeCalculatedDefaultValue.Today }); - Assert.Equal(Now.ToString().Substring(10), DefaultValueFactory.CreateDefaultValue(field, Now)); + Assert.Equal("2017-10-12", DefaultValueFactory.CreateDefaultValue(field, Now)); } [Fact] @@ -129,7 +129,7 @@ namespace Squidex.Domain.Apps.Core.Operations.EnrichContent new DateTimeField(1, "1", Partitioning.Invariant, new DateTimeFieldProperties { CalculatedDefaultValue = DateTimeCalculatedDefaultValue.Now }); - Assert.Equal(Now.ToString(), DefaultValueFactory.CreateDefaultValue(field, Now)); + Assert.Equal("2017-10-12T16:30:10Z", DefaultValueFactory.CreateDefaultValue(field, Now)); } [Fact]