diff --git a/tests/integration/test_mode_reset.py b/tests/integration/test_mode_reset.py index 53b5d0da..92505516 100644 --- a/tests/integration/test_mode_reset.py +++ b/tests/integration/test_mode_reset.py @@ -1,6 +1,5 @@ import os import unittest -import yaml # Base directory for roles (adjust if needed) BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '../../roles')) @@ -8,22 +7,20 @@ BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '../../roles' class TestModeResetIntegration(unittest.TestCase): """ Integration test to verify that when 'mode_reset' is used in any task file, - the role provides a reset.yml and includes it correctly in main.yml, - and that the include_tasks for reset.yml with the mode_reset condition appears only once. + the role provides a *_reset.yml (or reset.yml) and includes it correctly in main.yml, + and that the include_tasks for that file with the mode_reset condition appears only once. """ def test_mode_reset_tasks(self): - # Iterate through each role directory for role_name in os.listdir(BASE_DIR): with self.subTest(role=role_name): role_path = os.path.join(BASE_DIR, role_name) tasks_dir = os.path.join(role_path, 'tasks') - # Only consider directories with a tasks folder if not os.path.isdir(tasks_dir): self.skipTest(f"Role '{role_name}' has no tasks directory.") - # Simplified detection: check raw file content for 'mode_reset' + # Look for 'mode_reset' in task files mode_reset_found = False for root, _, files in os.walk(tasks_dir): for fname in files: @@ -31,25 +28,26 @@ class TestModeResetIntegration(unittest.TestCase): continue file_path = os.path.join(root, fname) with open(file_path, 'r', encoding='utf-8') as f: - file_content = f.read() - if 'mode_reset' in file_content: - mode_reset_found = True - break + if 'mode_reset' in f.read(): + mode_reset_found = True + break if mode_reset_found: break - # If no mode_reset usage, skip this role if not mode_reset_found: self.skipTest(f"Role '{role_name}': no mode_reset usage detected.") - # 1) Check reset.yml exists - reset_yml = os.path.join(tasks_dir, 'reset.yml') + # Check *_reset.yml exists + reset_files = [ + fname for fname in os.listdir(tasks_dir) + if fname.endswith('_reset.yml') or fname == 'reset.yml' + ] self.assertTrue( - os.path.isfile(reset_yml), - f"Role '{role_name}': 'mode_reset' used but tasks/reset.yml is missing." + reset_files, + f"Role '{role_name}': 'mode_reset' used but no *_reset.yml or reset.yml found in tasks/." ) - # 2) Check inclusion in main.yml + # Check main.yml exists main_yml = os.path.join(tasks_dir, 'main.yml') self.assertTrue( os.path.isfile(main_yml), @@ -59,10 +57,22 @@ class TestModeResetIntegration(unittest.TestCase): with open(main_yml, 'r', encoding='utf-8') as f: content = f.read() - include_line = 'include_tasks: reset.yml' + # Match the actual reset file name used in include_tasks + found_include = None + for reset_file in reset_files: + if f'include_tasks: {reset_file}' in content: + found_include = reset_file + break + + self.assertIsNotNone( + found_include, + f"Role '{role_name}': tasks/main.yml must include one of {reset_files} with 'include_tasks'." + ) + + # Check the inclusion has the correct when condition + include_line = f'include_tasks: {found_include}' when_line = 'when: mode_reset | bool' - # Ensure the include and when lines are present self.assertIn( include_line, content, @@ -73,17 +83,13 @@ class TestModeResetIntegration(unittest.TestCase): content, f"Role '{role_name}': tasks/main.yml missing '{when_line}'." ) - - # 3) Ensure the reset include with mode_reset appears only once - include_count = content.count(include_line) - when_count = content.count(when_line) self.assertEqual( - include_count, 1, - f"Role '{role_name}': 'include_tasks: reset.yml' must appear exactly once, found {include_count}." + content.count(include_line), 1, + f"Role '{role_name}': '{include_line}' must appear exactly once." ) self.assertEqual( - when_count, 1, - f"Role '{role_name}': 'when: mode_reset | bool' must appear exactly once, found {when_count}." + content.count(when_line), 1, + f"Role '{role_name}': '{when_line}' must appear exactly once." ) if __name__ == '__main__':