mod common;
use common::create_temp_dir;
use ivoryvalley::db::SeenUriStore;
#[test]
fn test_create_seen_uri_store() {
let temp_dir = create_temp_dir();
let db_path = temp_dir.path().join("test.db");
let store = SeenUriStore::open(&db_path).expect("Failed to open store");
drop(store);
assert!(db_path.exists());
}
#[test]
fn test_store_and_check_uri() {
let temp_dir = create_temp_dir();
let db_path = temp_dir.path().join("test.db");
let store = SeenUriStore::open(&db_path).expect("Failed to open store");
let uri = "https://mastodon.social/users/testuser/statuses/123456";
assert!(!store.is_seen(uri).expect("Failed to check URI"));
store.mark_seen(uri).expect("Failed to mark URI as seen");
assert!(store.is_seen(uri).expect("Failed to check URI"));
}
#[test]
fn test_store_duplicate_uri() {
let temp_dir = create_temp_dir();
let db_path = temp_dir.path().join("test.db");
let store = SeenUriStore::open(&db_path).expect("Failed to open store");
let uri = "https://mastodon.social/users/testuser/statuses/123456";
store.mark_seen(uri).expect("Failed to mark URI as seen");
store
.mark_seen(uri)
.expect("Failed to mark URI as seen again");
assert!(store.is_seen(uri).expect("Failed to check URI"));
}
#[test]
fn test_multiple_uris() {
let temp_dir = create_temp_dir();
let db_path = temp_dir.path().join("test.db");
let store = SeenUriStore::open(&db_path).expect("Failed to open store");
let uri1 = "https://mastodon.social/users/user1/statuses/111";
let uri2 = "https://mastodon.social/users/user2/statuses/222";
let uri3 = "https://fosstodon.org/users/user3/statuses/333";
store.mark_seen(uri1).expect("Failed to mark URI 1");
store.mark_seen(uri2).expect("Failed to mark URI 2");
assert!(store.is_seen(uri1).expect("Failed to check URI 1"));
assert!(store.is_seen(uri2).expect("Failed to check URI 2"));
assert!(!store.is_seen(uri3).expect("Failed to check URI 3"));
}
#[test]
fn test_persistence() {
let temp_dir = create_temp_dir();
let db_path = temp_dir.path().join("test.db");
let uri = "https://mastodon.social/users/testuser/statuses/789";
{
let store = SeenUriStore::open(&db_path).expect("Failed to open store");
store.mark_seen(uri).expect("Failed to mark URI");
}
{
let store = SeenUriStore::open(&db_path).expect("Failed to reopen store");
assert!(store.is_seen(uri).expect("Failed to check URI"));
}
}
#[test]
fn test_cleanup_old_uris() {
let temp_dir = create_temp_dir();
let db_path = temp_dir.path().join("test.db");
let store = SeenUriStore::open(&db_path).expect("Failed to open store");
let uri = "https://mastodon.social/users/testuser/statuses/999";
store.mark_seen(uri).expect("Failed to mark URI");
let removed = store.cleanup(0).expect("Failed to cleanup");
assert_eq!(removed, 1);
assert!(!store.is_seen(uri).expect("Failed to check URI"));
}
#[test]
fn test_cleanup_keeps_recent() {
let temp_dir = create_temp_dir();
let db_path = temp_dir.path().join("test.db");
let store = SeenUriStore::open(&db_path).expect("Failed to open store");
let uri = "https://mastodon.social/users/testuser/statuses/999";
store.mark_seen(uri).expect("Failed to mark URI");
let removed = store.cleanup(604800).expect("Failed to cleanup");
assert_eq!(removed, 0);
assert!(store.is_seen(uri).expect("Failed to check URI"));
}