@@ -1041,4 +1041,54 @@ describe('ProjectFiscalsComponent', () => {
1041
1041
1042
1042
jasmine . clock ( ) . uninstall ( ) ;
1043
1043
} ) ;
1044
+
1045
+ it ( 'updates an existing fiscal to NON-DRAFT and preserves endorsement/approval fields' , ( ) => {
1046
+ jasmine . clock ( ) . install ( ) ;
1047
+ jasmine . clock ( ) . mockDate ( new Date ( '2025-08-08T19:34:56.000Z' ) ) ;
1048
+
1049
+ const existing = {
1050
+ projectGuid : 'test-guid' ,
1051
+ projectPlanFiscalGuid : 'existing-guid' ,
1052
+ projectFiscalName : 'Existing Plan' ,
1053
+ fiscalYear : 2025 ,
1054
+ activityCategoryCode : 'CAT1' ,
1055
+ endorserName : 'Endorser X' ,
1056
+ endorsementTimestamp : '2025-08-01T10:00:00Z' ,
1057
+ endorsementCode : { endorsementCode : EndorsementCode . ENDORSED } ,
1058
+ endorsementComment : 'Looks good' ,
1059
+ approverName : 'Approver Y' ,
1060
+ approvedTimestamp : '2025-08-02T09:00:00Z' ,
1061
+ isApprovedInd : true ,
1062
+ businessAreaComment : 'Original BAC' ,
1063
+ planFiscalStatusCode : { planFiscalStatusCode : 'DRAFT' } ,
1064
+ } ;
1065
+
1066
+ component . projectFiscals = [ existing ] ;
1067
+
1068
+ const form = component . createFiscalForm ( existing ) ;
1069
+ form . get ( 'planFiscalStatusCode' ) ! . setValue ( 'PROPOSED' ) ; // triggers isUpdateToDraft = false
1070
+ component . fiscalForms = [ form ] ;
1071
+
1072
+ mockProjectService . updateProjectFiscal . and . returnValue ( of ( { } ) ) ;
1073
+
1074
+ component . onSaveFiscal ( 0 ) ;
1075
+
1076
+ expect ( mockProjectService . updateProjectFiscal ) . toHaveBeenCalledTimes ( 1 ) ;
1077
+ const [ , , payload ] = mockProjectService . updateProjectFiscal . calls . mostRecent ( )
1078
+ . args as [ string , string , ProjectFiscal ] ;
1079
+
1080
+ expect ( payload . planFiscalStatusCode ) . toEqual ( { planFiscalStatusCode : 'PROPOSED' } ) ;
1081
+ expect ( payload . businessAreaComment ) . toBe ( 'Original BAC' ) ;
1082
+ expect ( payload . endorserName ) . toBe ( 'Endorser X' ) ;
1083
+ expect ( payload . endorsementTimestamp ) . toBe ( '2025-08-01T10:00:00Z' ) ;
1084
+ expect ( payload . endorsementCode ) . toEqual ( { endorsementCode : EndorsementCode . ENDORSED } ) ;
1085
+ expect ( payload . endorsementComment ) . toBe ( 'Looks good' ) ;
1086
+ expect ( payload . approverName ) . toBe ( 'Approver Y' ) ;
1087
+ expect ( payload . approvedTimestamp ) . toBe ( '2025-08-02T09:00:00Z' ) ;
1088
+ expect ( payload . isApprovedInd ) . toBeTrue ( ) ;
1089
+ expect ( payload . submissionTimestamp ) . toBe ( '2025-08-08T19:34:56.000Z' ) ;
1090
+
1091
+ jasmine . clock ( ) . uninstall ( ) ;
1092
+ } ) ;
1093
+
1044
1094
} ) ;
0 commit comments