use super::validate_name;
#[derive(Debug, Clone, Default)]
pub struct RenameUserStatement {
pub renames: Vec<(String, String)>,
}
impl RenameUserStatement {
pub fn new() -> Self {
Self::default()
}
pub fn rename(mut self, old_name: impl Into<String>, new_name: impl Into<String>) -> Self {
self.renames.push((old_name.into(), new_name.into()));
self
}
pub fn renames(mut self, pairs: Vec<(String, String)>) -> Self {
self.renames = pairs;
self
}
pub fn validate(&self) -> Result<(), String> {
if self.renames.is_empty() {
return Err("At least one rename pair must be specified".to_string());
}
for (old, new) in &self.renames {
validate_name(old, "Old user name")?;
validate_name(new, "New user name")?;
}
Ok(())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_rename_user_new() {
let stmt = RenameUserStatement::new();
assert!(stmt.renames.is_empty());
}
#[test]
fn test_rename_user_basic() {
let stmt = RenameUserStatement::new().rename("old_user", "new_user");
assert_eq!(stmt.renames.len(), 1);
assert_eq!(stmt.renames[0].0, "old_user");
assert_eq!(stmt.renames[0].1, "new_user");
assert!(stmt.validate().is_ok());
}
#[test]
fn test_rename_user_multiple() {
let stmt = RenameUserStatement::new()
.rename("user1", "renamed1")
.rename("user2", "renamed2");
assert_eq!(stmt.renames.len(), 2);
}
#[test]
fn test_rename_user_validation_empty() {
let stmt = RenameUserStatement::new();
assert!(stmt.validate().is_err());
}
#[test]
fn test_rename_user_validation_empty_old_name() {
let stmt = RenameUserStatement::new().rename("", "new_user");
assert!(stmt.validate().is_err());
}
#[test]
fn test_rename_user_validation_empty_new_name() {
let stmt = RenameUserStatement::new().rename("old_user", "");
assert!(stmt.validate().is_err());
}
}