Fix version name can be empty string (#537)

This commit is contained in:
Magnus Jensen 2023-03-04 00:20:04 +01:00 committed by GitHub
parent a2eb0bf9fe
commit 3c1e3cd38e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 45 additions and 6 deletions

View File

@ -140,7 +140,10 @@ fn default_requested_status() -> ProjectStatus {
#[derive(Serialize, Deserialize, Validate, Clone)]
struct ProjectCreateData {
#[validate(length(min = 3, max = 64))]
#[validate(
length(min = 3, max = 64),
custom(function = "crate::util::validate::validate_name")
)]
#[serde(alias = "mod_name")]
/// The title or name of the project.
pub title: String,

View File

@ -289,7 +289,10 @@ pub async fn dependency_list(
/// A project returned from the API
#[derive(Serialize, Deserialize, Validate)]
pub struct EditProject {
#[validate(length(min = 3, max = 64))]
#[validate(
length(min = 3, max = 64),
custom(function = "crate::util::validate::validate_name")
)]
pub title: Option<String>,
#[validate(length(min = 3, max = 256))]
pub description: Option<String>,
@ -441,7 +444,7 @@ pub async fn project_edit(
SET title = $1
WHERE (id = $2)
",
title,
title.trim(),
id as database::models::ids::ProjectId,
)
.execute(&mut *transaction)

View File

@ -41,7 +41,10 @@ pub struct InitialVersionData {
regex = "crate::util::validate::RE_URL_SAFE"
)]
pub version_number: String,
#[validate(length(min = 1, max = 64))]
#[validate(
length(min = 1, max = 64),
custom(function = "crate::util::validate::validate_name")
)]
#[serde(alias = "name")]
pub version_title: String,
#[validate(length(max = 65536))]

View File

@ -216,7 +216,10 @@ pub async fn version_get(
#[derive(Serialize, Deserialize, Validate)]
pub struct EditVersion {
#[validate(length(min = 1, max = 64))]
#[validate(
length(min = 1, max = 64),
custom(function = "crate::util::validate::validate_name")
)]
pub name: Option<String>,
#[validate(
length(min = 1, max = 32),
@ -309,7 +312,7 @@ pub async fn version_edit(
SET name = $1
WHERE (id = $2)
",
name,
name.trim(),
id as database::models::ids::VersionId,
)
.execute(&mut *transaction)

View File

@ -97,3 +97,30 @@ pub fn validate_url(value: &str) -> Result<(), validator::ValidationError> {
Ok(())
}
pub fn validate_name(value: &str) -> Result<(), validator::ValidationError> {
if value.trim().is_empty() {
return Err(validator::ValidationError::new(
"Name cannot contain only whitespace.",
));
}
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn validate_name_with_valid_input() {
let result = validate_name("My Test mod");
assert!(result.is_ok());
}
#[test]
fn validate_name_with_invalid_input_returns_error() {
let result = validate_name(" ");
assert!(result.is_err());
}
}