Skip to content

Commit e3c9973

Browse files
Add fixture for custom vectorDB testcases, to ensure dropping of tables (#40)
* Add fixture for custom vectorDB testcases, to ensure dropping of tables * Change fixture to yield table name
1 parent 265365d commit e3c9973

File tree

3 files changed

+75
-64
lines changed

3 files changed

+75
-64
lines changed

tests/integration_tests/hana_test_constants.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ class HanaTestConstants:
88
{"start": 300, "quality": "ugly", "Owner": "Steve"}, # type: ignore[list-item]
99
]
1010
TABLE_NAME = "TEST_TABLE"
11+
TABLE_NAME_CUSTOM_DB = "CUSTOM_TEST_TABLE"

tests/integration_tests/hana_test_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def create_and_set_schema(conn, schema_name):
7373
def drop_table(conn, table_name):
7474
cur = conn.cursor()
7575
try:
76-
cur.execute(f"DROP TABLE {table_name}")
76+
cur.execute(f'DROP TABLE "{table_name}"')
7777
except dbapi.Error as e:
7878
raise RuntimeError(f"Error dropping table {table_name}: {e}")
7979
finally:

tests/integration_tests/test_vectorstores.py

Lines changed: 73 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,16 @@ def vectorDB(request):
8383

8484
HanaTestUtils.drop_table(config.conn, HanaTestConstants.TABLE_NAME)
8585

86+
@pytest.fixture
87+
def table_name_with_cleanup():
88+
yield HanaTestConstants.TABLE_NAME_CUSTOM_DB
89+
HanaTestUtils.drop_table(config.conn, HanaTestConstants.TABLE_NAME_CUSTOM_DB)
90+
8691

8792
@pytest.mark.skipif(not hanadb_installed, reason="hanadb not installed")
88-
def test_hanavector_non_existing_table() -> None:
93+
def test_hanavector_non_existing_table(table_name_with_cleanup) -> None:
8994
"""Test end to end construction and search."""
90-
table_name = "NON_EXISTING"
95+
table_name = table_name_with_cleanup
9196

