This commit is contained in:
2025-10-10 09:39:58 +02:00
parent 4a428b9af6
commit ddce0e39b3
36 changed files with 6410 additions and 1419 deletions
+42 -8
View File
@@ -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,