import re import unittest from pathlib import Path ROOT = Path(__file__).resolve().parents[1] CALCULATORS_TS = ROOT / "hdyc-svelte" / "src" / "lib" / "data" / "calculators.ts" CONVERSION_RATE_UTIL = ROOT / "hdyc-svelte" / "src" / "lib" / "utils" / "conversionRate.ts" CATEGORY_PAGE = ROOT / "hdyc-svelte" / "src" / "routes" / "category" / "[category]" / "+page.svelte" CALCULATOR_COMPONENT = ROOT / "hdyc-svelte" / "src" / "lib" / "components" / "Calculator.svelte" TARGET_SLUG = "gauss-to-oersted" def _extract_calculator_block(slug: str) -> str: for line in CALCULATORS_TS.read_text(encoding="utf-8").splitlines(): if f'"slug": "{slug}"' in line: return line raise AssertionError(f"Could not find calculator definition for '{slug}'") class GaussToOerstedConversionRateRegressionTests(unittest.TestCase): def test_gauss_to_oersted_includes_factor_for_conversion_rate_and_tooltip(self) -> None: block = _extract_calculator_block(TARGET_SLUG) self.assertRegex( block, r'"factor":\s*[0-9.eE+-]+', "Missing factor on gauss-to-oersted prevents conversion rate text from rendering in both calculator footer and category tooltip.", ) def test_conversion_rate_is_wired_to_both_surfaces(self) -> None: util_text = CONVERSION_RATE_UTIL.read_text(encoding="utf-8") category_page_text = CATEGORY_PAGE.read_text(encoding="utf-8") calculator_component_text = CALCULATOR_COMPONENT.read_text(encoding="utf-8") self.assertIn("getConversionRateText", util_text) self.assertIn("conversionRateText = getConversionRateText(calc)", category_page_text) self.assertIn('role="tooltip"', category_page_text) self.assertIn("conversionRateText = getConversionRateText(config)", calculator_component_text) self.assertIn('', calculator_component_text) if __name__ == "__main__": unittest.main()