9297
# Check if table is created
9398
vectordb = HanaDB(
@@ -101,8 +106,8 @@ def test_hanavector_non_existing_table() -> None:
101106

102107

103108
@pytest.mark.skipif(not hanadb_installed, reason="hanadb not installed")
104-
def test_hanavector_table_with_missing_columns() -> None:
105-
table_name = "EXISTING_MISSING_COLS"
109+
def test_hanavector_table_with_missing_columns(table_name_with_cleanup) -> None:
110+
table_name = table_name_with_cleanup
106111
try:
107112
cur = config.conn.cursor()
108113
sql_str = f"CREATE TABLE {table_name}(WRONG_COL NVARCHAR(500));"
@@ -126,8 +131,8 @@ def test_hanavector_table_with_missing_columns() -> None:
126131

127132

128133
@pytest.mark.skipif(not hanadb_installed, reason="hanadb not installed")
129-
def test_hanavector_table_with_nvarchar_content() -> None:
130-
table_name = "EXISTING_NVARCHAR"
134+
def test_hanavector_table_with_nvarchar_content(table_name_with_cleanup) -> None:
135+
table_name = table_name_with_cleanup
131136
content_column = "TEST_TEXT"
132137
metadata_column = "TEST_META"
133138
vector_column = "TEST_VECTOR"
@@ -166,8 +171,8 @@ def test_hanavector_table_with_nvarchar_content() -> None:
166171

167172

168173
@pytest.mark.skipif(not hanadb_installed, reason="hanadb not installed")
169-
def test_hanavector_table_with_wrong_typed_columns() -> None:
170-
table_name = "EXISTING_WRONG_TYPES"
174+
def test_hanavector_table_with_wrong_typed_columns(table_name_with_cleanup) -> None:
175+
table_name = table_name_with_cleanup
171176
content_column = "DOC_TEXT"
172177
metadata_column = "DOC_META"
173178
vector_column = "DOC_VECTOR"
@@ -198,9 +203,9 @@ def test_hanavector_table_with_wrong_typed_columns() -> None:
198203

199204

200205
@pytest.mark.skipif(not hanadb_installed, reason="hanadb not installed")
201-
def test_hanavector_non_existing_table_fixed_vector_length() -> None:
206+
def test_hanavector_non_existing_table_fixed_vector_length(table_name_with_cleanup) -> None:
202207
"""Test end to end construction and search."""
203-
table_name = "NON_EXISTING_FIXED_VECTOR_LENGTH"
208+
table_name = table_name_with_cleanup
204209
vector_column = "MY_VECTOR"
205210
vector_column_length = 42
206211

@@ -237,12 +242,13 @@ def test_hanavector_add_texts(vectorDB) -> None:
237242

238243

239244
@pytest.mark.skipif(not hanadb_installed, reason="hanadb not installed")
240-
def test_hanavector_from_texts() -> None:
245+
def test_hanavector_from_texts(table_name_with_cleanup) -> None:
246+
table_name = table_name_with_cleanup
241247
vectorDB = HanaDB.from_texts(
242248
connection=config.conn,
243249
texts=HanaTestConstants.TEXTS,
244250
embedding=embedding,
245-
table_name=HanaTestConstants.TABLE_NAME,
251+
table_name=table_name,
246252
)
247253

248254
# test if vectorDB is instance of HanaDB
@@ -251,7 +257,7 @@ def test_hanavector_from_texts() -> None:
251257
# check that embeddings have been created in the table
252258
number_of_texts = len(HanaTestConstants.TEXTS)
253259
number_of_rows = -1
254-
sql_str = f"SELECT COUNT(*) FROM {HanaTestConstants.TABLE_NAME}"
260+
sql_str = f"SELECT COUNT(*) FROM {table_name}"
255261
cur = config.conn.cursor()
256262
cur.execute(sql_str)
257263
if cur.has_result_set():
@@ -306,8 +312,8 @@ def test_hanavector_similarity_search_by_vector_simple_invalid(
306312

307313

308314
@pytest.mark.skipif(not hanadb_installed, reason="hanadb not installed")
309-
def test_hanavector_similarity_search_simple_euclidean_distance() -> None:
310-
table_name = "TEST_TABLE_SEARCH_EUCLIDIAN"
315+
def test_hanavector_similarity_search_simple_euclidean_distance(table_name_with_cleanup) -> None:
316+
table_name = table_name_with_cleanup
311317

312318
# Check if table is created
313319
vectorDB = HanaDB.from_texts(
@@ -456,10 +462,10 @@ def test_hanavector_similarity_search_with_relevance_score(vectorDB) -> None:
456462

457463

458464
@pytest.mark.skipif(not hanadb_installed, reason="hanadb not installed")
459-
def test_hanavector_similarity_search_with_relevance_score_with_euclidian_distance() -> (
465+
def test_hanavector_similarity_search_with_relevance_score_with_euclidian_distance(table_name_with_cleanup) -> (
460466
None
461467
):
462-
table_name = "TEST_TABLE_REL_SCORE_EUCLIDIAN"
468+
table_name = table_name_with_cleanup
463469

464470
# Check if table is created
465471
vectorDB = HanaDB.from_texts(
@@ -482,8 +488,8 @@ def test_hanavector_similarity_search_with_relevance_score_with_euclidian_distan
482488

483489

484490
@pytest.mark.skipif(not hanadb_installed, reason="hanadb not installed")
485-
def test_hanavector_similarity_search_with_score_with_euclidian_distance() -> None:
486-
table_name = "TEST_TABLE_SCORE_DISTANCE"
491+
def test_hanavector_similarity_search_with_score_with_euclidian_distance(table_name_with_cleanup) -> None:
492+
table_name = table_name_with_cleanup
487493

488494
# Check if table is created
489495
vectorDB = HanaDB.from_texts(
@@ -703,8 +709,8 @@ def test_hanavector_filter_prepared_statement_params(
703709
assert len(rows) == 1
704710

705711

706-
def test_invalid_metadata_keys() -> None:
707-
table_name = "TEST_TABLE_INVALID_METADATA"
712+
def test_invalid_metadata_keys(table_name_with_cleanup) -> None:
713+
table_name = table_name_with_cleanup
708714

709715
invalid_metadatas = [
710716
{"sta rt": 0, "end": 100, "quality": "good", "ready": True},
@@ -745,35 +751,39 @@ def test_hanavector_table_mixed_case_names() -> None:
745751
content_column = "TextColumn"
746752
metadata_column = "MetaColumn"
747753
vector_column = "VectorColumn"
754+
755+
try:
756+
vectordb = HanaDB(
757+
connection=config.conn,
758+
embedding=embedding,
759+
distance_strategy=DistanceStrategy.COSINE,
760+
table_name=table_name,
761+
content_column=content_column,
762+
metadata_column=metadata_column,
763+
vector_column=vector_column,
764+
)
748765

749-
vectordb = HanaDB(
750-
connection=config.conn,
751-
embedding=embedding,
752-
distance_strategy=DistanceStrategy.COSINE,
753-
table_name=table_name,
754-
content_column=content_column,
755-
metadata_column=metadata_column,
756-
vector_column=vector_column,
757-
)
758-
759-
vectordb.add_texts(texts=HanaTestConstants.TEXTS)
766+
vectordb.add_texts(texts=HanaTestConstants.TEXTS)
760767

761-
# check that embeddings have been created in the table
762-
number_of_texts = len(HanaTestConstants.TEXTS)
763-
number_of_rows = -1
764-
sql_str = f'SELECT COUNT(*) FROM "{table_name}"'
765-
cur = config.conn.cursor()
766-
cur.execute(sql_str)
767-
if cur.has_result_set():
768-
rows = cur.fetchall()
769-
number_of_rows = rows[0][0]
770-
assert number_of_rows == number_of_texts
768+
# check that embeddings have been created in the table
769+
number_of_texts = len(HanaTestConstants.TEXTS)
770+
number_of_rows = -1
771+
sql_str = f'SELECT COUNT(*) FROM "{table_name}"'
772+
cur = config.conn.cursor()
773+
cur.execute(sql_str)
774+
if cur.has_result_set():
775+
rows = cur.fetchall()
776+
number_of_rows = rows[0][0]
777+
assert number_of_rows == number_of_texts
771778

772-
# check results of similarity search
773-
assert (
774-
HanaTestConstants.TEXTS[0]
775-
== vectordb.similarity_search(HanaTestConstants.TEXTS[0], 1)[0].page_content
776-
)
779+
# check results of similarity search
780+
assert (
781+
HanaTestConstants.TEXTS[0]
782+
== vectordb.similarity_search(HanaTestConstants.TEXTS[0], 1)[0].page_content
783+
)
784+
785+
finally:
786+
HanaTestUtils.drop_table(config.conn, table_name)
777787

778788

779789
@pytest.mark.parametrize(
@@ -799,8 +809,8 @@ def test_hanavector_with_with_metadata_filters(
799809

800810

801811
@pytest.mark.skipif(not hanadb_installed, reason="hanadb not installed")
802-
def test_preexisting_specific_columns_for_metadata_fill() -> None:
803-
table_name = "PREEXISTING_FILTER_COLUMNS"
812+
def test_preexisting_specific_columns_for_metadata_fill(table_name_with_cleanup) -> None:
813+
table_name = table_name_with_cleanup
804814

805815
sql_str = (
806816
f'CREATE TABLE "{table_name}" ('
@@ -858,8 +868,8 @@ def test_preexisting_specific_columns_for_metadata_fill() -> None:
858868

859869

860870
@pytest.mark.skipif(not hanadb_installed, reason="hanadb not installed")
861-
def test_preexisting_specific_columns_for_metadata_via_array() -> None:
862-
table_name = "PREEXISTING_FILTER_COLUMNS_VIA_ARRAY"
871+
def test_preexisting_specific_columns_for_metadata_via_array(table_name_with_cleanup) -> None:
872+
table_name = table_name_with_cleanup
863873

864874
sql_str = (
865875
f'CREATE TABLE "{table_name}" ('
@@ -928,8 +938,8 @@ def test_preexisting_specific_columns_for_metadata_via_array() -> None:
928938

929939

930940
@pytest.mark.skipif(not hanadb_installed, reason="hanadb not installed")
931-
def test_preexisting_specific_columns_for_metadata_multiple_columns() -> None:
932-
table_name = "PREEXISTING_FILTER_MULTIPLE_COLUMNS"
941+
def test_preexisting_specific_columns_for_metadata_multiple_columns(table_name_with_cleanup) -> None:
942+
table_name = table_name_with_cleanup
933943

934944
sql_str = (
935945
f'CREATE TABLE "{table_name}" ('
@@ -975,8 +985,8 @@ def test_preexisting_specific_columns_for_metadata_multiple_columns() -> None:
975985

976986

977987
@pytest.mark.skipif(not hanadb_installed, reason="hanadb not installed")
978-
def test_preexisting_specific_columns_for_metadata_empty_columns() -> None:
979-
table_name = "PREEXISTING_FILTER_MULTIPLE_COLUMNS_EMPTY"
988+
def test_preexisting_specific_columns_for_metadata_empty_columns(table_name_with_cleanup) -> None:
989+
table_name = table_name_with_cleanup
980990

981991
sql_str = (
982992
f'CREATE TABLE "{table_name}" ('
@@ -1026,8 +1036,8 @@ def test_preexisting_specific_columns_for_metadata_empty_columns() -> None:
10261036

10271037

10281038
@pytest.mark.skipif(not hanadb_installed, reason="hanadb not installed")
1029-
def test_preexisting_specific_columns_for_metadata_wrong_type_or_non_existing() -> None:
1030-
table_name = "PREEXISTING_FILTER_COLUMNS_WRONG_TYPE"
1039+
def test_preexisting_specific_columns_for_metadata_wrong_type_or_non_existing(table_name_with_cleanup) -> None:
1040+
table_name = table_name_with_cleanup
10311041

10321042
sql_str = (
10331043
f'CREATE TABLE "{table_name}" ('
@@ -1075,8 +1085,8 @@ def test_preexisting_specific_columns_for_metadata_wrong_type_or_non_existing()
10751085

10761086

10771087
@pytest.mark.skipif(not hanadb_installed, reason="hanadb not installed")
1078-
def test_preexisting_specific_columns_for_returned_metadata_completeness() -> None:
1079-
table_name = "PREEXISTING_FILTER_COLUMNS_METADATA_COMPLETENESS"
1088+
def test_preexisting_specific_columns_for_returned_metadata_completeness(table_name_with_cleanup) -> None:
1089+
table_name = table_name_with_cleanup
10801090

10811091
sql_str = (
10821092
f'CREATE TABLE "{table_name}" ('
@@ -1134,8 +1144,8 @@ def test_create_hnsw_index_with_default_values(vectorDB) -> None:
11341144

11351145

11361146
@pytest.mark.skipif(not hanadb_installed, reason="hanadb not installed")
1137-
def test_create_hnsw_index_with_defined_values() -> None:
1138-
table_name = "TEST_TABLE_HNSW_INDEX_DEFINED"
1147+
def test_create_hnsw_index_with_defined_values(table_name_with_cleanup) -> None:
1148+
table_name = table_name_with_cleanup
11391149

11401150
# Create table and insert data
11411151
vectorDB = HanaDB.from_texts(
@@ -1239,8 +1249,8 @@ def test_create_hnsw_index_invalid_ef_search(vectorDB) -> None:
12391249

12401250

12411251
@pytest.mark.skipif(not hanadb_installed, reason="hanadb not installed")
1242-
def test_hanavector_keyword_search() -> None:
1243-
table_name = "TEST_TABLE_KEYWORD_SEARCH_WITHOUT_UNSPECIFIC_METADATA_COL"
1252+
def test_hanavector_keyword_search(table_name_with_cleanup) -> None:
1253+
table_name = table_name_with_cleanup
12441254

12451255
sql_str = (
12461256
f'CREATE TABLE "{table_name}" ('

0 commit comments

Comments
 (0)