Skip to content
This repository was archived by the owner on Oct 9, 2023. It is now read-only.

Commit 5fc1ef7

Browse files
committed
Some UserManager functions and BDD steps for them
1 parent 5199edd commit 5fc1ef7

File tree

2 files changed

+61
-14
lines changed

2 files changed

+61
-14
lines changed

src/user/user_manager.rs

+39-10
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,43 @@ impl UserManager {
6666
Err(ConnectionError::ClusterAllNodesFailed(error_buffer.join("\n")))?
6767
}
6868

69-
// pub fn all() -> Vec<User> {
70-
//
71-
// }
72-
// async fn run_failsafe<F, P, R>(&self, name: String, task: F) -> Result<R>
73-
// where
74-
// F: Fn(ServerDatabase, ServerConnection, bool) -> P,
75-
// P: Future<Output = Result<R>>,
76-
// {
77-
// Database::get(name, self.connection.clone()).await?.run_failsafe(&task).await
78-
// }
69+
pub async fn create(&self, username: String, password: String) -> Result<()> {
70+
let mut error_buffer = Vec::with_capacity(self.connection.server_count());
71+
for server_connection in self.connection.connections() {
72+
match server_connection.create_user(username.clone(), password.clone()).await {
73+
Ok(()) => {
74+
return Ok(());
75+
}
76+
Err(err) => error_buffer.push(format!("- {}: {}", server_connection.address(), err)),
77+
}
78+
}
79+
Err(ConnectionError::ClusterAllNodesFailed(error_buffer.join("\n")))?
80+
}
81+
82+
pub async fn delete(&self, username: String) -> Result<()> {
83+
let mut error_buffer = Vec::with_capacity(self.connection.server_count());
84+
for server_connection in self.connection.connections() {
85+
match server_connection.delete_user(username.clone()).await {
86+
Ok(()) => {
87+
return Ok(());
88+
}
89+
Err(err) => error_buffer.push(format!("- {}: {}", server_connection.address(), err)),
90+
}
91+
}
92+
Err(ConnectionError::ClusterAllNodesFailed(error_buffer.join("\n")))?
93+
}
94+
95+
pub async fn set_password(&self, username: String, password: String) -> Result<()> {
96+
let mut error_buffer = Vec::with_capacity(self.connection.server_count());
97+
for server_connection in self.connection.connections() {
98+
match server_connection.set_user_password(username.clone(), password.clone()).await {
99+
Ok(()) => {
100+
return Ok(());
101+
}
102+
Err(err) => error_buffer.push(format!("- {}: {}", server_connection.address(), err)),
103+
}
104+
}
105+
Err(ConnectionError::ClusterAllNodesFailed(error_buffer.join("\n")))?
106+
}
107+
79108
}

tests/behaviour/connection/user/steps.rs

+22-4
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,29 @@ generic_step_impl! {
5959
assert!(res.unwrap());
6060
}
6161

62+
#[step(expr = "users not contains: {word}")]
63+
async fn users_not_contains(context: &mut Context, username: String) {
64+
let res = context.users.contains(username).await;
65+
assert!(res.is_ok(), "{:?}", res.err());
66+
assert!(!res.unwrap());
67+
}
68+
69+
#[step(expr = "users create: {word}, {word}")]
70+
async fn users_create(context: &mut Context, username: String, password: String) {
71+
let res = context.users.create(username, password).await;
72+
assert!(res.is_ok(), "{:?}", res.err());
73+
}
74+
75+
#[step(expr = "users password set: {word}, {word}")]
76+
async fn users_password_set(context: &mut Context, username: String, password: String) {
77+
let res = context.users.set_password(username, password).await;
78+
assert!(res.is_ok(), "{:?}", res.err());
79+
}
80+
6281
#[step(expr = "users delete: {word}")]
63-
async fn user_delete(context: &mut Context, user: String) {
64-
// for session_tracker in &mut context.session_trackers {
65-
// session_tracker.open_transaction(type_.transaction_type).await.unwrap();
66-
// }
82+
async fn user_delete(context: &mut Context, username: String) {
83+
let res = context.users.delete(username).await;
84+
assert!(res.is_ok(), "{:?}", res.err());
6785
}
6886

6987
}

0 commit comments

Comments
 (0)