use anyhow::Result;
use sqlx::PgPool;
use std::sync::Arc;
use crate::request_context::RequestContext;
use crate::session::Session;
use crate::testing::container::postgres;
pub use postgres::pg_singleton as pg_container;
#[derive(Clone)]
pub struct TestContext<C = ()> {
pub inner: C,
pub pool: PgPool
}
impl<C: Default + Clone> TestContext<C> {
pub async fn new() -> Result<Self> {
let pool = postgres::shared_pool().await?.clone();
Ok(Self { inner: C::default(), pool })
}
}
pub type Ctx<C> = RequestContext<TestContext<C>>;
pub async fn get_context<C: Default + Clone>() -> Result<RequestContext<TestContext<C>>> {
let base_pool = postgres::shared_pool().await?.clone();
let pool = Arc::new(base_pool.clone());
Ok(RequestContext::<TestContext<C>> {
db_pool: pool,
session: Session { user_id: 1 },
custom: TestContext { inner: C::default(), pool: base_pool }.into()
})
}