from __future__ import annotations from copy import deepcopy import pytest from cognitive_agent.application.mode_creation_seat_policy import ( ModeCreationSeatPolicyError, creation_seat_scopes, project_seed_operations, ) @pytest.mark.parametrize(("text", "expected"), [ ("构建一个阅读模式", {"passenger"}), ("构建一个座椅动态模式", {"passenger"}), ("构建一个主驾阅读模式", {"driver"}), ("为驾驶员构建一个舒适模式", {"driver"}), ("构建一个副驾阅读模式", {"passenger"}), ("构建一个副驾驶座椅舒适模式", {"passenger"}), ("构建一个副驾驶席阅读模式", {"passenger"}), ("为副驾驶位构建阅读模式", {"passenger"}), ("构建一个主副驾阅读模式", {"driver", "passenger"}), ("构建一个双座舒适模式", {"driver", "passenger"}), ("构建一个前排两座舒适模式", {"driver", "passenger"}), ("构建一个两个座椅阅读模式", {"driver", "passenger"}), ("构建一个两张座椅阅读模式", {"driver", "passenger"}), ("构建一个两座椅阅读模式", {"driver", "passenger"}), ("构建一个主驾空调舒适模式", {"passenger"}), ("构建一个模式,主驾温度26度", {"passenger"}), ("构建一个副驾座椅舒适模式,主驾空调26度", {"passenger"}), ("构建一个主驾舒适模式,副驾空调26度", {"driver"}), ("构建一个阅读模式,不要动主驾", {"passenger"}), ("构建一个主驾阅读模式,副驾不要动", {"driver"}), ("构建一个模式,只联动副驾,不要联动主驾", {"passenger"}), ("构建一个后排座椅舒适模式", {"unsupported"}), ("构建一个未知座位模式", {"unsupported"}), ("构建一个任意座位模式", {"unsupported"}), ]) def test_creation_seat_selection(text, expected): assert creation_seat_scopes(text) == expected def test_seed_projection_is_non_mutating_and_does_not_borrow_capabilities(): seed = [ {"domain": "seat", "capability": "seat.set_driver_ventilation_native", "target_scope": "driver", "parameters": {"level": 2}}, {"domain": "seat", "capability": "seat.set_backrest_recline", "target_scope": "passenger", "parameters": {"position_pct": 45}}, {"domain": "climate", "capability": "climate.set_temperature", "target_scope": "passenger", "parameters": {"temperature_c": 24}}, ] original = deepcopy(seed) projected = project_seed_operations(seed, frozenset({"driver"})) assert projected == [seed[0], seed[2]] projected[0]["parameters"]["level"] = 1 assert seed == original with pytest.raises(ModeCreationSeatPolicyError): project_seed_operations(seed[1:], frozenset({"driver"}))