1use chrono::Utc;
2
3use crate::{
4 db::{Database, NewUserParams},
5 test_both_dbs,
6};
7use std::sync::Arc;
8
9test_both_dbs!(
10 test_accepted_tos,
11 test_accepted_tos_postgres,
12 test_accepted_tos_sqlite
13);
14
15async fn test_accepted_tos(db: &Arc<Database>) {
16 let user_id = db
17 .create_user(
18 "user1@example.com",
19 None,
20 false,
21 NewUserParams {
22 github_login: "user1".to_string(),
23 github_user_id: 1,
24 },
25 )
26 .await
27 .unwrap()
28 .user_id;
29
30 let user = db.get_user_by_id(user_id).await.unwrap().unwrap();
31 assert!(user.accepted_tos_at.is_none());
32
33 let accepted_tos_at = Utc::now().naive_utc();
34 db.set_user_accepted_tos_at(user_id, Some(accepted_tos_at))
35 .await
36 .unwrap();
37
38 let user = db.get_user_by_id(user_id).await.unwrap().unwrap();
39 assert!(user.accepted_tos_at.is_some());
40 assert_eq!(user.accepted_tos_at, Some(accepted_tos_at));
41
42 db.set_user_accepted_tos_at(user_id, None).await.unwrap();
43
44 let user = db.get_user_by_id(user_id).await.unwrap().unwrap();
45 assert!(user.accepted_tos_at.is_none());
46}
47
48test_both_dbs!(
49 test_destroy_user_cascade_deletes_access_tokens,
50 test_destroy_user_cascade_deletes_access_tokens_postgres,
51 test_destroy_user_cascade_deletes_access_tokens_sqlite
52);
53
54async fn test_destroy_user_cascade_deletes_access_tokens(db: &Arc<Database>) {
55 let user_id = db
56 .create_user(
57 "user1@example.com",
58 Some("user1"),
59 false,
60 NewUserParams {
61 github_login: "user1".to_string(),
62 github_user_id: 12345,
63 },
64 )
65 .await
66 .unwrap()
67 .user_id;
68
69 let user = db.get_user_by_id(user_id).await.unwrap();
70 assert!(user.is_some());
71
72 let token_1_id = db
73 .create_access_token(user_id, None, "token-1", 10)
74 .await
75 .unwrap();
76
77 let token_2_id = db
78 .create_access_token(user_id, None, "token-2", 10)
79 .await
80 .unwrap();
81
82 let token_1 = db.get_access_token(token_1_id).await;
83 let token_2 = db.get_access_token(token_2_id).await;
84 assert!(token_1.is_ok());
85 assert!(token_2.is_ok());
86
87 db.destroy_user(user_id).await.unwrap();
88
89 let user = db.get_user_by_id(user_id).await.unwrap();
90 assert!(user.is_none());
91
92 let token_1 = db.get_access_token(token_1_id).await;
93 let token_2 = db.get_access_token(token_2_id).await;
94 assert!(token_1.is_err());
95 assert!(token_2.is_err());
96}