import json import unittest from pathlib import Path REPO_ROOT = Path(__file__).resolve().parents[1] CRM_PACK = REPO_ROOT / "salesforce-crm-standard" def load_json(path: Path): with path.open(encoding="utf-8") as handle: return json.load(handle) def ui_action(name: str): for action in load_json(CRM_PACK / "actions" / "ui_actions.json"): if action.get("name") == name: return action raise AssertionError(f"{name} UI action missing") class AddProductsContractsTest(unittest.TestCase): def test_opportunity_layout_places_add_products_header_action(self): layout = load_json(CRM_PACK / "layouts" / "opportunity_page_layout.json") actions = {action["name"]: action for action in layout["headerActions"]} self.assertIn("AddProducts", actions) self.assertIn("createQuote", actions) self.assertLess( layout["headerActions"].index(actions["AddProducts"]), layout["headerActions"].index(actions["createQuote"]), ) add_products = actions["AddProducts"] self.assertEqual(add_products["label"], "Add Products") self.assertEqual(add_products["type"], "QuickAction") self.assertNotIn("targetObject", add_products) self.assertNotIn("config", add_products) self.assertEqual(ui_action(add_products["name"])["objectApiName"], layout["objectApiName"]) def test_add_products_ui_action_defines_related_list_target(self): action = ui_action("AddProducts") self.assertEqual(action["objectApiName"], "Opportunity") self.assertEqual(action["type"], "NavigateToRelatedList") self.assertEqual(action["targetObject"], "OpportunityLineItem") self.assertEqual(action["config"]["targetObject"], "OpportunityLineItem") self.assertEqual(action["config"]["lookupField"], "OpportunityId") self.assertEqual(action["config"]["visibilityCondition"], "record.Pricebook2Id != null") if __name__ == "__main__": unittest.main()