import pytest
import pickle
from etl.epc_clean.EpcClean import EpcClean
from pathlib import Path

# For local testing
if __file__ == "<input>":
    input_data_path = Path("./model_data/tests/test_data/EpcClean_inputs.obj")
else:
    current_file_path = Path(__file__)
    input_data_path = current_file_path.parent / 'test_data' / 'EpcClean_inputs.obj'


class TestEpcClean:

    @staticmethod
    def load_data(path):
        with open(path, "rb") as file:
            return pickle.load(file)

    @pytest.fixture(autouse=True)
    def setup_class(self):
        self.cleaner = EpcClean(self.load_data(input_data_path))

    def test_clean(self):
        self.cleaner.clean()
        assert len(self.cleaner.cleaned["roof-description"]) == len(self.cleaner.unique_vals["roof-description"])

    def test__init_empty_cleaned_obj(self):
        self.cleaner._init_empty_cleaned_obj()
        assert all([len(values) == 0 for values in self.cleaner.cleaned.values()])
