From 95ee3b52dc5db44c8791926520a2f20c84fbc14f Mon Sep 17 00:00:00 2001 From: dparamoshkin Date: Mon, 24 Oct 2022 22:32:17 +0200 Subject: [PATCH] Fix counts for upsert operation --- .../criteria/mongo/MongoSession.java | 2 +- .../criteria/mongo/MongoWriteResultTest.java | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/criteria/mongo/src/org/immutables/criteria/mongo/MongoSession.java b/criteria/mongo/src/org/immutables/criteria/mongo/MongoSession.java index ae475ba8c..a74a3baf3 100644 --- a/criteria/mongo/src/org/immutables/criteria/mongo/MongoSession.java +++ b/criteria/mongo/src/org/immutables/criteria/mongo/MongoSession.java @@ -237,7 +237,7 @@ private Publisher update(StandardOperations.Update operation) { Publisher publisher = ((MongoCollection) collection).bulkWrite(docs); return Flowable.fromPublisher(publisher).map(x -> WriteResult.empty() .withUpdatedCount(x.getModifiedCount()) - .withInsertedCount(x.getInsertedCount()) + .withInsertedCount(operation.upsert() ? x.getUpserts().size() : x.getInsertedCount()) .withDeletedCount(x.getDeletedCount())); } diff --git a/criteria/mongo/test/org/immutables/criteria/mongo/MongoWriteResultTest.java b/criteria/mongo/test/org/immutables/criteria/mongo/MongoWriteResultTest.java index 43c03880b..fc61e448f 100644 --- a/criteria/mongo/test/org/immutables/criteria/mongo/MongoWriteResultTest.java +++ b/criteria/mongo/test/org/immutables/criteria/mongo/MongoWriteResultTest.java @@ -88,4 +88,24 @@ void update() { check(result2.insertedCount().getAsLong()).is(0L); check(result2.deletedCount().getAsLong()).is(0L); } + + @Test + void upsert() { + ImmutablePerson person1 = generator.next(); + WriteResult result = repository.upsert(person1); + check(result.insertedCount().getAsLong()).is(1L); + check(result.deletedCount().getAsLong()).is(0L); + check(result.updatedCount().getAsLong()).is(0L); + + result = repository.upsert(person1.withFullName("name1")); + check(result.insertedCount().getAsLong()).is(0L); + check(result.deletedCount().getAsLong()).is(0L); + check(result.updatedCount().getAsLong()).is(1L); + + WriteResult result2 = repository.upsertAll(ImmutableList.of(person1.withFullName("name2"), generator.next())); + check(result2.insertedCount().getAsLong()).is(1L); + check(result2.deletedCount().getAsLong()).is(0L); + check(result2.updatedCount().getAsLong()).is(1L); + } + }