ricecoder_undo_redo/
models.rs1use crate::change::Change;
4use crate::error::UndoRedoError;
5
6pub struct ChangeValidator;
8
9impl ChangeValidator {
10 pub fn validate_change(change: &Change) -> Result<(), UndoRedoError> {
12 change.validate()
14 }
15
16 pub fn validate_change_graceful(change: &Change) -> Result<(), UndoRedoError> {
18 change.validate()?;
20
21 if change.file_path.is_empty() {
24 return Err(UndoRedoError::validation_error("file_path cannot be empty"));
25 }
26
27 Ok(())
28 }
29}
30
31#[cfg(test)]
32mod tests {
33 use super::*;
34 use crate::change::ChangeType;
35
36 #[test]
37 fn test_change_validator_valid_modify() {
38 let change = Change::new(
39 "test.txt",
40 "before",
41 "after",
42 "Modify",
43 ChangeType::Modify,
44 )
45 .unwrap();
46 let result = ChangeValidator::validate_change(&change);
47 assert!(result.is_ok());
48 }
49
50 #[test]
51 fn test_change_validator_valid_create() {
52 let change = Change::new(
53 "test.txt",
54 "",
55 "content",
56 "Create",
57 ChangeType::Create,
58 )
59 .unwrap();
60 let result = ChangeValidator::validate_change(&change);
61 assert!(result.is_ok());
62 }
63
64 #[test]
65 fn test_change_validator_valid_delete() {
66 let change = Change::new(
67 "test.txt",
68 "content",
69 "",
70 "Delete",
71 ChangeType::Delete,
72 )
73 .unwrap();
74 let result = ChangeValidator::validate_change(&change);
75 assert!(result.is_ok());
76 }
77
78 #[test]
79 fn test_change_validator_graceful() {
80 let change = Change::new(
81 "test.txt",
82 "before",
83 "after",
84 "Modify",
85 ChangeType::Modify,
86 )
87 .unwrap();
88 let result = ChangeValidator::validate_change_graceful(&change);
89 assert!(result.is_ok());
90 }
91}