todoscope 0.1.0

A simple CLI todo list manager
Documentation
use std::collections::HashMap;
use todoscope::priority::Priority;
use todoscope::status::Status;
use todoscope::{add_todo_to_map, delete_todo_by_id, update_todo_in_map};
use uuid::Uuid;

#[test]
fn add_todo_inserts_item() {
    let mut todos = HashMap::new();
    let id = add_todo_to_map(
        &mut todos,
        "Learn Rust".into(),
        "Finish the Rust book".into(),
        Priority::High,
        Status::Pending,
    );
    assert!(todos.contains_key(&id));
    assert_eq!(todos[&id].title, "Learn Rust");
}

#[test]
fn update_todo_changes_fields() {
    let mut todos = HashMap::new();
    let id = add_todo_to_map(
        &mut todos,
        "Old Title".into(),
        "Old Desc".into(),
        Priority::Low,
        Status::Pending,
    );

    let updated = update_todo_in_map(
        &mut todos,
        id,
        Some("New Title".into()),
        Some("New Desc".into()),
        Some(Priority::High),
        Some(Status::Done),
    );

    assert!(updated);
    let todo = &todos[&id];
    assert_eq!(todo.title, "New Title");
    assert_eq!(todo.description.as_deref(), Some("New Desc"));
    assert_eq!(todo.priority, Priority::High);
    assert_eq!(todo.status, Status::Done);
}

#[test]
fn delete_todo_removes_item() {
    let mut todos = HashMap::new();
    let id = add_todo_to_map(
        &mut todos,
        "Temporary".into(),
        "To be deleted".into(),
        Priority::Medium,
        Status::Pending,
    );

    let deleted = delete_todo_by_id(&mut todos, id);

    assert!(deleted);
    assert!(!todos.contains_key(&id));
}

#[test]
fn update_todo_nonexistent_returns_false() {
    let mut todos = HashMap::new();
    let random_id = Uuid::new_v4();

    let updated = update_todo_in_map(
        &mut todos,
        random_id,
        Some("Doesn't matter".into()),
        None,
        None,
        None,
    );

    assert!(!updated);
}