From 87086ab4494de962ead6692ebfba283bb3f06d21 Mon Sep 17 00:00:00 2001
From: Iris Ho <iris.ho@mongodb.com>
Date: Fri, 23 May 2025 09:08:05 -0700
Subject: [PATCH 1/2] better comparison assertions

---
 test/asynchronous/test_bulk.py       |   8 +--
 test/asynchronous/test_client.py     |   2 +-
 test/asynchronous/test_collection.py |   2 +-
 test/asynchronous/test_database.py   |   2 +-
 test/asynchronous/test_pooling.py    |   4 +-
 test/test_bson.py                    | 102 +++++++++++++--------------
 test/test_bulk.py                    |   8 +--
 test/test_client.py                  |   2 +-
 test/test_collection.py              |   2 +-
 test/test_database.py                |   2 +-
 test/test_objectid.py                |   2 +-
 test/test_pooling.py                 |   4 +-
 12 files changed, 70 insertions(+), 70 deletions(-)

diff --git a/test/asynchronous/test_bulk.py b/test/asynchronous/test_bulk.py
index 62022de24c..a0d6ba0b3b 100644
--- a/test/asynchronous/test_bulk.py
+++ b/test/asynchronous/test_bulk.py
@@ -994,7 +994,7 @@ async def test_write_concern_failure_ordered(self):
 
         # When talking to legacy servers there will be a
         # write concern error for each operation.
-        self.assertTrue(len(details["writeConcernErrors"]) > 0)
+        self.assertGreater(len(details["writeConcernErrors"]), 0)
 
         failed = details["writeConcernErrors"][0]
         self.assertEqual(64, failed["code"])
@@ -1035,7 +1035,7 @@ async def test_write_concern_failure_ordered(self):
             details,
         )
 
-        self.assertTrue(len(details["writeConcernErrors"]) > 1)
+        self.assertGreater(len(details["writeConcernErrors"]), 1)
         failed = details["writeErrors"][0]
         self.assertIn("duplicate", failed["errmsg"])
 
@@ -1073,7 +1073,7 @@ async def test_write_concern_failure_unordered(self):
         self.assertEqual(0, len(details["writeErrors"]))
         # When talking to legacy servers there will be a
         # write concern error for each operation.
-        self.assertTrue(len(details["writeConcernErrors"]) > 1)
+        self.assertGreater(len(details["writeConcernErrors"]), 1)
 
         await self.coll.delete_many({})
         await self.coll.create_index("a", unique=True)
@@ -1100,7 +1100,7 @@ async def test_write_concern_failure_unordered(self):
         self.assertEqual(1, len(details["writeErrors"]))
         # When talking to legacy servers there will be a
         # write concern error for each operation.
-        self.assertTrue(len(details["writeConcernErrors"]) > 1)
+        self.assertGreater(len(details["writeConcernErrors"]), 1)
 
         failed = details["writeErrors"][0]
         self.assertEqual(2, failed["index"])
diff --git a/test/asynchronous/test_client.py b/test/asynchronous/test_client.py
index ad6614711d..3ef0da273c 100644
--- a/test/asynchronous/test_client.py
+++ b/test/asynchronous/test_client.py
@@ -1005,7 +1005,7 @@ async def test_list_databases(self):
         cursor = await self.client.list_databases()
         self.assertIsInstance(cursor, AsyncCommandCursor)
         helper_docs = await cursor.to_list()
-        self.assertTrue(len(helper_docs) > 0)
+        self.assertGreater(len(helper_docs), 0)
         self.assertEqual(len(helper_docs), len(cmd_docs))
         # PYTHON-3529 Some fields may change between calls, just compare names.
         for helper_doc, cmd_doc in zip(helper_docs, cmd_docs):
diff --git a/test/asynchronous/test_collection.py b/test/asynchronous/test_collection.py
index b6f96cc999..cda8452d1c 100644
--- a/test/asynchronous/test_collection.py
+++ b/test/asynchronous/test_collection.py
@@ -500,7 +500,7 @@ async def test_index_text(self):
         # Sort by 'score' field.
         cursor.sort([("score", {"$meta": "textScore"})])
         results = await cursor.to_list()
