Skip to content

Commit 5d7ba7c

Browse files
committed
tests
1 parent d6f6b5c commit 5d7ba7c

File tree

3 files changed

+60
-3
lines changed

3 files changed

+60
-3
lines changed

tests/integration/metadata/test_metadata.py

+33
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22
import re
33
from copy import deepcopy
44

5+
import pandas as pd
56
import pytest
67

78
from sdv.datasets.demo import download_demo
9+
from sdv.metadata.errors import InvalidMetadataError
810
from sdv.metadata.metadata import Metadata
911
from sdv.metadata.multi_table import MultiTableMetadata
1012
from sdv.metadata.single_table import SingleTableMetadata
@@ -520,3 +522,34 @@ def test_anonymize():
520522

521523
assert anonymized.tables['table1'].to_dict() == table1_metadata.anonymize().to_dict()
522524
assert anonymized.tables['table2'].to_dict() == table2_metadata.anonymize().to_dict()
525+
526+
527+
def test_detect_from_dataframes_invalid_format():
528+
"""Test the ``detect_from_dataframes`` method with an invalid data format."""
529+
# Setup
530+
dict_data = [
531+
{
532+
'key1': i,
533+
'key2': f'string_{i}',
534+
'key3': 1.5,
535+
}
536+
for i in range(100)
537+
]
538+
data = {
539+
'table_1': pd.DataFrame({
540+
'dict_column': dict_data,
541+
'numerical': [1.2] * 100,
542+
}),
543+
'table_2': pd.DataFrame({
544+
'numerical': [1.5] * 10,
545+
'categorical': ['A'] * 10,
546+
}),
547+
}
548+
expected_error = re.escape(
549+
"Unable to detect metadata for table 'table_1' column 'dict_column' due to an "
550+
"invalid data format.\n TypeError: unhashable type: 'dict'"
551+
)
552+
553+
# Run / Assert
554+
with pytest.raises(InvalidMetadataError, match=expected_error):
555+
Metadata.detect_from_dataframes(data)

tests/unit/metadata/test_multi_table.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2499,7 +2499,7 @@ def test_detect_table_from_dataframe(self, single_table_mock, log_mock):
24992499
metadata.detect_table_from_dataframe('table', data)
25002500

25012501
# Assert
2502-
single_table_mock.return_value._detect_columns.assert_called_once_with(data)
2502+
single_table_mock.return_value._detect_columns.assert_called_once_with(data, 'table')
25032503
assert metadata.tables == {'table': single_table_mock.return_value}
25042504

25052505
expected_log_calls = call(

tests/unit/metadata/test_single_table.py

+26-2
Original file line numberDiff line numberDiff line change
@@ -1277,9 +1277,8 @@ def test__detect_columns_with_error(self, mock__get_datetime_format):
12771277

12781278
expected_error_message = re.escape(
12791279
"Unsupported data type for column 'complex_dtype' (kind: c)."
1280-
"The valid data types are: 'object', 'int', 'float', 'datetime', 'bool'."
1280+
" The valid data types are: 'object', 'int', 'float', 'datetime', 'bool'."
12811281
)
1282-
12831282
with pytest.raises(InvalidMetadataError, match=expected_error_message):
12841283
instance._detect_columns(non_supported_data)
12851284

@@ -1296,6 +1295,31 @@ def test__detect_columns_with_error(self, mock__get_datetime_format):
12961295
instance._determine_sdtype_for_objects.assert_called_once()
12971296
mock__get_datetime_format.assert_called_once()
12981297

1298+
def test__detect_columns_invalid_data_format(self):
1299+
"""Test the ``_detect_columns`` method with an invalid data format."""
1300+
# Setup
1301+
instance = SingleTableMetadata()
1302+
dict_data = [
1303+
{
1304+
'key1': i,
1305+
'key2': f'string_{i}',
1306+
'key3': np.random.random(), # random float
1307+
}
1308+
for i in range(100)
1309+
]
1310+
data = pd.DataFrame({
1311+
'dict_column': dict_data,
1312+
'numerical': [1.2] * 100,
1313+
})
1314+
expected_error_message = re.escape(
1315+
"Unable to detect metadata for column 'dict_column' due to an invalid data format."
1316+
"\n TypeError: unhashable type: 'dict'"
1317+
)
1318+
1319+
# Run / Assert
1320+
with pytest.raises(InvalidMetadataError, match=expected_error_message):
1321+
instance._detect_columns(data)
1322+
12991323
def test__detect_primary_key_missing_sdtypes(self):
13001324
"""The method should raise an error if not all sdtypes were detected."""
13011325
# Setup

0 commit comments

Comments
 (0)