this repo has no description
1mod common; 2use sqlx::PgPool; 3use tranquil_pds::comms::{ 4 CommsChannel, CommsStatus, CommsType, NewComms, enqueue_comms, enqueue_welcome, 5}; 6 7async fn get_pool() -> PgPool { 8 let conn_str = common::get_db_connection_string().await; 9 sqlx::postgres::PgPoolOptions::new() 10 .max_connections(5) 11 .connect(&conn_str) 12 .await 13 .expect("Failed to connect to test database") 14} 15 16#[tokio::test] 17async fn test_enqueue_comms() { 18 let pool = get_pool().await; 19 let (_, did) = common::create_account_and_login(&common::client()).await; 20 let user_id: uuid::Uuid = sqlx::query_scalar!("SELECT id FROM users WHERE did = $1", did) 21 .fetch_one(&pool) 22 .await 23 .expect("User not found"); 24 let item = NewComms::email( 25 user_id, 26 CommsType::Welcome, 27 "test@example.com".to_string(), 28 "Test Subject".to_string(), 29 "Test body".to_string(), 30 ); 31 let comms_id = enqueue_comms(&pool, item) 32 .await 33 .expect("Failed to enqueue comms"); 34 let row = sqlx::query!( 35 r#" 36 SELECT 37 id, user_id, recipient, subject, body, 38 channel as "channel: CommsChannel", 39 comms_type as "comms_type: CommsType", 40 status as "status: CommsStatus" 41 FROM comms_queue 42 WHERE id = $1 43 "#, 44 comms_id 45 ) 46 .fetch_one(&pool) 47 .await 48 .expect("Comms not found"); 49 assert_eq!(row.user_id, user_id); 50 assert_eq!(row.recipient, "test@example.com"); 51 assert_eq!(row.subject.as_deref(), Some("Test Subject")); 52 assert_eq!(row.body, "Test body"); 53 assert_eq!(row.channel, CommsChannel::Email); 54 assert_eq!(row.comms_type, CommsType::Welcome); 55 assert_eq!(row.status, CommsStatus::Pending); 56} 57 58#[tokio::test] 59async fn test_enqueue_welcome() { 60 let pool = get_pool().await; 61 let (_, did) = common::create_account_and_login(&common::client()).await; 62 let user_row = sqlx::query!("SELECT id, email, handle FROM users WHERE did = $1", did) 63 .fetch_one(&pool) 64 .await 65 .expect("User not found"); 66 let comms_id = enqueue_welcome(&pool, user_row.id, "example.com") 67 .await 68 .expect("Failed to enqueue welcome comms"); 69 let row = sqlx::query!( 70 r#" 71 SELECT 72 recipient, subject, body, 73 comms_type as "comms_type: CommsType" 74 FROM comms_queue 75 WHERE id = $1 76 "#, 77 comms_id 78 ) 79 .fetch_one(&pool) 80 .await 81 .expect("Comms not found"); 82 assert_eq!(Some(row.recipient), user_row.email); 83 assert_eq!(row.subject.as_deref(), Some("Welcome to example.com")); 84 assert!(row.body.contains(&format!("@{}", user_row.handle))); 85 assert_eq!(row.comms_type, CommsType::Welcome); 86} 87 88#[tokio::test] 89async fn test_comms_queue_status_index() { 90 let pool = get_pool().await; 91 let (_, did) = common::create_account_and_login(&common::client()).await; 92 let user_id: uuid::Uuid = sqlx::query_scalar!("SELECT id FROM users WHERE did = $1", did) 93 .fetch_one(&pool) 94 .await 95 .expect("User not found"); 96 let initial_count: i64 = sqlx::query_scalar!( 97 "SELECT COUNT(*) FROM comms_queue WHERE status = 'pending' AND user_id = $1", 98 user_id 99 ) 100 .fetch_one(&pool) 101 .await 102 .expect("Failed to count") 103 .unwrap_or(0); 104 for i in 0..5 { 105 let item = NewComms::email( 106 user_id, 107 CommsType::PasswordReset, 108 format!("test{}@example.com", i), 109 "Test".to_string(), 110 "Body".to_string(), 111 ); 112 enqueue_comms(&pool, item).await.expect("Failed to enqueue"); 113 } 114 let final_count: i64 = sqlx::query_scalar!( 115 "SELECT COUNT(*) FROM comms_queue WHERE status = 'pending' AND user_id = $1", 116 user_id 117 ) 118 .fetch_one(&pool) 119 .await 120 .expect("Failed to count") 121 .unwrap_or(0); 122 assert_eq!(final_count - initial_count, 5); 123}