import pandas as pd import pytest from io import BytesIO from .....src.logic.consumer import handler from .....src.logic.consumer.enums import ColumnAlias class TestBuildXLSX: @pytest.fixture def dataframe(self): """Fixture to create a DataFrame and sheet metadata for testing.""" sheet = handler.ReportSheet( data=[ { ColumnAlias.PRO: "value1", ColumnAlias.LEGAL_NAME: "value2", ColumnAlias.IPI: "value3", } ], name="TestSheetTab", columns=[ handler.ReportColumn(alias=ColumnAlias.IPI, human_name="Composers IPI"), handler.ReportColumn(alias=ColumnAlias.PRO, human_name="Composers PRO"), ], ) buffer = handler._build_xlsx([sheet]) assert isinstance(buffer, BytesIO), "Expected a BytesIO object" buffer.seek(0) df_dict = pd.read_excel(buffer, sheet_name=None) return df_dict, sheet def test_single_sheet_created(self, dataframe): df_dict, sheet = dataframe assert list(df_dict.keys()) == [ sheet.name ], "Expected one sheet in the workbook" def test_row_count(self, dataframe): df_dict, _ = dataframe df = list(df_dict.values())[0] assert len(df) == 1, "Expected one data row" def test_column_headers(self, dataframe): # Columns should be sorted as defined in the ReportColumn and column C # should be None, as it is not in the ReportColumn list df_dict, _ = dataframe df = list(df_dict.values())[0] assert list(df.columns) == [ "Composers IPI", "Composers PRO", ], "Unexpected headers" def test_column_values(self, dataframe): # Columns should be sorted as defined in the ReportColumn and column C # should be None, as it is not in the ReportColumn list df_dict, _ = dataframe df = list(df_dict.values())[0] assert df.iloc[0, 0] == "value3" assert df.iloc[0, 1] == "value1" @pytest.mark.parametrize( "input_value, expected_output", [ (None, None), ("0", 0), ("-133.45", -133.45), ("123", 123), ("123.45", 123.45), ("abc", "abc"), ("123abc", "123abc"), ("", ""), ], ) def test_try_cast_number(input_value, expected_output): result = handler._try_cast_number(input_value) assert result == expected_output, f"Expected {expected_output}, got {result}"