State testing

This commit is contained in:
Imbus 2023-12-22 23:11:11 +01:00
parent 07b40105c2
commit efcb7a305b

View file

@ -55,9 +55,12 @@ impl ServerState {
None => error!("Failed to create default user..."), None => error!("Failed to create default user..."),
} }
// We want dummy posts
lipsum_setup(&pool).await.unwrap();
#[cfg(debug_assertions)] #[cfg(debug_assertions)]
debug_setup(&pool).await.unwrap(); debug_setup(&pool).await.unwrap();
lipsum_setup(&pool).await.unwrap();
Self { pool } Self { pool }
} }
} }
@ -66,48 +69,18 @@ impl ServerState {
// Mostly useful for debugging new posts, as we need to satisfy foreign key constraints. // Mostly useful for debugging new posts, as we need to satisfy foreign key constraints.
#[cfg(debug_assertions)] #[cfg(debug_assertions)]
async fn debug_setup(pool: &PgPool) -> Result<(), sqlx::Error> { async fn debug_setup(pool: &PgPool) -> Result<(), sqlx::Error> {
use lipsum::lipsum;
use rand::prelude::*;
use sqlx::query;
use crate::db::db_new_user; use crate::db::db_new_user;
db_new_user("user".to_string(), "pass".to_string(), pool).await; db_new_user("user".to_string(), "pass".to_string(), pool).await;
// Check if the demo post already exists
let no_posts = query!("SELECT * FROM posts WHERE id = 1",)
.fetch_one(pool)
.await
.ok()
.is_none();
// If the demo user already has a post, don't insert another one
if no_posts {
let mut rng = rand::thread_rng();
// This requires that the user with id 1 exists in the user table
for _ in 0..100 {
query!(
"INSERT INTO posts (user_id, content) VALUES (1, $1)",
lipsum(rng.gen_range(10..100))
)
.execute(pool)
.await?;
}
query!("INSERT INTO posts (user_id, content) VALUES (1, 'Hello world! The demo username is user and the password is pass.')",)
.execute(pool)
.await?;
}
Ok(()) Ok(())
} }
/// Inserts a bunch of dummy posts into the database
async fn lipsum_setup(pool: &PgPool) -> Result<(), sqlx::Error> { async fn lipsum_setup(pool: &PgPool) -> Result<(), sqlx::Error> {
use lipsum::lipsum; use lipsum::lipsum;
use rand::prelude::*; use rand::prelude::*;
use sqlx::query; use sqlx::query;
// Fetch any user
let user_exist = query!("SELECT * FROM users",) let user_exist = query!("SELECT * FROM users",)
.fetch_one(pool) .fetch_one(pool)
.await .await
@ -117,6 +90,7 @@ async fn lipsum_setup(pool: &PgPool) -> Result<(), sqlx::Error> {
if user_exist { if user_exist {
let mut rng = rand::thread_rng(); let mut rng = rand::thread_rng();
// Insert a 100 dummy posts.
// This requires that the user with id 1 exists in the user table // This requires that the user with id 1 exists in the user table
for _ in 0..100 { for _ in 0..100 {
query!( query!(
@ -130,3 +104,16 @@ async fn lipsum_setup(pool: &PgPool) -> Result<(), sqlx::Error> {
Ok(()) Ok(())
} }
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_server_state() {
let state = CaptchaState::new();
assert!(state.capthca_db.lock().unwrap().is_empty());
state.capthca_db.lock().unwrap().insert("test".to_string());
assert!(!state.capthca_db.lock().unwrap().is_empty());
}
}