-        self.assertTrue(results[0]["score"] >= results[1]["score"])
+        self.assertGreaterEqual(results[0]["score"], results[1]["score"])
 
         await db.test.drop_indexes()
 
diff --git a/test/asynchronous/test_database.py b/test/asynchronous/test_database.py
index 3195c74988..e6f0c6a532 100644
--- a/test/asynchronous/test_database.py
+++ b/test/asynchronous/test_database.py
@@ -239,7 +239,7 @@ async def test_check_exists(self):
         listener.reset()
         await db.drop_collection("unique")
         await db.create_collection("unique", check_exists=False)
-        self.assertTrue(len(listener.started_events) > 0)
+        self.assertGreater(len(listener.started_events), 0)
         self.assertNotIn("listCollections", listener.started_command_names())
 
     async def test_list_collections(self):
diff --git a/test/asynchronous/test_pooling.py b/test/asynchronous/test_pooling.py
index 64c5738dba..9764cb2780 100644
--- a/test/asynchronous/test_pooling.py
+++ b/test/asynchronous/test_pooling.py
@@ -547,7 +547,7 @@ async def f():
 
         await async_joinall(tasks)
         self.assertEqual(ntasks, self.n_passed)
-        self.assertTrue(len(cx_pool.conns) > 1)
+        self.assertGreater(len(cx_pool.conns), 1)
         self.assertEqual(0, cx_pool.requests)
 
     async def test_max_pool_size_none(self):
@@ -578,7 +578,7 @@ async def f():
 
         await async_joinall(tasks)
         self.assertEqual(ntasks, self.n_passed)
-        self.assertTrue(len(cx_pool.conns) > 1)
+        self.assertGreater(len(cx_pool.conns), 1)
         self.assertEqual(cx_pool.max_pool_size, float("inf"))
 
     async def test_max_pool_size_zero(self):
diff --git a/test/test_bson.py b/test/test_bson.py
index 23e0a29c4f..598157c2d0 100644
--- a/test/test_bson.py
+++ b/test/test_bson.py
@@ -1045,46 +1045,46 @@ def test_exception_wrapping(self):
 
     def test_minkey_maxkey_comparison(self):
         # MinKey's <, <=, >, >=, !=, and ==.
-        self.assertTrue(MinKey() < None)
-        self.assertTrue(MinKey() < 1)
-        self.assertTrue(MinKey() <= 1)
-        self.assertTrue(MinKey() <= MinKey())
-        self.assertFalse(MinKey() > None)
-        self.assertFalse(MinKey() > 1)
-        self.assertFalse(MinKey() >= 1)
-        self.assertTrue(MinKey() >= MinKey())
-        self.assertTrue(MinKey() != 1)
-        self.assertFalse(MinKey() == 1)
-        self.assertTrue(MinKey() == MinKey())
+        self.assertLess(MinKey(), None)
+        self.assertLess(MinKey(), 1)
+        self.assertLessEqual(MinKey(), 1)
+        self.assertLessEqual(MinKey(), MinKey())
+        self.assertLessEqual(MinKey(), None)
+        self.assertLessEqual(MinKey(), 1)
+        self.assertLess(MinKey(), 1)
+        self.assertGreaterEqual(MinKey(), MinKey())
+        self.assertNotEqual(MinKey(), 1)
+        self.assertNotEqual(MinKey(), 1)
+        self.assertEqual(MinKey(), MinKey())
 
         # MinKey compared to MaxKey.
-        self.assertTrue(MinKey() < MaxKey())
-        self.assertTrue(MinKey() <= MaxKey())
-        self.assertFalse(MinKey() > MaxKey())
-        self.assertFalse(MinKey() >= MaxKey())
-        self.assertTrue(MinKey() != MaxKey())
-        self.assertFalse(MinKey() == MaxKey())
+        self.assertLess(MinKey(), MaxKey())
+        self.assertLessEqual(MinKey(), MaxKey())
+        self.assertLessEqual(MinKey(), MaxKey())
+        self.assertLess(MinKey(), MaxKey())
+        self.assertNotEqual(MinKey(), MaxKey())
+        self.assertNotEqual(MinKey(), MaxKey())
 
         # MaxKey's <, <=, >, >=, !=, and ==.
