Ctrl K
ComunidadGuías…

tests/cli/timeline_cli.rs

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
use crate::helpers::{create_roast, create_roaster, create_token, run_brewlog, server_info};

#[test]
fn test_editing_roaster_updates_timeline_events_after_rebuild() {
    let token = create_token("test-timeline-rebuild");
    let (address, _) = server_info();

    // Create a roaster and roast
    let original_name = "Timeline CLI Roasters";
    let roaster_id = create_roaster(original_name, &token);
    let _roast_id = create_roast(&roaster_id, "Timeline CLI Roast", &token);

    // Allow timeline events to be created
    std::thread::sleep(std::time::Duration::from_millis(50));

    // Verify original roaster name appears in timeline HTML
    let client = reqwest::blocking::Client::new();
    let body = client
        .get(format!("{address}/timeline?page_size=all"))
        .send()
        .expect("failed to fetch timeline")
        .text()
        .expect("failed to read body");
    assert!(
        body.contains(original_name),
        "Expected original roaster name in timeline before edit"
    );

    // Update the roaster name via CLI
    let updated_name = "Renamed CLI Roasters";
    let output = run_brewlog(
        &[
            "roaster",
            "update",
            "--id",
            &roaster_id,
            "--name",
            updated_name,
        ],
        &[("BREWLOG_TOKEN", &token)],
    );
    assert!(
        output.status.success(),
        "roaster update should succeed: {}",
        String::from_utf8_lossy(&output.stderr)
    );

    // Trigger timeline rebuild via CLI
    let output = run_brewlog(&["timeline", "rebuild"], &[("BREWLOG_TOKEN", &token)]);
    assert!(
        output.status.success(),
        "timeline rebuild should succeed: {}",
        String::from_utf8_lossy(&output.stderr)
    );

    // Wait for background rebuild task to process
    std::thread::sleep(std::time::Duration::from_millis(500));

    // Verify both timeline events now show the updated roaster name
    let body = client
        .get(format!("{address}/timeline?page_size=all"))
        .send()
        .expect("failed to fetch timeline after rebuild")
        .text()
        .expect("failed to read body");

    assert!(
        body.contains(updated_name),
        "Expected updated roaster name '{updated_name}' in timeline after rebuild, got: {body}"
    );
    assert!(
        !body.contains(original_name),
        "Expected original roaster name '{original_name}' to no longer appear in timeline, got: {body}"
    );
}