@@ -335,16 +335,24 @@ impl Commit<'_> {
335
335
let value = if field_name == "body" {
336
336
body. clone ( )
337
337
} else {
338
- tera:: dotted_pointer ( & lookup_context, field_name)
339
- . map ( |v| v. to_string ( ) )
338
+ tera:: dotted_pointer ( & lookup_context, field_name) . and_then ( |v| {
339
+ match & v {
340
+ Value :: String ( s) => Some ( s. clone ( ) ) ,
341
+ Value :: Number ( _) | Value :: Bool ( _) | Value :: Null => {
342
+ Some ( v. to_string ( ) )
343
+ }
344
+ _ => None ,
345
+ }
346
+ } )
340
347
} ;
341
348
match value {
342
349
Some ( value) => {
343
350
regex_checks. push ( ( pattern_regex, value) ) ;
344
351
}
345
352
None => {
346
353
return Err ( AppError :: FieldError ( format ! (
347
- "field {field_name} does not have a value" ,
354
+ "field '{field_name}' is missing or has unsupported \
355
+ type (expected String, Number, Bool, or Null)",
348
356
) ) ) ;
349
357
}
350
358
}
@@ -709,7 +717,7 @@ mod test {
709
717
}
710
718
711
719
#[ test]
712
- fn parse_commit_field ( ) -> Result < ( ) > {
720
+ fn parse_commit_fields ( ) -> Result < ( ) > {
713
721
let mut commit = Commit :: new (
714
722
String :: from ( "8f55e69eba6e6ce811ace32bd84cc82215673cb6" ) ,
715
723
String :: from ( "feat: do something" ) ,
@@ -721,7 +729,15 @@ mod test {
721
729
timestamp : 0x0 ,
722
730
} ;
723
731
724
- let parsed_commit = commit. parse (
732
+ commit. remote = Some ( crate :: contributor:: RemoteContributor {
733
+ username : None ,
734
+ pr_title : Some ( "feat: do something" . to_string ( ) ) ,
735
+ pr_number : None ,
736
+ pr_labels : Vec :: new ( ) ,
737
+ is_first_time : true ,
738
+ } ) ;
739
+
740
+ let parsed_commit = commit. clone ( ) . parse (
725
741
& [ CommitParser {
726
742
sha : None ,
727
743
message : None ,
@@ -739,6 +755,49 @@ mod test {
739
755
) ?;
740
756
741
757
assert_eq ! ( Some ( String :: from( "Test group" ) ) , parsed_commit. group) ;
758
+
759
+ let parsed_commit = commit. clone ( ) . parse (
760
+ & [ CommitParser {
761
+ sha : None ,
762
+ message : None ,
763
+ body : None ,
764
+ footer : None ,
765
+ group : Some ( String :: from ( "Test group" ) ) ,
766
+ default_scope : None ,
767
+ scope : None ,
768
+ skip : None ,
769
+ field : Some ( String :: from ( "remote.pr_title" ) ) ,
770
+ pattern : Regex :: new ( "^feat" ) . ok ( ) ,
771
+ } ] ,
772
+ false ,
773
+ false ,
774
+ ) ?;
775
+
776
+ assert_eq ! ( Some ( String :: from( "Test group" ) ) , parsed_commit. group) ;
777
+
778
+ let parse_result = commit. clone ( ) . parse (
779
+ & [ CommitParser {
780
+ sha : None ,
781
+ message : None ,
782
+ body : None ,
783
+ footer : None ,
784
+ group : Some ( String :: from ( "Invalid group" ) ) ,
785
+ default_scope : None ,
786
+ scope : None ,
787
+ skip : None ,
788
+ field : Some ( String :: from ( "remote.pr_labels" ) ) ,
789
+ pattern : Regex :: new ( ".*" ) . ok ( ) ,
790
+ } ] ,
791
+ false ,
792
+ false ,
793
+ ) ;
794
+
795
+ assert ! (
796
+ parse_result. is_err( ) ,
797
+ "Expected error when using unsupported field `remote.pr_labels`, but \
798
+ got Ok"
799
+ ) ;
800
+
742
801
Ok ( ( ) )
743
802
}
744
803
0 commit comments