2929import org .junit .runner .RunWith ;
3030
3131import org .bson .BsonDocument ;
32+ import org .bson .BsonInt32 ;
3233import org .bson .BsonString ;
3334
3435import com .mongodb .client .model .ReplaceOneModel ;
@@ -43,6 +44,7 @@ class MongoDbUpdateTest {
4344 private static final BsonDocument FILTER_DOC = BsonDocument .parse ("{_id: 1234}" );
4445 private static final BsonDocument REPLACEMENT_DOC = BsonDocument .parse ("{_id: 1234, first_name: 'Grace', last_name: 'Hopper'}" );
4546 private static final BsonDocument UPDATE_DOC = BsonDocument .parse ("{$set: {first_name: 'Grace', last_name: 'Hopper'}}" );
47+ private static final BsonDocument UPDATE_DOC_WITH_OPLOG_INTERNALS = UPDATE_DOC .clone ().append ("$v" , new BsonInt32 (1 ));
4648
4749 @ Test
4850 @ DisplayName ("when valid doc replace cdc event then correct ReplaceOneModel" )
@@ -79,6 +81,22 @@ void testValidSinkDocumentForUpdate() {
7981 assertEquals (FILTER_DOC , writeModel .getFilter ());
8082 }
8183
84+ @ Test
85+ @ DisplayName ("when valid doc change cdc event containing internal oplog fields then correct UpdateOneModel" )
86+ public void testValidSinkDocumentWithInternalOploagFieldForUpdate () {
87+ BsonDocument keyDoc = BsonDocument .parse ("{id: '1234'}" );
88+ BsonDocument valueDoc = new BsonDocument ("op" , new BsonString ("u" ))
89+ .append ("patch" , new BsonString (UPDATE_DOC_WITH_OPLOG_INTERNALS .toJson ()));
90+
91+ WriteModel <BsonDocument > result = UPDATE .perform (new SinkDocument (keyDoc , valueDoc ));
92+ assertTrue (result instanceof UpdateOneModel , () -> "result expected to be of type UpdateOneModel" );
93+
94+ UpdateOneModel <BsonDocument > writeModel = (UpdateOneModel <BsonDocument >) result ;
95+ assertEquals (UPDATE_DOC , writeModel .getUpdate (), () -> "update doc not matching what is expected" );
96+ assertTrue (writeModel .getFilter () instanceof BsonDocument , () -> "filter expected to be of type BsonDocument" );
97+ assertEquals (FILTER_DOC , writeModel .getFilter ());
98+ }
99+
82100 @ Test
83101 @ DisplayName ("when missing value doc then DataException" )
84102 void testMissingValueDocument () {
0 commit comments