this repo has no description
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}