)]}'
{"watcher_dashboard/test/unit/api_tests/test_client.py":[{"robot_id":"zuul","robot_run_id":"56a2a9f21d6f4ddea23f4a15b161880c","url":"https://zuul.teim.app/t/main/buildset/56a2a9f21d6f4ddea23f4a15b161880c","author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"15d8f5256c2869e14139a28221f55bd215d0b3aa","patch_set":1,"id":"99a0f80e_216f22e3","line":1,"updated":"2026-02-28 12:36:07.000000000","message":"Copyright header format inconsistency in test_client.py uses different multi-line format with \u0027All rights reserved\u0027 compared to test_watcher.py single-line format\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: The copyright header in test_client.py uses \u0027Copyright 2025, Red Hat, Inc.\\n# All rights reserved.\u0027 format while test_watcher.py uses \u0027Copyright (c) 2016 b\u003c\u003ecom\u0027 format. This inconsistency makes the codebase less uniform.\n\n**Suggestion**:\nConsider standardizing the copyright header format across all test files. The test_watcher.py format is more common in the project. Update test_client.py to match for consistency, or document when different formats are acceptable.","commit_id":"c0b5ccb2483467a5adb8a785572bf023597124c5"},{"robot_id":"zuul","robot_run_id":"56a2a9f21d6f4ddea23f4a15b161880c","url":"https://zuul.teim.app/t/main/buildset/56a2a9f21d6f4ddea23f4a15b161880c","author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"15d8f5256c2869e14139a28221f55bd215d0b3aa","patch_set":1,"id":"70a6135d_afcde8de","line":76,"updated":"2026-02-28 12:36:07.000000000","message":"Test class WatcherGetClientTests lacks docstring unlike WatcherClientFunctionTests which has one\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: Missing test class docstrings make it harder to understand what each test class is validating. Inconsistent documentation across test classes reduces maintainability.\n\n**Priority**: Next sprint\n**Why This Matters**: Well-documented tests are easier to maintain and understand. The project emphasizes good documentation practices, and class docstrings help explain the purpose and scope of test suites.\n\n**Recommendation**:\nAdd a descriptive docstring to WatcherGetClientTests matching the pattern of WatcherClientFunctionTests, explaining it tests common/client.py get_client() function directly.","commit_id":"c0b5ccb2483467a5adb8a785572bf023597124c5"},{"robot_id":"zuul","robot_run_id":"c68a776a68344814b73b41c553af9059","url":"https://zuul.teim.app/t/main/buildset/c68a776a68344814b73b41c553af9059","author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"305be51ca58870f0d60b47c75de2bb2a4cf378b9","patch_set":2,"id":"b103af59_224cb25f","line":32,"updated":"2026-03-30 16:18:36.000000000","message":"New mock.patch() calls in test_client.py do not use autospec\u003dTrue. While the existing tests in the same file also omit autospec, this is a recommended OpenStack practice (H210).\n\n**Severity**: SUGGESTION | **Confidence**: 0.7\n\n**Benefit**: Using autospec\u003dTrue ensures mock objects match the real API signature, catching interface mismatches at test time rather than runtime. This is particularly useful when mocking functions like url_for or get_client where parameter changes could go undetected.\n\n**Recommendation**:\nAdd autospec\u003dTrue to the mock.patch() calls where applicable, particularly for \u0027watcher_dashboard.api.watcher.base.url_for\u0027 and \u0027watcher_dashboard.common.client.wc.get_client\u0027. Note: autospec\u003dTrue may not work on all patch targets (e.g. module-level references), so apply it judiciously.","commit_id":"99c2242ccda249964a3fe56346a20473ddb84e49"},{"robot_id":"zuul","robot_run_id":"c68a776a68344814b73b41c553af9059","url":"https://zuul.teim.app/t/main/buildset/c68a776a68344814b73b41c553af9059","author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"305be51ca58870f0d60b47c75de2bb2a4cf378b9","patch_set":2,"id":"7174eb06_82aaa91f","line":153,"updated":"2026-03-30 16:18:36.000000000","message":"test_module_constants_are_set only checks assertIsNone on each constant. Since RECOVERABLE is a tuple extending horizon\u0027s RECOVERABLE, a regression in its composition could silently break the module without this test catching it.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: If the RECOVERABLE tuple composition changes (e.g. someone accidentally reassigns it instead of extending), this smoke test would still pass. The test provides false confidence that the exception module works correctly.\n\n**Suggestion**:\nAdd at least one value check, for example asserting that watcher_exc.NOT_FOUND is horizon.exceptions.NOT_FOUND, or that watcherclient.ClientException is included in the RECOVERABLE tuple.","commit_id":"99c2242ccda249964a3fe56346a20473ddb84e49"},{"robot_id":"zuul","robot_run_id":"7375cfe419d04309a4e038325349e4d8","url":"https://zuul.teim.app/t/main/buildset/7375cfe419d04309a4e038325349e4d8","author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"c2a398379ffe7d0dd0bb54af97d44436964ece52","patch_set":3,"id":"ba1d4b22_c5c497f6","line":20,"updated":"2026-04-04 02:21:43.000000000","message":"test_client.py WatcherClientFunctionTests tests mock base.url_for to return a URL but do not verify that insert_watcher_policy_file was actually called during watcherclient()\n\n**Severity**: SUGGESTION | **Confidence**: 0.7\n\n**Benefit**: Verifying the policy file insertion call would confirm that this important initialization step is not silently skipped\n\n**Recommendation**:\nCapture the insert_watcher_policy_file mock in the with-statement and add assert_called_once() to verify the policy file registration occurs","commit_id":"1dd5fbf425bc742fb11a1c948cb6cbd0e0554340"},{"robot_id":"zuul","robot_run_id":"7375cfe419d04309a4e038325349e4d8","url":"https://zuul.teim.app/t/main/buildset/7375cfe419d04309a4e038325349e4d8","author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"c2a398379ffe7d0dd0bb54af97d44436964ece52","patch_set":3,"id":"5e0cb0ab_76f2580c","line":158,"updated":"2026-04-04 02:21:43.000000000","message":"WatcherExceptionsModuleTests.test_module_constants_are_set uses assertIsNotNone which only verifies the constants are not None, but does not validate their actual values or types\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: Stronger assertions would catch accidental assignment of unexpected values to NOT_FOUND, RECOVERABLE, or UNAUTHORIZED\n\n**Recommendation**:\nConsider adding isinstance checks (e.g., assertIsInstance for tuples) or checking against expected values from openstack_dashboard.exceptions to make the smoke test more robust","commit_id":"1dd5fbf425bc742fb11a1c948cb6cbd0e0554340"}],"watcher_dashboard/test/unit/api_tests/test_watcher.py":[{"robot_id":"zuul","robot_run_id":"56a2a9f21d6f4ddea23f4a15b161880c","url":"https://zuul.teim.app/t/main/buildset/56a2a9f21d6f4ddea23f4a15b161880c","author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"15d8f5256c2869e14139a28221f55bd215d0b3aa","patch_set":1,"id":"87939199_0fe62a76","line":537,"updated":"2026-02-28 12:36:07.000000000","message":"Six id property tests in test_watcher.py are nearly identical and could potentially be parametrized to reduce code duplication\n\n**Severity**: SUGGESTION | **Confidence**: 0.7\n\n**Benefit**: The six id property tests (audit, audit_template, action_plan, action, goal, strategy) are nearly identical and could be parametrized to reduce duplication. This would make the test suite more maintainable.\n\n**Recommendation**:\nIf the project supports pytest, consider using @pytest.mark.parametrize. If using unittest only, the current explicit tests are acceptable for clarity. Consider adding a comment noting these tests follow the same pattern.","commit_id":"c0b5ccb2483467a5adb8a785572bf023597124c5"},{"robot_id":"zuul","robot_run_id":"c68a776a68344814b73b41c553af9059","url":"https://zuul.teim.app/t/main/buildset/c68a776a68344814b73b41c553af9059","author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"305be51ca58870f0d60b47c75de2bb2a4cf378b9","patch_set":2,"id":"2ae37bc8_9186b135","line":601,"updated":"2026-03-30 16:18:36.000000000","message":"test_efficacy_indicator_init_missing_keys constructs EfficacyIndicator with an empty dict and checks that all attributes are None. This tests the default path but does not verify behavior when indicator.get() returns a falsy-but-non-None value such as 0 or empty string.\n\n**Severity**: WARNING | **Confidence**: 0.7\n\n**Impact**: If someone changes indicator.get(\u0027value\u0027, None) to indicator.get(\u0027value\u0027) and the value key exists with 0 or \u0027\u0027, the current test would still pass because assertIsNone would fail for 0 or \u0027\u0027, potentially masking a regression in the default-handling logic.\n\n**Suggestion**:\nConsider adding a test with a dict containing falsy-but-present values (e.g. {\u0027value\u0027: 0, \u0027name\u0027: \u0027\u0027, \u0027description\u0027: \u0027\u0027, \u0027unit\u0027: \u0027\u0027}) to ensure the constructor correctly stores them rather than falling back to None.","commit_id":"99c2242ccda249964a3fe56346a20473ddb84e49"},{"robot_id":"zuul","robot_run_id":"7375cfe419d04309a4e038325349e4d8","url":"https://zuul.teim.app/t/main/buildset/7375cfe419d04309a4e038325349e4d8","author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"c2a398379ffe7d0dd0bb54af97d44436964ece52","patch_set":3,"id":"cfe6dda5_d1a5d44c","line":608,"updated":"2026-04-04 02:21:43.000000000","message":"insert_watcher_policy_file tests mock \u0027watcher_dashboard.api.watcher.config\u0027 without autospec\u003dTrue, inconsistent with all other mocks in the patch that use autospec\u003dTrue\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Missing autospec could allow tests to pass that call non-existent methods on the config mock, hiding integration issues if the config module interface changes\n\n**Suggestion**:\nAdd autospec\u003dTrue to the mock.patch(\u0027watcher_dashboard.api.watcher.config\u0027) calls to match the H210-recommended pattern used consistently elsewhere in this patch","commit_id":"1dd5fbf425bc742fb11a1c948cb6cbd0e0554340"}],"watcher_dashboard/test/unit/api_tests/test_watcher_service.py":[{"robot_id":"zuul","robot_run_id":"7375cfe419d04309a4e038325349e4d8","url":"https://zuul.teim.app/t/main/buildset/7375cfe419d04309a4e038325349e4d8","author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"c2a398379ffe7d0dd0bb54af97d44436964ece52","patch_set":3,"id":"459cf02a_6bdf9f24","line":26,"updated":"2026-04-04 02:21:43.000000000","message":"test_watcher_service.py imports json at module level but only uses it in the StrategyParametersServiceTests class. This is minor but slightly unusual for a test module.\n\n**Severity**: WARNING | **Confidence**: 0.7\n\n**Impact**: No functional impact, but an unused-at-module-scope import could confuse readers about whether JSON is used broadly in the test module\n\n**Suggestion**:\nConsider leaving as-is since ruff will flag if it becomes truly unused, and the import is at the top-level following convention. Alternatively, a comment noting it is used only in StrategyParametersServiceTests could help.","commit_id":"1dd5fbf425bc742fb11a1c948cb6cbd0e0554340"},{"robot_id":"zuul","robot_run_id":"7375cfe419d04309a4e038325349e4d8","url":"https://zuul.teim.app/t/main/buildset/7375cfe419d04309a4e038325349e4d8","author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"c2a398379ffe7d0dd0bb54af97d44436964ece52","patch_set":3,"id":"bf9872c3_899dd97b","line":379,"updated":"2026-04-04 02:21:43.000000000","message":"The test_watcher_service.py file is 494 lines covering all service functions but does not include any edge-case tests for get_strategy_parameters_for_template beyond the four covered scenarios\n\n**Severity**: SUGGESTION | **Confidence**: 0.7\n\n**Benefit**: Additional edge cases (e.g., malformed JSON in parameters_spec, missing keys in strategy object) would further harden the service layer tests\n\n**Recommendation**:\nConsider adding a test for json.loads failure in parameters_spec (e.g., a non-JSON string value) to ensure the service function handles parse errors gracefully","commit_id":"1dd5fbf425bc742fb11a1c948cb6cbd0e0554340"}],"watcher_dashboard/test/unit/test_errors.py":[{"robot_id":"zuul","robot_run_id":"56a2a9f21d6f4ddea23f4a15b161880c","url":"https://zuul.teim.app/t/main/buildset/56a2a9f21d6f4ddea23f4a15b161880c","author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"15d8f5256c2869e14139a28221f55bd215d0b3aa","patch_set":1,"id":"d7f0a58c_9af6b26b","line":1,"updated":"2026-02-28 12:36:07.000000000","message":"Apache License header in test_errors.py uses non-standard format with incorrect indentation (#    Licensed instead of # Licensed) inconsistent with project conventions\n\n**Severity**: CRITICAL | **Confidence**: 0.9\n\n**Risk**: License header inconsistency could cause legal compliance issues and fails project style checks. The project requires a specific license header format.\n\n**Priority**: Before merge\n**Why This Matters**: Proper Apache 2.0 license headers are mandatory for every Python file in the project. Using non-standard indentation violates the project\u0027s coding standards and could create legal ambiguity.\n\n**Recommendation**:\nReplace the license header with standard format using \u0027# Licensed\u0027 (not \u0027#    Licensed\u0027) to match project conventions in test_watcher.py and other files.","commit_id":"c0b5ccb2483467a5adb8a785572bf023597124c5"},{"robot_id":"zuul","robot_run_id":"56a2a9f21d6f4ddea23f4a15b161880c","url":"https://zuul.teim.app/t/main/buildset/56a2a9f21d6f4ddea23f4a15b161880c","author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"15d8f5256c2869e14139a28221f55bd215d0b3aa","patch_set":1,"id":"574bab4c_5ed75ce0","line":13,"updated":"2026-02-28 12:36:07.000000000","message":"New test module test_errors.py lacks module docstring after license header, violating H403/H404 documentation standards\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: Missing module docstrings reduce code documentation quality and violate OpenStack hacking rules H403/H404. This makes the test module\u0027s purpose less clear to future maintainers.\n\n**Priority**: Next sprint\n**Why This Matters**: The project\u0027s code conventions require every module to have a docstring immediately after the license header. This is part of the standard file structure defined in the project\u0027s contributor documentation.\n\n**Recommendation**:\nAdd a module docstring after the license header: \u0027\"\"\"Tests for utils/errors.py handle_errors decorator.\"\"\"\u0027","commit_id":"c0b5ccb2483467a5adb8a785572bf023597124c5"},{"robot_id":"zuul","robot_run_id":"56a2a9f21d6f4ddea23f4a15b161880c","url":"https://zuul.teim.app/t/main/buildset/56a2a9f21d6f4ddea23f4a15b161880c","author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"15d8f5256c2869e14139a28221f55bd215d0b3aa","patch_set":1,"id":"6190e617_98f121c4","line":20,"updated":"2026-02-28 12:36:07.000000000","message":"Test method names in test_errors.py are generally good but could follow even more explicit naming patterns for clarity\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: While current test names are reasonably descriptive, some could more clearly indicate the expected outcome. This would improve test documentation and make failures easier to diagnose.\n\n**Recommendation**:\nConsider renaming test_error_handle_false_skips_exception_handling to test_error_handle_false_propagates_exceptions for better clarity on expected behavior.","commit_id":"c0b5ccb2483467a5adb8a785572bf023597124c5"},{"robot_id":"zuul","robot_run_id":"56a2a9f21d6f4ddea23f4a15b161880c","url":"https://zuul.teim.app/t/main/buildset/56a2a9f21d6f4ddea23f4a15b161880c","author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"15d8f5256c2869e14139a28221f55bd215d0b3aa","patch_set":1,"id":"f6643619_1a0bcc7f","line":64,"updated":"2026-02-28 12:36:07.000000000","message":"Missing autospec\u003dTrue in all @mock.patch decorators violates project coding convention H210 which states \u0027@mock.patch uses autospec\u003dTrue in all new test code\u0027\n\n**Severity**: CRITICAL | **Confidence**: 0.9\n\n**Risk**: Tests may pass with incorrect call signatures, hiding refactoring mistakes until runtime. Without autospec, mocks accept any method calls, allowing tests to pass even when the real code would fail with TypeError.\n\n**Priority**: Before merge\n**Why This Matters**: The project\u0027s code conventions document explicitly states \u0027@mock.patch uses autospec\u003dTrue in all new test code\u0027. This is a documented requirement for the project, and violating it undermines the value of the test suite by allowing bugs to go undetected during refactoring.\n\n**Recommendation**:\nAdd autospec\u003dTrue to all mock.patch() calls: test_errors.py lines 64, 83; test_client.py lines 33, 37, 40, 59, 62, 66, 86, 89, 91, 120, 123, 125; test_watcher.py lines 161, 180. The stub_watcherclient() helper is exempt per project conventions.","commit_id":"c0b5ccb2483467a5adb8a785572bf023597124c5"},{"robot_id":"zuul","robot_run_id":"c68a776a68344814b73b41c553af9059","url":"https://zuul.teim.app/t/main/buildset/c68a776a68344814b73b41c553af9059","author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"305be51ca58870f0d60b47c75de2bb2a4cf378b9","patch_set":2,"id":"60095d9b_6cf9f97f","line":19,"updated":"2026-03-30 16:18:36.000000000","message":"The test_errors.py file uses a single HandleErrorsDecoratorTests class name for all five tests, while test_client.py uses three separate class names for different test groupings. This is a minor stylistic difference.\n\n**Severity**: SUGGESTION | **Confidence**: 0.6\n\n**Benefit**: More granular test class names improve test discovery, failure report readability, and make it easier to run specific subsets of tests.\n\n**Recommendation**:\nThis is a minor stylistic observation. The current class name is adequate for a single-concern test file. No action required.","commit_id":"99c2242ccda249964a3fe56346a20473ddb84e49"},{"robot_id":"zuul","robot_run_id":"7375cfe419d04309a4e038325349e4d8","url":"https://zuul.teim.app/t/main/buildset/7375cfe419d04309a4e038325349e4d8","author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"c2a398379ffe7d0dd0bb54af97d44436964ece52","patch_set":3,"id":"fdf54181_d3f573da","line":22,"updated":"2026-04-04 02:21:43.000000000","message":"test_errors.py uses helpers.TestCase as the base class while test_watcher_service.py and other tests use test.APITestCase. While this is intentional (test_errors.py tests utility code that does not need API fixtures), the aliasing pattern differs across new test files in this patch.\n\n**Severity**: WARNING | **Confidence**: 0.7\n\n**Impact**: Minor inconsistency in test base class naming convention across the patch. helpers.TestCase vs test.TestCase vs test.APITestCase. All work correctly but the different reference styles could confuse new contributors.\n\n**Suggestion**:\nConsider using a consistent import alias style. The existing test_watcher.py uses \u0027test\u0027 from helpers, while test_errors.py uses \u0027helpers\u0027 directly. Pick one convention for the project.","commit_id":"1dd5fbf425bc742fb11a1c948cb6cbd0e0554340"},{"robot_id":"zuul","robot_run_id":"7375cfe419d04309a4e038325349e4d8","url":"https://zuul.teim.app/t/main/buildset/7375cfe419d04309a4e038325349e4d8","author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"c2a398379ffe7d0dd0bb54af97d44436964ece52","patch_set":3,"id":"4ac4f82f_99160e5a","line":23,"updated":"2026-04-04 02:21:43.000000000","message":"test_errors.py test_raises_runtime_error_when_no_request_arg defines the decorated function inside the assertRaises context manager but never calls it, relying solely on the decorator\u0027s constructor-time RuntimeError\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: Calling the decorated function inside the assertRaises block would also verify that the RuntimeError propagates correctly through the decorator wrapper, not just at decoration time\n\n**Recommendation**:\nStore the decorated function reference and call it inside the assertRaises block to verify both decoration-time and call-time behavior, or add a comment clarifying the RuntimeError is raised at decoration time per the inspect logic","commit_id":"1dd5fbf425bc742fb11a1c948cb6cbd0e0554340"}]}
