|
2 | 2 |
|
3 | 3 | import static org.junit.jupiter.api.Assertions.assertEquals; |
4 | 4 | import static org.junit.jupiter.api.Assertions.assertFalse; |
| 5 | +import static org.junit.jupiter.api.Assertions.assertNotEquals; |
| 6 | +import static org.junit.jupiter.api.Assertions.assertNull; |
5 | 7 | import static org.junit.jupiter.api.Assertions.assertTrue; |
6 | 8 |
|
7 | 9 | import com.fasterxml.jackson.core.type.TypeReference; |
@@ -160,6 +162,60 @@ private void assertTransactionBatchResults( |
160 | 162 | } |
161 | 163 | } |
162 | 164 |
|
| 165 | + @Test |
| 166 | + void onTransactionBatchCompleted_HasErrors_ShouldWriteToFailureLogFileWithoutRawRecord() |
| 167 | + throws IOException { |
| 168 | + testTransactionBatchCompletedForRawRecords(false); |
| 169 | + } |
| 170 | + |
| 171 | + @Test |
| 172 | + void onTransactionBatchCompleted_HasErrors_ShouldWriteToFailureLogFileWithRawRecord() |
| 173 | + throws IOException { |
| 174 | + testTransactionBatchCompletedForRawRecords(true); |
| 175 | + } |
| 176 | + |
| 177 | + private void testTransactionBatchCompletedForRawRecords(boolean logRawRecords) |
| 178 | + throws IOException { |
| 179 | + // Arrange |
| 180 | + ImportLoggerConfig config = |
| 181 | + ImportLoggerConfig.builder() |
| 182 | + .logDirectoryPath(tempDir.toString() + "/") |
| 183 | + .isLogRawSourceRecordsEnabled(logRawRecords) |
| 184 | + .isLogSuccessRecordsEnabled(false) |
| 185 | + .build(); |
| 186 | + SingleFileImportLogger importLogger = new SingleFileImportLogger(config, logWriterFactory); |
| 187 | + |
| 188 | + List<ImportTransactionBatchResult> batchResults = createBatchResults(1, false); |
| 189 | + |
| 190 | + // Act |
| 191 | + for (ImportTransactionBatchResult batchResult : batchResults) { |
| 192 | + importLogger.onTransactionBatchCompleted(batchResult); |
| 193 | + importLogger.onDataChunkCompleted( |
| 194 | + ImportDataChunkStatus.builder().dataChunkId(batchResult.getDataChunkId()).build()); |
| 195 | + } |
| 196 | + importLogger.onAllDataChunksCompleted(); |
| 197 | + |
| 198 | + // Assert |
| 199 | + assertTransactionBatchResultsForRawRecords(logRawRecords); |
| 200 | + } |
| 201 | + |
| 202 | + private void assertTransactionBatchResultsForRawRecords(boolean logRawRecord) throws IOException { |
| 203 | + DataLoaderObjectMapper objectMapper = new DataLoaderObjectMapper(); |
| 204 | + |
| 205 | + Path logFileName = tempDir.resolve(SingleFileImportLogger.FAILURE_LOG_FILE_NAME); |
| 206 | + assertTrue(Files.exists(logFileName), "Log file should exist"); |
| 207 | + String logContent = new String(Files.readAllBytes(logFileName), StandardCharsets.UTF_8); |
| 208 | + List<ImportTransactionBatchResult> logEntries = |
| 209 | + objectMapper.readValue( |
| 210 | + logContent, new TypeReference<List<ImportTransactionBatchResult>>() {}); |
| 211 | + ImportTaskResult importTaskResult = logEntries.get(0).getRecords().get(0); |
| 212 | + if (logRawRecord) { |
| 213 | + assertEquals(OBJECT_MAPPER.createObjectNode(), importTaskResult.getRawRecord()); |
| 214 | + } else { |
| 215 | + assertNull(importTaskResult.getRawRecord()); |
| 216 | + } |
| 217 | + } |
| 218 | + |
163 | 219 | private void assertTransactionBatchResult( |
164 | 220 | ImportTransactionBatchResult expected, ImportTransactionBatchResult actual) { |
165 | 221 | assertEquals(expected.getDataChunkId(), actual.getDataChunkId(), "Data chunk ID should match"); |
|
0 commit comments