diff --git a/README.md b/README.md index e3867e2..21aaf39 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ ## Goals of this project - * Provide an idiomatic F# API for interacting with MongoDB. + * Provide support for F# types for interacting with MongoDB. * Have an implementation that is fully testable without connecting to a server. * Isomorphic bson serialization for C# and F#. @@ -84,6 +84,13 @@ If you want to auto-generate `ObjectId` (as the Id of the collection), add `[ + diff --git a/tests/FSharp.MongoDB.Bson.Tests/Serialization/FSharpNRTSerializationTests.fs b/tests/FSharp.MongoDB.Bson.Tests/Serialization/FSharpNRTSerializationTests.fs new file mode 100644 index 0000000..b181f4d --- /dev/null +++ b/tests/FSharp.MongoDB.Bson.Tests/Serialization/FSharpNRTSerializationTests.fs @@ -0,0 +1,64 @@ +(* Copyright (c) 2015 MongoDB, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + +namespace FSharp.MongoDB.Bson.Tests.Serialization + +open MongoDB.Bson +open FsUnit +open NUnit.Framework + +module FSharpNRTSerialization = + + type Primitive = + { String : string | null } + + [] + let ``test serialize nullable reference (null) in a record type``() = + let value = { String = null } + + let result = serialize value + let expected = BsonDocument([ BsonElement("String", BsonNull.Value) ]) + + result |> should equal expected + + [] + let ``test deserialize nullable reference (null) in a record type)``() = + // FIXME: this shall support deserializing missing null value for NRT + // as of now this means NRT can't be a missing value while deserializing + // let doc = BsonDocument() + let doc = BsonDocument([ BsonElement("String", BsonNull.Value) ]) + + let result = deserialize doc + let expected = { String = null } + + result |> should equal expected + + [] + let ``test serialize nullable reference (some) in a record type``() = + let value = { String = "A String" } + + let result = serialize value + let expected = BsonDocument([ BsonElement("String", BsonString "A String") ]) + + result |> should equal expected + + [] + let ``test deserialize nullable reference (some) in a record type``() = + let doc = BsonDocument([ BsonElement("String", BsonString "A String") ]) + + let result = deserialize doc + let expected = { String = "A String" } + + result |> should equal expected