|
23 | 23 | import static com.mongodb.kafka.connect.sink.SinkTestHelper.createTopicConfig;
|
24 | 24 | import static org.junit.jupiter.api.Assertions.assertAll;
|
25 | 25 | import static org.junit.jupiter.api.Assertions.assertEquals;
|
| 26 | +import static org.junit.jupiter.api.Assertions.assertFalse; |
26 | 27 | import static org.junit.jupiter.api.Assertions.assertNotNull;
|
27 | 28 | import static org.junit.jupiter.api.Assertions.assertThrows;
|
28 | 29 | import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
42 | 43 | import com.mongodb.client.model.UpdateOneModel;
|
43 | 44 | import com.mongodb.client.model.WriteModel;
|
44 | 45 |
|
| 46 | +import com.mongodb.kafka.connect.sink.Configurable; |
45 | 47 | import com.mongodb.kafka.connect.sink.MongoSinkConfig;
|
46 | 48 | import com.mongodb.kafka.connect.sink.MongoSinkTopicConfig;
|
47 | 49 | import com.mongodb.kafka.connect.sink.converter.SinkDocument;
|
@@ -81,6 +83,7 @@ class WriteModelStrategyTest {
|
81 | 83 | MongoSinkTopicConfig.DOCUMENT_ID_STRATEGY_CONFIG, PartialKeyStrategy.class.getName());
|
82 | 84 | configMap.put(
|
83 | 85 | MongoSinkTopicConfig.DOCUMENT_ID_STRATEGY_PARTIAL_KEY_PROJECTION_TYPE_CONFIG, "AllowList");
|
| 86 | + configMap.put(MongoSinkTopicConfig.WRITEMODEL_STRATEGY_UPSERT_CONFIG, "true"); |
84 | 87 |
|
85 | 88 | MongoSinkTopicConfig partialKeyConfig =
|
86 | 89 | new MongoSinkConfig(configMap).getMongoSinkTopicConfig(TEST_TOPIC);
|
@@ -130,6 +133,59 @@ void testDefaultWriteModelStrategy() {
|
130 | 133 | defaultWriteModelStrategy.getWriteModelStrategy() instanceof InsertOneDefaultStrategy);
|
131 | 134 | }
|
132 | 135 |
|
| 136 | + @Test |
| 137 | + @DisplayName("Ensure upsert config is correctly set") |
| 138 | + void testWriteModelStrategyUpsertConfig() { |
| 139 | + MongoSinkTopicConfig topicConfig; |
| 140 | + ReplaceOneModel<BsonDocument> replaceOneModel; |
| 141 | + UpdateOneModel<BsonDocument> updateOneModel; |
| 142 | + WriteModel<BsonDocument> result; |
| 143 | + |
| 144 | + Object[] replaceStrategies = {REPLACE_ONE_BUSINESS_KEY_STRATEGY, REPLACE_ONE_DEFAULT_STRATEGY}; |
| 145 | + for (Object strategy : replaceStrategies) { |
| 146 | + Configurable configurableStrategy = (Configurable) strategy; |
| 147 | + WriteModelStrategy writeStrategy = (WriteModelStrategy) strategy; |
| 148 | + |
| 149 | + topicConfig = |
| 150 | + createTopicConfig(MongoSinkTopicConfig.WRITEMODEL_STRATEGY_UPSERT_CONFIG, "false"); |
| 151 | + configurableStrategy.configure(topicConfig); |
| 152 | + result = writeStrategy.createWriteModel(new SinkDocument(null, VALUE_DOC.clone())); |
| 153 | + replaceOneModel = (ReplaceOneModel<BsonDocument>) result; |
| 154 | + assertFalse(replaceOneModel.getReplaceOptions().isUpsert()); |
| 155 | + |
| 156 | + topicConfig = |
| 157 | + createTopicConfig(MongoSinkTopicConfig.WRITEMODEL_STRATEGY_UPSERT_CONFIG, "true"); |
| 158 | + configurableStrategy.configure(topicConfig); |
| 159 | + result = writeStrategy.createWriteModel(new SinkDocument(null, VALUE_DOC.clone())); |
| 160 | + replaceOneModel = (ReplaceOneModel<BsonDocument>) result; |
| 161 | + assertTrue(replaceOneModel.getReplaceOptions().isUpsert()); |
| 162 | + } |
| 163 | + |
| 164 | + Object[] updateStrategies = { |
| 165 | + UPDATE_ONE_BUSINESS_KEY_TIMESTAMPS_STRATEGY, |
| 166 | + UPDATE_ONE_DEFAULT_STRATEGY, |
| 167 | + UPDATE_ONE_TIMESTAMPS_STRATEGY, |
| 168 | + }; |
| 169 | + for (Object strategy : updateStrategies) { |
| 170 | + Configurable configurableStrategy = (Configurable) strategy; |
| 171 | + WriteModelStrategy writeStrategy = (WriteModelStrategy) strategy; |
| 172 | + |
| 173 | + topicConfig = |
| 174 | + createTopicConfig(MongoSinkTopicConfig.WRITEMODEL_STRATEGY_UPSERT_CONFIG, "false"); |
| 175 | + configurableStrategy.configure(topicConfig); |
| 176 | + result = writeStrategy.createWriteModel(new SinkDocument(null, VALUE_DOC.clone())); |
| 177 | + updateOneModel = (UpdateOneModel<BsonDocument>) result; |
| 178 | + assertFalse(updateOneModel.getOptions().isUpsert()); |
| 179 | + |
| 180 | + topicConfig = |
| 181 | + createTopicConfig(MongoSinkTopicConfig.WRITEMODEL_STRATEGY_UPSERT_CONFIG, "true"); |
| 182 | + configurableStrategy.configure(topicConfig); |
| 183 | + result = writeStrategy.createWriteModel(new SinkDocument(null, VALUE_DOC.clone())); |
| 184 | + updateOneModel = (UpdateOneModel<BsonDocument>) result; |
| 185 | + assertTrue(updateOneModel.getOptions().isUpsert()); |
| 186 | + } |
| 187 | + } |
| 188 | + |
133 | 189 | @Test
|
134 | 190 | @DisplayName(
|
135 | 191 | "when sink document is valid for InsertOneDefaultStrategy then correct InsertOneModel")
|
|
0 commit comments