pytest-csv-params/tests/test_clean_headers.py

77 lines
2.1 KiB
Python

"""
Test cleaning the headers
"""
from typing import List, Optional, Type
import pytest
from _ptcsvp.parametrize import clean_headers
from pytest_csv_params.exception import CsvHeaderNameInvalid
from pytest_csv_params.types import HeaderRenames
@pytest.mark.parametrize(
["current_headers", "replacing", "expect_exception", "expect_message", "expect_result"],
[
(
["alpha 3", "_beta_5", "Ga Mm A"],
None,
None,
None,
["alpha_3", "_beta_5", "Ga_Mm_A"],
),
(
["abcd" * 300, "_be:ta_ :23", "Ra -/2"],
None,
CsvHeaderNameInvalid,
f"'{'abcd' * 300}' is not a valid variable name",
None,
),
(
["next_var", "_be:ta_ :23", "Ra -/2"],
None,
None,
None,
["next_var", "_be_ta___23", "Ra___2"],
),
(
["next_var", "_be:ta_ :23", "Ra -/2", "Ra___2"],
None,
CsvHeaderNameInvalid,
"Header names are not unique",
None,
),
(
["next_var", "_be:ta_ :23", "Ra -/2"],
{"Ra -/2": "ra", "not here": "not_here"},
None,
None,
["next_var", "_be_ta___23", "ra"],
),
(
["next", "_be:ta_ :23", "Ra -/2"],
None,
CsvHeaderNameInvalid,
f"'next' is not a valid variable name",
None,
),
],
)
def test_header_cleaning(
current_headers: List[str],
replacing: HeaderRenames,
expect_exception: Optional[Type[ValueError]],
expect_message: Optional[str],
expect_result: List[str],
) -> None:
"""
Test Header Cleaning
"""
if expect_exception is not None:
with pytest.raises(expect_exception) as raised_error:
clean_headers(current_headers, replacing)
assert raised_error.value.args[0] == expect_message
else:
result = clean_headers(current_headers, replacing)
assert result == expect_result