feat(tests): move integration and unit tests to correct locations

This commit is contained in:
perf3ct 2025-07-04 19:50:29 +00:00
parent 1bb19e4bac
commit f686bc7692
20 changed files with 80 additions and 78 deletions

View File

@ -56,12 +56,14 @@ aws-credential-types = { version = "1.2", optional = true }
aws-types = { version = "1.3", optional = true } aws-types = { version = "1.3", optional = true }
sha2 = "0.10" sha2 = "0.10"
utoipa-swagger-ui = { version = "9", features = ["axum"] } utoipa-swagger-ui = { version = "9", features = ["axum"] }
testcontainers = { version = "0.24", optional = true }
testcontainers-modules = { version = "0.12", features = ["postgres"], optional = true }
[features] [features]
default = ["ocr", "s3"] default = ["ocr", "s3"]
ocr = ["tesseract", "pdf-extract", "image", "imageproc", "raw-cpuid"] ocr = ["tesseract", "pdf-extract", "image", "imageproc", "raw-cpuid"]
s3 = ["aws-config", "aws-sdk-s3", "aws-credential-types", "aws-types"] s3 = ["aws-config", "aws-sdk-s3", "aws-credential-types", "aws-types"]
test-utils = [] test-utils = ["testcontainers", "testcontainers-modules"]
[dev-dependencies] [dev-dependencies]
tempfile = "3" tempfile = "3"

View File

@ -10,13 +10,13 @@ mod tests {
username: "testuser".to_string(), username: "testuser".to_string(),
email: "test@example.com".to_string(), email: "test@example.com".to_string(),
password_hash: Some("hashed_password".to_string()), password_hash: Some("hashed_password".to_string()),
role: crate::models::UserRole::User, role: readur::models::UserRole::User,
created_at: Utc::now(), created_at: Utc::now(),
updated_at: Utc::now(), updated_at: Utc::now(),
oidc_subject: None, oidc_subject: None,
oidc_issuer: None, oidc_issuer: None,
oidc_email: None, oidc_email: None,
auth_provider: crate::models::AuthProvider::Local, auth_provider: readur::models::AuthProvider::Local,
} }
} }

View File

@ -1,6 +1,6 @@
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::config::Config; use readur::config::Config;
use std::env; use std::env;
use std::sync::Mutex; use std::sync::Mutex;

View File

@ -1,7 +1,7 @@
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::test_utils::TestContext; use readur::test_utils::TestContext;
use crate::models::{CreateUser, Document, SearchRequest}; use readur::models::{CreateUser, Document, SearchRequest};
use chrono::Utc; use chrono::Utc;
use uuid::Uuid; use uuid::Uuid;
@ -10,7 +10,7 @@ mod tests {
username: format!("testuser_{}", suffix), username: format!("testuser_{}", suffix),
email: format!("test_{}@example.com", suffix), email: format!("test_{}@example.com", suffix),
password: "password123".to_string(), password: "password123".to_string(),
role: Some(crate::models::UserRole::User), role: Some(readur::models::UserRole::User),
} }
} }

View File

