Skip to content

Commit 541fad5

Browse files
Test improvements.
1 parent 0b56f42 commit 541fad5

File tree

3 files changed

+130
-0
lines changed

3 files changed

+130
-0
lines changed

tests/test_3400_soda_collection.py

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -752,6 +752,92 @@ def test_3432_drop_empty_mapped_collection(self):
752752
self.assertTrue(mapped_coll.drop())
753753
self.assertFalse(original_coll.drop())
754754

755+
def test_3433_replace_one_returns(self):
756+
"3433 - test that replaceOne() returns a correct boolean"
757+
soda_db = self.get_soda_database()
758+
coll = soda_db.createCollection("TestReplaceDocReturns")
759+
coll.find().remove()
760+
doc = coll.insertOneAndGet({"address": {"city": "Sydney"}})
761+
762+
new_content = {"address": {"city": "Melbourne"}}
763+
self.assertTrue(coll.find().key(doc.key).replaceOne(new_content))
764+
765+
unregistered_key = "DB4A2628F1E0985C891F3F4836"
766+
self.assertFalse(
767+
coll.find().key(unregistered_key).replaceOne(new_content)
768+
)
769+
self.conn.commit()
770+
coll.drop()
771+
772+
def test_3434_replace_one_and_get_negative(self):
773+
"3434 - replaceOne() and replaceOneAndGet() with invalid scenarios"
774+
conn = test_env.get_connection()
775+
soda_db = conn.getSodaDatabase()
776+
coll = soda_db.createCollection("TestReplaceOneNegative")
777+
coll.find().remove()
778+
coll.insertMany([{"Wisdom": 1.7} for d in range(2)])
779+
keys = [d.key for d in coll.find().getDocuments()]
780+
self.assertRaisesRegex(
781+
oracledb.DatabaseError,
782+
"^ORA-40734:",
783+
coll.find().keys(keys).replaceOne,
784+
{"data": "new"},
785+
)
786+
self.assertRaisesRegex(
787+
oracledb.DatabaseError,
788+
"^ORA-40734:",
789+
coll.find().keys(keys).replaceOneAndGet,
790+
{"data": "new"},
791+
)
792+
793+
def test_3435_write_read_only_coll_negative(self):
794+
"3435 - test writting a read-only collection"
795+
soda_db = self.get_soda_database()
796+
metadata = {
797+
"readOnly": True,
798+
}
799+
coll = soda_db.createCollection("TestCollReadOnly", metadata)
800+
801+
methods = [
802+
coll.insertOne,
803+
coll.insertOneAndGet,
804+
coll.insertMany,
805+
coll.insertManyAndGet,
806+
coll.save,
807+
coll.saveAndGet,
808+
]
809+
for method in methods:
810+
with self.subTest(method=method):
811+
self.assertRaisesRegex(
812+
oracledb.DatabaseError,
813+
"^ORA-40663:",
814+
method,
815+
{"Song 1": "No end"},
816+
)
817+
818+
def test_3436_create_collection_same_metadata(self):
819+
"3436 - createCollection() with the same name and metadata"
820+
soda_db = self.get_soda_database()
821+
coll_name = "TestCollSameMetadata"
822+
coll1 = soda_db.createCollection(coll_name, {"readOnly": True})
823+
coll2 = soda_db.createCollection(coll_name, {"readOnly": True})
824+
self.assertTrue(coll1.drop())
825+
self.assertFalse(coll2.drop())
826+
827+
def test_3437_create_collection_different_metadata(self):
828+
"3437 - createCollection() with the same name but different metadata"
829+
soda_db = self.get_soda_database()
830+
coll_name = "TestCollDifferentMetadata"
831+
coll = soda_db.createCollection(coll_name)
832+
with self.assertRaisesRegex(oracledb.DatabaseError, "^ORA-40669:"):
833+
soda_db.createCollection(coll_name, {"readOnly": False})
834+
coll.drop()
835+
836+
coll = soda_db.createCollection(coll_name, {"readOnly": True})
837+
with self.assertRaisesRegex(oracledb.DatabaseError, "^ORA-40669:"):
838+
soda_db.createCollection(coll_name, {"readOnly": False})
839+
coll.drop()
840+
755841

756842
if __name__ == "__main__":
757843
test_env.run_test_cases()

tests/test_4300_cursor_other.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -987,6 +987,45 @@ def test_4361_fetch_domain_and_annotations(self):
987987
}
988988
self.assertEqual(column_2.annotations, expected_annotations)
989989

990+
def test_4362_statement_after_execute(self):
991+
"4362 - test getting statement after it was executed"
992+
cursor = self.conn.cursor()
993+
sql = "select 1 from dual"
994+
cursor.execute(sql)
995+
self.assertEqual(cursor.statement, sql)
996+
997+
def test_4363_cursor_fetchvars(self):
998+
"4363 - test getting cursor fetchvars"
999+
cursor = self.conn.cursor()
1000+
self.assertIsNone(cursor.fetchvars)
1001+
1002+
cursor.execute("truncate table TestTempTable")
1003+
cursor.execute(
1004+
"insert into TestTempTable (IntCol, StringCol1) values (1, '12')",
1005+
)
1006+
cursor.execute("select IntCol, StringCol1 from TestTempTable")
1007+
cursor.fetchall()
1008+
self.assertEqual(len(cursor.fetchvars), 2)
1009+
self.assertEqual(cursor.fetchvars[0].getvalue(), 1)
1010+
self.assertEqual(cursor.fetchvars[1].getvalue(), "12")
1011+
1012+
def test_4364_fetchmany_with_cursor_arraysize(self):
1013+
"4364 - test fetchmany() with non-default cursor.arraysize"
1014+
self.cursor.arraysize = 20
1015+
values = [(i,) for i in range(30)]
1016+
self.cursor.execute("truncate table TestTempTable")
1017+
self.cursor.executemany(
1018+
"insert into TestTempTable (IntCol) values (:1)", values
1019+
)
1020+
self.cursor.execute("select IntCol from TestTempTable order by IntCol")
1021+
# fetch first 20 elements
1022+
fetched_values = self.cursor.fetchmany()
1023+
self.assertEqual(fetched_values, values[: self.cursor.arraysize])
1024+
1025+
# fetch missing elements
1026+
fetched_values = self.cursor.fetchmany()
1027+
self.assertEqual(fetched_values, values[self.cursor.arraysize :])
1028+
9901029

9911030
if __name__ == "__main__":
9921031
test_env.run_test_cases()

tests/test_env.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@
7070

7171
import oracledb
7272

73+
# Python 3.7 doesn't have support for testing asyncio so fake it to avoid the
74+
# entire test suite failing!
75+
if not hasattr(unittest, "IsolatedAsyncioTestCase"):
76+
unittest.IsolatedAsyncioTestCase = object
77+
7378
# default values
7479
DEFAULT_MAIN_USER = "pythontest"
7580
DEFAULT_PROXY_USER = "pythontestproxy"

0 commit comments

Comments
 (0)