bot/src/tests.rs
2026-02-11 01:51:44 +01:00

39 lines
1.4 KiB
Rust

use crate::config::Config;
use crate::error::{AppError, AppResult};
use axum::http::StatusCode;
use axum::response::IntoResponse;
#[test]
fn test_app_error_into_response() {
let err = AppError::NotFound("Resource not found".into());
let response = err.into_response();
assert_eq!(response.status(), StatusCode::NOT_FOUND);
let err = AppError::Unauthorized("Invalid token".into());
let response = err.into_response();
assert_eq!(response.status(), StatusCode::UNAUTHORIZED);
let err = AppError::Internal("Server glitch".into());
let response = err.into_response();
assert_eq!(response.status(), StatusCode::INTERNAL_SERVER_ERROR);
}
#[tokio::test]
async fn test_config_validation() {
// We can't easily clear all env vars in multi-threaded tests,
// but we can test that it fails if a required one is missing (if we can ensure it's missing)
// However, for this environment, it's safer to test the mapping logic if it was more complex.
// Instead, let's test a helper if we had one, or just verify AppResult works as expected.
let result: AppResult<Config> = Err(AppError::Config("Missing DATABASE_URL".into()));
assert!(result.is_err());
if let Err(AppError::Config(msg)) = result {
assert_eq!(msg, "Missing DATABASE_URL");
}
}
#[test]
fn test_error_variants() {
let err = AppError::InvalidRequest("Bad input".into());
assert!(err.to_string().contains("Bad input"));
}