#![allow(clippy::unwrap_used, clippy::expect_used, clippy::panic)]
mod support;
use std::sync::Arc;
use support::{Harness, UNWRITTEN};
use turnframe_core::ids::TurnId;
use turnframe_provider::purpose::ModelPurpose;
use turnframe_test::providers::{ScriptedProvider, UnderstandingBuilder};
use turnframe_test::workflows::traveler::TravelerState;
use turnframe_test::workflows::trip::incomplete_case;
fn turn_one() -> TurnId {
TurnId::from(uuid::Uuid::from_u128(1))
}
async fn brief_after_starting(prerequisite_met: bool) -> String {
let turn = turn_one();
let text = "Apri un viaggio nuovo";
let understood = UnderstandingBuilder::of(text)
.start(UNWRITTEN, text)
.build()
.unwrap();
let provider = ScriptedProvider::builder("scripted", "model-1")
.acknowledging("Va bene.")
.build_shared();
let mut builder = Harness::builder()
.trip("trip-1", "Trip 1", 3, incomplete_case())
.unwritten()
.understands(understood)
.provider(Arc::clone(&provider));
if prerequisite_met {
builder = builder.traveler("trav-1", "Ferri", 1, TravelerState::default());
}
let harness = builder.build().await;
harness.handle(harness.turn(turn, text)).await.unwrap();
provider
.calls_for(ModelPurpose::Acknowledge)
.into_iter()
.next()
.expect("the writing stage ran")
.user_text()
}
#[tokio::test]
async fn a_case_that_does_not_exist_yet_still_briefs_the_writer() {
let brief = brief_after_starting(true).await;
assert!(
brief.contains("\"starting\": [\n \"unwritten\""),
"the turn began a record it wrote nothing for: {brief}"
);
assert!(
brief.contains("ask for the traveler"),
"the one phase where the workflow has the most to say: {brief}"
);
}
#[tokio::test]
async fn a_start_the_turn_refused_is_not_projected() {
let brief = brief_after_starting(false).await;
assert!(
!brief.contains("ask for the traveler"),
"the same act, refused: there is no case coming, so there is nothing to \
brief about one: {brief}"
);
assert!(
brief.contains("\"not_done\": [\n \""),
"what the turn has to say is the refusal: {brief}"
);
}