#[cfg(persistent_cache)]
use yt_dlp::cache::PersistentBackendKind;
#[cfg(persistent_cache)]
use yt_dlp::cache::{CacheConfig, CacheLayer};
#[cfg(feature = "cache-json")]
#[tokio::test]
async fn cache_layer_from_config() {
let dir = tempfile::tempdir().expect("tempdir failed");
let builder = CacheConfig::builder().cache_dir(dir.path().to_path_buf());
let builder = builder.persistent_backend(Some(PersistentBackendKind::Json));
let config = builder.build();
let layer = CacheLayer::from_config(&config).await.expect("from_config failed");
let video = crate::common::fixtures::load_video_fixture();
let url = "https://youtube.com/watch?v=layer_test";
layer
.videos
.put(url.to_string(), video.clone())
.await
.expect("put failed");
let retrieved = layer.videos.get(url).await.expect("get failed");
assert!(retrieved.is_some());
assert_eq!(retrieved.unwrap().id, video.id);
}
#[cfg(all(feature = "cache-memory", feature = "cache-json"))]
#[tokio::test]
async fn l1_miss_promotes_from_l2() {
let dir = tempfile::tempdir().expect("tempdir failed");
let builder = CacheConfig::builder().cache_dir(dir.path().to_path_buf());
let builder = builder.persistent_backend(Some(PersistentBackendKind::Json));
let config = builder.build();
let layer = CacheLayer::from_config(&config).await.expect("from_config failed");
let video = crate::common::fixtures::load_video_fixture();
let url = "https://youtube.com/watch?v=tiered_test";
layer
.videos
.put(url.to_string(), video.clone())
.await
.expect("put failed");
let result = layer.videos.get(url).await.expect("get failed");
assert!(result.is_some());
assert_eq!(result.unwrap().id, video.id);
}
#[cfg(all(feature = "cache-memory", feature = "cache-redb"))]
#[tokio::test]
async fn l1_miss_promotes_from_l2_redb() {
let dir = tempfile::tempdir().expect("tempdir failed");
let builder = CacheConfig::builder().cache_dir(dir.path().to_path_buf());
let builder = builder.persistent_backend(Some(PersistentBackendKind::Redb));
let config = builder.build();
let layer = CacheLayer::from_config(&config).await.expect("from_config failed");
let video = crate::common::fixtures::load_video_fixture();
let url = "https://youtube.com/watch?v=tiered_redb";
layer
.videos
.put(url.to_string(), video.clone())
.await
.expect("put failed");
let result = layer.videos.get(url).await.expect("get failed");
assert!(result.is_some());
assert_eq!(result.unwrap().id, video.id);
}
#[cfg(feature = "cache-json")]
#[tokio::test]
async fn clean_all_caches() {
let dir = tempfile::tempdir().expect("tempdir failed");
let builder = CacheConfig::builder().cache_dir(dir.path().to_path_buf());
let builder = builder.persistent_backend(Some(PersistentBackendKind::Json));
let config = builder.build();
let layer = CacheLayer::from_config(&config).await.expect("from_config failed");
layer.clean().await.expect("clean failed");
}
#[cfg(feature = "cache-json")]
#[tokio::test]
async fn playlist_cache_via_layer() {
let dir = tempfile::tempdir().expect("tempdir failed");
let builder = CacheConfig::builder().cache_dir(dir.path().to_path_buf());
let builder = builder.persistent_backend(Some(PersistentBackendKind::Json));
let config = builder.build();
let layer = CacheLayer::from_config(&config).await.expect("from_config failed");
let playlist = crate::common::fixtures::load_playlist_fixture();
let url = "https://youtube.com/playlist?list=layer_pl";
layer
.playlists
.put(url.to_string(), playlist.clone())
.await
.expect("put failed");
let result = layer.playlists.get(url).await.expect("get failed");
assert!(result.is_some());
assert_eq!(result.unwrap().id, playlist.id);
}