@ -1,7 +1,7 @@
#[cfg(test)] #[cfg(test)]
mod document_routes_deletion_tests { mod document_routes_deletion_tests {
use crate::models::{UserRole, User, Document, AuthProvider}; use readur::models::{UserRole, User, Document, AuthProvider};
use crate::routes::documents::{BulkDeleteRequest}; use readur::routes::documents::{BulkDeleteRequest};
use axum::http::StatusCode; use axum::http::StatusCode;
use chrono::Utc; use chrono::Utc;
use serde_json::json; use serde_json::json;
@ -376,7 +376,7 @@ mod document_routes_deletion_tests {
// Low confidence deletion tests // Low confidence deletion tests
mod low_confidence_deletion_tests { mod low_confidence_deletion_tests {
use super::*; use super::*;
use crate::routes::documents::DeleteLowConfidenceRequest; use readur::routes::documents::DeleteLowConfidenceRequest;
fn create_low_confidence_document(user_id: Uuid, confidence: f32) -> Document { fn create_low_confidence_document(user_id: Uuid, confidence: f32) -> Document {
Document { Document {

View File

@ -330,8 +330,8 @@ mod tests {
#[cfg(test)] #[cfg(test)]
mod document_deletion_tests { mod document_deletion_tests {
use super::*; use super::*;
use crate::test_utils::TestContext; use readur::test_utils::TestContext;
use crate::models::{UserRole, User, Document, AuthProvider, CreateUser}; use readur::models::{UserRole, User, Document, AuthProvider, CreateUser};
use chrono::Utc; use chrono::Utc;
use uuid::Uuid; use uuid::Uuid;
@ -685,8 +685,8 @@ mod document_deletion_tests {
#[cfg(test)] #[cfg(test)]
mod rbac_deletion_tests { mod rbac_deletion_tests {
use super::*; use super::*;
use crate::test_utils::TestContext; use readur::test_utils::TestContext;
use crate::models::{UserRole, CreateUser}; use readur::models::{UserRole, CreateUser};
use uuid::Uuid; use uuid::Uuid;
#[tokio::test] #[tokio::test]
@ -1201,11 +1201,11 @@ mod deletion_error_handling_tests {
let db = &ctx.state.db; let db = &ctx.state.db;
// Create user using direct database approach // Create user using direct database approach
let user_data = crate::models::CreateUser { let user_data = readur::models::CreateUser {
username: format!("testuser_{}", Uuid::new_v4()), username: format!("testuser_{}", Uuid::new_v4()),
email: format!("test_{}@example.com", Uuid::new_v4()), email: format!("test_{}@example.com", Uuid::new_v4()),
password: "password123".to_string(), password: "password123".to_string(),
role: Some(crate::models::UserRole::User), role: Some(readur::models::UserRole::User),
}; };
let user = db.create_user(user_data).await.expect("Failed to create user"); let user = db.create_user(user_data).await.expect("Failed to create user");
@ -1228,11 +1228,11 @@ mod deletion_error_handling_tests {
let db = &ctx.state.db; let db = &ctx.state.db;
// Create user using direct database approach // Create user using direct database approach
let user_data = crate::models::CreateUser { let user_data = readur::models::CreateUser {
username: format!("testuser_{}", Uuid::new_v4()), username: format!("testuser_{}", Uuid::new_v4()),
email: format!("test_{}@example.com", Uuid::new_v4()), email: format!("test_{}@example.com", Uuid::new_v4()),
password: "password123".to_string(), password: "password123".to_string(),
role: Some(crate::models::UserRole::User), role: Some(readur::models::UserRole::User),
}; };
let user = db.create_user(user_data).await.expect("Failed to create user"); let user = db.create_user(user_data).await.expect("Failed to create user");
@ -1255,11 +1255,11 @@ mod deletion_error_handling_tests {
let db = &ctx.state.db; let db = &ctx.state.db;
// Create user using direct database approach // Create user using direct database approach
let user_data = crate::models::CreateUser { let user_data = readur::models::CreateUser {
username: format!("testuser_{}", Uuid::new_v4()), username: format!("testuser_{}", Uuid::new_v4()),
email: format!("test_{}@example.com", Uuid::new_v4()), email: format!("test_{}@example.com", Uuid::new_v4()),
password: "password123".to_string(), password: "password123".to_string(),
role: Some(crate::models::UserRole::User), role: Some(readur::models::UserRole::User),
}; };
let user = db.create_user(user_data).await.expect("Failed to create user"); let user = db.create_user(user_data).await.expect("Failed to create user");
@ -1381,19 +1381,19 @@ mod deletion_error_handling_tests {
let ctx = TestContext::new().await; let ctx = TestContext::new().await;
// Create users using direct database approach // Create users using direct database approach
let user1_data = crate::models::CreateUser { let user1_data = readur::models::CreateUser {
username: format!("testuser1_{}", Uuid::new_v4()), username: format!("testuser1_{}", Uuid::new_v4()),
email: format!("test1_{}@example.com", Uuid::new_v4()), email: format!("test1_{}@example.com", Uuid::new_v4()),
password: "password123".to_string(), password: "password123".to_string(),
role: Some(crate::models::UserRole::User), role: Some(readur::models::UserRole::User),
}; };
let user1 = ctx.state.db.create_user(user1_data).await.expect("Failed to create user1"); let user1 = ctx.state.db.create_user(user1_data).await.expect("Failed to create user1");
let user2_data = crate::models::CreateUser { let user2_data = readur::models::CreateUser {
username: format!("testuser2_{}", Uuid::new_v4()), username: format!("testuser2_{}", Uuid::new_v4()),
email: format!("test2_{}@example.com", Uuid::new_v4()), email: format!("test2_{}@example.com", Uuid::new_v4()),
password: "password123".to_string(), password: "password123".to_string(),
role: Some(crate::models::UserRole::User), role: Some(readur::models::UserRole::User),
}; };
let user2 = ctx.state.db.create_user(user2_data).await.expect("Failed to create user2"); let user2 = ctx.state.db.create_user(user2_data).await.expect("Failed to create user2");
@ -1572,7 +1572,7 @@ mod deletion_error_handling_tests {
mod low_confidence_deletion_db_tests { mod low_confidence_deletion_db_tests {
use super::*; use super::*;
use crate::models::UserRole; use readur::models::UserRole;
#[cfg(test)] #[cfg(test)]
fn create_test_document_with_confidence(user_id: Uuid, confidence: f32) -> Document { fn create_test_document_with_confidence(user_id: Uuid, confidence: f32) -> Document {
@ -1900,7 +1900,7 @@ mod deletion_error_handling_tests {
// Test as regular user // Test as regular user
let failed_docs = database let failed_docs = database
.find_failed_ocr_documents(user_id, crate::models::UserRole::User, 100, 0) .find_failed_ocr_documents(user_id, readur::models::UserRole::User, 100, 0)
.await .await
.unwrap(); .unwrap();
@ -1916,7 +1916,7 @@ mod deletion_error_handling_tests {
// Test as admin // Test as admin
let admin_failed_docs = database let admin_failed_docs = database
.find_failed_ocr_documents(admin_user_id, crate::models::UserRole::Admin, 100, 0) .find_failed_ocr_documents(admin_user_id, readur::models::UserRole::Admin, 100, 0)
.await .await
.unwrap(); .unwrap();
@ -1974,7 +1974,7 @@ mod deletion_error_handling_tests {
// Test with threshold of 50% - should include low confidence and failed only // Test with threshold of 50% - should include low confidence and failed only
let threshold_50_docs = database let threshold_50_docs = database
.find_low_confidence_and_failed_documents(user_id, crate::models::UserRole::User, 50.0, 100, 0) .find_low_confidence_and_failed_documents(user_id, readur::models::UserRole::User, 50.0, 100, 0)
.await .await
.unwrap(); .unwrap();
@ -1989,7 +1989,7 @@ mod deletion_error_handling_tests {
// Test with threshold of 70% - should include low and medium confidence and failed only // Test with threshold of 70% - should include low and medium confidence and failed only
let threshold_70_docs = database let threshold_70_docs = database
.find_low_confidence_and_failed_documents(user_id, crate::models::UserRole::User, 70.0, 100, 0) .find_low_confidence_and_failed_documents(user_id, readur::models::UserRole::User, 70.0, 100, 0)
.await .await
.unwrap(); .unwrap();
@ -2004,7 +2004,7 @@ mod deletion_error_handling_tests {
// Test with threshold of 100% - should include all confidence levels and failed only // Test with threshold of 100% - should include all confidence levels and failed only
let threshold_100_docs = database let threshold_100_docs = database
.find_low_confidence_and_failed_documents(user_id, crate::models::UserRole::User, 100.0, 100, 0) .find_low_confidence_and_failed_documents(user_id, readur::models::UserRole::User, 100.0, 100, 0)
.await .await
.unwrap(); .unwrap();
@ -2019,7 +2019,7 @@ mod deletion_error_handling_tests {
// Test with threshold of 0% - should only include failed documents // Test with threshold of 0% - should only include failed documents
let threshold_0_docs = database let threshold_0_docs = database
.find_low_confidence_and_failed_documents(user_id, crate::models::UserRole::User, 0.0, 100, 0) .find_low_confidence_and_failed_documents(user_id, readur::models::UserRole::User, 0.0, 100, 0)
.await .await
.unwrap(); .unwrap();
@ -2068,7 +2068,7 @@ mod deletion_error_handling_tests {
// Test original method - should only find documents with explicit confidence below threshold // Test original method - should only find documents with explicit confidence below threshold
let original_results = database let original_results = database
.find_documents_by_confidence_threshold(user_id, crate::models::UserRole::User, 50.0, 100, 0) .find_documents_by_confidence_threshold(user_id, readur::models::UserRole::User, 50.0, 100, 0)
.await .await
.unwrap(); .unwrap();
@ -2088,11 +2088,11 @@ mod deletion_error_handling_tests {
let database = &ctx.state.db; let database = &ctx.state.db;
// Create user using direct database approach // Create user using direct database approach
let user_data = crate::models::CreateUser { let user_data = readur::models::CreateUser {
username: format!("testuser_{}", Uuid::new_v4()), username: format!("testuser_{}", Uuid::new_v4()),
email: format!("test_{}@example.com", Uuid::new_v4()), email: format!("test_{}@example.com", Uuid::new_v4()),
password: "password123".to_string(), password: "password123".to_string(),
role: Some(crate::models::UserRole::User), role: Some(readur::models::UserRole::User),
}; };
let user = database.create_user(user_data).await.expect("Failed to create user"); let user = database.create_user(user_data).await.expect("Failed to create user");
let user_id = user.id; let user_id = user.id;
@ -2122,7 +2122,7 @@ mod deletion_error_handling_tests {
// Test ordering in combined query // Test ordering in combined query
let results = database let results = database
.find_low_confidence_and_failed_documents(user_id, crate::models::UserRole::User, 50.0, 100, 0) .find_low_confidence_and_failed_documents(user_id, readur::models::UserRole::User, 50.0, 100, 0)
.await .await
.unwrap(); .unwrap();
@ -2153,20 +2153,20 @@ mod deletion_error_handling_tests {
let database = &ctx.state.db; let database = &ctx.state.db;
// Create users using direct database approach // Create users using direct database approach
let user1_data = crate::models::CreateUser { let user1_data = readur::models::CreateUser {
username: format!("testuser1_{}", Uuid::new_v4()), username: format!("testuser1_{}", Uuid::new_v4()),
email: format!("test1_{}@example.com", Uuid::new_v4()), email: format!("test1_{}@example.com", Uuid::new_v4()),
password: "password123".to_string(), password: "password123".to_string(),
role: Some(crate::models::UserRole::User), role: Some(readur::models::UserRole::User),
}; };
let user1 = database.create_user(user1_data).await.expect("Failed to create user1"); let user1 = database.create_user(user1_data).await.expect("Failed to create user1");
let user1_id = user1.id; let user1_id = user1.id;
let user2_data = crate::models::CreateUser { let user2_data = readur::models::CreateUser {
username: format!("testuser2_{}", Uuid::new_v4()), username: format!("testuser2_{}", Uuid::new_v4()),
email: format!("test2_{}@example.com", Uuid::new_v4()), email: format!("test2_{}@example.com", Uuid::new_v4()),
password: "password123".to_string(), password: "password123".to_string(),
role: Some(crate::models::UserRole::User), role: Some(readur::models::UserRole::User),
}; };
let user2 = database.create_user(user2_data).await.expect("Failed to create user2"); let user2 = database.create_user(user2_data).await.expect("Failed to create user2");
let user2_id = user2.id; let user2_id = user2.id;
@ -2195,7 +2195,7 @@ mod deletion_error_handling_tests {
// Test user1 can only see their documents // Test user1 can only see their documents
let user1_results = database let user1_results = database
.find_low_confidence_and_failed_documents(user1_id, crate::models::UserRole::User, 50.0, 100, 0) .find_low_confidence_and_failed_documents(user1_id, readur::models::UserRole::User, 50.0, 100, 0)
.await .await
.unwrap(); .unwrap();
@ -2208,7 +2208,7 @@ mod deletion_error_handling_tests {
// Test user2 can only see their documents // Test user2 can only see their documents
let user2_results = database let user2_results = database
.find_low_confidence_and_failed_documents(user2_id, crate::models::UserRole::User, 50.0, 100, 0) .find_low_confidence_and_failed_documents(user2_id, readur::models::UserRole::User, 50.0, 100, 0)
.await .await
.unwrap(); .unwrap();
@ -2221,7 +2221,7 @@ mod deletion_error_handling_tests {
// Test admin can see all documents // Test admin can see all documents
let admin_results = database let admin_results = database
.find_low_confidence_and_failed_documents(user1_id, crate::models::UserRole::Admin, 50.0, 100, 0) .find_low_confidence_and_failed_documents(user1_id, readur::models::UserRole::Admin, 50.0, 100, 0)
.await .await
.unwrap(); .unwrap();

View File

@ -1,7 +1,7 @@
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::ocr::enhanced::{EnhancedOcrService, OcrResult, ImageQualityStats}; use readur::ocr::enhanced::{EnhancedOcrService, OcrResult, ImageQualityStats};
use crate::models::Settings; use readur::models::Settings;
use std::fs; use std::fs;
use tempfile::{NamedTempFile, TempDir}; use tempfile::{NamedTempFile, TempDir};

View File

@ -1,7 +1,7 @@
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::db::Database; use readur::db::Database;
use crate::models::{ use readur::models::{
CreateUser, Document, SearchRequest, SearchMode, CreateUser, Document, SearchRequest, SearchMode,
EnhancedDocumentResponse, SearchSnippet, HighlightRange EnhancedDocumentResponse, SearchSnippet, HighlightRange
}; };
@ -901,7 +901,7 @@ mod tests {
#[tokio::test] #[tokio::test]
#[ignore = "Requires PostgreSQL database for integration testing"] #[ignore = "Requires PostgreSQL database for integration testing"]
async fn test_enhanced_search_integration() { async fn test_enhanced_search_integration() {
use crate::test_utils::{TestContext, TestAuthHelper}; use readur::test_utils::{TestContext, TestAuthHelper};
let ctx = TestContext::new().await; let ctx = TestContext::new().await;
let auth_helper = TestAuthHelper::new(ctx.app.clone()); let auth_helper = TestAuthHelper::new(ctx.app.clone());

View File

@ -1,4 +1,4 @@
use crate::db::constraint_validation::ConstraintValidator; use readur::db::constraint_validation::ConstraintValidator;
/// Simple unit tests for failed_documents functionality /// Simple unit tests for failed_documents functionality
/// These tests focus on business logic and constraint validation /// These tests focus on business logic and constraint validation

View File

@ -1,7 +1,7 @@
#[cfg(test)] #[cfg(test)]
use crate::services::file_service::FileService; use readur::services::file_service::FileService;
#[cfg(test)] #[cfg(test)]
use crate::models::Document; use readur::models::Document;
#[cfg(test)] #[cfg(test)]
use std::fs; use std::fs;
#[cfg(test)] #[cfg(test)]

View File

@ -1,12 +1,12 @@
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::db::ignored_files::{ use readur::db::ignored_files::{
create_ignored_file, list_ignored_files, get_ignored_file_by_id, delete_ignored_file, create_ignored_file, list_ignored_files, get_ignored_file_by_id, delete_ignored_file,
is_file_ignored, count_ignored_files, bulk_delete_ignored_files, is_file_ignored, count_ignored_files, bulk_delete_ignored_files,
create_ignored_file_from_document create_ignored_file_from_document
}; };
use crate::models::{CreateIgnoredFile, IgnoredFilesQuery, User, UserRole, Document, AuthProvider}; use readur::models::{CreateIgnoredFile, IgnoredFilesQuery, User, UserRole, Document, AuthProvider};
use crate::test_utils::{TestContext, TestAuthHelper}; use readur::test_utils::{TestContext, TestAuthHelper};
use uuid::Uuid; use uuid::Uuid;
use chrono::Utc; use chrono::Utc;
@ -197,7 +197,7 @@ mod tests {
let ctx = TestContext::new().await; let ctx = TestContext::new().await;
let auth_helper = TestAuthHelper::new(ctx.app.clone()); let auth_helper = TestAuthHelper::new(ctx.app.clone());
let user = auth_helper.create_test_user().await; let user = auth_helper.create_test_user().await;
let document = ctx.state.db.create_document(crate::models::Document { let document = ctx.state.db.create_document(readur::models::Document {
id: Uuid::new_v4(), id: Uuid::new_v4(),
filename: "test_document.pdf".to_string(), filename: "test_document.pdf".to_string(),
original_filename: "test_document.pdf".to_string(), original_filename: "test_document.pdf".to_string(),

View File

@ -1,9 +1,9 @@
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use crate::models::UserRole; use readur::models::UserRole;
use crate::routes::labels::{CreateLabel, UpdateLabel, LabelAssignment, Label}; use readur::routes::labels::{CreateLabel, UpdateLabel, LabelAssignment, Label};
use crate::test_utils::{TestContext, TestAuthHelper}; use readur::test_utils::{TestContext, TestAuthHelper};
use axum::http::StatusCode; use axum::http::StatusCode;
use chrono::Utc; use chrono::Utc;
use serde_json::json; use serde_json::json;

View File

@ -1,7 +1,7 @@
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::db::ocr_retry::*; use readur::db::ocr_retry::*;
use crate::test_utils::{TestContext, TestAuthHelper}; use readur::test_utils::{TestContext, TestAuthHelper};
use sqlx::Row; use sqlx::Row;
use uuid::Uuid; use uuid::Uuid;

View File

@ -4,7 +4,7 @@ mod ocr_retry_regression_tests {
use testcontainers::{runners::AsyncRunner, ContainerAsync}; use testcontainers::{runners::AsyncRunner, ContainerAsync};
use testcontainers_modules::postgres::Postgres; use testcontainers_modules::postgres::Postgres;
use uuid::Uuid; use uuid::Uuid;
use crate::routes::documents_ocr_retry::DocumentInfo; use readur::routes::documents_ocr_retry::DocumentInfo;
async fn setup_test_db() -> (ContainerAsync<Postgres>, PgPool) { async fn setup_test_db() -> (ContainerAsync<Postgres>, PgPool) {
let postgres_image = Postgres::default(); let postgres_image = Postgres::default();

View File

@ -14,7 +14,7 @@ mod tests {
.or_else(|_| std::env::var("DATABASE_URL")) .or_else(|_| std::env::var("DATABASE_URL"))
.unwrap_or_else(|_| "postgresql://readur:readur@localhost:5432/readur".to_string()); .unwrap_or_else(|_| "postgresql://readur:readur@localhost:5432/readur".to_string());
let config = crate::config::Config { let config = readur::config::Config {
database_url: database_url.clone(), database_url: database_url.clone(),
server_address: "127.0.0.1:0".to_string(), server_address: "127.0.0.1:0".to_string(),
jwt_secret: "test-secret".to_string(), jwt_secret: "test-secret".to_string(),
@ -37,7 +37,7 @@ mod tests {
oidc_redirect_uri: None, oidc_redirect_uri: None,
}; };
let db = crate::db::Database::new(&config.database_url).await.unwrap(); let db = readur::db::Database::new(&config.database_url).await.unwrap();
// Retry migration up to 3 times to handle concurrent test execution // Retry migration up to 3 times to handle concurrent test execution
for attempt in 1..=3 { for attempt in 1..=3 {
@ -53,13 +53,13 @@ mod tests {
} }
let app = axum::Router::new() let app = axum::Router::new()
.nest("/api/auth", crate::routes::auth::router()) .nest("/api/auth", readur::routes::auth::router())
.with_state(Arc::new(AppState { .with_state(Arc::new(AppState {
db: db.clone(), db: db.clone(),
config, config,
webdav_scheduler: None, webdav_scheduler: None,
source_scheduler: None, source_scheduler: None,
queue_service: Arc::new(crate::ocr::queue::OcrQueueService::new( queue_service: Arc::new(readur::ocr::queue::OcrQueueService::new(
db.clone(), db.clone(),
db.pool.clone(), db.pool.clone(),
2 2
@ -93,7 +93,7 @@ mod tests {
.unwrap_or_else(|_| "postgresql://readur:readur@localhost:5432/readur".to_string()); .unwrap_or_else(|_| "postgresql://readur:readur@localhost:5432/readur".to_string());
// Update the app state to include OIDC client // Update the app state to include OIDC client
let config = crate::config::Config { let config = readur::config::Config {
database_url: database_url.clone(), database_url: database_url.clone(),
server_address: "127.0.0.1:0".to_string(), server_address: "127.0.0.1:0".to_string(),
jwt_secret: "test-secret".to_string(), jwt_secret: "test-secret".to_string(),
@ -124,7 +124,7 @@ mod tests {
}; };
// Connect to the database and run migrations with retry logic for concurrency // Connect to the database and run migrations with retry logic for concurrency
let db = crate::db::Database::new(&config.database_url).await.unwrap(); let db = readur::db::Database::new(&config.database_url).await.unwrap();
// Retry migration up to 3 times to handle concurrent test execution // Retry migration up to 3 times to handle concurrent test execution
for attempt in 1..=3 { for attempt in 1..=3 {
@ -141,13 +141,13 @@ mod tests {
// Create app with OIDC configuration // Create app with OIDC configuration
let app = axum::Router::new() let app = axum::Router::new()
.nest("/api/auth", crate::routes::auth::router()) .nest("/api/auth", readur::routes::auth::router())
.with_state(Arc::new(AppState { .with_state(Arc::new(AppState {
db: db.clone(), db: db.clone(),
config, config,
webdav_scheduler: None, webdav_scheduler: None,
source_scheduler: None, source_scheduler: None,
queue_service: Arc::new(crate::ocr::queue::OcrQueueService::new( queue_service: Arc::new(readur::ocr::queue::OcrQueueService::new(
db.clone(), db.clone(),
db.pool.clone(), db.pool.clone(),
2 2
@ -249,7 +249,7 @@ mod tests {
let database_url = std::env::var("TEST_DATABASE_URL") let database_url = std::env::var("TEST_DATABASE_URL")
.or_else(|_| std::env::var("DATABASE_URL")) .or_else(|_| std::env::var("DATABASE_URL"))
.unwrap_or_else(|_| "postgresql://readur:readur@localhost:5432/readur".to_string()); .unwrap_or_else(|_| "postgresql://readur:readur@localhost:5432/readur".to_string());
let db = crate::db::Database::new(&database_url).await.unwrap(); let db = readur::db::Database::new(&database_url).await.unwrap();
// Delete any existing user with the test username or OIDC subject // Delete any existing user with the test username or OIDC subject
let _ = sqlx::query("DELETE FROM users WHERE username = $1 OR oidc_subject = $2") let _ = sqlx::query("DELETE FROM users WHERE username = $1 OR oidc_subject = $2")
@ -377,7 +377,7 @@ mod tests {
let database_url = std::env::var("TEST_DATABASE_URL") let database_url = std::env::var("TEST_DATABASE_URL")
.or_else(|_| std::env::var("DATABASE_URL")) .or_else(|_| std::env::var("DATABASE_URL"))
.unwrap_or_else(|_| "postgresql://readur:readur@localhost:5432/readur".to_string()); .unwrap_or_else(|_| "postgresql://readur:readur@localhost:5432/readur".to_string());
let db = crate::db::Database::new(&database_url).await.unwrap(); let db = readur::db::Database::new(&database_url).await.unwrap();
// Delete any existing user that might conflict // Delete any existing user that might conflict
let _ = sqlx::query("DELETE FROM users WHERE username = $1 OR oidc_subject = $2") let _ = sqlx::query("DELETE FROM users WHERE username = $1 OR oidc_subject = $2")

View File

@ -1,7 +1,7 @@
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::models::UpdateSettings; use readur::models::UpdateSettings;
use crate::test_utils::{TestContext, TestAuthHelper}; use readur::test_utils::{TestContext, TestAuthHelper};
use axum::http::StatusCode; use axum::http::StatusCode;
use serde_json::json; use serde_json::json;
use tower::util::ServiceExt; use tower::util::ServiceExt;

View File

@ -6,7 +6,7 @@
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::test_utils::TestContext; use readur::test_utils::TestContext;
use sqlx::Row; use sqlx::Row;
use uuid::Uuid; use uuid::Uuid;

View File

@ -1,7 +1,7 @@
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::models::{CreateUser, UpdateUser, UserResponse, AuthProvider, UserRole}; use readur::models::{CreateUser, UpdateUser, UserResponse, AuthProvider, UserRole};
use crate::test_utils::{TestContext, TestAuthHelper}; use readur::test_utils::{TestContext, TestAuthHelper};
use axum::http::StatusCode; use axum::http::StatusCode;
use serde_json::json; use serde_json::json;
use tower::util::ServiceExt; use tower::util::ServiceExt;
@ -110,7 +110,7 @@ mod tests {
username: "newuser".to_string(), username: "newuser".to_string(),
email: "new@example.com".to_string(), email: "new@example.com".to_string(),
password: "newpassword".to_string(), password: "newpassword".to_string(),
role: Some(crate::models::UserRole::User), role: Some(readur::models::UserRole::User),
}; };
let response = ctx.app let response = ctx.app

View File

@ -1,4 +1,4 @@
use crate::test_utils::TestContext; use readur::test_utils::TestContext;
use uuid; use uuid;
#[cfg(test)] #[cfg(test)]

View File

@ -1,4 +1,4 @@
use crate::test_utils::TestContext; use readur::test_utils::TestContext;
use sqlx::Row; use sqlx::Row;
use uuid::Uuid; use uuid::Uuid;