From 0ee6991d6851da323bb5dcaf607605450a7e56bf Mon Sep 17 00:00:00 2001 From: "Stuebinger, Bernd" Date: Fri, 28 May 2021 12:10:43 +0200 Subject: [PATCH] Fix issue 34 for coroutines --- ...dUpdateOrReplaceOrDeleteCouldReturnNull.kt | 46 +++++++++++++++++++ .../kmongo/coroutine/CoroutineCollection.kt | 2 +- 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 kmongo-coroutine-core-tests/src/main/kotlin/org/litote/kmongo/coroutine/issues/Issue34FindOneAndUpdateOrReplaceOrDeleteCouldReturnNull.kt diff --git a/kmongo-coroutine-core-tests/src/main/kotlin/org/litote/kmongo/coroutine/issues/Issue34FindOneAndUpdateOrReplaceOrDeleteCouldReturnNull.kt b/kmongo-coroutine-core-tests/src/main/kotlin/org/litote/kmongo/coroutine/issues/Issue34FindOneAndUpdateOrReplaceOrDeleteCouldReturnNull.kt new file mode 100644 index 00000000..02540fe9 --- /dev/null +++ b/kmongo-coroutine-core-tests/src/main/kotlin/org/litote/kmongo/coroutine/issues/Issue34FindOneAndUpdateOrReplaceOrDeleteCouldReturnNull.kt @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2016/2021 Litote + * + * 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. + */ + +package org.litote.kmongo.coroutine.issues + +import kotlinx.coroutines.runBlocking +import org.junit.Test +import org.litote.kmongo.MongoOperator.set +import org.litote.kmongo.coroutine.KMongoReactiveStreamsCoroutineBaseTest +import org.litote.kmongo.model.Friend +import kotlin.test.assertNull + +/** + * + */ +class Issue34FindOneAndUpdateOrReplaceOrDeleteCouldReturnNull : KMongoReactiveStreamsCoroutineBaseTest() { + + @Test + fun findOneAndReplaceCouldReturnNull() = runBlocking { + assertNull(col.findOneAndReplace("{}", Friend("test"))) + } + + @Test + fun findOneAndUpdateCouldReturnNull() = runBlocking { + assertNull(col.findOneAndUpdate("{}", "{$set:{name:'John'}}")) + } + + @Test + fun findOneAndDeleteCouldReturnNull() = runBlocking { + assertNull(col.findOneAndDelete("{}")) + } + +} diff --git a/kmongo-coroutine-core/src/main/kotlin/org/litote/kmongo/coroutine/CoroutineCollection.kt b/kmongo-coroutine-core/src/main/kotlin/org/litote/kmongo/coroutine/CoroutineCollection.kt index 044818a6..15a765d8 100644 --- a/kmongo-coroutine-core/src/main/kotlin/org/litote/kmongo/coroutine/CoroutineCollection.kt +++ b/kmongo-coroutine-core/src/main/kotlin/org/litote/kmongo/coroutine/CoroutineCollection.kt @@ -707,7 +707,7 @@ class CoroutineCollection(val collection: MongoCollection) { filter: Bson, replacement: T, options: FindOneAndReplaceOptions = FindOneAndReplaceOptions() - ): T = collection.findOneAndReplace(filter, replacement, options).awaitSingle() + ): T? = collection.findOneAndReplace(filter, replacement, options).awaitFirstOrNull() /** * Atomically find a document and replace it.