feat(javaTest): visualize floor transfer evidence

This commit is contained in:
zgw
2026-08-07 11:29:38 +08:00
parent 31fa643993
commit 744edb6a37
6 changed files with 416 additions and 14 deletions

View File

@@ -38,6 +38,8 @@ def run_point_to_point(page):
"route quality tuple must contain six ordered metrics")
require(page.locator("#route-comparability").inner_text() != "--",
"historical comparability badge was not populated")
require("DIRECT" in page.locator("#evidence-assignment-mode").inner_text(),
"same-floor point simulation did not expose DIRECT assignment mode")
def verify_map_interactions(page):
@@ -90,7 +92,7 @@ def verify_map_interactions(page):
def verify_historical_mode(page):
"""Run the real 240-task endpoint and verify task selection keeps decision evidence live."""
"""Run 240 tasks and inspect one real cross-floor dispatch without drawing a fake edge."""
page.locator(".mode-tab[data-mode='history']").click()
page.locator("#run-history").click()
expect(page.locator("#history-run-state")).to_have_text(
@@ -100,9 +102,52 @@ def verify_historical_mode(page):
"historical result did not expose all 240 tasks")
require(page.locator("#history-task-body tr").count() == 240,
"historical task table row count is not 240")
page.locator("#history-task-body tr").nth(1).click()
transfer_rows = page.locator(
"#history-task-body tr[data-assignment-mode='FLOOR_TRANSFER']"
)
require(transfer_rows.count() > 0,
"historical result did not expose a FLOOR_TRANSFER task")
transfer_rows.first.click()
require(page.locator("#route-candidate-body tr").count() > 0,
"selected historical task lost route candidates")
require("FLOOR_TRANSFER" in page.locator("#evidence-assignment-mode").inner_text(),
"selected transfer task did not expose its assignment mode")
expect(page.locator("#floor-transfer-panel")).to_be_visible()
require(page.locator("#floor-transfer-list .floor-transfer-job").count() > 0,
"selected transfer task did not render its transfer job")
require("→" in page.locator("#floor-transfer-list").inner_text()
and "幂等键" in page.locator("#floor-transfer-list").inner_text(),
"transfer job is missing port direction or idempotency evidence")
require(page.locator("#floor-select option", has_text="换层").count() >= 2,
"floor selector did not mark all floors involved in the transfer")
require(page.locator("#dynamic-route-layer .floor-transfer-port-marker").count() > 0,
"selected floor did not render a transfer port marker")
transfer_events = page.locator(
"#event-table-body tr[data-event-type^='FLOOR_TRANSFER']"
)
require(transfer_events.count() >= 3,
"transfer lifecycle events are missing from the timeline")
require(page.locator(
"#event-type-filter option[value='FLOOR_TRANSFER_COMPLETED']"
).inner_text() == "换层完成",
"transfer completion event did not receive a business label")
cross_floor_segments = page.evaluate("""
async () => {
const bootstrap = await fetch('/api/bootstrap').then(response => response.json());
const floors = Object.fromEntries(
bootstrap.sites.map(site => [site.siteId, Number(site.floor)]));
return Array.from(document.querySelectorAll(
'#dynamic-route-layer .route-segment title'))
.map(title => title.textContent.split(' → '))
.filter(parts => parts.length === 2
&& floors[parts[0]] !== undefined
&& floors[parts[1]] !== undefined
&& floors[parts[0]] !== floors[parts[1]]);
}
""")
require(not cross_floor_segments,
"normal route layer drew cross-floor edges: " + str(cross_floor_segments))
def verify_viewport(browser, viewport, filename, run_history):