@@ -8,7 +8,7 @@ use crate::{
8
8
} ,
9
9
} ,
10
10
constants:: { ACCEPT_DEADLINE_SECONDS , PAYMENT_DEADLINE_SECONDS , RECOURSE_DEADLINE_SECONDS } ,
11
- util,
11
+ util:: { self , date :: start_of_day_as_timestamp } ,
12
12
} ;
13
13
14
14
use super :: { BillAction , BillIssueData , BillType , BillValidateActionData , RecourseReason } ;
@@ -34,8 +34,17 @@ pub fn validate_bill_issue(data: &BillIssueData) -> Result<(u64, BillType), Vali
34
34
) ) ;
35
35
}
36
36
37
- util:: date:: date_string_to_timestamp ( & data. issue_date , None ) ?;
38
- util:: date:: date_string_to_timestamp ( & data. maturity_date , None ) ?;
37
+ let issue_date_ts = util:: date:: date_string_to_timestamp ( & data. issue_date , None ) ?;
38
+ let maturity_date_ts = util:: date:: date_string_to_timestamp ( & data. maturity_date , None ) ?;
39
+ let start_of_day = start_of_day_as_timestamp ( data. timestamp ) ;
40
+
41
+ if maturity_date_ts < start_of_day {
42
+ return Err ( ValidationError :: MaturityDateInThePast ) ;
43
+ }
44
+
45
+ if issue_date_ts > maturity_date_ts {
46
+ return Err ( ValidationError :: IssueDateAfterMaturityDate ) ;
47
+ }
39
48
40
49
let bill_type = match data. t {
41
50
0 => BillType :: PromissoryNote ,
@@ -591,8 +600,8 @@ mod tests {
591
600
t : 0 ,
592
601
country_of_issuing : "AT" . into ( ) ,
593
602
city_of_issuing : "Vienna" . into ( ) ,
594
- issue_date : "2024 -08-12" . into ( ) ,
595
- maturity_date : "2024 -11-12" . into ( ) ,
603
+ issue_date : "2025 -08-12" . into ( ) ,
604
+ maturity_date : "2025 -11-12" . into ( ) ,
596
605
drawee : TEST_PUB_KEY_SECP . into ( ) ,
597
606
payee : OTHER_TEST_PUB_KEY_SECP . into ( ) ,
598
607
sum : "500" . into ( ) ,
@@ -618,6 +627,8 @@ mod tests {
618
627
#[ case:: invalid_file_id( BillIssueData { file_upload_ids: vec![ "" . into( ) ] , ..valid_bill_issue_data( ) } , ValidationError :: InvalidFileUploadId ) ]
619
628
#[ case:: invalid_issue_date( BillIssueData { issue_date: "invaliddate" . into( ) , ..valid_bill_issue_data( ) } , ValidationError :: InvalidDate ) ]
620
629
#[ case:: invalid_maturity_date( BillIssueData { maturity_date: "invaliddate" . into( ) , ..valid_bill_issue_data( ) } , ValidationError :: InvalidDate ) ]
630
+ #[ case:: maturity_date_before_now( BillIssueData { maturity_date: "2004-01-12" . into( ) , ..valid_bill_issue_data( ) } , ValidationError :: MaturityDateInThePast ) ]
631
+ #[ case:: issue_date_after_maturity_date( BillIssueData { issue_date: "2028-01-12" . into( ) , ..valid_bill_issue_data( ) } , ValidationError :: IssueDateAfterMaturityDate ) ]
621
632
#[ case:: invalid_bill_type( BillIssueData { t: 5 , ..valid_bill_issue_data( ) } , ValidationError :: InvalidBillType ) ]
622
633
#[ case:: drawee_equals_payee( BillIssueData { drawee: TEST_PUB_KEY_SECP . into( ) , payee: TEST_PUB_KEY_SECP . into( ) , ..valid_bill_issue_data( ) } , ValidationError :: DraweeCantBePayee ) ]
623
634
#[ case:: invalid_payee( BillIssueData { payee: "invalidkey" . into( ) , ..valid_bill_issue_data( ) } , ValidationError :: InvalidSecp256k1Key ( "invalidkey" . into( ) ) ) ]
0 commit comments