You've already forked AstralRinth
forked from didirus/AstralRinth
@@ -1093,21 +1093,44 @@ async fn get_project_permissions(
|
||||
project_id: &str,
|
||||
setup_api: &ApiV3,
|
||||
) -> ProjectPermissions {
|
||||
let resp = setup_api.get_project_members(project_id, user_pat).await;
|
||||
let permissions = if resp.status().as_u16() == 200 {
|
||||
let value: serde_json::Value = test::read_body_json(resp).await;
|
||||
value
|
||||
.as_array()
|
||||
.unwrap()
|
||||
.iter()
|
||||
.find(|member| member["user"]["id"].as_str().unwrap() == user_id)
|
||||
.map(|member| member["permissions"].as_u64().unwrap())
|
||||
.unwrap_or_default()
|
||||
} else {
|
||||
0
|
||||
let project = setup_api
|
||||
.get_project_deserialized(project_id, user_pat)
|
||||
.await;
|
||||
let project_team_id = project.team_id.to_string();
|
||||
let organization_id = project.organization.map(|id| id.to_string());
|
||||
|
||||
let organization = match organization_id {
|
||||
Some(id) => Some(setup_api.get_organization_deserialized(&id, user_pat).await),
|
||||
None => None,
|
||||
};
|
||||
|
||||
ProjectPermissions::from_bits_truncate(permissions)
|
||||
let members = setup_api
|
||||
.get_team_members_deserialized(&project_team_id, user_pat)
|
||||
.await;
|
||||
let permissions = members
|
||||
.iter()
|
||||
.find(|member| &member.user.id.to_string() == user_id)
|
||||
.and_then(|member| member.permissions);
|
||||
|
||||
let organization_members = match organization {
|
||||
Some(org) => Some(
|
||||
setup_api
|
||||
.get_team_members_deserialized(&org.team_id.to_string(), user_pat)
|
||||
.await,
|
||||
),
|
||||
None => None,
|
||||
};
|
||||
let organization_default_project_permissions = match organization_members {
|
||||
Some(members) => members
|
||||
.iter()
|
||||
.find(|member| &member.user.id.to_string() == user_id)
|
||||
.and_then(|member| member.permissions),
|
||||
None => None,
|
||||
};
|
||||
|
||||
permissions
|
||||
.or(organization_default_project_permissions)
|
||||
.unwrap_or_default()
|
||||
}
|
||||
|
||||
async fn get_organization_permissions(
|
||||
|
||||
@@ -294,13 +294,12 @@ async fn test_get_team_project_orgs() {
|
||||
.await;
|
||||
assert_eq!(members.len(), 0);
|
||||
|
||||
// The team members route from project should show:
|
||||
// - the members of the project team including the ones from the organization
|
||||
// The team members route from project should show the same!
|
||||
let members = test_env
|
||||
.api
|
||||
.get_project_members_deserialized_common(alpha_project_id, FRIEND_USER_PAT)
|
||||
.await;
|
||||
assert_eq!(members.len(), 2);
|
||||
assert_eq!(members.len(), 0);
|
||||
})
|
||||
.await;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user