diff --git a/examples/techdemo/tests/browser_e2e.rs b/examples/techdemo/tests/browser_e2e.rs index a289c64..1cb2a25 100644 --- a/examples/techdemo/tests/browser_e2e.rs +++ b/examples/techdemo/tests/browser_e2e.rs @@ -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>(()) } diff --git a/examples/techdemo/tests/e2e.rs b/examples/techdemo/tests/e2e.rs index 4a5ddce..41f2f83 100644 --- a/examples/techdemo/tests/e2e.rs +++ b/examples/techdemo/tests/e2e.rs @@ -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, "Active"); - 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());