#[cfg(all(test, feature = "local"))]
mod tests {
    use std::env;
    use std::fs;

    use sepora_core::Todo;
    use sepora_storage::prelude::*;

    #[tokio::test]
    async fn test_local_storage_todos() {
        // 一時ディレクトリを作成
        let temp_dir = env::temp_dir().join("sepora_test");
        let _ = fs::create_dir_all(&temp_dir);

        // LocalStorageを初期化
        let storage = LocalStorage::new(temp_dir.clone());

        // Todoを作成
        let todo = Todo {
            id: "todo1".to_string(),
            title: "This is a test todo.".to_string(),
            completed: false,
        };

        // Todoを追加
        storage.create_todo(todo.clone()).await.unwrap();

        // Todoを取得
        let fetched = storage
            .list_todos()
            .await
            .unwrap()
            .into_iter()
            .find(|t| t.id == todo.id)
            .unwrap();
        assert_eq!(fetched.title, "This is a test todo.");
        assert_eq!(fetched.completed, false);

        // すべてのTodoを取得
        let all = storage.list_todos().await.unwrap();
        assert_eq!(all.len(), 1);

        // Todoを更新
        let mut updated_todo = todo.clone();
        updated_todo.completed = true;
        storage.update_todo(updated_todo.clone()).await.unwrap();

        let updated = storage
            .list_todos()
            .await
            .unwrap()
            .into_iter()
            .find(|t| t.id == todo.id)
            .unwrap();
        assert_eq!(updated.completed, true);

        // Todoを削除
        storage.delete_todo(&todo.id).await.unwrap();
        let remaining = storage.list_todos().await.unwrap();
        assert!(remaining.iter().find(|t| t.id == todo.id).is_none());

        // 後片付け
        let _ = fs::remove_dir_all(&temp_dir);
    }
}
