use crate::{
manager::PostArchiverManager,
query::{platform::PlatformSort, Query, SortDir, Sortable},
tests::helpers,
Platform, Post, Tag,
};
use chrono::Utc;
#[test]
fn test_get_platform_exists() {
let m = PostArchiverManager::open_in_memory().unwrap();
let id = helpers::add_platform(&m, "github".into());
let plt = m.get_platform(id).unwrap().unwrap();
assert_eq!(plt.id, id);
assert_eq!(plt.name, "github");
}
#[test]
fn test_get_platform_not_found() {
let m = PostArchiverManager::open_in_memory().unwrap();
use crate::PlatformId;
let result = m.get_platform(PlatformId::from(9999u32)).unwrap();
assert!(result.is_none());
}
#[test]
fn test_find_platform_found() {
let m = PostArchiverManager::open_in_memory().unwrap();
let id = helpers::add_platform(&m, "twitter".into());
let found = m.find_platform("twitter").unwrap();
assert_eq!(found, Some(id));
}
#[test]
fn test_find_platform_not_found() {
let m = PostArchiverManager::open_in_memory().unwrap();
let result = m.find_platform("nonexistent").unwrap();
assert!(result.is_none());
}
#[test]
fn test_platforms_empty() {
let m = PostArchiverManager::open_in_memory().unwrap();
let platforms = m.platforms().query::<Platform>().unwrap();
assert!(!platforms.iter().any(|p| p.name == "userPlatform"));
}
#[test]
fn test_platforms_returns_added() {
let m = PostArchiverManager::open_in_memory().unwrap();
let id1 = helpers::add_platform(&m, "github".into());
let id2 = helpers::add_platform(&m, "twitter".into());
let platforms = m.platforms().query::<Platform>().unwrap();
let ids: Vec<_> = platforms.iter().map(|p| p.id).collect();
assert!(ids.contains(&id1));
assert!(ids.contains(&id2));
}
#[test]
fn test_platforms_sorted_by_name() {
let m = PostArchiverManager::open_in_memory().unwrap();
helpers::add_platform(&m, "zzz".into());
helpers::add_platform(&m, "aaa".into());
helpers::add_platform(&m, "mmm".into());
let platforms = m
.platforms()
.sort(PlatformSort::Name, SortDir::Asc)
.query::<Platform>()
.unwrap();
let user: Vec<_> = platforms
.iter()
.filter(|p| p.name == "aaa" || p.name == "mmm" || p.name == "zzz")
.collect();
assert_eq!(user.len(), 3);
assert_eq!(user[0].name, "aaa");
assert_eq!(user[1].name, "mmm");
assert_eq!(user[2].name, "zzz");
}
#[test]
fn test_platform_posts_via_builder() {
let m = PostArchiverManager::open_in_memory().unwrap();
let now = Utc::now();
let plt = helpers::add_platform(&m, "p".into());
let id1 = helpers::add_post(&m, "A".into(), None, Some(plt), Some(now), Some(now));
let id2 = helpers::add_post(&m, "B".into(), None, Some(plt), Some(now), Some(now));
helpers::add_post(&m, "C".into(), None, None, Some(now), Some(now));
let mut q = m.posts();
q.platforms.insert(plt);
let posts = q.query::<Post>().unwrap();
assert_eq!(posts.len(), 2);
let ids: Vec<_> = posts.iter().map(|p| p.id).collect();
assert!(ids.contains(&id1));
assert!(ids.contains(&id2));
}
#[test]
fn test_platform_posts_empty_via_builder() {
let m = PostArchiverManager::open_in_memory().unwrap();
let plt = helpers::add_platform(&m, "empty".into());
let mut q = m.posts();
q.platforms.insert(plt);
let posts = q.query::<Post>().unwrap();
assert!(posts.is_empty());
}
#[test]
fn test_platform_tags_via_builder() {
let m = PostArchiverManager::open_in_memory().unwrap();
let plt = helpers::add_platform(&m, "p".into());
let t1 = helpers::add_tag(&m, "tag-one".into(), Some(plt));
let t2 = helpers::add_tag(&m, "tag-two".into(), Some(plt));
helpers::add_tag(&m, "global".into(), None);
let mut q = m.tags();
q.platforms.insert(plt);
let tags = q.query::<Tag>().unwrap();
assert_eq!(tags.len(), 2);
let ids: Vec<_> = tags.iter().map(|t| t.id).collect();
assert!(ids.contains(&t1));
assert!(ids.contains(&t2));
}
#[test]
fn test_platform_tags_empty_via_builder() {
let m = PostArchiverManager::open_in_memory().unwrap();
let plt = helpers::add_platform(&m, "empty".into());
let mut q = m.tags();
q.platforms.insert(plt);
let tags = q.query::<Tag>().unwrap();
assert!(tags.is_empty());
}
#[test]
fn test_platform_tags_isolates_correctly() {
let m = PostArchiverManager::open_in_memory().unwrap();
let plt_a = helpers::add_platform(&m, "A".into());
let plt_b = helpers::add_platform(&m, "B".into());
helpers::add_tag(&m, "ta".into(), Some(plt_a));
let tb = helpers::add_tag(&m, "tb".into(), Some(plt_b));
let mut q = m.tags();
q.platforms.insert(plt_b);
let tags = q.query::<Tag>().unwrap();
assert_eq!(tags.len(), 1);
assert_eq!(tags[0].id, tb);
}