@@ -1181,7 +1181,7 @@ pub mod test {
11811181
11821182 use super :: * ;
11831183 use crate :: output_substitution:: OutputSubstitution ;
1184- use crate :: persist:: { NoopSessionPersister , RejectTransient , Rejection } ;
1184+ use crate :: persist:: { NoopSessionPersister , RejectFatal , RejectTransient , Rejection } ;
11851185 use crate :: receive:: optional_parameters:: Params ;
11861186 use crate :: receive:: v2;
11871187 use crate :: ImplementationError ;
@@ -1292,6 +1292,41 @@ pub mod test {
12921292 Ok ( ( ) )
12931293 }
12941294
1295+ #[ test]
1296+ fn test_unchecked_proposal_fatal_error ( ) -> Result < ( ) , BoxError > {
1297+ let unchecked_proposal = unchecked_proposal_v2_from_test_vector ( ) ;
1298+ let receiver =
1299+ v2:: Receiver { state : unchecked_proposal, session_context : SHARED_CONTEXT . clone ( ) } ;
1300+
1301+ let receive_session = ReceiveSession :: UncheckedOriginalPayload ( receiver. clone ( ) ) ;
1302+ let unchecked_proposal =
1303+ receiver. check_broadcast_suitability ( Some ( FeeRate :: MIN ) , |_| Ok ( false ) ) ;
1304+
1305+ let event = match & unchecked_proposal {
1306+ MaybeFatalTransition ( Err ( Rejection :: Fatal ( RejectFatal (
1307+ event,
1308+ Error :: Protocol ( error) ,
1309+ ) ) ) ) => {
1310+ assert_eq ! (
1311+ error. to_string( ) ,
1312+ InternalPayloadError :: OriginalPsbtNotBroadcastable . to_string( )
1313+ ) ;
1314+ event. clone ( )
1315+ }
1316+ _ => panic ! ( "Expected fatal error" ) ,
1317+ } ;
1318+
1319+ let has_error = match receive_session. process_event ( event) {
1320+ Ok ( ReceiveSession :: HasReplyableError ( r) ) => r,
1321+ _ => panic ! ( "Expected HasError" ) ,
1322+ } ;
1323+
1324+ let _err_req = has_error. create_error_request ( EXAMPLE_URL ) ?;
1325+ // TODO: assert process_error_response terminally closes session
1326+
1327+ Ok ( ( ) )
1328+ }
1329+
12951330 #[ test]
12961331 fn test_maybe_inputs_seen_transient_error ( ) -> Result < ( ) , BoxError > {
12971332 let persister = NoopSessionPersister :: default ( ) ;
0 commit comments