(t *testing.T)
| 1323 | } |
| 1324 | |
| 1325 | func TestLineageOutboxProcessor(t *testing.T) { |
| 1326 | t.Run("Creates processor with default values", func(t *testing.T) { |
| 1327 | mockDS := new(mocks.MockDataSource) |
| 1328 | ledgerforgeInstance := &LedgerForge{datasource: mockDS} |
| 1329 | |
| 1330 | processor := NewLineageOutboxProcessor(ledgerforgeInstance) |
| 1331 | |
| 1332 | assert.NotNil(t, processor) |
| 1333 | assert.Equal(t, 100, processor.batchSize) |
| 1334 | assert.Equal(t, 1*time.Second, processor.pollInterval) |
| 1335 | assert.Equal(t, 30*time.Second, processor.lockDuration) |
| 1336 | assert.False(t, processor.IsRunning()) |
| 1337 | }) |
| 1338 | |
| 1339 | t.Run("Configures processor with custom values", func(t *testing.T) { |
| 1340 | mockDS := new(mocks.MockDataSource) |
| 1341 | ledgerforgeInstance := &LedgerForge{datasource: mockDS} |
| 1342 | |
| 1343 | processor := NewLineageOutboxProcessor(ledgerforgeInstance). |
| 1344 | WithBatchSize(50). |
| 1345 | WithPollInterval(5 * time.Second). |
| 1346 | WithLockDuration(60 * time.Second) |
| 1347 | |
| 1348 | assert.Equal(t, 50, processor.batchSize) |
| 1349 | assert.Equal(t, 5*time.Second, processor.pollInterval) |
| 1350 | assert.Equal(t, 60*time.Second, processor.lockDuration) |
| 1351 | }) |
| 1352 | |
| 1353 | t.Run("Start and stop processor", func(t *testing.T) { |
| 1354 | mockDS := new(mocks.MockDataSource) |
| 1355 | ledgerforgeInstance := &LedgerForge{datasource: mockDS} |
| 1356 | |
| 1357 | // Mock ClaimPendingOutboxEntries to return empty slice |
| 1358 | mockDS.On("ClaimPendingOutboxEntries", mock.Anything, mock.Anything, mock.Anything). |
| 1359 | Return([]model.LineageOutbox{}, nil).Maybe() |
| 1360 | |
| 1361 | processor := NewLineageOutboxProcessor(ledgerforgeInstance). |
| 1362 | WithPollInterval(100 * time.Millisecond) |
| 1363 | |
| 1364 | ctx := context.Background() |
| 1365 | |
| 1366 | // Start processor |
| 1367 | processor.Start(ctx) |
| 1368 | assert.True(t, processor.IsRunning()) |
| 1369 | |
| 1370 | // Wait a bit for at least one poll cycle |
| 1371 | time.Sleep(150 * time.Millisecond) |
| 1372 | |
| 1373 | // Stop processor |
| 1374 | processor.Stop() |
| 1375 | assert.False(t, processor.IsRunning()) |
| 1376 | }) |
| 1377 | |
| 1378 | t.Run("Processes batch of entries", func(t *testing.T) { |
| 1379 | mockDS := new(mocks.MockDataSource) |
| 1380 | |
| 1381 | txn := &model.Transaction{ |
| 1382 | TransactionID: "txn_batch_1", |
nothing calls this directly
no test coverage detected