2
This commit is contained in:
@@ -17,7 +17,7 @@ use once_cell::sync::Lazy;
|
||||
use paperless_backend::auth::jwt::JwtService;
|
||||
use paperless_backend::config::AppConfig;
|
||||
use paperless_backend::db::{self, PgPool};
|
||||
use paperless_backend::models::NewUser;
|
||||
use paperless_backend::models::{Job, NewUser};
|
||||
use paperless_backend::routes;
|
||||
use paperless_backend::state::AppState;
|
||||
use paperless_backend::storage::ObjectStorage;
|
||||
@@ -70,6 +70,14 @@ impl ObjectStorage for FakeStorage {
|
||||
expires_in.as_secs()
|
||||
))
|
||||
}
|
||||
|
||||
async fn get_object(&self, key: &str) -> Result<Vec<u8>> {
|
||||
let guard = self.objects.lock().await;
|
||||
guard
|
||||
.get(key)
|
||||
.map(|obj| obj.bytes.clone())
|
||||
.ok_or_else(|| anyhow!("object {key} missing"))
|
||||
}
|
||||
}
|
||||
|
||||
impl FakeStorage {
|
||||
@@ -93,11 +101,9 @@ pub struct TestApp {
|
||||
}
|
||||
|
||||
impl TestApp {
|
||||
pub async fn new() -> Result<Option<Self>> {
|
||||
let database_url = match env::var("TEST_DATABASE_URL") {
|
||||
Ok(url) => url,
|
||||
Err(_) => return Ok(None),
|
||||
};
|
||||
pub async fn new() -> Result<Self> {
|
||||
let database_url = env::var("TEST_DATABASE_URL")
|
||||
.context("TEST_DATABASE_URL must be set for integration tests")?;
|
||||
|
||||
let config = AppConfig {
|
||||
database_url: database_url.clone(),
|
||||
@@ -123,11 +129,11 @@ impl TestApp {
|
||||
let state = AppState::new(pool.clone(), config, storage_for_state, jwt);
|
||||
let router = routes::create_router(state.clone());
|
||||
|
||||
Ok(Some(Self {
|
||||
Ok(Self {
|
||||
state,
|
||||
router,
|
||||
storage,
|
||||
}))
|
||||
})
|
||||
}
|
||||
|
||||
pub async fn cleanup(&self) -> Result<()> {
|
||||
@@ -199,6 +205,34 @@ impl TestApp {
|
||||
Ok(parsed.access_token)
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub async fn clear_jobs(&self) -> Result<()> {
|
||||
self.with_conn(|conn| {
|
||||
use paperless_backend::schema::jobs::dsl::jobs as jobs_table;
|
||||
diesel::delete(jobs_table)
|
||||
.execute(conn)
|
||||
.context("failed to clear jobs")?;
|
||||
Ok(())
|
||||
})
|
||||
.await
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub async fn jobs_by_type(&self, ty: &str) -> Result<Vec<Job>> {
|
||||
let ty = ty.to_string();
|
||||
self.with_conn(move |conn| {
|
||||
use paperless_backend::schema::jobs::dsl::{
|
||||
job_type as job_type_col, jobs as jobs_table,
|
||||
};
|
||||
let rows = jobs_table
|
||||
.filter(job_type_col.eq(&ty))
|
||||
.load::<Job>(conn)
|
||||
.context("failed to load jobs")?;
|
||||
Ok(rows)
|
||||
})
|
||||
.await
|
||||
}
|
||||
|
||||
pub async fn post_json<T: Serialize + ?Sized>(
|
||||
&self,
|
||||
path: &str,
|
||||
|
||||
Reference in New Issue
Block a user