diff --git a/tests/generator_tests.rs b/tests/generator_tests.rs new file mode 100644 index 0000000..ed880f6 --- /dev/null +++ b/tests/generator_tests.rs @@ -0,0 +1,63 @@ +#[cfg(test)] +mod generator_tests { + use crate::generator::message::MessageGenerator; + use crate::generator::type_detector::{detect_type_from_text, extract_scope_from_labels}; + + #[test] + fn test_message_generator_basic() { + let mut generator = MessageGenerator::new(); + generator.set_type("feat".to_string()); + generator.set_scope(Some("api".to_string())); + generator.set_description("add new endpoint".to_string()); + + let message = generator.format_message(); + assert_eq!(message, "feat(api): add new endpoint"); + } + + #[test] + fn test_message_generator_with_body() { + let mut generator = MessageGenerator::new(); + generator.set_type("fix".to_string()); + generator.set_description("resolve bug"); + generator.set_body("This resolves the issue where users couldn't login.".to_string()); + + let message = generator.format_message(); + assert!(message.contains("fix: resolve bug")); + assert!(message.contains("This resolves the issue")); + } + + #[test] + fn test_message_generator_with_breaking() { + let mut generator = MessageGenerator::new(); + generator.set_type("feat".to_string()); + generator.set_description("change API"); + generator.set_breaking(true); + generator.set_breaking_description("API endpoint signature changed".to_string()); + + let message = generator.format_message(); + assert!(message.contains("feat!: change API")); + assert!(message.contains("BREAKING CHANGE")); + assert!(message.contains("API endpoint signature changed")); + } + + #[test] + fn test_detect_type_from_text() { + assert_eq!(detect_type_from_text("Fix login bug"), "fix"); + assert_eq!(detect_type_from_text("Add new feature"), "feat"); + assert_eq!(detect_type_from_text("Update documentation"), "docs"); + assert_eq!(detect_type_from_text("Add tests for auth"), "test"); + assert_eq!(detect_type_from_text("Refactor the codebase"), "refactor"); + } + + #[test] + fn test_extract_scope_from_labels() { + let labels = vec!["frontend".to_string(), "bug".to_string()]; + assert_eq!(extract_scope_from_labels(&labels), Some("frontend".to_string())); + + let labels = vec!["backend".to_string()]; + assert_eq!(extract_scope_from_labels(&labels), Some("backend".to_string())); + + let labels = vec!["documentation".to_string()]; + assert_eq!(extract_scope_from_labels(&labels), Some("docs".to_string())); + } +}