from pathlib import Path import importlib.util import unittest ROOT = Path(__file__).resolve().parents[1] SCRIPT_PATH = ROOT / "scripts" / "lab_007_grid_power_packet.py" DOC_PATH = ROOT / "docs" / "LAB_007_GRID_POWER_REQUEST.md" def load_module(path: Path, name: str): assert path.exists(), f"missing {path.relative_to(ROOT)}" spec = importlib.util.spec_from_file_location(name, path) assert spec and spec.loader module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) return module class TestLab007GridPowerPacket(unittest.TestCase): def test_packet_marks_missing_site_fields_and_uses_eversource_as_primary(self): mod = load_module(SCRIPT_PATH, "lab_007_grid_power_packet") packet = mod.build_packet({}) self.assertEqual(packet["primary_utility"]["name"], "Eversource") self.assertIn("Lempster", packet["territory_evidence"]) self.assertFalse(packet["ready_to_contact"]) self.assertIn("site_address", packet["missing_fields"]) self.assertIn("pole_distance_feet", packet["missing_fields"]) self.assertIn("terrain_description", packet["missing_fields"]) def test_packet_with_site_details_builds_contact_ready_email_and_call_checklist(self): mod = load_module(SCRIPT_PATH, "lab_007_grid_power_packet") packet = mod.build_packet( { "site_address": "123 Example Rd, Lempster, NH", "pole_distance_feet": 280, "terrain_description": "mixed woods, uphill grade, likely overhead run", "service_size": "200A residential service", } ) self.assertTrue(packet["ready_to_contact"]) self.assertEqual(packet["missing_fields"], []) self.assertIn("123 Example Rd", packet["email_body"]) self.assertIn("280 feet", packet["email_body"]) self.assertIn("meter base", packet["email_body"]) self.assertIn("per-kWh rate", packet["estimate_request_checklist"]) self.assertIn("800-362-7764", packet["primary_utility"]["phone"]) self.assertIn("nhnewservice@eversource.com", packet["primary_utility"]["email"]) def test_repo_contains_grounded_request_doc(self): self.assertTrue(DOC_PATH.exists(), "missing committed LAB-007 request doc") text = DOC_PATH.read_text(encoding="utf-8") for snippet in ( "# LAB-007 — Grid Power Hookup Estimate Request Packet", "Eversource", "800-362-7764", "nhnewservice@eversource.com", "No formal estimate has been received yet.", "pole/transformer", "monthly base charge", "per-kWh rate", ): self.assertIn(snippet, text) if __name__ == "__main__": unittest.main()