use async_trait::async_trait;
use garrison::error::GarrisonResult;
use garrison::stp::GarrisonInterface;
pub struct VecBoostInterface {
admin_username: String,
}
impl VecBoostInterface {
pub fn new(admin_username: String) -> Self {
Self { admin_username }
}
}
#[async_trait]
impl GarrisonInterface for VecBoostInterface {
async fn get_permission_list(&self, login_id: &str) -> GarrisonResult<Vec<String>> {
if login_id == self.admin_username {
Ok(vec!["*".to_string()])
} else {
Ok(vec![
"embedding:read".to_string(),
"embedding:write".to_string(),
])
}
}
async fn get_role_list(&self, login_id: &str) -> GarrisonResult<Vec<String>> {
if login_id == self.admin_username {
Ok(vec!["admin".to_string()])
} else {
Ok(vec!["user".to_string()])
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[tokio::test]
async fn test_admin_gets_all_permissions() {
let interface = VecBoostInterface::new("admin".to_string());
let perms = interface.get_permission_list("admin").await.unwrap();
assert_eq!(perms, vec!["*"]);
}
#[tokio::test]
async fn test_admin_gets_admin_role() {
let interface = VecBoostInterface::new("admin".to_string());
let roles = interface.get_role_list("admin").await.unwrap();
assert_eq!(roles, vec!["admin"]);
}
#[tokio::test]
async fn test_normal_user_gets_basic_permissions() {
let interface = VecBoostInterface::new("admin".to_string());
let perms = interface.get_permission_list("normal_user").await.unwrap();
assert_eq!(perms, vec!["embedding:read", "embedding:write"]);
}
#[tokio::test]
async fn test_normal_user_gets_user_role() {
let interface = VecBoostInterface::new("admin".to_string());
let roles = interface.get_role_list("normal_user").await.unwrap();
assert_eq!(roles, vec!["user"]);
}
#[tokio::test]
async fn test_nonexistent_user_gets_basic_permissions() {
let interface = VecBoostInterface::new("admin".to_string());
let perms = interface.get_permission_list("nonexistent").await.unwrap();
assert_eq!(perms, vec!["embedding:read", "embedding:write"]);
}
#[tokio::test]
async fn test_nonexistent_user_gets_user_role() {
let interface = VecBoostInterface::new("admin".to_string());
let roles = interface.get_role_list("nonexistent").await.unwrap();
assert_eq!(roles, vec!["user"]);
}
}