Repair mounted Scenario fixtures for qualified owners and inspector tabs
This commit is contained in:
@@ -180,10 +180,36 @@ async fn mounted_scenario_use_delete_keeps_definition_and_second_use_and_rejects
|
||||
send(&mut mounted, &mut app, Message::ConfirmDelete(stale)).await;
|
||||
assert!(app.delete_pending, "old token does not cancel new dialog");
|
||||
// Keep selection and epoch deliberately unchanged: owner is an independent witness.
|
||||
let captured = app.scenario_context().unwrap();
|
||||
assert_eq!(captured.scenario, owners[0]);
|
||||
assert_eq!(
|
||||
app.delete_target.as_ref().unwrap().behavior_owner,
|
||||
Some(owners[0])
|
||||
);
|
||||
app.behavior.active_owner = Some(owners[1]);
|
||||
app.reconcile_scenario_workspace();
|
||||
let other = app.scenario_context().unwrap();
|
||||
assert_eq!(other.scenario, owners[1]);
|
||||
assert_eq!(
|
||||
other.representation,
|
||||
crate::behavior::scenario_layout::Representation::Derived { owner: owners[1] }
|
||||
);
|
||||
assert_eq!(other.epoch, captured.epoch);
|
||||
assert_eq!(app.selected, uses[0]);
|
||||
assert!(
|
||||
app.delete_target.as_ref().unwrap().snapshot.valid(&app),
|
||||
"the independent owner guard must reject an otherwise current token"
|
||||
);
|
||||
send(&mut mounted, &mut app, Message::ConfirmDelete(token)).await;
|
||||
assert_eq!(app.document.bundle(), &original);
|
||||
assert!(!app.delete_pending && app.delete_target.is_none());
|
||||
assert!(!app.document.can_undo() && !app.document.can_redo());
|
||||
app.behavior.active_owner = Some(owners[0]);
|
||||
// Restore both owner and qualified presentation before mounting pointer input.
|
||||
// Passive reports from the previous owner cannot repair an inconsistent fixture.
|
||||
app.reconcile_scenario_workspace();
|
||||
assert_eq!(app.scenario_context().unwrap().scenario, owners[0]);
|
||||
assert_eq!(app.selected, uses[0]);
|
||||
mounted.settle(&mut app).await;
|
||||
select(&mut mounted, &mut app, uses[0]).await;
|
||||
let token = delete(&mut mounted, &mut app, false).await;
|
||||
|
||||
@@ -54,7 +54,11 @@ async fn saved_details_opens_real_editable_inspector_and_returns_to_same_view()
|
||||
open_details(&mut app);
|
||||
mounted.settle(&mut app).await;
|
||||
let before = mounted.geometry(&app);
|
||||
assert!(before.scrolls.contains_key(&widget::Id::new("inspector")));
|
||||
assert_eq!(
|
||||
app.inspector_tab,
|
||||
crate::navigation::InspectorTab::Connections
|
||||
);
|
||||
assert!(!before.scrolls.contains_key(&widget::Id::new("inspector")));
|
||||
let (details, offset) = before.scrolls[&widget::Id::new("scenario-details")];
|
||||
let button = before.bounds("scenario-properties").center() - offset;
|
||||
assert!(
|
||||
@@ -84,7 +88,7 @@ async fn saved_details_opens_real_editable_inspector_and_returns_to_same_view()
|
||||
assert_eq!(
|
||||
stored_camera(&app),
|
||||
camera,
|
||||
"restoring panels retains camera intent"
|
||||
"opening Properties retains camera intent"
|
||||
);
|
||||
assert!(Arc::ptr_eq(&original, &app.document.snapshot()));
|
||||
assert_eq!(app.document.bundle(), &bundle);
|
||||
@@ -251,7 +255,11 @@ async fn details_opens_current_saved_view_properties_after_following_diagram_pic
|
||||
let snapshot = app.document.snapshot();
|
||||
let bundle = app.document.bundle().clone();
|
||||
let before = mounted.geometry(&app);
|
||||
assert!(before.scrolls.contains_key(&widget::Id::new("inspector")));
|
||||
assert_eq!(
|
||||
app.inspector_tab,
|
||||
crate::navigation::InspectorTab::Connections
|
||||
);
|
||||
assert!(!before.scrolls.contains_key(&widget::Id::new("inspector")));
|
||||
let (details, offset) = before.scrolls[&widget::Id::new("scenario-details")];
|
||||
let point = before.bounds("scenario-properties").center() - offset;
|
||||
assert!(details.contains(point));
|
||||
|
||||
Reference in New Issue
Block a user