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