From 1f40043740f695d04846d9188a0232e1f939e558 Mon Sep 17 00:00:00 2001 From: Stephan Date: Tue, 5 Jul 2016 15:11:10 +0200 Subject: [PATCH] Hopefull fixing tests --- src/Umbraco.Core/Models/Property.cs | 38 +++++++++++++------ .../Mapping/ContentWebModelMappingTests.cs | 8 +++- .../Entities/MockedContentTypes.cs | 2 +- 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/src/Umbraco.Core/Models/Property.cs b/src/Umbraco.Core/Models/Property.cs index 49f336226b..e5471217a5 100644 --- a/src/Umbraco.Core/Models/Property.cs +++ b/src/Umbraco.Core/Models/Property.cs @@ -160,28 +160,42 @@ namespace Umbraco.Core.Models // "garbage-in", accept what we can & convert // throw only if conversion is not possible + var s = value.ToString(); + switch (_propertyType.DataTypeDatabaseType) { case DataTypeDatabaseType.Nvarchar: case DataTypeDatabaseType.Ntext: - value = value.ToString(); + value = s; break; case DataTypeDatabaseType.Integer: - var convInt = value.TryConvertTo(); - if (convInt == false) ThrowTypeException(value, typeof(int), _propertyType.Alias); - value = convInt.Result; + if (s.IsNullOrWhiteSpace()) value = null; // assume empty means null + else + { + var convInt = value.TryConvertTo(); + if (convInt == false) ThrowTypeException(value, typeof(int), _propertyType.Alias); + value = convInt.Result; + } break; case DataTypeDatabaseType.Decimal: - var convDecimal = value.TryConvertTo(); - if (convDecimal == false) ThrowTypeException(value, typeof(decimal), _propertyType.Alias); - // need to normalize the value (change the scaling factor and remove trailing zeroes) - // because the underlying database is going to mess with the scaling factor anyways. - value = convDecimal.Result.Normalize(); + if (s.IsNullOrWhiteSpace()) value = null; // assume empty means null + else + { + var convDecimal = value.TryConvertTo(); + if (convDecimal == false) ThrowTypeException(value, typeof (decimal), _propertyType.Alias); + // need to normalize the value (change the scaling factor and remove trailing zeroes) + // because the underlying database is going to mess with the scaling factor anyways. + value = convDecimal.Result.Normalize(); + } break; case DataTypeDatabaseType.Date: - var convDateTime = value.TryConvertTo(); - if (convDateTime == false) ThrowTypeException(value, typeof(DateTime), _propertyType.Alias); - value = convDateTime.Result; + if (s.IsNullOrWhiteSpace()) value = null; // assume empty means null + else + { + var convDateTime = value.TryConvertTo(); + if (convDateTime == false) ThrowTypeException(value, typeof (DateTime), _propertyType.Alias); + value = convDateTime.Result; + } break; } } diff --git a/src/Umbraco.Tests/Models/Mapping/ContentWebModelMappingTests.cs b/src/Umbraco.Tests/Models/Mapping/ContentWebModelMappingTests.cs index a8c15e9a5e..8119753c8b 100644 --- a/src/Umbraco.Tests/Models/Mapping/ContentWebModelMappingTests.cs +++ b/src/Umbraco.Tests/Models/Mapping/ContentWebModelMappingTests.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -212,7 +213,12 @@ namespace Umbraco.Tests.Models.Mapping Assert.AreEqual(p.Alias, pDto.Alias); Assert.AreEqual(p.Id, pDto.Id); - Assert.IsTrue(p.Value == null ? pDto.Value == string.Empty : pDto.Value == p.Value); + if (p.Value == null) + Assert.AreEqual(pDto.Value, string.Empty); + else if (p.Value is decimal) + Assert.AreEqual(pDto.Value, ((decimal) p.Value).ToString(NumberFormatInfo.InvariantInfo)); + else + Assert.AreEqual(pDto.Value, p.Value.ToString()); } private void AssertProperty(ContentItemBasic result, Property p) diff --git a/src/Umbraco.Tests/TestHelpers/Entities/MockedContentTypes.cs b/src/Umbraco.Tests/TestHelpers/Entities/MockedContentTypes.cs index e3585d0554..ef9371c203 100644 --- a/src/Umbraco.Tests/TestHelpers/Entities/MockedContentTypes.cs +++ b/src/Umbraco.Tests/TestHelpers/Entities/MockedContentTypes.cs @@ -412,7 +412,7 @@ namespace Umbraco.Tests.TestHelpers.Entities contentCollection.Add(new PropertyType(Constants.PropertyEditors.NoEditAlias, DataTypeDatabaseType.Integer) { Alias = Constants.Conventions.Media.Width, Name = "Width", Description = "", Mandatory = false, SortOrder = 2, DataTypeDefinitionId = -90 }); contentCollection.Add(new PropertyType(Constants.PropertyEditors.NoEditAlias, DataTypeDatabaseType.Integer) { Alias = Constants.Conventions.Media.Height, Name = "Height", Description = "", Mandatory = false, SortOrder = 2, DataTypeDefinitionId = -90 }); contentCollection.Add(new PropertyType(Constants.PropertyEditors.NoEditAlias, DataTypeDatabaseType.Integer) { Alias = Constants.Conventions.Media.Bytes, Name = "Bytes", Description = "", Mandatory = false, SortOrder = 2, DataTypeDefinitionId = -90 }); - contentCollection.Add(new PropertyType(Constants.PropertyEditors.NoEditAlias, DataTypeDatabaseType.Integer) { Alias = Constants.Conventions.Media.Extension, Name = "File Extension", Description = "", Mandatory = false, SortOrder = 2, DataTypeDefinitionId = -90 }); + contentCollection.Add(new PropertyType(Constants.PropertyEditors.NoEditAlias, DataTypeDatabaseType.Nvarchar) { Alias = Constants.Conventions.Media.Extension, Name = "File Extension", Description = "", Mandatory = false, SortOrder = 2, DataTypeDefinitionId = -90 }); mediaType.PropertyGroups.Add(new PropertyGroup(contentCollection) { Name = "Media", SortOrder = 1 });