Skip to content

Commit ef7ef46

Browse files
authored
chore: Switch more integration tests to use API (#487)
1 parent eff9f90 commit ef7ef46

File tree

13 files changed

+276
-279
lines changed

13 files changed

+276
-279
lines changed

src/assignment/types/assignment.rs

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,95 @@ pub struct Assignment {
4747
pub inherited: bool,
4848
}
4949

50+
impl Assignment {
51+
/// Instantiate new assignment.
52+
pub fn new<A, T, R>(
53+
actor_id: A,
54+
target_id: T,
55+
role_id: R,
56+
r#type: AssignmentType,
57+
inherited: bool,
58+
) -> Self
59+
where
60+
A: Into<String>,
61+
T: Into<String>,
62+
R: Into<String>,
63+
{
64+
Self {
65+
actor_id: actor_id.into(),
66+
target_id: target_id.into(),
67+
role_id: role_id.into(),
68+
r#type,
69+
inherited,
70+
role_name: None,
71+
}
72+
}
73+
74+
/// Instantiate GroupDomain assignment.
75+
pub fn group_domain<A, T, R>(actor_id: A, target_id: T, role_id: R, inherited: bool) -> Self
76+
where
77+
A: Into<String>,
78+
T: Into<String>,
79+
R: Into<String>,
80+
{
81+
Self::new(
82+
actor_id,
83+
target_id,
84+
role_id,
85+
AssignmentType::GroupDomain,
86+
inherited,
87+
)
88+
}
89+
90+
/// Instantiate GroupProject assignment.
91+
pub fn group_project<A, T, R>(actor_id: A, target_id: T, role_id: R, inherited: bool) -> Self
92+
where
93+
A: Into<String>,
94+
T: Into<String>,
95+
R: Into<String>,
96+
{
97+
Self::new(
98+
actor_id,
99+
target_id,
100+
role_id,
101+
AssignmentType::GroupProject,
102+
inherited,
103+
)
104+
}
105+
106+
/// Instantiate UserDomain assignment.
107+
pub fn user_domain<A, T, R>(actor_id: A, target_id: T, role_id: R, inherited: bool) -> Self
108+
where
109+
A: Into<String>,
110+
T: Into<String>,
111+
R: Into<String>,
112+
{
113+
Self::new(
114+
actor_id,
115+
target_id,
116+
role_id,
117+
AssignmentType::UserDomain,
118+
inherited,
119+
)
120+
}
121+
122+
/// Instantiate UserProject assignment.
123+
pub fn user_project<A, T, R>(actor_id: A, target_id: T, role_id: R, inherited: bool) -> Self
124+
where
125+
A: Into<String>,
126+
T: Into<String>,
127+
R: Into<String>,
128+
{
129+
Self::new(
130+
actor_id,
131+
target_id,
132+
role_id,
133+
AssignmentType::UserProject,
134+
inherited,
135+
)
136+
}
137+
}
138+
50139
/// Role assignment type.
51140
#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Serialize)]
52141
pub enum AssignmentType {

src/identity/mod.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,9 @@ impl IdentityApi for IdentityProvider {
216216
group: GroupCreate,
217217
) -> Result<Group, IdentityProviderError> {
218218
let mut res = group;
219-
res.id = Some(Uuid::new_v4().simple().to_string());
219+
if res.id.is_none() {
220+
res.id = Some(Uuid::new_v4().simple().to_string());
221+
}
220222
self.backend_driver.create_group(state, res).await
221223
}
222224

src/identity/types/group.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ use crate::error::BuilderError;
2323
#[builder(setter(strip_option, into))]
2424
pub struct Group {
2525
/// The description of the group.
26+
#[builder(default)]
2627
pub description: Option<String>,
2728
/// The ID of the domain.
2829
pub domain_id: String,
@@ -40,8 +41,10 @@ pub struct Group {
4041
#[builder(setter(strip_option, into))]
4142
pub struct GroupListParameters {
4243
/// Filter groups by the domain
44+
#[builder(default)]
4345
pub domain_id: Option<String>,
4446
/// Filter groups by the name attribute
47+
#[builder(default)]
4548
pub name: Option<String>,
4649
}
4750

@@ -50,6 +53,7 @@ pub struct GroupListParameters {
5053
#[builder(setter(strip_option, into))]
5154
pub struct GroupCreate {
5255
/// The description of the group.
56+
#[builder(default)]
5357
pub description: Option<String>,
5458
/// The ID of the domain.
5559
pub domain_id: String,

tests/integration/application_credential.rs

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use openstack_keystone::application_credential::types;
2222
use openstack_keystone::assignment::types as as_types;
2323
use openstack_keystone::config::Config;
2424
use openstack_keystone::db::entity::prelude::*;
25-
use openstack_keystone::db::entity::{project, user};
25+
use openstack_keystone::db::entity::project;
2626
use openstack_keystone::keystone::Service;
2727
use openstack_keystone::plugin_manager::PluginManager;
2828
use openstack_keystone::policy::PolicyFactory;
@@ -32,7 +32,7 @@ mod create;
3232
mod get;
3333
mod list;
3434

35-
use crate::common::{bootstrap, get_isolated_database};
35+
use crate::common::{bootstrap, create_role, create_user, get_isolated_database};
3636

3737
async fn setup_data(db: &DbConn) -> Result<(), Report> {
3838
bootstrap(db).await?;
@@ -62,19 +62,6 @@ async fn setup_data(db: &DbConn) -> Result<(), Report> {
6262
.exec(db)
6363
.await?;
6464

65-
// User
66-
user::ActiveModel {
67-
id: Set("user_a".into()),
68-
extra: NotSet,
69-
enabled: Set(Some(true)),
70-
default_project_id: NotSet,
71-
last_active_at: NotSet,
72-
created_at: NotSet,
73-
domain_id: Set("domain_a".into()),
74-
}
75-
.insert(db)
76-
.await?;
77-
7865
Ok(())
7966
}
8067

@@ -86,12 +73,12 @@ async fn get_state() -> Result<Arc<Service>, Report> {
8673

8774
let plugin_manager = PluginManager::default();
8875
let provider = Provider::new(cfg.clone(), plugin_manager)?;
89-
Ok(Arc::new(Service::new(
90-
cfg,
91-
db,
92-
provider,
93-
PolicyFactory::default(),
94-
)?))
76+
let state = Arc::new(Service::new(cfg, db, provider, PolicyFactory::default())?);
77+
78+
create_role(&state, "role_a").await?;
79+
create_role(&state, "role_b").await?;
80+
create_user(&state, Some("user_a")).await?;
81+
Ok(state)
9582
}
9683

9784
async fn create_ac<S>(

tests/integration/assignment/grant.rs

Lines changed: 1 addition & 155 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,7 @@ use sea_orm::{DbConn, entity::*};
1919
use std::sync::Arc;
2020

2121
use openstack_keystone::config::Config;
22-
use openstack_keystone::db::entity::{
23-
assignment, group, prelude::*, project, role, sea_orm_active_enums::Type, user,
24-
user_group_membership,
25-
};
22+
use openstack_keystone::db::entity::{prelude::*, project};
2623
use openstack_keystone::keystone::Service;
2724
use openstack_keystone::plugin_manager::PluginManager;
2825
use openstack_keystone::policy::PolicyFactory;
@@ -69,157 +66,6 @@ async fn setup_assignment_data(db: &DbConn) -> Result<(), Report> {
6966
.exec(db)
7067
.await?;
7168

72-
// Roles
73-
Role::insert_many([
74-
role::ActiveModel {
75-
id: Set("role_ga".into()),
76-
name: Set("role_ga".into()),
77-
extra: NotSet,
78-
description: NotSet,
79-
domain_id: Set("domain_a".to_string()),
80-
},
81-
role::ActiveModel {
82-
id: Set("role_gb".into()),
83-
name: Set("role_gb".into()),
84-
extra: NotSet,
85-
description: NotSet,
86-
domain_id: Set("domain_a".to_string()),
87-
},
88-
role::ActiveModel {
89-
id: Set("role_c".into()),
90-
name: Set("role_c".into()),
91-
extra: NotSet,
92-
description: NotSet,
93-
domain_id: Set("domain_a".to_string()),
94-
},
95-
role::ActiveModel {
96-
id: Set("role_gc".into()),
97-
name: Set("role_gc".into()),
98-
extra: NotSet,
99-
description: NotSet,
100-
domain_id: Set("domain_a".to_string()),
101-
},
102-
role::ActiveModel {
103-
id: Set("role_d".into()),
104-
name: Set("role_d".into()),
105-
extra: NotSet,
106-
description: NotSet,
107-
domain_id: Set("domain_a".to_string()),
108-
},
109-
role::ActiveModel {
110-
id: Set("role_gd".into()),
111-
name: Set("role_gd".into()),
112-
extra: NotSet,
113-
description: NotSet,
114-
domain_id: Set("domain_a".to_string()),
115-
},
116-
])
117-
.exec(db)
118-
.await?;
119-
120-
// Group
121-
let group_a = group::ActiveModel {
122-
id: Set("group_a".into()),
123-
name: Set("group_a".into()),
124-
domain_id: Set("domain_a".to_string()),
125-
extra: NotSet,
126-
description: NotSet,
127-
}
128-
.insert(db)
129-
.await?;
130-
// User
131-
let user_a = user::ActiveModel {
132-
id: Set("user_a".into()),
133-
extra: NotSet,
134-
enabled: Set(Some(true)),
135-
default_project_id: NotSet,
136-
last_active_at: NotSet,
137-
created_at: NotSet,
138-
domain_id: Set("domain_a".to_string()),
139-
}
140-
.insert(db)
141-
.await?;
142-
user_group_membership::ActiveModel {
143-
user_id: Set(user_a.id.clone()),
144-
group_id: Set(group_a.id.clone()),
145-
}
146-
.insert(db)
147-
.await?;
148-
149-
// Assignments
150-
assignment::ActiveModel {
151-
r#type: Set(Type::UserDomain),
152-
actor_id: Set(user_a.id.clone()),
153-
target_id: Set("domain_a".to_string()),
154-
role_id: Set("role_a".to_string()),
155-
inherited: Set(false),
156-
}
157-
.insert(db)
158-
.await?;
159-
assignment::ActiveModel {
160-
r#type: Set(Type::GroupDomain),
161-
actor_id: Set(group_a.id.clone()),
162-
target_id: Set("domain_a".to_string()),
163-
role_id: Set("role_ga".to_string()),
164-
inherited: Set(false),
165-
}
166-
.insert(db)
167-
.await?;
168-
assignment::ActiveModel {
169-
r#type: Set(Type::UserDomain),
170-
actor_id: Set(user_a.id.clone()),
171-
target_id: Set("domain_a".to_string()),
172-
role_id: Set("role_b".to_string()),
173-
inherited: Set(true),
174-
}
175-
.insert(db)
176-
.await?;
177-
assignment::ActiveModel {
178-
r#type: Set(Type::GroupDomain),
179-
actor_id: Set(group_a.id.clone()),
180-
target_id: Set("domain_a".to_string()),
181-
role_id: Set("role_gb".to_string()),
182-
inherited: Set(true),
183-
}
184-
.insert(db)
185-
.await?;
186-
assignment::ActiveModel {
187-
r#type: Set(Type::UserProject),
188-
actor_id: Set(user_a.id.clone()),
189-
target_id: Set("project_a".to_string()),
190-
role_id: Set("role_c".to_string()),
191-
inherited: Set(false),
192-
}
193-
.insert(db)
194-
.await?;
195-
assignment::ActiveModel {
196-
r#type: Set(Type::GroupProject),
197-
actor_id: Set(group_a.id.clone()),
198-
target_id: Set("project_a".to_string()),
199-
role_id: Set("role_gc".to_string()),
200-
inherited: Set(false),
201-
}
202-
.insert(db)
203-
.await?;
204-
assignment::ActiveModel {
205-
r#type: Set(Type::UserProject),
206-
actor_id: Set(user_a.id.clone()),
207-
target_id: Set("project_a".to_string()),
208-
role_id: Set("role_d".to_string()),
209-
inherited: Set(true),
210-
}
211-
.insert(db)
212-
.await?;
213-
assignment::ActiveModel {
214-
r#type: Set(Type::GroupProject),
215-
actor_id: Set(group_a.id.clone()),
216-
target_id: Set("project_a".to_string()),
217-
role_id: Set("role_gd".to_string()),
218-
inherited: Set(true),
219-
}
220-
.insert(db)
221-
.await?;
222-
22369
Ok(())
22470
}
22571

0 commit comments

Comments
 (0)