test(techdemo): shorten generated resource paths

Import scoped generated handles and slots in techdemo tests so assertions read as local resources instead of fully-qualified generated paths.

req: component/003

req: dx/006
This commit is contained in:
slhx agent
2026-06-01 23:03:34 +02:00
parent ef3323831f
commit a8d4604da8
2 changed files with 23 additions and 20 deletions
+12 -11
View File
@@ -1,4 +1,5 @@
use slhx_techdemo::ui;
use slhx_techdemo::ui::control_center::{handles, slots};
use slhx_techdemo::ui::issue_card::handles as card_handles;
use std::process::{Child, Command, Stdio};
use std::time::{Duration, Instant};
use thirtyfour::prelude::*;
@@ -56,11 +57,11 @@ async fn browser_drives_typed_product_end_to_end() -> WebDriverResult<()> {
wait_for_text(&driver, "#probe-island [data-island-readout]", "probe live").await?;
driver
.find(By::Css(&handle_selector(ui::control_center::handles::simulate_push)))
.find(By::Css(&handle_selector(handles::simulate_push)))
.await?
.click()
.await?;
wait_for_text(&driver, &slot_selector(ui::control_center::slots::notice), "Push simulated").await?;
wait_for_text(&driver, &slot_selector(slots::notice), "Push simulated").await?;
wait_for_text(&driver, "[data-island-readout]", "activity rows").await?;
driver.find(By::Css("button.primary-action")).await?.click().await?;
@@ -69,41 +70,41 @@ async fn browser_drives_typed_product_end_to_end() -> WebDriverResult<()> {
drag_card_to_lane(&driver, 2, "product").await?;
wait_for_text(&driver, ".lane[data-lane='product'] .work-card[data-key='2']", "Shipped").await?;
wait_for_text(&driver, &slot_selector(ui::control_center::slots::notice), "Drag-and-drop move persisted").await?;
wait_for_text(&driver, &slot_selector(slots::notice), "Drag-and-drop move persisted").await?;
driver
.find(By::Css(&card_button_selector(ui::issue_card::handles::spotlight_work, 2)))
.find(By::Css(&card_button_selector(card_handles::spotlight_work, 2)))
.await?
.click()
.await?;
wait_for_text(
&driver,
&slot_selector(ui::control_center::slots::inspector),
&slot_selector(slots::inspector),
"Stream typed presence · lane=Product · stage=Shipped · impact=7",
)
.await?;
driver
.find(By::Css(&card_button_selector(ui::issue_card::handles::advance_work, 3)))
.find(By::Css(&card_button_selector(card_handles::advance_work, 3)))
.await?
.click()
.await?;
wait_for_text(&driver, ".lane[data-lane='product'] .work-card[data-key='3']", "Active").await?;
driver
.find(By::Css(&handle_selector(ui::control_center::handles::simulate_push)))
.find(By::Css(&handle_selector(handles::simulate_push)))
.await?
.click()
.await?;
wait_for_text(&driver, &slot_selector(ui::control_center::slots::live_feed), "SSE tick").await?;
wait_for_text(&driver, &slot_selector(slots::live_feed), "SSE tick").await?;
driver.find(By::Css("a[href='/architecture']")).await?.click().await?;
wait_for_text(&driver, &slot_selector(ui::control_center::slots::inspector), "Page swap").await?;
wait_for_text(&driver, &slot_selector(slots::inspector), "Page swap").await?;
wait_for_text(&driver, "[data-island-readout]", "activity rows").await?;
assert!(driver.current_url().await?.as_str().ends_with("/architecture"));
driver.goto(&format!("http://{APP_ADDR}/")).await?;
wait_for_text(&driver, &slot_selector(ui::control_center::slots::live_feed), "SSE tick").await?;
wait_for_text(&driver, &slot_selector(slots::live_feed), "SSE tick").await?;
Ok::<(), WebDriverError>(())
}
+11 -9
View File
@@ -1,6 +1,8 @@
use scraper::{Html, Selector};
use slhx::{Effect, EffectBatch, Payload, EFFECT_BATCH_ABI_VERSION};
use slhx_techdemo::ui;
use slhx_techdemo::ui::BUILD_FINGERPRINT;
use slhx_techdemo::ui::issue_card::handles as card_handles;
use slhx_techdemo::ui::issue_lane::handles as lane_handles;
use std::io::{Read, Write};
use std::net::TcpStream;
use std::process::{Child, Command, Stdio};
@@ -116,32 +118,32 @@ fn product_is_e2e_working_over_http() {
let move_to_lane = post(
"/",
&format!("__h={}&work_id=4&lane=runtime", ui::issue_lane::handles::move_to_lane),
&format!("__h={}&work_id=4&lane=runtime", lane_handles::move_to_lane),
);
assert_effect_response(&move_to_lane);
let move_to_lane_batch = move_to_lane.batch();
assert_card(&move_to_lane_batch, "Design hero moment", "Runtime", "Active", "width:99%");
assert_payload_contains(&move_to_lane_batch, "Drag-and-drop move persisted");
let inspect = post("/", &format!("__h={}&work_id=4", ui::issue_card::handles::spotlight_work));
let inspect = post("/", &format!("__h={}&work_id=4", card_handles::spotlight_work));
assert_effect_response(&inspect);
let inspect_batch = inspect.batch();
assert_payload_contains(&inspect_batch, "Design hero moment · lane=Runtime");
assert_payload_contains(&inspect_batch, "Inspector focused");
let advance = post("/", &format!("__h={}&work_id=4", ui::issue_card::handles::advance_work));
let advance = post("/", &format!("__h={}&work_id=4", card_handles::advance_work));
assert_effect_response(&advance);
let advance_batch = advance.batch();
assert_payload_contains(&advance_batch, "Pipeline advanced");
assert_payload_contains(&advance_batch, "<span class=\"pill\">Active</span>");
let advance_default = post("/", &format!("__h={}&work_id=5", ui::issue_card::handles::advance_work));
let advance_default = post("/", &format!("__h={}&work_id=5", card_handles::advance_work));
assert_effect_response(&advance_default);
let advance_default_batch = advance_default.batch();
assert_payload_contains(&advance_default_batch, "Default impact");
assert_card(&advance_default_batch, "Default impact", "Compiler", "Active", "width:55%");
let ship_default = post("/", &format!("__h={}&work_id=5", ui::issue_card::handles::advance_work));
let ship_default = post("/", &format!("__h={}&work_id=5", card_handles::advance_work));
assert_effect_response(&ship_default);
let ship_default_batch = ship_default.batch();
assert_card(&ship_default_batch, "Default impact", "Product", "Shipped", "width:55%");
@@ -154,12 +156,12 @@ fn product_is_e2e_working_over_http() {
assert_payload_contains(&push_batch, "Simulated push event produced the same EffectBatch shape");
assert_emit(&push_batch, "slhx:island-orbit", "activity rows");
let delete_missing = post("/", &format!("__h={}&work_id=999", ui::issue_card::handles::delete_work));
let delete_missing = post("/", &format!("__h={}&work_id=999", card_handles::delete_work));
assert_effect_response(&delete_missing);
let delete_missing_batch = delete_missing.batch();
assert_payload_not_contains(&delete_missing_batch, "Deleted card #999");
let delete = post("/", &format!("__h={}&work_id=4", ui::issue_card::handles::delete_work));
let delete = post("/", &format!("__h={}&work_id=4", card_handles::delete_work));
assert_effect_response(&delete);
let delete_batch = delete.batch();
assert_payload_contains(&delete_batch, "Card removed");
@@ -187,7 +189,7 @@ fn product_is_e2e_working_over_http() {
fn assert_effect_response(response: &Response) {
assert_eq!(response.status, 200);
assert!(response.header("content-type").contains("application/slhx"));
assert_eq!(response.header("x-slhx-fingerprint"), ui::BUILD_FINGERPRINT.0.to_string());
assert_eq!(response.header("x-slhx-fingerprint"), BUILD_FINGERPRINT.0.to_string());
let batch = response.batch();
assert_eq!(batch.abi_version, EFFECT_BATCH_ABI_VERSION);
assert!(!batch.ops.is_empty());