-        self.assertFalse(MaxKey() < None)
-        self.assertFalse(MaxKey() < 1)
-        self.assertFalse(MaxKey() <= 1)
-        self.assertTrue(MaxKey() <= MaxKey())
-        self.assertTrue(MaxKey() > None)
-        self.assertTrue(MaxKey() > 1)
-        self.assertTrue(MaxKey() >= 1)
-        self.assertTrue(MaxKey() >= MaxKey())
-        self.assertTrue(MaxKey() != 1)
-        self.assertFalse(MaxKey() == 1)
-        self.assertTrue(MaxKey() == MaxKey())
+        self.assertGreaterEqual(MaxKey(), None)
+        self.assertGreaterEqual(MaxKey(), 1)
+        self.assertGreater(MaxKey(), 1)
+        self.assertLessEqual(MaxKey(), MaxKey())
+        self.assertGreater(MaxKey(), None)
+        self.assertGreater(MaxKey(), 1)
+        self.assertGreaterEqual(MaxKey(), 1)
+        self.assertGreaterEqual(MaxKey(), MaxKey())
+        self.assertNotEqual(MaxKey(), 1)
+        self.assertNotEqual(MaxKey(), 1)
+        self.assertEqual(MaxKey(), MaxKey())
 
         # MaxKey compared to MinKey.
-        self.assertFalse(MaxKey() < MinKey())
-        self.assertFalse(MaxKey() <= MinKey())
-        self.assertTrue(MaxKey() > MinKey())
-        self.assertTrue(MaxKey() >= MinKey())
-        self.assertTrue(MaxKey() != MinKey())
-        self.assertFalse(MaxKey() == MinKey())
+        self.assertGreaterEqual(MaxKey(), MinKey())
+        self.assertGreater(MaxKey(), MinKey())
+        self.assertGreater(MaxKey(), MinKey())
+        self.assertGreaterEqual(MaxKey(), MinKey())
+        self.assertNotEqual(MaxKey(), MinKey())
+        self.assertNotEqual(MaxKey(), MinKey())
 
     def test_minkey_maxkey_hash(self):
         self.assertEqual(hash(MaxKey()), hash(MaxKey()))
@@ -1094,25 +1094,25 @@ def test_minkey_maxkey_hash(self):
     def test_timestamp_comparison(self):
         # Timestamp is initialized with time, inc. Time is the more
         # significant comparand.
-        self.assertTrue(Timestamp(1, 0) < Timestamp(2, 17))
-        self.assertTrue(Timestamp(2, 0) > Timestamp(1, 0))
-        self.assertTrue(Timestamp(1, 7) <= Timestamp(2, 0))
-        self.assertTrue(Timestamp(2, 0) >= Timestamp(1, 1))
-        self.assertTrue(Timestamp(2, 0) <= Timestamp(2, 0))
-        self.assertTrue(Timestamp(2, 0) >= Timestamp(2, 0))
-        self.assertFalse(Timestamp(1, 0) > Timestamp(2, 0))
+        self.assertLess(Timestamp(1, 0), Timestamp(2, 17))
+        self.assertGreater(Timestamp(2, 0), Timestamp(1, 0))
+        self.assertLessEqual(Timestamp(1, 7), Timestamp(2, 0))
+        self.assertGreaterEqual(Timestamp(2, 0), Timestamp(1, 1))
+        self.assertLessEqual(Timestamp(2, 0), Timestamp(2, 0))
+        self.assertGreaterEqual(Timestamp(2, 0), Timestamp(2, 0))
+        self.assertLessEqual(Timestamp(1, 0), Timestamp(2, 0))
 
         # Comparison by inc.
