This PR adds a new `enabled_for_all` column to the `feature_flags` table to allow enabling a feature flag for all users. Release Notes: - N/A
65 lines
1.8 KiB
Rust
65 lines
1.8 KiB
Rust
use crate::{
|
|
db::{Database, NewUserParams},
|
|
test_both_dbs,
|
|
};
|
|
use pretty_assertions::assert_eq;
|
|
use std::sync::Arc;
|
|
|
|
test_both_dbs!(
|
|
test_get_user_flags,
|
|
test_get_user_flags_postgres,
|
|
test_get_user_flags_sqlite
|
|
);
|
|
|
|
async fn test_get_user_flags(db: &Arc<Database>) {
|
|
let user_1 = db
|
|
.create_user(
|
|
"user1@example.com",
|
|
false,
|
|
NewUserParams {
|
|
github_login: "user1".to_string(),
|
|
github_user_id: 1,
|
|
},
|
|
)
|
|
.await
|
|
.unwrap()
|
|
.user_id;
|
|
|
|
let user_2 = db
|
|
.create_user(
|
|
"user2@example.com",
|
|
false,
|
|
NewUserParams {
|
|
github_login: "user2".to_string(),
|
|
github_user_id: 2,
|
|
},
|
|
)
|
|
.await
|
|
.unwrap()
|
|
.user_id;
|
|
|
|
const FEATURE_FLAG_ONE: &str = "brand-new-ux";
|
|
const FEATURE_FLAG_TWO: &str = "cool-feature";
|
|
const FEATURE_FLAG_THREE: &str = "feature-enabled-for-everyone";
|
|
|
|
let feature_flag_one = db.create_user_flag(FEATURE_FLAG_ONE, false).await.unwrap();
|
|
let feature_flag_two = db.create_user_flag(FEATURE_FLAG_TWO, false).await.unwrap();
|
|
db.create_user_flag(FEATURE_FLAG_THREE, true).await.unwrap();
|
|
|
|
db.add_user_flag(user_1, feature_flag_one).await.unwrap();
|
|
db.add_user_flag(user_1, feature_flag_two).await.unwrap();
|
|
|
|
db.add_user_flag(user_2, feature_flag_one).await.unwrap();
|
|
|
|
let mut user_1_flags = db.get_user_flags(user_1).await.unwrap();
|
|
user_1_flags.sort();
|
|
assert_eq!(
|
|
user_1_flags,
|
|
&[FEATURE_FLAG_ONE, FEATURE_FLAG_TWO, FEATURE_FLAG_THREE]
|
|
);
|
|
|
|
let mut user_2_flags = db.get_user_flags(user_2).await.unwrap();
|
|
user_2_flags.sort();
|
|
assert_eq!(user_2_flags, &[FEATURE_FLAG_ONE, FEATURE_FLAG_THREE]);
|
|
}
|