use oxcache::Cache;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
struct User {
id: u64,
name: String,
}
#[tokio::test]
async fn test_e2e_basic_cache() {
let cache: Cache<String, String> = Cache::builder().build().await.unwrap();
let key = "e2e_test_key".to_string();
let value = "e2e_test_value".to_string();
let set_result = cache.set(&key, &value).await;
assert!(set_result.is_ok(), "SET should succeed");
let get_result = cache.get(&key).await;
assert!(get_result.is_ok(), "GET should succeed");
assert!(get_result.unwrap().is_some(), "Value should exist");
let delete_result = cache.delete(&key).await;
assert!(delete_result.is_ok(), "DELETE should succeed");
let get_after_delete = cache.get(&key).await;
assert!(get_after_delete.unwrap().is_none(), "Value should be None after delete");
}
#[tokio::test]
async fn test_e2e_user_cache() {
let cache: Cache<String, User> = Cache::builder().build().await.unwrap();
let user = User {
id: 1,
name: "Test User".to_string(),
};
let key = "user:1".to_string();
let set_result = cache.set(&key, &user).await;
assert!(set_result.is_ok(), "SET User should succeed");
let get_result = cache.get(&key).await;
assert!(get_result.is_ok(), "GET User should succeed");
if let Ok(Some(retrieved)) = get_result {
assert_eq!(retrieved.id, 1);
assert_eq!(retrieved.name, "Test User");
}
let _ = cache.delete(&key).await;
}
#[tokio::test]
async fn test_e2e_batch_operations() {
let cache: Cache<String, i32> = Cache::builder().build().await.unwrap();
for i in 0..10 {
let key = format!("batch_key_{}", i);
let value = i * 10;
let result = cache.set(&key, &value).await;
assert!(result.is_ok(), "Batch SET {} should succeed", i);
}
for i in 0..10 {
let key = format!("batch_key_{}", i);
let result = cache.get(&key).await;
assert!(result.is_ok(), "Batch GET {} should succeed", i);
if let Ok(Some(value)) = result {
assert_eq!(value, i * 10);
}
}
cache.clear().await.unwrap();
}