From f10394910f2a07a8c4e4ad2f26fefb3e554ba27e Mon Sep 17 00:00:00 2001 From: Liang Wang Date: Sun, 16 Mar 2025 10:39:11 +0800 Subject: [PATCH] Fix Order Issue (#79) --- src/rule_parser.py | 14 +++++++-- test/test_rule_parser.py | 67 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 2 deletions(-) diff --git a/src/rule_parser.py b/src/rule_parser.py index 56851d1..f11331f 100644 --- a/src/rule_parser.py +++ b/src/rule_parser.py @@ -157,10 +157,20 @@ def parse(self): ) for playwright_config_ts_path in playwright_config_ts_paths: - validator = PlaywrightTestValidator( + playwright_validator = PlaywrightTestValidator( catalog, playwright_config_ts_path, severity ) - validators.append(validator) + inserted = False + for i, validator in enumerate(validators): + if ( + isinstance(validator, AzdValidator) + and validator.command == AzdCommand.UP + ): + validators.insert(i + 1, playwright_validator) + inserted = True + break + if not inserted: + validators.append(playwright_validator) else: continue diff --git a/test/test_rule_parser.py b/test/test_rule_parser.py index f3c1b8f..7c3631c 100644 --- a/test/test_rule_parser.py +++ b/test/test_rule_parser.py @@ -178,6 +178,73 @@ def test_parse_azd_validator(self, mock_file, mock_find_infra_yaml_path): self.assertEqual(azd_down_validator.command, AzdCommand.DOWN) self.assertEqual(azd_down_validator.severity, Severity.MODERATE) + @patch("utils.find_playwright_config_ts_path") + @patch("utils.find_infra_yaml_path") + @patch( + "builtins.open", + new_callable=mock_open, + read_data=json.dumps( + { + "azd up": { + "catalog": "Functional Requirements", + "validator": "AzdValidator", + "severity": "high", + }, + "azd down": { + "catalog": "Functional Requirements", + "validator": "AzdValidator", + "severity": "moderate", + }, + "playwright test": { + "catalog": "Functional Requirements", + "validator": "PlaywrightTestValidator", + "severity": "low", + }, + } + ), + ) + def test_parse_mixed_azd_playwright_validator( + self, mock_file, find_infra_yaml_path, find_playwright_config_ts_path + ): + find_infra_yaml_path.return_value = ["mocked/path/to/infra.yaml"] + find_playwright_config_ts_path.return_value = [ + "mocked/path/to/playwright.config.ts" + ] + args = argparse.Namespace( + validate_azd=True, + validate_playwright_test=True, + topics=None, + repo_path=".", + validate_paths=None, + expected_topics=None, + ) + parser = RuleParser("dummy_path", args) + validators = parser.parse() + + self.assertEqual(len(validators), 3) + + azd_up_validator = validators[0] + self.assertIsInstance(azd_up_validator, AzdValidator) + self.assertEqual(azd_up_validator.catalog, "Functional Requirements") + self.assertEqual(azd_up_validator.folderPath, "mocked/path/to/infra.yaml") + self.assertEqual(azd_up_validator.command, AzdCommand.UP) + self.assertEqual(azd_up_validator.severity, Severity.HIGH) + + playwright_test_validator = validators[1] + self.assertIsInstance(playwright_test_validator, PlaywrightTestValidator) + self.assertEqual(playwright_test_validator.catalog, "Functional Requirements") + self.assertEqual( + playwright_test_validator.folderPath, "mocked/path/to/playwright.config.ts" + ) + self.assertEqual(playwright_test_validator.severity, Severity.LOW) + + azd_down_validator = validators[2] + self.assertIsInstance(azd_down_validator, AzdValidator) + self.assertEqual(azd_down_validator.catalog, "Functional Requirements") + self.assertEqual(azd_down_validator.folderPath, "mocked/path/to/infra.yaml") + self.assertEqual(azd_down_validator.command, AzdCommand.DOWN) + self.assertEqual(azd_down_validator.severity, Severity.MODERATE) + @patch("utils.find_playwright_config_ts_path") @patch( "builtins.open",