import pytest
from etl.epc_clean.epc_attributes.WindowAttributes import WindowAttributes
from etl.epc_clean.tests.test_data.test_window_attributes_cases import windows_cases


class TestWindowAttributes:

    def test_init(self):
        # Test initialization with a valid description
        valid_description = 'fully glazed, triple glazing'
        window_attr = WindowAttributes(valid_description)
        assert window_attr.description == valid_description.lower()

        # Test initialization with a description that contains none of the keywords
        with pytest.raises(ValueError):
            WindowAttributes('description without keywords')

    def test_empty_str(self):
        # Test initialization with an empty description
        assert WindowAttributes("").process() == {
            'has_glazing': False, 'glazing_coverage': None, 'glazing_type': None, 'no_data': True
        }

    @pytest.mark.parametrize(
        "case",
        windows_cases
    )
    def test_process(self, case):
        output = WindowAttributes(case['original_description']).process()
        expected_output = {key: case[key] for key in output.keys()}
        assert output == expected_output
