entertainarr 0.1.1

entertainarr server
Documentation
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")
    }
}