-        self.assertTrue(Timestamp(1, 0) < Timestamp(1, 1))
-        self.assertTrue(Timestamp(1, 1) > Timestamp(1, 0))
-        self.assertTrue(Timestamp(1, 0) <= Timestamp(1, 0))
-        self.assertTrue(Timestamp(1, 0) <= Timestamp(1, 1))
-        self.assertFalse(Timestamp(1, 0) >= Timestamp(1, 1))
-        self.assertTrue(Timestamp(1, 0) >= Timestamp(1, 0))
-        self.assertTrue(Timestamp(1, 1) >= Timestamp(1, 0))
-        self.assertFalse(Timestamp(1, 1) <= Timestamp(1, 0))
-        self.assertTrue(Timestamp(1, 0) <= Timestamp(1, 0))
-        self.assertFalse(Timestamp(1, 0) > Timestamp(1, 0))
+        self.assertLess(Timestamp(1, 0), Timestamp(1, 1))
+        self.assertGreater(Timestamp(1, 1), Timestamp(1, 0))
+        self.assertLessEqual(Timestamp(1, 0), Timestamp(1, 0))
+        self.assertLessEqual(Timestamp(1, 0), Timestamp(1, 1))
+        self.assertLess(Timestamp(1, 0), Timestamp(1, 1))
+        self.assertGreaterEqual(Timestamp(1, 0), Timestamp(1, 0))
+        self.assertGreaterEqual(Timestamp(1, 1), Timestamp(1, 0))
+        self.assertGreater(Timestamp(1, 1), Timestamp(1, 0))
+        self.assertLessEqual(Timestamp(1, 0), Timestamp(1, 0))
+        self.assertLessEqual(Timestamp(1, 0), Timestamp(1, 0))
 
     def test_timestamp_highorder_bits(self):
         doc = {"a": Timestamp(0xFFFFFFFF, 0xFFFFFFFF)}
diff --git a/test/test_bulk.py b/test/test_bulk.py
index 77d0d6c06e..78fde079ea 100644
--- a/test/test_bulk.py
+++ b/test/test_bulk.py
@@ -992,7 +992,7 @@ def test_write_concern_failure_ordered(self):
 
         # When talking to legacy servers there will be a
         # write concern error for each operation.
-        self.assertTrue(len(details["writeConcernErrors"]) > 0)
+        self.assertGreater(len(details["writeConcernErrors"]), 0)
 
         failed = details["writeConcernErrors"][0]
         self.assertEqual(64, failed["code"])
@@ -1033,7 +1033,7 @@ def test_write_concern_failure_ordered(self):
             details,
         )
 
-        self.assertTrue(len(details["writeConcernErrors"]) > 1)
+        self.assertGreater(len(details["writeConcernErrors"]), 1)
         failed = details["writeErrors"][0]
         self.assertIn("duplicate", failed["errmsg"])
 
@@ -1069,7 +1069,7 @@ def test_write_concern_failure_unordered(self):
         self.assertEqual(0, len(details["writeErrors"]))
         # When talking to legacy servers there will be a
         # write concern error for each operation.
-        self.assertTrue(len(details["writeConcernErrors"]) > 1)
+        self.assertGreater(len(details["writeConcernErrors"]), 1)
 
         self.coll.delete_many({})
         self.coll.create_index("a", unique=True)
@@ -1096,7 +1096,7 @@ def test_write_concern_failure_unordered(self):
         self.assertEqual(1, len(details["writeErrors"]))
         # When talking to legacy servers there will be a
         # write concern error for each operation.
-        self.assertTrue(len(details["writeConcernErrors"]) > 1)
+        self.assertGreater(len(details["writeConcernErrors"]), 1)
 
         failed = details["writeErrors"][0]
         self.assertEqual(2, failed["index"])
diff --git a/test/test_client.py b/test/test_client.py
index c50082797d..2f025f4863 100644
--- a/test/test_client.py
+++ b/test/test_client.py
@@ -978,7 +978,7 @@ def test_list_databases(self):
         cursor = self.client.list_databases()
         self.assertIsInstance(cursor, CommandCursor)
         helper_docs = cursor.to_list()
-        self.assertTrue(len(helper_docs) > 0)
+        self.assertGreater(len(helper_docs), 0)
         self.assertEqual(len(helper_docs), len(cmd_docs))
         # PYTHON-3529 Some fields may change between calls, just compare names.
         for helper_doc, cmd_doc in zip(helper_docs, cmd_docs):
diff --git a/test/test_collection.py b/test/test_collection.py
index 5643a62022..ccace72bec 100644
--- a/test/test_collection.py
+++ b/test/test_collection.py
@@ -490,7 +490,7 @@ def test_index_text(self):
         # Sort by 'score' field.
         cursor.sort([("score", {"$meta": "textScore"})])
         results = cursor.to_list()
