69 lines
2.4 KiB
Python
69 lines
2.4 KiB
Python
# SPDX-FileCopyrightText: 2026 Art Sea LLC
|
|
#
|
|
# SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
"""Behavioral coverage for durable current-execution failure context."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import pickle
|
|
|
|
from band_aider.context.class_meta import ClassMeta, ContentType
|
|
from band_aider.context.failing_test import FailingTest
|
|
from band_aider.context.working_backlog import FailedQAItem, TestingBacklog
|
|
|
|
|
|
def _test_meta() -> ClassMeta:
|
|
"""Return one minimal focused test metadata record."""
|
|
|
|
return ClassMeta("tests/test_widget.py", "widget", [], {}, content_type=ContentType.Test)
|
|
|
|
|
|
def _source_meta(location: str) -> ClassMeta:
|
|
"""Return one minimal source metadata record."""
|
|
|
|
return ClassMeta(location, location, [], {})
|
|
|
|
|
|
def test_testing_backlog_replaces_then_clears_current_failure_context() -> None:
|
|
"""Verify a passing result clears the exact failure record it supersedes."""
|
|
|
|
item = TestingBacklog(focused_spotlight=_test_meta(), summary="repair")
|
|
first = _source_meta("src/first.py")
|
|
second = _source_meta("src/second.py")
|
|
|
|
item.record_failure(
|
|
FailingTest(_test_meta(), ["first trace"], "first failure", "first output"),
|
|
[first, second, first],
|
|
)
|
|
item.record_failure(
|
|
FailingTest(_test_meta(), ["second trace"], "second failure", "second output"),
|
|
[second],
|
|
)
|
|
|
|
assert item.failure_error_message == "second failure"
|
|
assert item.failure_stack_trace == ["second trace"]
|
|
assert item.failure_raw_output == "second output"
|
|
assert item.failure_context_sources == [second]
|
|
|
|
item.clear_failure()
|
|
|
|
assert item.failure_error_message == ""
|
|
assert item.failure_stack_trace == []
|
|
assert item.failure_raw_output == ""
|
|
assert item.failure_context_sources == []
|
|
|
|
|
|
def test_legacy_testing_and_remediation_items_restore_empty_failure_context() -> None:
|
|
"""Verify inherited legacy backlog state receives an empty failure-context field."""
|
|
|
|
testing = TestingBacklog(focused_spotlight=_test_meta(), summary="testing")
|
|
remediation = FailedQAItem(focused_spotlight=_source_meta("src/widget.py"), summary="remediation")
|
|
del testing.failure_context_sources
|
|
del remediation.failure_context_sources
|
|
|
|
restored_testing = pickle.loads(pickle.dumps(testing))
|
|
restored_remediation = pickle.loads(pickle.dumps(remediation))
|
|
|
|
assert restored_testing.failure_context_sources == []
|
|
assert restored_remediation.failure_context_sources == []
|