def test_load_yaml_imports_modified(): config = {} rules_loader = FileRulesLoader(config) rule_path = os.path.join(empty_folder_test_path, 'rule.yaml') first_import_path = os.path.join(empty_folder_test_path, 'first.yaml') second_import_path = os.path.join(empty_folder_test_path, 'second.yaml') with mock.patch.object(rules_loader, 'get_yaml') as get_yaml: get_yaml.side_effect = [{ 'name': 'rule', 'import': first_import_path, }, { 'imported': 'first', }] rule_yaml = rules_loader.load_yaml(rule_path) assert rule_yaml == { 'name': 'rule', 'rule_file': rule_path, 'imported': 'first', } assert sorted(rules_loader.import_rules.keys()) == [ rule_path, ] assert rules_loader.import_rules[rule_path] == [first_import_path] # simulate the import changing with mock.patch.object(rules_loader, 'get_yaml') as get_yaml: get_yaml.side_effect = [{ 'name': 'rule', 'import': second_import_path, }, { 'imported': 'second', }] rule_yaml = rules_loader.load_yaml(rule_path) assert rule_yaml == { 'name': 'rule', 'rule_file': rule_path, 'imported': 'second', } assert sorted(rules_loader.import_rules.keys()) == [ rule_path, ] assert rules_loader.import_rules[rule_path] == [second_import_path] # simulate the import being removed with mock.patch.object(rules_loader, 'get_yaml') as get_yaml: get_yaml.side_effect = [ { 'name': 'rule', }, ] rule_yaml = rules_loader.load_yaml(rule_path) assert rule_yaml == { 'name': 'rule', 'rule_file': rule_path, } assert len(rules_loader.import_rules) == 0
def test_load_yaml_multiple_imports(): config = {} rules_loader = FileRulesLoader(config) hydrogen_path = os.path.join(loaders_test_cases_path, 'multiple_imports/hydrogen.yaml') oxygen_path = os.path.join(loaders_test_cases_path, 'multiple_imports/oxygen.yaml') water_path = os.path.join(loaders_test_cases_path, 'multiple_imports/water.yaml') # re-load the rule a couple times to ensure import_rules cache is updated correctly for i in range(3): water_yaml = rules_loader.load_yaml(water_path) assert water_yaml == { 'name': 'water', 'rule_file': water_path, 'symbol': 'O', } assert sorted(rules_loader.import_rules.keys()) == [ water_path, ] assert rules_loader.import_rules[water_path] == [ hydrogen_path, oxygen_path, ]
def test_load_yaml_recursive_import(): config = {} rules_loader = FileRulesLoader(config) trunk_path = os.path.join(loaders_test_cases_path, 'recursive_import/trunk.yaml') branch_path = os.path.join(loaders_test_cases_path, 'recursive_import/branch.yaml') leaf_path = os.path.join(loaders_test_cases_path, 'recursive_import/leaf.yaml') # re-load the rule a couple times to ensure import_rules cache is updated correctly for i in range(3): leaf_yaml = rules_loader.load_yaml(leaf_path) assert leaf_yaml == { 'name': 'leaf', 'rule_file': leaf_path, 'diameter': '5cm', } assert sorted(rules_loader.import_rules.keys()) == [ branch_path, leaf_path, ] assert rules_loader.import_rules[branch_path] == [ trunk_path, ] assert rules_loader.import_rules[leaf_path] == [ branch_path, ]