# -*- coding: utf-8 -*- """A job layer may spell its role map flat ('panel.design_number: X'); `_nest_dotted_parameters` folds it into the nested tree `param_names` walks, and the flat (later-layer) value beats a nested None placeholder.""" from vibe import knowledge def test_flat_keys_fold_into_the_nested_tree(): merged = {'parameters': {'panel.design_number': 'DESIGN_NO_PARAM', 'sheet.fc': 'FC_PARAM'}} knowledge._nest_dotted_parameters(merged) assert merged['parameters'] == {'panel': {'design_number': 'DESIGN_NO_PARAM'}, 'sheet': {'fc': 'FC_PARAM'}} assert knowledge.param_names(merged, 'panel.design_number') == ['DESIGN_NO_PARAM'] def test_flat_value_overwrites_a_nested_placeholder(): merged = {'parameters': {'panel': {'design_number': None, 'length': 'LENGTH_PARAM'}, 'panel.design_number': 'DESIGN_NO_PARAM'}} knowledge._nest_dotted_parameters(merged) assert merged['parameters']['panel'] == {'design_number': 'DESIGN_NO_PARAM', 'length': 'LENGTH_PARAM'} assert 'panel.design_number' not in merged['parameters'] def test_nested_only_tree_is_untouched(): merged = {'parameters': {'panel': {'design_number': 'D'}, 'not_applicable': ['x']}} before = {'panel': {'design_number': 'D'}, 'not_applicable': ['x']} knowledge._nest_dotted_parameters(merged) assert merged['parameters'] == before def test_no_parameters_or_odd_shapes_never_raise(): for merged in ({}, {'parameters': None}, {'parameters': 'x'}, {'parameters': {'panel': 'flat-string', 'panel.design_number': 'D'}}): knowledge._nest_dotted_parameters(merged) assert merged['parameters']['panel'] == {'design_number': 'D'}