from __future__ import annotations from typing import Optional import pytest from datatypes.epc.domain.epc import Epc from datatypes.epc.domain.epc_property_data import EpcPropertyData from domain.property_baseline.performance import Performance from domain.property_baseline.rebaseliner import RebaselineNotImplemented, StubRebaseliner def _epc(*, sap_version: Optional[float]) -> EpcPropertyData: epc = object.__new__(EpcPropertyData) epc.sap_version = sap_version return epc def _lodged() -> Performance: return Performance( sap_score=72, epc_band=Epc.C, co2_emissions=1.8, primary_energy_intensity=180 ) def test_sap10_epc_is_not_rebaselined_so_effective_equals_lodged() -> None: # Arrange — a SAP 10.2 cert: no rebaselining trigger fires. epc = _epc(sap_version=10.2) lodged = _lodged() rebaseliner = StubRebaseliner() # Act effective, reason = rebaseliner.rebaseline(10, epc, lodged) # Assert — Effective Performance equals Lodged, reason "none". assert effective == lodged assert reason == "none" def test_pre_sap10_epc_raises_because_rebaselining_is_not_implemented() -> None: # Arrange — a cert lodged under a pre-SAP10 schema genuinely needs ML # rebaselining, which does not exist yet; the stub must not fabricate a # "none" answer for it. epc = _epc(sap_version=9.94) rebaseliner = StubRebaseliner() # Act / Assert with pytest.raises(RebaselineNotImplemented): rebaseliner.rebaseline(10, epc, _lodged())