use std::borrow::Cow;
use std::time::Duration;
#[allow(unused, reason = "only for testing")]
pub struct Server {
tmdb_server: mockito::ServerGuard,
handler: tokio::task::JoinHandle<anyhow::Result<()>>,
tmpdir: tempfile::TempDir,
}
impl Server {
pub async fn new() -> Self {
let tmpdir = tempfile::tempdir().unwrap();
let tmdb_server = mockito::Server::new_async().await;
let config = entertainarr::Config {
http_server: entertainarr_adapter_http::server::Config {
address: std::net::IpAddr::V4(std::net::Ipv4Addr::LOCALHOST),
port: 3000,
},
jsonwebtoken: Default::default(),
rss: Default::default(),
scheduler: entertainarr_adapter_scheduler::Config {
media_sync_interval: Duration::from_hours(24),
podcast_sync_interval: Duration::from_hours(24),
tvshow_sync_interval: Duration::from_hours(24),
},
sqlite: entertainarr_adapter_sqlite::Config {
url: Cow::Owned(
tmpdir
.path()
.join("database.db")
.to_string_lossy()
.to_string(),
),
},
storage: entertainarr_adapter_filesystem::Config::default(),
tmdb: entertainarr_adapter_tmdb::Config::new(tmdb_server.url(), "api-key"),
worker: entertainarr_adapter_worker::Config::default(),
};
let app = config.build().await.unwrap();
let handler = tokio::spawn(app.run());
tokio::time::sleep(Duration::from_millis(500)).await;
Self {
handler,
tmdb_server,
tmpdir,
}
}
pub fn client(&self) -> entertainarr_adapter_http::client::Client {
entertainarr_adapter_http::client::Client::new("http://localhost:3000")
}
}