use crate::{
manager::{PostArchiverManager, UpdatePlatform},
tests::helpers,
PlatformId,
};
use chrono::Utc;
#[test]
fn test_add_platform() {
let manager = PostArchiverManager::open_in_memory().unwrap();
let platform_id = helpers::add_platform(&manager, "Test Platform".into());
assert!(platform_id.raw() > 0);
let platform = helpers::get_platform(&manager, platform_id);
assert_eq!(platform.name, "Test Platform");
assert_eq!(platform.id, platform_id);
}
#[test]
fn test_list_platforms() {
let manager = PostArchiverManager::open_in_memory().unwrap();
let id1 = helpers::add_platform(&manager, "Platform 1".into());
let id2 = helpers::add_platform(&manager, "Platform 2".into());
let platforms = helpers::list_platforms(&manager);
let ids: Vec<PlatformId> = platforms.iter().map(|p| p.id).collect();
assert!(ids.contains(&id1));
assert!(ids.contains(&id2));
}
#[test]
fn test_get_platform() {
let manager = PostArchiverManager::open_in_memory().unwrap();
let platform_id = helpers::add_platform(&manager, "Get Test Platform".into());
let platform = helpers::get_platform(&manager, platform_id);
assert_eq!(platform.id, platform_id);
assert_eq!(platform.name, "Get Test Platform");
}
#[test]
fn test_find_platform() {
let manager = PostArchiverManager::open_in_memory().unwrap();
let platform_id = helpers::add_platform(&manager, "Find Test Platform".into());
let found_id = helpers::find_platform(&manager, "Find Test Platform");
assert_eq!(found_id, Some(platform_id));
let not_found = helpers::find_platform(&manager, "Non-existent Platform");
assert_eq!(not_found, None);
}
#[test]
fn test_remove_platform() {
let manager = PostArchiverManager::open_in_memory().unwrap();
let platform_id = helpers::add_platform(&manager, "To Delete".into());
let _ = helpers::get_platform(&manager, platform_id);
manager.bind(platform_id).delete().unwrap();
let platforms = helpers::list_platforms(&manager);
assert!(platforms.iter().all(|p| p.id != platform_id));
}
#[test]
fn test_set_platform_name() {
let manager = PostArchiverManager::open_in_memory().unwrap();
let platform_id = helpers::add_platform(&manager, "Original Name".into());
manager
.bind(platform_id)
.update(UpdatePlatform::default().name("Updated Name".into()))
.unwrap();
let platform = helpers::get_platform(&manager, platform_id);
assert_eq!(platform.name, "Updated Name");
}
#[test]
fn test_list_platform_tags() {
let manager = PostArchiverManager::open_in_memory().unwrap();
let platform_id = helpers::add_platform(&manager, "Test Platform".into());
let tag1 = helpers::add_tag(&manager, "tag1".into(), Some(platform_id));
let tag2 = helpers::add_tag(&manager, "tag2".into(), Some(platform_id));
let _tag3 = helpers::add_tag(&manager, "tag3".into(), None);
let platform_tags = manager.bind(platform_id).list_tags().unwrap();
assert_eq!(platform_tags.len(), 2);
assert!(platform_tags.contains(&tag1));
assert!(platform_tags.contains(&tag2));
}
#[test]
fn test_list_platform_posts() {
let manager = PostArchiverManager::open_in_memory().unwrap();
let now = Utc::now();
let platform_id = helpers::add_platform(&manager, "Test Platform".into());
let post1 = helpers::add_post(
&manager,
"Post 1".into(),
None,
Some(platform_id),
Some(now),
Some(now),
);
let post2 = helpers::add_post(
&manager,
"Post 2".into(),
None,
Some(platform_id),
Some(now),
Some(now),
);
let _post3 = helpers::add_post(&manager, "Post 3".into(), None, None, Some(now), Some(now));
let platform_posts = manager.bind(platform_id).list_posts().unwrap();
assert_eq!(platform_posts.len(), 2);
assert!(platform_posts.contains(&post1));
assert!(platform_posts.contains(&post2));
}
#[test]
fn test_empty_platform_relationships() {
let manager = PostArchiverManager::open_in_memory().unwrap();
let platform_id = helpers::add_platform(&manager, "Empty Platform".into());
let tags = manager.bind(platform_id).list_tags().unwrap();
assert_eq!(tags.len(), 0);
let posts = manager.bind(platform_id).list_posts().unwrap();
assert_eq!(posts.len(), 0);
}
#[test]
fn test_duplicate_platform_name() {
let manager = PostArchiverManager::open_in_memory().unwrap();
let _id1 = helpers::add_platform(&manager, "Duplicate Platform".into());
let result = std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| {
helpers::add_platform(&manager, "Duplicate Platform".into());
}));
assert!(result.is_err(), "Should fail to add duplicate platform");
}