artifactize 0.9.1

The AI-native collaboration layer for one-of-a-kind teammates and their agents: split a project into Artifacts with their own evals, and reuse every review while it still holds.
Documentation
use super::*;
use crossterm::event::{KeyCode, KeyEvent};

#[tokio::test]
async fn compatibility_constructor_parses_open_id_once_and_invalid_input_never_reads_state() {
    let root = tempfile::tempdir().unwrap();
    let state = root.path().join("absent-state");
    let mut review = Review::new(
        state.clone(),
        None,
        "fixture".into(),
        Some("../escape".into()),
    );
    assert!(review.open.is_none());
    assert_eq!(review.refresh().await, Action::None);
    assert!(review.error.as_ref().unwrap().contains("Invalid RequestId"));
    assert!(!state.exists());
    let valid = Review::new(state, None, "fixture".into(), Some("run-legacy_1.3".into()));
    assert_eq!(valid.open.as_ref().unwrap().as_str(), "run-legacy_1.3");
}

#[test]
fn request_jobs_and_outcomes_retain_typed_ids_while_idle_and_busy_page_steps_stay_ten() {
    let mut review = tests::opened(Some("alice"), tests::demo());
    let id: RequestId = "run-1-3".parse().unwrap();
    assert_eq!(review.actionable().unwrap().0, id);
    assert_eq!(
        review.key(KeyEvent::from(KeyCode::Char('u'))),
        Action::Start(Job::Release {
            ids: vec![id.clone()],
            quit: false
        })
    );
    review.key(KeyEvent::from(KeyCode::PageDown));
    assert_eq!(review.scroll, 10);
    review.key(KeyEvent::from(KeyCode::PageUp));
    assert_eq!(review.scroll, 0);
    review.scroll = u16::MAX - 2;
    review.key(KeyEvent::from(KeyCode::PageDown));
    assert_eq!(review.scroll, u16::MAX);
    drop(review.start(Job::Run {
        id: id.clone(),
        tool: "notes_release".into(),
        claim: false,
    }));
    review.scroll = 5;
    review.key(KeyEvent::from(KeyCode::PageUp));
    assert_eq!(review.scroll, 0);
    review.key(KeyEvent::from(KeyCode::PageDown));
    assert_eq!(review.scroll, 10);
    review.taken = vec![id.clone()];
    review.finish(Outcome::Released {
        ids: vec![id.clone()],
        quit: false,
        failed: vec![(id.clone(), "fixture release error".into())],
    });
    assert_eq!(review.taken, [id]);
}