feat(tests): move integration and unit tests to correct locations
This commit is contained in:
parent
1bb19e4bac
commit
f686bc7692
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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());
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)]
|
||||||
|
|
|
||||||
|
|
@ -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(),
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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")
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::test_utils::TestContext;
|
use readur::test_utils::TestContext;
|
||||||
use uuid;
|
use uuid;
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue