1use crate::{
2 db::{Database, NewUserParams},
3 test_both_dbs,
4};
5use pretty_assertions::assert_eq;
6use std::sync::Arc;
7
8test_both_dbs!(
9 test_get_user_flags,
10 test_get_user_flags_postgres,
11 test_get_user_flags_sqlite
12);
13
14async fn test_get_user_flags(db: &Arc<Database>) {
15 let user_1 = db
16 .create_user(
17 "user1@example.com",
18 None,
19 false,
20 NewUserParams {
21 github_login: "user1".to_string(),
22 github_user_id: 1,
23 },
24 )
25 .await
26 .unwrap()
27 .user_id;
28
29 let user_2 = db
30 .create_user(
31 "user2@example.com",
32 None,
33 false,
34 NewUserParams {
35 github_login: "user2".to_string(),
36 github_user_id: 2,
37 },
38 )
39 .await
40 .unwrap()
41 .user_id;
42
43 const FEATURE_FLAG_ONE: &str = "brand-new-ux";
44 const FEATURE_FLAG_TWO: &str = "cool-feature";
45 const FEATURE_FLAG_THREE: &str = "feature-enabled-for-everyone";
46
47 let feature_flag_one = db.create_user_flag(FEATURE_FLAG_ONE, false).await.unwrap();
48 let feature_flag_two = db.create_user_flag(FEATURE_FLAG_TWO, false).await.unwrap();
49 db.create_user_flag(FEATURE_FLAG_THREE, true).await.unwrap();
50
51 db.add_user_flag(user_1, feature_flag_one).await.unwrap();
52 db.add_user_flag(user_1, feature_flag_two).await.unwrap();
53
54 db.add_user_flag(user_2, feature_flag_one).await.unwrap();
55
56 let mut user_1_flags = db.get_user_flags(user_1).await.unwrap();
57 user_1_flags.sort();
58 assert_eq!(
59 user_1_flags,
60 &[FEATURE_FLAG_ONE, FEATURE_FLAG_TWO, FEATURE_FLAG_THREE]
61 );
62
63 let mut user_2_flags = db.get_user_flags(user_2).await.unwrap();
64 user_2_flags.sort();
65 assert_eq!(user_2_flags, &[FEATURE_FLAG_ONE, FEATURE_FLAG_THREE]);
66}