mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-09-27 14:00:17 +00:00
93225e5ddf
* Create error type enum * Replace magic string slices with LemmyErrorTypes * Remove unused enum * Add rename snake case to error enum * Rename functions * clippy * Fix merge errors * Serialize in PascalCase instead of snake_case * Revert src/lib * Add serialization tests * Update translations * Fix compilation error in test * Fix another compilation error * Add code for generating typescript types * Various fixes to avoid breaking api * impl From<LemmyErrorType> for LemmyError * with_lemmy_type * trigger ci --------- Co-authored-by: SleeplessOne1917 <abias1122@gmail.com>
93 lines
3.5 KiB
Rust
93 lines
3.5 KiB
Rust
use lemmy_db_schema::{ListingType, RegistrationMode};
|
|
use lemmy_utils::error::{LemmyErrorType, LemmyResult};
|
|
|
|
mod create;
|
|
mod read;
|
|
mod update;
|
|
|
|
/// Checks whether the default post listing type is valid for a site.
|
|
pub fn site_default_post_listing_type_check(
|
|
default_post_listing_type: &Option<ListingType>,
|
|
) -> LemmyResult<()> {
|
|
if let Some(listing_type) = default_post_listing_type {
|
|
// Only allow all or local as default listing types...
|
|
if listing_type != &ListingType::All && listing_type != &ListingType::Local {
|
|
Err(LemmyErrorType::InvalidDefaultPostListingType)?
|
|
} else {
|
|
Ok(())
|
|
}
|
|
} else {
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
/// Checks whether the application question and registration mode align.
|
|
pub fn application_question_check(
|
|
current_application_question: &Option<String>,
|
|
new_application_question: &Option<String>,
|
|
registration_mode: RegistrationMode,
|
|
) -> LemmyResult<()> {
|
|
let has_no_question: bool =
|
|
current_application_question.is_none() && new_application_question.is_none();
|
|
let is_nullifying_question: bool = new_application_question == &Some(String::new());
|
|
|
|
if registration_mode == RegistrationMode::RequireApplication
|
|
&& (has_no_question || is_nullifying_question)
|
|
{
|
|
Err(LemmyErrorType::ApplicationQuestionRequired)?
|
|
} else {
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use crate::site::{application_question_check, site_default_post_listing_type_check};
|
|
use lemmy_db_schema::{ListingType, RegistrationMode};
|
|
|
|
#[test]
|
|
fn test_site_default_post_listing_type_check() {
|
|
assert!(site_default_post_listing_type_check(&None::<ListingType>).is_ok());
|
|
assert!(site_default_post_listing_type_check(&Some(ListingType::All)).is_ok());
|
|
assert!(site_default_post_listing_type_check(&Some(ListingType::Local)).is_ok());
|
|
assert!(site_default_post_listing_type_check(&Some(ListingType::Subscribed)).is_err());
|
|
}
|
|
|
|
#[test]
|
|
fn test_application_question_check() {
|
|
assert!(
|
|
application_question_check(&Some(String::from("q")), &Some(String::new()), RegistrationMode::RequireApplication).is_err(),
|
|
"Expected application to be invalid because an application is required, current question: {:?}, new question: {:?}",
|
|
"q",
|
|
String::new(),
|
|
);
|
|
assert!(
|
|
application_question_check(&None, &None, RegistrationMode::RequireApplication).is_err(),
|
|
"Expected application to be invalid because an application is required, current question: {:?}, new question: {:?}",
|
|
None::<String>,
|
|
None::<String>
|
|
);
|
|
|
|
assert!(
|
|
application_question_check(&None, &None, RegistrationMode::Open).is_ok(),
|
|
"Expected application to be valid because no application required, current question: {:?}, new question: {:?}, mode: {:?}",
|
|
None::<String>,
|
|
None::<String>,
|
|
RegistrationMode::Open
|
|
);
|
|
assert!(
|
|
application_question_check(&None, &Some(String::from("q")), RegistrationMode::RequireApplication).is_ok(),
|
|
"Expected application to be valid because new application provided, current question: {:?}, new question: {:?}, mode: {:?}",
|
|
None::<String>,
|
|
Some(String::from("q")),
|
|
RegistrationMode::RequireApplication
|
|
);
|
|
assert!(
|
|
application_question_check(&Some(String::from("q")), &None, RegistrationMode::RequireApplication).is_ok(),
|
|
"Expected application to be valid because application existed, current question: {:?}, new question: {:?}, mode: {:?}",
|
|
Some(String::from("q")),
|
|
None::<String>,
|
|
RegistrationMode::RequireApplication
|
|
);
|
|
}
|
|
}
|