diff --git a/src/Nest/Domain/Mapping/SpecialFields/AnalyzerFieldMapping.cs b/src/Nest/Domain/Mapping/SpecialFields/AnalyzerFieldMapping.cs index c5117067615..570147d17a6 100644 --- a/src/Nest/Domain/Mapping/SpecialFields/AnalyzerFieldMapping.cs +++ b/src/Nest/Domain/Mapping/SpecialFields/AnalyzerFieldMapping.cs @@ -5,6 +5,7 @@ namespace Nest { + [JsonConverter(typeof(ReadAsTypeConverter))] public interface IAnalyzerFieldMapping : ISpecialField { [JsonProperty("index"), JsonConverter(typeof(YesNoBoolConverter))] diff --git a/src/Nest/Domain/Mapping/SpecialFields/BoostFieldMapping.cs b/src/Nest/Domain/Mapping/SpecialFields/BoostFieldMapping.cs index 662518e53e8..1c31381f075 100644 --- a/src/Nest/Domain/Mapping/SpecialFields/BoostFieldMapping.cs +++ b/src/Nest/Domain/Mapping/SpecialFields/BoostFieldMapping.cs @@ -1,9 +1,11 @@ using System; using System.Linq.Expressions; using Newtonsoft.Json; +using Nest.Resolvers.Converters; namespace Nest { + [JsonConverter(typeof(ReadAsTypeConverter))] public interface IBoostFieldMapping : ISpecialField { [JsonProperty("name")] diff --git a/src/Nest/Domain/Mapping/SpecialFields/IdFieldMapping.cs b/src/Nest/Domain/Mapping/SpecialFields/IdFieldMapping.cs index d8fffc198fb..20954a89a7f 100644 --- a/src/Nest/Domain/Mapping/SpecialFields/IdFieldMapping.cs +++ b/src/Nest/Domain/Mapping/SpecialFields/IdFieldMapping.cs @@ -1,7 +1,9 @@ -using Newtonsoft.Json; +using Nest.Resolvers.Converters; +using Newtonsoft.Json; namespace Nest { + [JsonConverter(typeof(ReadAsTypeConverter))] public interface IIdFieldMapping : ISpecialField { [JsonProperty("path")] diff --git a/src/Nest/Domain/Mapping/SpecialFields/IndexFieldMapping.cs b/src/Nest/Domain/Mapping/SpecialFields/IndexFieldMapping.cs index 96b0aff643e..ed8887cb7bf 100644 --- a/src/Nest/Domain/Mapping/SpecialFields/IndexFieldMapping.cs +++ b/src/Nest/Domain/Mapping/SpecialFields/IndexFieldMapping.cs @@ -1,7 +1,9 @@ -using Newtonsoft.Json; +using Nest.Resolvers.Converters; +using Newtonsoft.Json; namespace Nest { + [JsonConverter(typeof(ReadAsTypeConverter))] public interface IIndexFieldMapping : ISpecialField { [JsonProperty("enabled")] diff --git a/src/Nest/Domain/Mapping/SpecialFields/RoutingFieldMapping.cs b/src/Nest/Domain/Mapping/SpecialFields/RoutingFieldMapping.cs index 86d6ebfbe16..f7a57769102 100644 --- a/src/Nest/Domain/Mapping/SpecialFields/RoutingFieldMapping.cs +++ b/src/Nest/Domain/Mapping/SpecialFields/RoutingFieldMapping.cs @@ -1,9 +1,11 @@ using System; using Newtonsoft.Json; using System.Linq.Expressions; +using Nest.Resolvers.Converters; namespace Nest { + [JsonConverter(typeof(ReadAsTypeConverter))] public interface IRoutingFieldMapping : ISpecialField { [JsonProperty("required")] diff --git a/src/Nest/Domain/Mapping/SpecialFields/SizeFieldMapping.cs b/src/Nest/Domain/Mapping/SpecialFields/SizeFieldMapping.cs index 6d212519c7e..311d77113b2 100644 --- a/src/Nest/Domain/Mapping/SpecialFields/SizeFieldMapping.cs +++ b/src/Nest/Domain/Mapping/SpecialFields/SizeFieldMapping.cs @@ -1,7 +1,9 @@ -using Newtonsoft.Json; +using Nest.Resolvers.Converters; +using Newtonsoft.Json; namespace Nest { + [JsonConverter(typeof(ReadAsTypeConverter))] public interface ISizeFieldMapping : ISpecialField { [JsonProperty("enabled")] diff --git a/src/Nest/Domain/Mapping/SpecialFields/SourceFieldMapping.cs b/src/Nest/Domain/Mapping/SpecialFields/SourceFieldMapping.cs index 1ccf555b8a4..b92dd2ae296 100644 --- a/src/Nest/Domain/Mapping/SpecialFields/SourceFieldMapping.cs +++ b/src/Nest/Domain/Mapping/SpecialFields/SourceFieldMapping.cs @@ -1,8 +1,10 @@ using System.Collections.Generic; using Newtonsoft.Json; +using Nest.Resolvers.Converters; namespace Nest { + [JsonConverter(typeof(ReadAsTypeConverter))] public interface ISourceFieldMapping : ISpecialField { [JsonProperty("enabled")] diff --git a/src/Nest/Domain/Mapping/SpecialFields/TimestampFieldMapping.cs b/src/Nest/Domain/Mapping/SpecialFields/TimestampFieldMapping.cs index 36a7dad91fc..61be69ec563 100644 --- a/src/Nest/Domain/Mapping/SpecialFields/TimestampFieldMapping.cs +++ b/src/Nest/Domain/Mapping/SpecialFields/TimestampFieldMapping.cs @@ -1,9 +1,11 @@ using System; using Newtonsoft.Json; using System.Linq.Expressions; +using Nest.Resolvers.Converters; namespace Nest { + [JsonConverter(typeof(ReadAsTypeConverter))] public interface ITimestampFieldMapping : ISpecialField { [JsonProperty("enabled")] diff --git a/src/Nest/Domain/Mapping/SpecialFields/TtlFieldMapping.cs b/src/Nest/Domain/Mapping/SpecialFields/TtlFieldMapping.cs index 066466fc7c6..d814a534864 100644 --- a/src/Nest/Domain/Mapping/SpecialFields/TtlFieldMapping.cs +++ b/src/Nest/Domain/Mapping/SpecialFields/TtlFieldMapping.cs @@ -1,7 +1,9 @@ -using Newtonsoft.Json; +using Nest.Resolvers.Converters; +using Newtonsoft.Json; namespace Nest { + [JsonConverter(typeof(ReadAsTypeConverter))] public interface ITtlFieldMapping : ISpecialField { [JsonProperty("enabled")] diff --git a/src/Nest/Domain/Mapping/SpecialFields/TypeFieldMapping.cs b/src/Nest/Domain/Mapping/SpecialFields/TypeFieldMapping.cs index 7368bb88ce0..eacdd1d2aba 100644 --- a/src/Nest/Domain/Mapping/SpecialFields/TypeFieldMapping.cs +++ b/src/Nest/Domain/Mapping/SpecialFields/TypeFieldMapping.cs @@ -1,8 +1,10 @@ -using Newtonsoft.Json; +using Nest.Resolvers.Converters; +using Newtonsoft.Json; using Newtonsoft.Json.Converters; namespace Nest { + [JsonConverter(typeof(ReadAsTypeConverter))] public interface ITypeFieldMapping : ISpecialField { [JsonProperty("index"), JsonConverter(typeof(StringEnumConverter))] diff --git a/src/Tests/Nest.Tests.Unit/Core/Map/GetMappingSerializationTests.cs b/src/Tests/Nest.Tests.Unit/Core/Map/GetMappingSerializationTests.cs new file mode 100644 index 00000000000..2562f84b1a2 --- /dev/null +++ b/src/Tests/Nest.Tests.Unit/Core/Map/GetMappingSerializationTests.cs @@ -0,0 +1,104 @@ +using Newtonsoft.Json; +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace Nest.Tests.Unit.Core.Map +{ + class GetMappingSerializationTests : BaseJsonTests + { + /// + /// Verify that we can serialize/deserialize a populated root mapping. + /// If we can round trip a full root mapping, we're in a pretty good place. + /// + [Test] + public void CanDeserializeRootMapping() + { + var rootMapping = new RootObjectMapping() + { + AllFieldMapping = new AllFieldMapping() + { + Enabled = true, + IndexAnalyzer = "index_analyzer" + }, + SourceFieldMappingDescriptor = new SourceFieldMapping() + { + Compress = false, + Excludes = new[] { "excluded" } + }, + RoutingFieldMapping = new RoutingFieldMapping() + { + Path = "routing_path" + }, + SizeFieldMapping = new SizeFieldMapping() + { + Enabled = true, + }, + TtlFieldMappingDescriptor = new TtlFieldMapping() + { + Enabled = true, + }, + IdFieldMappingDescriptor = new IdFieldMapping() + { + Index = "not_analyzed", + Store = false, + Path = "id_field", + }, + TimestampFieldMapping = new TimestampFieldMapping() + { + Enabled = true, + Format = "YYY-MM-dd", + Path = "the_timestamp", + }, + IndexFieldMapping = new IndexFieldMapping() + { + Enabled = true, + }, + AnalyzerFieldMapping = new AnalyzerFieldMapping() + { + Path = "index_path", + }, + BoostFieldMapping = new BoostFieldMapping() + { + Name = "boost", + NullValue = 2.0, + }, + Parent = new ParentTypeMapping() + { + Type = "type" + }, + TypeFieldMappingDescriptor = new TypeFieldMapping() + { + Index = NonStringIndexOption.NotAnalyzed, + Store = false, + } + }; + var json = TestElasticClient.Serialize(rootMapping); + + var mapping = TestElasticClient.Deserialize(json); + TestElasticClient.Serialize(mapping).JsonEquals(json); + } + + /// + /// Verify that we can serialize/deserialize an empty root mapping. One of the + /// failure modes of serialization/deserialization is handling data that's not there. + /// + [Test] + public void CanDeserializeEmptyRootMapping() + { + var rootMapping = new RootObjectMapping() + { + }; + var json = TestElasticClient.Serialize(rootMapping); + + var mapping = TestElasticClient.Deserialize(json); + TestElasticClient.Serialize(mapping).JsonEquals(json); + } + + } +} diff --git a/src/Tests/Nest.Tests.Unit/Nest.Tests.Unit.csproj b/src/Tests/Nest.Tests.Unit/Nest.Tests.Unit.csproj index 8f6a5270cb8..43d07ca37bf 100644 --- a/src/Tests/Nest.Tests.Unit/Nest.Tests.Unit.csproj +++ b/src/Tests/Nest.Tests.Unit/Nest.Tests.Unit.csproj @@ -125,6 +125,7 @@ + Always @@ -1216,7 +1217,6 @@ Always -