From 8d4579932841aa63fcf1ea41504569175ae55cd2 Mon Sep 17 00:00:00 2001 From: Pierre Chalamet Date: Sun, 29 Dec 2024 14:39:57 +0100 Subject: [PATCH 1/2] add NRT test --- README.md | 9 ++- .../FSharp.MongoDB.Bson.Tests.fsproj | 1 + .../FSharpNRTSerializationTests.fs | 64 +++++++++++++++++++ 3 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 tests/FSharp.MongoDB.Bson.Tests/Serialization/FSharpNRTSerializationTests.fs 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 From 95b625400c2c02af4c934ba30b997f572a2a2261 Mon Sep 17 00:00:00 2001 From: Pierre Chalamet Date: Sun, 29 Dec 2024 14:43:25 +0100 Subject: [PATCH 2/2] fix license header --- .../Serialization/FSharpNRTSerializationTests.fs | 3 +-- .../Serialization/FSharpValueOptionSerializationTests.fs | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/tests/FSharp.MongoDB.Bson.Tests/Serialization/FSharpNRTSerializationTests.fs b/tests/FSharp.MongoDB.Bson.Tests/Serialization/FSharpNRTSerializationTests.fs index b181f4d..4720c17 100644 --- a/tests/FSharp.MongoDB.Bson.Tests/Serialization/FSharpNRTSerializationTests.fs +++ b/tests/FSharp.MongoDB.Bson.Tests/Serialization/FSharpNRTSerializationTests.fs @@ -1,5 +1,4 @@ -(* 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 diff --git a/tests/FSharp.MongoDB.Bson.Tests/Serialization/FSharpValueOptionSerializationTests.fs b/tests/FSharp.MongoDB.Bson.Tests/Serialization/FSharpValueOptionSerializationTests.fs index e4528a3..abf641e 100644 --- a/tests/FSharp.MongoDB.Bson.Tests/Serialization/FSharpValueOptionSerializationTests.fs +++ b/tests/FSharp.MongoDB.Bson.Tests/Serialization/FSharpValueOptionSerializationTests.fs @@ -1,5 +1,4 @@ -(* 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