@@ -235,6 +235,29 @@ TEST(FDv2ProtocolHandlerTest,
235235 EXPECT_TRUE (cs->changes .empty ());
236236}
237237
238+ TEST (FDv2ProtocolHandlerTest, ErrorMidPayloadDiscardsPartialAcceptsSubsequent) {
239+ FDv2ProtocolHandler handler;
240+
241+ handler.HandleEvent (" server-intent" , MakeServerIntent (" xfer-full" ));
242+ handler.HandleEvent (" put-object" ,
243+ MakePutObject (" flag" , " abandoned" , kFlagJson ));
244+ handler.HandleEvent (
245+ " error" , boost::json::parse (R"( {"reason":"something went wrong"})" ));
246+
247+ // After the error, a fresh put + payload-transferred (without an
248+ // intervening server-intent) emits a changeset containing only the
249+ // post-error put.
250+ handler.HandleEvent (" put-object" ,
251+ MakePutObject (" flag" , " fresh" , kFlagJson ));
252+ auto result = handler.HandleEvent (" payload-transferred" ,
253+ MakePayloadTransferred (" s" , 1 ));
254+
255+ auto * cs = std::get_if<data_model::FDv2ChangeSet>(&result);
256+ ASSERT_NE (cs, nullptr );
257+ ASSERT_EQ (cs->changes .size (), 1u );
258+ EXPECT_EQ (cs->changes [0 ].key , " fresh" );
259+ }
260+
238261TEST (FDv2ProtocolHandlerTest, ErrorEventWithIdSetsServerId) {
239262 FDv2ProtocolHandler handler;
240263
0 commit comments