Skip to content

Commit 948cf3b

Browse files
Added more tests to the test suite.
1 parent f1a3fa2 commit 948cf3b

File tree

3 files changed

+133
-0
lines changed

3 files changed

+133
-0
lines changed

tests/test_1300_cursor_var.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,48 @@ def cursor(self):
231231
cursor.fetchall()
232232
self.assertEqual(Counter.num_cursors_created, 3)
233233

234+
def test_1312_fetch_nested_cursors_for_complex_sql(self):
235+
"1312 - test that nested cursors are fetched correctly"
236+
sql = """
237+
select
238+
'Level 1 String',
239+
cursor(
240+
select
241+
'Level 2 String',
242+
cursor(
243+
select
244+
'Level 3 String',
245+
cursor(
246+
select 1, 'Level 4 String A' from dual
247+
union all
248+
select 2, 'Level 4 String B' from dual
249+
union all
250+
select 3, 'Level 4 String C' from dual
251+
) as nc3
252+
from dual
253+
) as nc2
254+
from dual
255+
) as nc1
256+
from dual"""
257+
self.cursor.execute(sql)
258+
transform_fn = lambda v: \
259+
[transform_row(r) for r in v] \
260+
if isinstance(v, oracledb.Cursor) \
261+
else v
262+
transform_row = lambda r: tuple(transform_fn(v) for v in r)
263+
rows = [transform_row(r) for r in self.cursor]
264+
expected_value = [
265+
('Level 1 String', [
266+
('Level 2 String', [
267+
('Level 3 String', [
268+
(1, 'Level 4 String A'),
269+
(2, 'Level 4 String B'),
270+
(3, 'Level 4 String C')
271+
]),
272+
]),
273+
])
274+
]
275+
self.assertEqual(rows, expected_value)
234276

235277
if __name__ == "__main__":
236278
test_env.run_test_cases()

tests/test_2400_pool.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -693,5 +693,18 @@ def test_2428_acquire_conn_from_empty_pool(self):
693693
result, = cursor.fetchone()
694694
self.assertEqual(result, test_env.get_main_user().upper())
695695

696+
@unittest.skipIf(test_env.get_is_thin(),
697+
"thin mode doesn't support soda_metadata_cache" \
698+
"parameter yet")
699+
def test_2429_soda_metadata_cache(self):
700+
"2429 - test soda_metadata_cache parameter"
701+
pool = test_env.get_pool(min=0, max=2, increment=2)
702+
self.assertEqual(pool.soda_metadata_cache, False)
703+
pool = test_env.get_pool(min=0, max=2, increment=2,
704+
soda_metadata_cache=True)
705+
self.assertEqual(pool.soda_metadata_cache, True)
706+
pool.soda_metadata_cache = False
707+
self.assertEqual(pool.soda_metadata_cache, False)
708+
696709
if __name__ == "__main__":
697710
test_env.run_test_cases()

tests/test_3400_soda_collection.py

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
"""
2828

2929
import unittest
30+
import json
3031

3132
import oracledb
3233
import test_env
@@ -368,5 +369,82 @@ def test_3415_soda_hint_with_invalid_type(self):
368369
self.assertRaises(TypeError, coll.saveAndGet,
369370
dict(name="Sally", age=36), hint=5)
370371

372+
def test_3416_collection_name_and_metadata(self):
373+
"3416 - test name and metadata attribute"
374+
soda_db = self.connection.getSodaDatabase()
375+
collection_name = "TestCollectionMetadata"
376+
coll = soda_db.createCollection(collection_name)
377+
self.assertEqual(coll.name, collection_name)
378+
self.assertEqual(coll.metadata["tableName"], collection_name)
379+
coll.drop()
380+
381+
def test_3417_insert_many(self):
382+
"3417 - test insertMany"
383+
soda_db = self.get_soda_database(minclient=(18, 5))
384+
coll = soda_db.createCollection("TestInsertMany")
385+
values_to_insert = [
386+
dict(name="George", age=25),
387+
soda_db.createDocument(dict(name="Lucas", age=47))
388+
]
389+
coll.insertMany(values_to_insert)
390+
self.connection.commit()
391+
fetched_docs = list(coll.find().getCursor())
392+
for fetched_doc, expected_doc in zip(fetched_docs, values_to_insert):
393+
if isinstance(expected_doc, dict):
394+
expected_doc = soda_db.createDocument(expected_doc)
395+
self.assertEqual(fetched_doc.getContent(),
396+
expected_doc.getContent())
397+
self.assertRaisesRegex(oracledb.DatabaseError, "^DPI-1031:",
398+
coll.insertMany, [])
399+
coll.drop()
400+
401+
def test_3418_save(self):
402+
"3418 - test save"
403+
soda_db = self.get_soda_database(minclient=(19, 9))
404+
coll = soda_db.createCollection("TestSodaSave")
405+
values_to_save = [
406+
12,
407+
"23",
408+
soda_db.createDocument(45)
409+
]
410+
for value in values_to_save:
411+
coll.save(value)
412+
self.connection.commit()
413+
fetched_docs = coll.find().getDocuments()
414+
for fetched_doc, expected_doc in zip(fetched_docs, values_to_save):
415+
if isinstance(expected_doc, (int, str)):
416+
expected_doc = soda_db.createDocument(expected_doc)
417+
self.assertEqual(fetched_doc.getContent(),
418+
expected_doc.getContent())
419+
coll.drop()
420+
421+
def test_3419_save_and_get_with_hint(self):
422+
"3419 - test saveAndGet with hint"
423+
soda_db = self.get_soda_database(minclient=(19, 11))
424+
cursor = self.connection.cursor()
425+
statement = """
426+
SELECT
427+
( SELECT t2.sql_fulltext
428+
FROM v$sql t2
429+
WHERE t2.sql_id = t1.prev_sql_id
430+
AND t2.child_number = t1.prev_child_number
431+
)
432+
FROM v$session t1
433+
WHERE t1.audsid = sys_context('userenv', 'sessionid')"""
434+
coll = soda_db.createCollection("TestSodaSaveWithHint")
435+
coll.find().remove()
436+
values_to_save = [
437+
dict(name="Jordan", age=59),
438+
dict(name="Curry", age=34)
439+
]
440+
hints = ["MONITOR", "NO_MONITOR"]
441+
442+
for value, hint in zip(values_to_save, hints):
443+
coll.saveAndGet(value, hint=hint)
444+
coll.find().hint(hint).getOne().getContent()
445+
cursor.execute(statement)
446+
result, = cursor.fetchone()
447+
self.assertTrue(hint in result.read())
448+
371449
if __name__ == "__main__":
372450
test_env.run_test_cases()

0 commit comments

Comments
 (0)