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}