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