fix(glossary): 补齐术语删除和审核门禁
bat-rust / Build and test Rust (push) Canceled after 0s
bat-rust / Build and test Go API (push) Canceled after 0s

This commit is contained in:
2026-09-08 20:59:27 +08:00
parent 94483ff14d
commit 0275a890bc
19 changed files with 589 additions and 32 deletions
+39
View File
@@ -551,6 +551,16 @@ pub fn validate_glossary_draft(draft: &GlossaryTermDraft) -> crate::Result<()> {
"Glossary allowed_translations 不能包含空字符串".to_string(),
));
}
if draft
.definition
.aliases
.iter()
.any(|value| value.trim().is_empty())
{
return Err(crate::Error::InvalidArgument(
"Glossary aliases 不能包含空字符串".to_string(),
));
}
let accepted = draft
.definition
.allowed_translations
@@ -687,4 +697,33 @@ mod tests {
.iter()
.any(|diagnostic| diagnostic.kind == GlossaryDiagnosticKind::Overridden));
}
#[test]
fn empty_alias_is_rejected() {
let mut draft = GlossaryTermDraft {
term_id: "term".to_string(),
definition: GlossaryTermSnapshot {
source_term: "Sensei".to_string(),
aliases: vec![" ".to_string()],
recommended_translation: "老师".to_string(),
allowed_translations: Vec::new(),
source_language: None,
target_language: None,
category: None,
priority: 0,
scope: BTreeMap::new(),
},
review_status: GlossaryReviewStatus::Draft,
source: GlossarySourceRecord {
source_kind: GlossarySourceKind::Manual,
source_ref: None,
source_author: None,
source_note: None,
observed_unix_seconds: 1,
},
};
assert!(validate_glossary_draft(&draft).is_err());
draft.definition.aliases.clear();
assert!(validate_glossary_draft(&draft).is_ok());
}
}