Skip to content

Commit edca524

Browse files
committed
Add integration tests
1 parent 3fc288e commit edca524

File tree

4 files changed

+108
-0
lines changed

4 files changed

+108
-0
lines changed

test/asynchronous/test_client_bulk_write.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,6 +549,47 @@ async def test_returns_error_if_auto_encryption_configured(self):
549549
"bulk_write does not currently support automatic encryption", context.exception._message
550550
)
551551

552+
@async_client_context.require_version_min(8, 0, 0, -24)
553+
@async_client_context.require_no_serverless
554+
@unittest.skipUnless(_HAVE_PYMONGOCRYPT, "pymongocrypt is not installed")
555+
async def test_upserted_result(self):
556+
client = await self.async_rs_or_single_client()
557+
558+
collection = client.db["coll"]
559+
self.addAsyncCleanup(collection.drop)
560+
await collection.drop()
561+
562+
models = []
563+
models.append(
564+
UpdateOne(
565+
namespace="db.coll",
566+
filter={"_id": "a"},
567+
update={"$set": {"x": 1}},
568+
upsert=True,
569+
)
570+
)
571+
models.append(
572+
UpdateOne(
573+
namespace="db.coll",
574+
filter={"_id": None},
575+
update={"$set": {"x": 1}},
576+
upsert=True,
577+
)
578+
)
579+
models.append(
580+
UpdateOne(
581+
namespace="db.coll",
582+
filter={"_id": None},
583+
update={"$set": {"x": 1}},
584+
)
585+
)
586+
result = await client.bulk_write(models=models, verbose_results=True)
587+
588+
self.assertEqual(result.upserted_count, 2)
589+
self.assertEqual(result.update_results[0].did_upsert, True)
590+
self.assertEqual(result.update_results[1].did_upsert, True)
591+
self.assertEqual(result.update_results[2].did_upsert, False)
592+
552593

553594
# https://github.com/mongodb/specifications/blob/master/source/client-side-operations-timeout/tests/README.md#11-multi-batch-bulkwrites
554595
class TestClientBulkWriteCSOT(AsyncIntegrationTest):

test/asynchronous/test_collection.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1444,6 +1444,19 @@ async def test_update_one(self):
14441444
self.assertRaises(InvalidOperation, lambda: result.upserted_id)
14451445
self.assertFalse(result.acknowledged)
14461446

1447+
async def test_update_result(self):
1448+
db = self.db
1449+
await db.drop_collection("test")
1450+
1451+
result = await db.test.update_one({"x": 0}, {"$inc": {"x": 1}}, upsert=True)
1452+
self.assertEqual(result.did_upsert, True)
1453+
1454+
result = await db.test.update_one({"_id": None, "x": 0}, {"$inc": {"x": 1}}, upsert=True)
1455+
self.assertEqual(result.did_upsert, True)
1456+
1457+
result = await db.test.update_one({"_id": None}, {"$inc": {"x": 1}})
1458+
self.assertEqual(result.did_upsert, False)
1459+
14471460
async def test_update_many(self):
14481461
db = self.db
14491462
await db.drop_collection("test")

test/test_client_bulk_write.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,6 +549,47 @@ def test_returns_error_if_auto_encryption_configured(self):
549549
"bulk_write does not currently support automatic encryption", context.exception._message
550550
)
551551

552+
@client_context.require_version_min(8, 0, 0, -24)
553+
@client_context.require_no_serverless
554+
@unittest.skipUnless(_HAVE_PYMONGOCRYPT, "pymongocrypt is not installed")
555+
def test_upserted_result(self):
556+
client = self.rs_or_single_client()
557+
558+
collection = client.db["coll"]
559+
self.addCleanup(collection.drop)
560+
collection.drop()
561+
562+
models = []
563+
models.append(
564+
UpdateOne(
565+
namespace="db.coll",
566+
filter={"_id": "a"},
567+
update={"$set": {"x": 1}},
568+
upsert=True,
569+
)
570+
)
571+
models.append(
572+
UpdateOne(
573+
namespace="db.coll",
574+
filter={"_id": None},
575+
update={"$set": {"x": 1}},
576+
upsert=True,
577+
)
578+
)
579+
models.append(
580+
UpdateOne(
581+
namespace="db.coll",
582+
filter={"_id": None},
583+
update={"$set": {"x": 1}},
584+
)
585+
)
586+
result = client.bulk_write(models=models, verbose_results=True)
587+
588+
self.assertEqual(result.upserted_count, 2)
589+
self.assertEqual(result.update_results[0].did_upsert, True)
590+
self.assertEqual(result.update_results[1].did_upsert, True)
591+
self.assertEqual(result.update_results[2].did_upsert, False)
592+
552593

553594
# https://github.com/mongodb/specifications/blob/master/source/client-side-operations-timeout/tests/README.md#11-multi-batch-bulkwrites
554595
class TestClientBulkWriteCSOT(IntegrationTest):

test/test_collection.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1429,6 +1429,19 @@ def test_update_one(self):
14291429
self.assertRaises(InvalidOperation, lambda: result.upserted_id)
14301430
self.assertFalse(result.acknowledged)
14311431

1432+
def test_update_result(self):
1433+
db = self.db
1434+
db.drop_collection("test")
1435+
1436+
result = db.test.update_one({"x": 0}, {"$inc": {"x": 1}}, upsert=True)
1437+
self.assertEqual(result.did_upsert, True)
1438+
1439+
result = db.test.update_one({"_id": None, "x": 0}, {"$inc": {"x": 1}}, upsert=True)
1440+
self.assertEqual(result.did_upsert, True)
1441+
1442+
result = db.test.update_one({"_id": None}, {"$inc": {"x": 1}})
1443+
self.assertEqual(result.did_upsert, False)
1444+
14321445
def test_update_many(self):
14331446
db = self.db
14341447
db.drop_collection("test")

0 commit comments

Comments
 (0)