feature_flag_tests.rs

 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}