From 64c5459a8451f32c2ba3088adffa3821eb2b5d3f Mon Sep 17 00:00:00 2001 From: Russ Cam Date: Wed, 22 May 2019 18:22:28 -0600 Subject: [PATCH] Attribute SuggestBucket for serialization This commit adds JsonProperty attributes to SuggestBucket to ensure that properties are correctly serialized when a DefaultFieldNameInferrer delegate is passed. These are required because the concrete SuggestBucket is not passed and serialized as the ISuggestBucket interface in the VerbatimDictionaryKeysJsonConverter WriteJson method. --- src/Nest/Search/Suggesters/SuggestBucket.cs | 7 +++ src/Tests/Tests.Reproduce/Discuss179634.cs | 60 +++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 src/Tests/Tests.Reproduce/Discuss179634.cs diff --git a/src/Nest/Search/Suggesters/SuggestBucket.cs b/src/Nest/Search/Suggesters/SuggestBucket.cs index 8c3ee384121..a20a470a552 100644 --- a/src/Nest/Search/Suggesters/SuggestBucket.cs +++ b/src/Nest/Search/Suggesters/SuggestBucket.cs @@ -27,15 +27,22 @@ public interface ISuggestBucket public class SuggestBucket : ISuggestBucket { + [JsonProperty("completion")] public ICompletionSuggester Completion { get; set; } + [JsonProperty("phrase")] public IPhraseSuggester Phrase { get; set; } + [JsonProperty("prefix")] public string Prefix { get; set; } + [JsonProperty("regex")] public string Regex { get; set; } + [JsonProperty("term")] public ITermSuggester Term { get; set; } + + [JsonProperty("text")] public string Text { get; set; } } } diff --git a/src/Tests/Tests.Reproduce/Discuss179634.cs b/src/Tests/Tests.Reproduce/Discuss179634.cs new file mode 100644 index 00000000000..f9b4037a55a --- /dev/null +++ b/src/Tests/Tests.Reproduce/Discuss179634.cs @@ -0,0 +1,60 @@ +using System; +using System.Globalization; +using System.Text; +using Elastic.Xunit.XunitPlumbing; +using Elasticsearch.Net; +using FluentAssertions; +using FluentAssertions.Common; +using Nest; +using Newtonsoft.Json.Linq; +using Tests.Core.Client; +using Tests.Core.Extensions; +using Tests.Core.Serialization; +using Tests.Domain; + +namespace Tests.Reproduce +{ + public class Discuss179634 + { + [U] + public void SerializeCompletionSuggesterFieldsCorrectlyWhenDefaultFieldNameInferrerUsed() + { + var connectionPool = new SingleNodeConnectionPool(new Uri("http://localhost:9200")); + var settings = new ConnectionSettings(connectionPool, new InMemoryConnection()) + .DefaultFieldNameInferrer(p => p.ToUpper(CultureInfo.CurrentCulture)) + .DisableDirectStreaming(); + + var tester = new SerializationTester(new ElasticClient(settings)); + + var suggest = new SearchDescriptor() + .Suggest(ss => ss + .Completion("title", cs => cs + .Field(f => f.Suggest) + .Prefix("keyword") + .Fuzzy(f => f + .Fuzziness(Fuzziness.Auto) + ) + .Size(5) + ) + ); + + var expected = @"{ + ""suggest"": { + ""title"": { + ""completion"": { + ""field"": ""SUGGEST"", + ""size"": 5, + ""fuzzy"": { + ""fuzziness"": ""AUTO"" + } + }, + ""prefix"": ""keyword"" + } + } +}"; + + var result = tester.Serializes(suggest, expected); + result.Success.Should().Be(true, result.DiffFromExpected); + } + } +}