11//! Commit message pipeline — returns the stored whole-diff summary when available.
22
3+ use crate :: summarize:: find_existing:: FoundSetForCurrent ;
34use anyhow:: Result ;
45use tauri:: { AppHandle , Runtime } ;
56
6- pub async fn generate < R : Runtime > ( app : & AppHandle < R > ) -> Result < String > {
7+ pub async fn generate < R : Runtime > ( app : & AppHandle < R > ) -> Result < Option < String > > {
78 let base_ref = crate :: summarize:: active_summary_base_ref ( app) ;
89 let change_sets = crate :: summarize:: found_change_sets_since ( app, & base_ref) ?;
910
11+ Ok ( stored_generated_commit_message ( & change_sets) )
12+ }
13+
14+ fn stored_generated_commit_message ( change_sets : & [ FoundSetForCurrent ] ) -> Option < String > {
1015 change_sets
1116 . iter ( )
1217 . find_map ( |entry| {
@@ -17,5 +22,46 @@ pub async fn generate<R: Runtime>(app: &AppHandle<R>) -> Result<String> {
1722 . filter ( |message| !message. trim ( ) . is_empty ( ) )
1823 } )
1924 . map ( str:: to_string)
20- . ok_or_else ( || anyhow:: anyhow!( "no generated commit message found" ) )
25+ }
26+
27+ #[ cfg( test) ]
28+ mod tests {
29+ use super :: * ;
30+ use crate :: sqlite_types:: ChangeSet ;
31+
32+ fn found_with_message ( generated_commit_message : Option < & str > ) -> FoundSetForCurrent {
33+ FoundSetForCurrent {
34+ change_set : Some ( ChangeSet {
35+ id : 1 ,
36+ commit_id : None ,
37+ base_commit_id : 1 ,
38+ commit_message : None ,
39+ generated_commit_message : generated_commit_message. map ( str:: to_string) ,
40+ created_at : 0 ,
41+ evolution_id : None ,
42+ } ) ,
43+ changes : vec ! [ ] ,
44+ missed_hashes : vec ! [ ] ,
45+ }
46+ }
47+
48+ #[ test]
49+ fn missing_generated_commit_message_is_expected_absence ( ) {
50+ let change_sets = vec ! [ found_with_message( None ) , found_with_message( Some ( " " ) ) ] ;
51+
52+ assert_eq ! ( stored_generated_commit_message( & change_sets) , None ) ;
53+ }
54+
55+ #[ test]
56+ fn returns_first_non_empty_generated_commit_message ( ) {
57+ let change_sets = vec ! [
58+ found_with_message( None ) ,
59+ found_with_message( Some ( "feat(nix): update shell packages" ) ) ,
60+ ] ;
61+
62+ assert_eq ! (
63+ stored_generated_commit_message( & change_sets) . as_deref( ) ,
64+ Some ( "feat(nix): update shell packages" ) ,
65+ ) ;
66+ }
2167}
0 commit comments