Skip to content

Commit 70150ef

Browse files
authored
Conflicting requirements verification (#163)
- verifying the conflicting requirements to prevent false positives.
1 parent 87327da commit 70150ef

3 files changed

Lines changed: 54 additions & 21 deletions

File tree

codeplain_REST_api.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,7 @@ def fix_conformance_tests_issue(
368368
implementation_fix_count,
369369
conformance_tests_folder_name,
370370
current_testing_frid_high_level_implementation_plan: Optional[str],
371+
conflicting_requirements_count: int,
371372
run_state: RunState,
372373
):
373374
endpoint_url = f"{self.api_url}/fix_conformance_tests_issue"
@@ -389,6 +390,7 @@ def fix_conformance_tests_issue(
389390
"implementation_fix_count": implementation_fix_count,
390391
"conformance_tests_folder_name": conformance_tests_folder_name,
391392
"current_testing_frid_high_level_implementation_plan": current_testing_frid_high_level_implementation_plan,
393+
"conflicting_requirements_count": conflicting_requirements_count,
392394
}
393395

394396
if acceptance_tests is not None:

render_machine/actions/fix_conformance_test.py

Lines changed: 46 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ class FixConformanceTest(BaseAction):
1515
IMPLEMENTATION_CODE_NOT_UPDATED = "implementation_code_not_updated"
1616
IMPLEMENTATION_CODE_UPDATED = "implementation_code_updated"
1717

18+
ISSUE_REASON_CODE_CONFORMANCE_TESTS = 0
19+
ISSUE_REASON_CODE_IMPLEMENTATION_CODE = 1
20+
ISSUE_REASON_CODE_CONFLICTING_REQUIREMENTS = 2
21+
ISSUE_REASON_CODE_CONFLICTING_ACCEPTANCE_TESTS = 3
22+
1823
def execute(self, render_context: RenderContext, previous_action_payload: Any | None):
1924
console.info(
2025
f"Fixing conformance test for functionality {render_context.conformance_tests_running_context.current_testing_frid} in module {render_context.conformance_tests_running_context.current_testing_module_name}."
@@ -53,6 +58,15 @@ def execute(self, render_context: RenderContext, previous_action_payload: Any |
5358
render_context.build_folder, render_context.plain_source_tree, render_context.frid_context.frid
5459
)
5560

61+
conflicting_module_name = render_context.conformance_tests_running_context.conflicting_module_name
62+
conflicting_frid = render_context.conformance_tests_running_context.conflicting_frid
63+
current_testing_module_name = render_context.conformance_tests_running_context.current_testing_module_name
64+
current_testing_frid = render_context.conformance_tests_running_context.current_testing_frid
65+
66+
# Reset the conflicting requirement count if the current testing functionality is not the same as the previously conflicting functionality
67+
if conflicting_module_name != current_testing_module_name or conflicting_frid != current_testing_frid:
68+
render_context.conformance_tests_running_context.conflicting_requirement_count = 0
69+
5670
if render_context.verbose:
5771
tmp_resources_list = []
5872
plain_spec.collect_linked_resources(
@@ -78,28 +92,40 @@ def execute(self, render_context: RenderContext, previous_action_payload: Any |
7892
style=console.INPUT_STYLE,
7993
)
8094

81-
[conformance_tests_fixed, response_files] = render_context.codeplain_api.fix_conformance_tests_issue(
82-
render_context.frid_context.frid,
83-
render_context.conformance_tests_running_context.current_testing_frid,
84-
render_context.plain_source_tree,
85-
render_context.frid_context.linked_resources,
86-
existing_files_content,
87-
memory_files_content,
88-
render_context.module_name,
89-
render_context.conformance_tests_running_context.current_testing_module_name,
90-
render_context.get_required_modules_functionalities(),
91-
previous_frid_code_diff,
92-
existing_conformance_test_files_content,
93-
render_context.conformance_tests_running_context.get_current_acceptance_tests(),
94-
previous_conformance_tests_issue,
95-
render_context.conformance_tests_running_context.fix_attempts,
96-
render_context.conformance_tests_running_context.get_current_conformance_test_folder_name(),
97-
render_context.conformance_tests_running_context.current_testing_frid_high_level_implementation_plan,
98-
run_state=render_context.run_state,
99-
)
95+
[issue_reason_code, response_files] = render_context.codeplain_api.fix_conformance_tests_issue(
96+
render_context.frid_context.frid,
97+
render_context.conformance_tests_running_context.current_testing_frid,
98+
render_context.plain_source_tree,
99+
render_context.frid_context.linked_resources,
100+
existing_files_content,
101+
memory_files_content,
102+
render_context.module_name,
103+
render_context.conformance_tests_running_context.current_testing_module_name,
104+
render_context.get_required_modules_functionalities(),
105+
previous_frid_code_diff,
106+
existing_conformance_test_files_content,
107+
render_context.conformance_tests_running_context.get_current_acceptance_tests(),
108+
previous_conformance_tests_issue,
109+
render_context.conformance_tests_running_context.fix_attempts,
110+
render_context.conformance_tests_running_context.get_current_conformance_test_folder_name(),
111+
render_context.conformance_tests_running_context.current_testing_frid_high_level_implementation_plan,
112+
render_context.conformance_tests_running_context.conflicting_requirement_count,
113+
run_state=render_context.run_state,
114+
)
100115
code_diff_files_content = {}
101116

102-
if conformance_tests_fixed:
117+
if (
118+
issue_reason_code == self.ISSUE_REASON_CODE_CONFLICTING_REQUIREMENTS
119+
or issue_reason_code == self.ISSUE_REASON_CODE_CONFLICTING_ACCEPTANCE_TESTS
120+
):
121+
render_context.conformance_tests_running_context.conflicting_requirement_count += 1
122+
render_context.conformance_tests_running_context.conflicting_module_name = current_testing_module_name
123+
render_context.conformance_tests_running_context.conflicting_frid = current_testing_frid
124+
console.info(
125+
f"Potential conflicting functionalities detected while fixing conformance tests for functionality {current_testing_frid} in module {current_testing_module_name}."
126+
)
127+
128+
if issue_reason_code == self.ISSUE_REASON_CODE_CONFORMANCE_TESTS:
103129
render_context.conformance_tests.store_conformance_tests_files(
104130
render_context.module_name,
105131
render_context.required_modules,

render_machine/render_types.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ def __init__(
3232
current_testing_frid_specifications: Optional[dict[str, list]],
3333
conformance_test_phase_index: int,
3434
should_prepare_testing_environment: bool,
35+
conflicting_requirement_count: int = 0,
36+
conflicting_module_name: Optional[str] = None,
37+
conflicting_frid: Optional[str] = None,
3538
):
3639
self.current_testing_module_name = current_testing_module_name
3740
self.current_testing_frid = current_testing_frid
@@ -41,7 +44,9 @@ def __init__(
4144
self.current_testing_frid_specifications = current_testing_frid_specifications
4245
self.conformance_test_phase_index = conformance_test_phase_index
4346
self.should_prepare_testing_environment = should_prepare_testing_environment
44-
47+
self.conflicting_requirement_count = conflicting_requirement_count
48+
self.conflicting_module_name = conflicting_module_name
49+
self.conflicting_frid = conflicting_frid
4550
# will be propagated only when:
4651
# - current_testing_frid == frid noqa: E800
4752
# - conformance_test_phase_index == 0 (conformance tests phase)

0 commit comments

Comments
 (0)