-        self.assertTrue(results[0]["score"] >= results[1]["score"])
+        self.assertGreaterEqual(results[0]["score"], results[1]["score"])
 
         db.test.drop_indexes()
 
diff --git a/test/test_database.py b/test/test_database.py
index 0fe6c01a9d..56691383b2 100644
--- a/test/test_database.py
+++ b/test/test_database.py
@@ -238,7 +238,7 @@ def test_check_exists(self):
         listener.reset()
         db.drop_collection("unique")
         db.create_collection("unique", check_exists=False)
-        self.assertTrue(len(listener.started_events) > 0)
+        self.assertGreater(len(listener.started_events), 0)
         self.assertNotIn("listCollections", listener.started_command_names())
 
     def test_list_collections(self):
diff --git a/test/test_objectid.py b/test/test_objectid.py
index d7db7229ea..dbc61951d1 100644
--- a/test/test_objectid.py
+++ b/test/test_objectid.py
@@ -92,7 +92,7 @@ def test_generation_time(self):
 
         self.assertEqual(utc, d2.tzinfo)
         d2 = d2.replace(tzinfo=None)
-        self.assertTrue(d2 - d1 < datetime.timedelta(seconds=2))
+        self.assertLess(d2 - d1, datetime.timedelta(seconds=2))
 
     def test_from_datetime(self):
         d = datetime.datetime.now(tz=datetime.timezone.utc).replace(tzinfo=None)
diff --git a/test/test_pooling.py b/test/test_pooling.py
index 05513afe12..63f0ae226e 100644
--- a/test/test_pooling.py
+++ b/test/test_pooling.py
@@ -545,7 +545,7 @@ def f():
 
         joinall(tasks)
         self.assertEqual(ntasks, self.n_passed)
-        self.assertTrue(len(cx_pool.conns) > 1)
+        self.assertGreater(len(cx_pool.conns), 1)
         self.assertEqual(0, cx_pool.requests)
 
     def test_max_pool_size_none(self):
@@ -576,7 +576,7 @@ def f():
 
         joinall(tasks)
         self.assertEqual(ntasks, self.n_passed)
-        self.assertTrue(len(cx_pool.conns) > 1)
+        self.assertGreater(len(cx_pool.conns), 1)
         self.assertEqual(cx_pool.max_pool_size, float("inf"))
 
     def test_max_pool_size_zero(self):

From cbc463be4ce7728c3077c8bd73a5159c090bf03b Mon Sep 17 00:00:00 2001
From: Iris Ho <iris.ho@mongodb.com>
Date: Fri, 23 May 2025 09:36:39 -0700
Subject: [PATCH 2/2] accidentally left this one out!

---
 test/asynchronous/test_pooling.py | 5 +++--
 test/test_pooling.py              | 5 +++--
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/test/asynchronous/test_pooling.py b/test/asynchronous/test_pooling.py
index 9764cb2780..66edf0177f 100644
--- a/test/asynchronous/test_pooling.py
+++ b/test/asynchronous/test_pooling.py
@@ -331,8 +331,9 @@ async def test_wait_queue_timeout(self):
                     pass
 
         duration = time.time() - start
-        self.assertTrue(
-            abs(wait_queue_timeout - duration) < 1,
+        self.assertLess(
+            abs(wait_queue_timeout - duration),
+            1,
             f"Waited {duration:.2f} seconds for a socket, expected {wait_queue_timeout:f}",
         )
 
diff --git a/test/test_pooling.py b/test/test_pooling.py
index 63f0ae226e..b995c467c2 100644
--- a/test/test_pooling.py
+++ b/test/test_pooling.py
@@ -331,8 +331,9 @@ def test_wait_queue_timeout(self):
                     pass
 
         duration = time.time() - start
-        self.assertTrue(
-            abs(wait_queue_timeout - duration) < 1,
+        self.assertLess(
+            abs(wait_queue_timeout - duration),
+            1,
             f"Waited {duration:.2f} seconds for a socket, expected {wait_queue_timeout:f}",
         )