from app.discovery.attributes import is_derived_duplicate, merge_observation_attributes def test_merge_keeps_product_values_and_drops_alias_duplicates() -> None: items = merge_observation_attributes( { "CPU": "Apple M5 - 10 Core CPU", "Display": '14.2" (3024x1964)', "RAM": "16GB LPDDR5X", "Speicher": "512GB SSD", "Grafik": "", }, {"ram_gb": 16, "storage_gb": 512}, ) by_name = {item["raw_name"]: item for item in items} assert "ram_gb" not in by_name assert "storage_gb" not in by_name assert by_name["CPU"]["raw_value"] == "Apple M5 - 10 Core CPU" assert by_name["Display"]["raw_value"] == '14.2" (3024x1964)' assert by_name["RAM"]["normalized_value"] == 16 assert by_name["RAM"]["attribute_key"] == "ram_gb" assert by_name["Speicher"]["normalized_value"] == 512 assert "Grafik" not in by_name def test_derived_duplicate_is_detected() -> None: assert is_derived_duplicate("ram_gb", {"ram", "cpu"}) assert not is_derived_duplicate("cpu", {"ram", "cpu"})