Skip to content

Commit 6f74861

Browse files
committed
CSHARP-2215: Added more tests.
1 parent 5975587 commit 6f74861

File tree

3 files changed

+72
-4
lines changed

3 files changed

+72
-4
lines changed

src/MongoDB.Driver/FieldDefinition.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
using MongoDB.Driver.Linq;
2323
using MongoDB.Driver.Linq.Expressions;
2424
using MongoDB.Driver.Linq.Processors;
25-
using MongoDB.Driver.Linq.Translators;
2625

2726
namespace MongoDB.Driver
2827
{
@@ -179,10 +178,12 @@ public abstract class FieldDefinition<TDocument, TField>
179178
/// <returns>A <see cref="RenderedFieldDefinition{TField}"/>.</returns>
180179
public abstract RenderedFieldDefinition<TField> Render(IBsonSerializer<TDocument> documentSerializer, IBsonSerializerRegistry serializerRegistry);
181180

181+
/// <summary>
182182
/// Renders the field to a <see cref="RenderedFieldDefinition{TField}"/>.
183-
/// <param name="documentSerializer"></param>
184-
/// <param name="serializerRegistry"></param>
185-
/// <param name="allowScalarValueForArrayField"></param>
183+
/// </summary>
184+
/// <param name="documentSerializer">The document serializer.</param>
185+
/// <param name="serializerRegistry">The serializer registry.</param>
186+
/// <param name="allowScalarValueForArrayField">Whether a scalar value is allowed for an array field.</param>
186187
/// <returns>A <see cref="RenderedFieldDefinition{TField}"/>.</returns>
187188
public virtual RenderedFieldDefinition<TField> Render(
188189
IBsonSerializer<TDocument> documentSerializer,

tests/MongoDB.Driver.Tests/FieldDefinitionTests.cs

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,63 @@ public void Should_assign_a_non_typed_field_definition_from_a_typed_field_defini
223223
renderedField.FieldSerializer.Should().BeOfType<EnumSerializer<Gender>>();
224224
}
225225

226+
[Fact]
227+
public void Should_resolve_an_array_field_with_field_lambda()
228+
{
229+
FieldDefinition<Person, IEnumerable<Gender>> subject = new ExpressionFieldDefinition<Person, IEnumerable<Gender>>(x => x.Genders);
230+
231+
var renderedField = subject.Render(BsonSerializer.SerializerRegistry.GetSerializer<Person>(), BsonSerializer.SerializerRegistry);
232+
233+
renderedField.FieldName.Should().Be("gs");
234+
renderedField.UnderlyingSerializer.Should().BeOfType<ImpliedImplementationInterfaceSerializer<IEnumerable<Gender>, List<Gender>>>();
235+
renderedField.FieldSerializer.Should().BeSameAs(renderedField.UnderlyingSerializer);
236+
renderedField.ValueSerializer.Should().BeSameAs(renderedField.FieldSerializer);
237+
238+
}
239+
240+
[Fact]
241+
public void Should_resolve_an_array_field_with_field_name()
242+
{
243+
FieldDefinition<Person, IEnumerable<Gender>> subject = new StringFieldDefinition<Person, IEnumerable<Gender>>("Genders");
244+
245+
var renderedField = subject.Render(BsonSerializer.SerializerRegistry.GetSerializer<Person>(), BsonSerializer.SerializerRegistry);
246+
247+
renderedField.FieldName.Should().Be("gs");
248+
renderedField.UnderlyingSerializer.Should().BeOfType<ImpliedImplementationInterfaceSerializer<IEnumerable<Gender>, List<Gender>>>();
249+
renderedField.FieldSerializer.Should().BeSameAs(renderedField.UnderlyingSerializer);
250+
renderedField.ValueSerializer.Should().BeSameAs(renderedField.FieldSerializer);
251+
252+
}
253+
254+
[Fact]
255+
public void Should_resolve_an_array_field_with_field_name_and_scalar_value_and_scalar_value_is_allowed()
256+
{
257+
FieldDefinition<Person, Gender> subject = new StringFieldDefinition<Person, Gender>("Genders");
258+
259+
var renderedField = subject.Render(BsonSerializer.SerializerRegistry.GetSerializer<Person>(), BsonSerializer.SerializerRegistry, allowScalarValueForArrayField: true);
260+
261+
renderedField.FieldName.Should().Be("gs");
262+
renderedField.UnderlyingSerializer.Should().BeOfType<ImpliedImplementationInterfaceSerializer<IEnumerable<Gender>, List<Gender>>>();
263+
renderedField.FieldSerializer.Should().BeNull();
264+
renderedField.ValueSerializer.Should().BeOfType<EnumSerializer<Gender>>();
265+
266+
}
267+
268+
[Fact]
269+
public void Should_resolve_an_array_field_with_field_name_and_scalar_value_and_scalar_value_is_not_allowed()
270+
{
271+
FieldDefinition<Person, Gender> subject = new StringFieldDefinition<Person, Gender>("Genders");
272+
273+
var renderedField = subject.Render(BsonSerializer.SerializerRegistry.GetSerializer<Person>(), BsonSerializer.SerializerRegistry, allowScalarValueForArrayField: false);
274+
275+
renderedField.FieldName.Should().Be("gs");
276+
renderedField.UnderlyingSerializer.Should().BeOfType<ImpliedImplementationInterfaceSerializer<IEnumerable<Gender>, List<Gender>>>();
277+
renderedField.FieldSerializer.Should().BeNull();
278+
renderedField.ValueSerializer.ValueType.Should().Be(typeof(Gender));
279+
renderedField.ValueSerializer.GetType().Name.Should().Be("ConvertIfPossibleSerializer`2");
280+
281+
}
282+
226283
private class Person
227284
{
228285
[BsonElement("name")]
@@ -233,6 +290,9 @@ private class Person
233290

234291
[BsonElement("g")]
235292
public Gender Gender { get; set; }
293+
294+
[BsonElement("gs")]
295+
public IEnumerable<Gender> Genders { get; set; }
236296
}
237297

238298
private class Name

tests/MongoDB.Driver.Tests/FilterDefinitionBuilderTests.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,7 @@ public void Eq_Typed()
286286
Assert(subject.Eq("firstName", "Jim"), "{firstName: 'Jim'}");
287287
Assert(subject.Eq(x => x.FavoriteColors, new[] { "yellow", "green" }), "{colors: ['yellow', 'green']}");
288288
Assert(subject.Eq("FavoriteColors", new[] { "yellow", "green" }), "{colors: ['yellow', 'green']}");
289+
Assert(subject.Eq("FavoriteColors", "yellow"), "{colors: 'yellow'}");
289290

290291
Assert(subject.AnyEq(x => x.FavoriteColors, "yellow"), "{colors: 'yellow'}");
291292
Assert(subject.AnyEq("FavoriteColors", "yellow"), "{colors: 'yellow'}");
@@ -493,6 +494,7 @@ public void GreaterThan_Typed()
493494
var subject = CreateSubject<Person>();
494495
Assert(subject.Gt(x => x.Age, 10), "{age: {$gt: 10}}");
495496
Assert(subject.Gt("Age", 10), "{age: {$gt: 10}}");
497+
Assert(subject.Gt("FavoriteColors", "green"), "{colors: {$gt: 'green'}}");
496498

497499
Assert(subject.AnyGt(x => x.FavoriteColors, "green"), "{colors: {$gt: 'green'}}");
498500
Assert(subject.AnyGt("FavoriteColors", "green"), "{colors: {$gt: 'green'}}");
@@ -513,6 +515,7 @@ public void GreaterThanOrEqual_Typed()
513515
var subject = CreateSubject<Person>();
514516
Assert(subject.Gte(x => x.Age, 10), "{age: {$gte: 10}}");
515517
Assert(subject.Gte("Age", 10), "{age: {$gte: 10}}");
518+
Assert(subject.Gte("FavoriteColors", "green"), "{colors: {$gte: 'green'}}");
516519

517520
Assert(subject.AnyGte(x => x.FavoriteColors, "green"), "{colors: {$gte: 'green'}}");
518521
Assert(subject.AnyGte("FavoriteColors", "green"), "{colors: {$gte: 'green'}}");
@@ -533,6 +536,7 @@ public void In_Typed()
533536
var subject = CreateSubject<Person>();
534537
Assert(subject.In(x => x.Age, new[] { 10, 20 }), "{age: {$in: [10, 20]}}");
535538
Assert(subject.In("Age", new[] { 10, 20 }), "{age: {$in: [10, 20]}}");
539+
Assert(subject.In("FavoriteColors", new[] { "blue", "green" }), "{colors: {$in: ['blue','green']}}");
536540

537541
Assert(subject.AnyIn(x => x.FavoriteColors, new[] { "blue", "green" }), "{colors: {$in: ['blue','green']}}");
538542
Assert(subject.AnyIn("FavoriteColors", new[] { "blue", "green" }), "{colors: {$in: ['blue','green']}}");
@@ -598,6 +602,7 @@ public void Lt_Typed()
598602
var subject = CreateSubject<Person>();
599603
Assert(subject.Lt(x => x.Age, 10), "{age: {$lt: 10}}");
600604
Assert(subject.Lt("Age", 10), "{age: {$lt: 10}}");
605+
Assert(subject.Lt("FavoriteColors", "green"), "{colors: {$lt: 'green'}}");
601606

602607
Assert(subject.AnyLt(x => x.FavoriteColors, "green"), "{colors: {$lt: 'green'}}");
603608
Assert(subject.AnyLt("FavoriteColors", "green"), "{colors: {$lt: 'green'}}");
@@ -618,6 +623,7 @@ public void Lte_Typed()
618623
var subject = CreateSubject<Person>();
619624
Assert(subject.Lte(x => x.Age, 10), "{age: {$lte: 10}}");
620625
Assert(subject.Lte("Age", 10), "{age: {$lte: 10}}");
626+
Assert(subject.Lte("FavoriteColors", "green"), "{colors: {$lte: 'green'}}");
621627

622628
Assert(subject.AnyLte(x => x.FavoriteColors, "green"), "{colors: {$lte: 'green'}}");
623629
Assert(subject.AnyLte("FavoriteColors", "green"), "{colors: {$lte: 'green'}}");
@@ -657,6 +663,7 @@ public void Ne_Typed()
657663
var subject = CreateSubject<Person>();
658664
Assert(subject.Ne(x => x.Age, 10), "{age: {$ne: 10}}");
659665
Assert(subject.Ne("Age", 10), "{age: {$ne: 10}}");
666+
Assert(subject.Ne("FavoriteColors", "green"), "{colors: {$ne: 'green'}}");
660667

661668
Assert(subject.AnyNe(x => x.FavoriteColors, "green"), "{colors: {$ne: 'green'}}");
662669
Assert(subject.AnyNe("FavoriteColors", "green"), "{colors: {$ne: 'green'}}");

0 commit comments

Comments
 (0)