use data_model::{Error as DataModelError, User, UserValidationError};
use crate::Error;
pub fn validate_user_fields(user: &User) -> Result<(), Error> {
if let Err(DataModelError::UserValidation(error)) = user.validate() {
match error {
UserValidationError::EmailInvalid => return Err(Error::UserEmailInvalid()),
UserValidationError::IdMissing => return Err(Error::UserIdMissing()),
UserValidationError::PasswordMissing => return Err(Error::UserPasswordMissing()),
UserValidationError::UsernameMissing => return Err(Error::UserNameMissing()),
}
}
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
use uuid::Uuid;
fn init_valid_user() -> User {
User {
id: User::new_id(),
is_admin: false,
username: "john_smith".to_string(),
full_name:"John Smith".to_string(),
email: "john_smith@company.com".to_string(),
password_hash: "a_password_hash".to_string(),
api_key: User::new_api_key(),
}
}
fn run_validation_test(user: &User) {
if let Err(error) = validate_user_fields(user) {
panic!("{}'", error);
}
}
#[test]
fn validation_should_succeed_for_valid_user() {
let user = init_valid_user();
run_validation_test(&user);
}
#[test]
#[should_panic(expected = "No id provided for the user")]
fn validation_should_fail_for_missing_id() {
let mut user = init_valid_user();
user.id = Uuid::nil();
run_validation_test(&user);
}
#[test]
#[should_panic(expected = "No username provided for the user")]
fn validation_should_fail_for_missing_username() {
let mut user = init_valid_user();
user.username = "".to_string();
run_validation_test(&user);
}
#[test]
#[should_panic(expected = "No password provided for the user")]
fn validation_should_fail_for_missing_password() {
let mut user = init_valid_user();
user.password_hash = "".to_string();
run_validation_test(&user);
}
#[test]
fn validation_should_succeed_for_empty_email() {
let mut user = init_valid_user();
user.email = "".to_string();
run_validation_test(&user);
}
#[test]
#[should_panic(expected = "The email address is invalid")]
fn validation_should_fail_for_invalid_email() {
let mut user = init_valid_user();
user.email = "bad_email_address".to_string();
run_validation_test(&user);
}
}