fix: use tempdir for db doctests instead of project root

All 27 doctests in db.rs wrote keep.db to the project root via
PathBuf::from("keep.db"). Now use tempfile::tempdir() so the
database is created in a temp directory and cleaned up automatically.
This commit is contained in:
2026-03-14 15:10:47 -03:00
parent b3ca673b52
commit 9a1e23e85f

104
src/db.rs
View File

@@ -162,8 +162,10 @@ pub struct Meta {
/// # use keep::db;
/// # use keep::db::*;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// # Ok(())
/// # }
@@ -213,8 +215,10 @@ pub fn open(path: PathBuf) -> Result<Connection, Error> {
/// # use keep::db::*;
/// # use chrono::Utc;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// let item = Item {
/// id: None,
@@ -260,8 +264,10 @@ pub fn insert_item(conn: &Connection, item: Item) -> Result<i64> {
/// # use keep::db::*;
/// # use keep::compression_engine::CompressionType;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// let compression = CompressionType::LZ4;
/// let item = db::create_item(&conn, compression)?;
@@ -312,8 +318,10 @@ pub fn create_item(
/// # use keep::db::*;
/// # use chrono::Utc;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// let item = Item { id: None, ts: Utc::now(), size: None, compression: "lz4".to_string() };
/// let item_id = db::insert_item(&conn, item)?;
@@ -356,8 +364,10 @@ pub fn add_tag(conn: &Connection, item_id: i64, tag_name: &str) -> Result<()> {
/// # use keep::db::*;
/// # use chrono::Utc;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// let item = Item { id: None, ts: Utc::now(), size: None, compression: "lz4".to_string() };
/// let item_id = db::insert_item(&conn, item)?;
@@ -399,8 +409,10 @@ pub fn add_meta(conn: &Connection, item_id: i64, name: &str, value: &str) -> Res
/// # use keep::db::*;
/// # use chrono::Utc;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// let item = Item { id: Some(1), size: Some(1024), compression: "lz4".to_string(), ts: Utc::now() };
/// db::update_item(&conn, item)?;
@@ -441,8 +453,10 @@ pub fn update_item(conn: &Connection, item: Item) -> Result<()> {
/// # use keep::db::*;
/// # use chrono::Utc;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// let item = Item { id: Some(1), ts: Utc::now(), size: None, compression: "lz4".to_string() };
/// db::delete_item(&conn, item)?;
@@ -479,8 +493,10 @@ pub fn delete_item(conn: &Connection, item: Item) -> Result<()> {
/// # use keep::db;
/// # use keep::db::*;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// let meta = Meta { id: 1, name: "temp".to_string(), value: "".to_string() };
/// db::query_delete_meta(&conn, meta)?;
@@ -521,8 +537,10 @@ pub fn query_delete_meta(conn: &Connection, meta: Meta) -> Result<()> {
/// # use keep::db::*;
/// # use chrono::Utc;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// let item = Item { id: None, ts: Utc::now(), size: None, compression: "lz4".to_string() };
/// let item_id = db::insert_item(&conn, item)?;
@@ -565,8 +583,10 @@ pub fn query_upsert_meta(conn: &Connection, meta: Meta) -> Result<()> {
/// # use keep::db::*;
/// # use chrono::Utc;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// let item = Item { id: None, ts: Utc::now(), size: None, compression: "lz4".to_string() };
/// let item_id = db::insert_item(&conn, item)?;
@@ -614,8 +634,10 @@ pub fn store_meta(conn: &Connection, meta: Meta) -> Result<()> {
/// # use keep::db::*;
/// # use chrono::Utc;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// let item = Item { id: None, ts: Utc::now(), size: None, compression: "lz4".to_string() };
/// let item_id = db::insert_item(&conn, item)?;
@@ -657,8 +679,10 @@ pub fn insert_tag(conn: &Connection, tag: Tag) -> Result<()> {
/// # use keep::db::*;
/// # use chrono::Utc;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// let item = Item { id: Some(1), ts: Utc::now(), size: None, compression: "lz4".to_string() };
/// db::delete_item_tags(&conn, item)?;
@@ -697,8 +721,10 @@ pub fn delete_item_tags(conn: &Connection, item: Item) -> Result<()> {
/// # use keep::db::*;
/// # use chrono::Utc;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// let item = Item { id: None, ts: Utc::now(), size: None, compression: "lz4".to_string() };
/// let item_id = db::insert_item(&conn, item)?;
@@ -750,8 +776,10 @@ pub fn set_item_tags(conn: &Connection, item: Item, tags: &Vec<String>) -> Resul
/// # use keep::db;
/// # use keep::db::*;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// let all_items = db::query_all_items(&conn)?;
/// assert!(all_items.len() >= 0);
@@ -802,8 +830,10 @@ pub fn query_all_items(conn: &Connection) -> Result<Vec<Item>> {
/// # use keep::db;
/// # use keep::db::*;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// let tags = vec!["work".to_string(), "urgent".to_string()];
/// let tagged_items = db::query_tagged_items(&conn, &tags)?;
@@ -870,8 +900,10 @@ pub fn query_tagged_items<'a>(conn: &'a Connection, tags: &'a Vec<String>) -> Re
/// # use keep::db;
/// # use keep::db::*;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// let items = db::get_items(&conn)?;
/// # Ok(())
@@ -908,8 +940,10 @@ pub fn get_items(conn: &Connection) -> Result<Vec<Item>> {
/// # use keep::db::*;
/// # use std::collections::HashMap;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// let tags = vec!["project".to_string()];
/// let meta = HashMap::from([("status".to_string(), Some("active".to_string()))]);
@@ -982,8 +1016,10 @@ pub fn get_items_matching(
/// # use keep::db::*;
/// # use std::collections::HashMap;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// let tags = vec!["latest".to_string()];
/// let item = db::get_item_matching(&conn, &tags, &HashMap::new())?;
@@ -1024,8 +1060,10 @@ pub fn get_item_matching(
/// # use keep::db::*;
/// # use chrono::Utc;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// let item = Item { id: None, ts: Utc::now(), size: None, compression: "lz4".to_string() };
/// let item_id = db::insert_item(&conn, item)?;
@@ -1080,8 +1118,10 @@ pub fn get_item(conn: &Connection, item_id: i64) -> Result<Option<Item>> {
/// # use keep::db;
/// # use keep::db::*;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// let latest = db::get_item_last(&conn)?;
/// # Ok(())
@@ -1136,8 +1176,10 @@ pub fn get_item_last(conn: &Connection) -> Result<Option<Item>> {
/// # use keep::db::*;
/// # use chrono::Utc;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// let item = Item { id: Some(1), ts: Utc::now(), size: None, compression: "lz4".to_string() };
/// let tags = db::get_item_tags(&conn, &item)?;
@@ -1187,8 +1229,10 @@ pub fn get_item_tags(conn: &Connection, item: &Item) -> Result<Vec<Tag>> {
/// # use keep::db::*;
/// # use chrono::Utc;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// let item = Item { id: Some(1), ts: Utc::now(), size: None, compression: "lz4".to_string() };
/// let meta = db::get_item_meta(&conn, &item)?;
@@ -1240,8 +1284,10 @@ pub fn get_item_meta(conn: &Connection, item: &Item) -> Result<Vec<Meta>> {
/// # use keep::db::*;
/// # use chrono::Utc;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// let item = Item { id: Some(1), ts: Utc::now(), size: None, compression: "lz4".to_string() };
/// let meta = db::get_item_meta_name(&conn, &item, "mime_type".to_string())?;
@@ -1290,8 +1336,10 @@ pub fn get_item_meta_name(conn: &Connection, item: &Item, name: String) -> Resul
/// # use keep::db::*;
/// # use chrono::Utc;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// let item = Item { id: Some(1), ts: Utc::now(), size: None, compression: "lz4".to_string() };
/// let value = db::get_item_meta_value(&conn, &item, "source".to_string())?;
@@ -1334,8 +1382,10 @@ pub fn get_item_meta_value(conn: &Connection, item: &Item, name: String) -> Resu
/// # use keep::db;
/// # use keep::db::*;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// let ids = vec![1, 2, 3];
/// let tags_map = db::get_tags_for_items(&conn, &ids)?;
@@ -1401,8 +1451,10 @@ pub fn get_tags_for_items(
/// # use keep::db;
/// # use keep::db::*;
/// # use std::path::PathBuf;
/// # use tempfile;
/// # fn main() -> anyhow::Result<()> {
/// let db_path = PathBuf::from("keep.db");
/// let _tmp = tempfile::tempdir()?;
/// let db_path = _tmp.path().join("keep.db");
/// let conn = db::open(db_path)?;
/// let ids = vec![1, 2, 3];
/// let meta_map = db::get_meta_for_items(&conn, &ids)?;