11using System ;
22using System . Collections . Generic ;
33using System . Linq ;
4+ using System . Runtime . Serialization ;
45using Elasticsearch . Net ;
56using Nest ;
67using Newtonsoft . Json ;
8+ using Newtonsoft . Json . Converters ;
79using Tests . Framework ;
810using Tests . Framework . ManagedElasticsearch . SourceSerializers ;
11+ using Tests . Framework . MockData ;
912using static Tests . Framework . RoundTripper ;
1013
1114namespace Tests . ClientConcepts . HighLevel . Serialization
@@ -42,6 +45,11 @@ protected override JsonSerializerSettings CreateJsonSerializerSettings()
4245 } ;
4346 }
4447
48+ protected override IEnumerable < JsonConverter > CreateJsonConverters ( )
49+ {
50+ foreach ( var c in base . CreateJsonConverters ( ) ) yield return c ;
51+ yield return new StringEnumConverter ( ) ;
52+ }
4553 }
4654
4755 private static void CanAlterSource < T > ( Func < IElasticClient , T > call , object usingDefaults , object withSourceSerializer )
@@ -54,6 +62,24 @@ private static void CanAlterSource<T>(Func<IElasticClient, T> call, object using
5462 . FromRequest ( call ) ;
5563 }
5664
65+ private static void Serializes < T > ( T o , object usingDefaults , object withSourceSerializer )
66+ {
67+ SerializesDefault ( o , usingDefaults ) ;
68+ SerializesSourceSerializer ( o , withSourceSerializer ) ;
69+ }
70+
71+ private static void SerializesSourceSerializer < T > ( T o , object withSourceSerializer )
72+ {
73+ WithSourceSerializer ( ( s , c ) => new CustomSettingsSerializerBase ( s , c ) )
74+ . Expect ( withSourceSerializer )
75+ . WhenSerializing ( o ) ;
76+ }
77+
78+ private static void SerializesDefault < T > ( T o , object usingDefaults )
79+ {
80+ Expect ( usingDefaults ) . WhenSerializing ( o ) ;
81+ }
82+
5783 [ U ] public void IndexRequest ( )
5884 {
5985 CanAlterSource (
@@ -155,5 +181,35 @@ [U] public void MultiTermVectorsRequest()
155181 withSourceSerializer : ExpectMultiTermVectors ( IncludesNullAndType )
156182 ) ;
157183 }
184+
185+ public enum SomeEnum
186+ {
187+ Value ,
188+ [ EnumMember ( Value = "different" ) ]
189+ AnotherValue
190+ }
191+
192+ [ U ] public void TermQuery ( ) =>
193+ SerializesEnumValue ( new TermQuery { Field = Infer . Field < Project > ( p=> p . Name ) , Value = SomeEnum . AnotherValue } ) ;
194+
195+ [ U ] public void WildcardQuery ( ) =>
196+ SerializesEnumValue ( new WildcardQuery { Field = Infer . Field < Project > ( p => p . Name ) , Value = SomeEnum . AnotherValue } ) ;
197+
198+ [ U ] public void PrefixQuery ( ) =>
199+ SerializesEnumValue ( new PrefixQuery { Field = Infer . Field < Project > ( p=> p . Name ) , Value = SomeEnum . AnotherValue } ) ;
200+
201+ [ U ] public void SpanTermQueryInitializer ( ) =>
202+ SerializesEnumValue ( new SpanTermQuery { Field = Infer . Field < Project > ( p=> p . Name ) , Value = SomeEnum . AnotherValue } ) ;
203+
204+ [ U ] public void SpanTermQueryFluent ( ) =>
205+ SerializesEnumValue < ISpanTermQuery > ( new SpanTermQueryDescriptor < Project > ( ) . Field ( p=> p . Name ) . Value ( SomeEnum . AnotherValue ) ) ;
206+
207+ private static void SerializesEnumValue < T > ( T query )
208+ {
209+ Serializes ( query ,
210+ usingDefaults : new { name = new { value = 1 } } ,
211+ withSourceSerializer : new { name = new { value = "different" } }
212+ ) ;
213+ }
158214 }
159215}
0 commit comments