refactor(dotnet): split collection read and write contracts
This commit is contained in:
@@ -13,7 +13,8 @@ namespace QuantEngine.Core.Tests;
|
||||
public class KisDataCollectionOrchestratorTests
|
||||
{
|
||||
private readonly Mock<IKisApiClient> _kisApiClientMock;
|
||||
private readonly Mock<ICollectionRepository> _repositoryMock;
|
||||
private readonly Mock<ICollectionWriteRepository> _writeRepositoryMock;
|
||||
private readonly Mock<ICollectionReadRepository> _readRepositoryMock;
|
||||
private readonly Mock<ILogger<KisDataCollectionOrchestrator>> _loggerMock;
|
||||
private readonly Mock<IRuntimeAuditTrailService> _auditTrailMock;
|
||||
private readonly PriceDataNormalizer _normalizer;
|
||||
@@ -23,15 +24,21 @@ public class KisDataCollectionOrchestratorTests
|
||||
public KisDataCollectionOrchestratorTests()
|
||||
{
|
||||
_kisApiClientMock = new Mock<IKisApiClient>();
|
||||
_repositoryMock = new Mock<ICollectionRepository>();
|
||||
var repositoryMock = new Mock<ICollectionRepository>();
|
||||
_writeRepositoryMock = repositoryMock.As<ICollectionWriteRepository>();
|
||||
_readRepositoryMock = repositoryMock.As<ICollectionReadRepository>();
|
||||
_loggerMock = new Mock<ILogger<KisDataCollectionOrchestrator>>();
|
||||
_auditTrailMock = new Mock<IRuntimeAuditTrailService>();
|
||||
_priorityResolver = new SourcePriorityResolver();
|
||||
_normalizer = new PriceDataNormalizer(_priorityResolver);
|
||||
_kisApiClientMock
|
||||
.Setup(k => k.GetDailyItemChartPriceAsync(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), "D", It.IsAny<string>()))
|
||||
.ReturnsAsync(new Dictionary<string, object>());
|
||||
|
||||
_orchestrator = new KisDataCollectionOrchestrator(
|
||||
_kisApiClientMock.Object,
|
||||
_repositoryMock.Object,
|
||||
_writeRepositoryMock.Object,
|
||||
_readRepositoryMock.Object,
|
||||
_normalizer,
|
||||
_priorityResolver,
|
||||
_loggerMock.Object,
|
||||
@@ -56,19 +63,19 @@ public class KisDataCollectionOrchestratorTests
|
||||
CapturedAt: $"{todayPrefix}T14:30:00"
|
||||
);
|
||||
|
||||
_repositoryMock
|
||||
_readRepositoryMock
|
||||
.Setup(r => r.GetLatestSnapshotsForTickerAsync(ticker, It.IsAny<int>()))
|
||||
.ReturnsAsync(new List<CollectionSnapshotRecord> { cachedSnapshot });
|
||||
|
||||
_repositoryMock
|
||||
_writeRepositoryMock
|
||||
.Setup(r => r.SaveSnapshotAsync(It.IsAny<CollectionSnapshotRecord>()))
|
||||
.Returns(Task.CompletedTask);
|
||||
|
||||
_repositoryMock
|
||||
_writeRepositoryMock
|
||||
.Setup(r => r.SavePriceHistoryDailyAsync(It.IsAny<PriceHistoryDailyRecord>()))
|
||||
.Returns(Task.CompletedTask);
|
||||
|
||||
_repositoryMock
|
||||
_writeRepositoryMock
|
||||
.Setup(r => r.SaveRunAsync(It.IsAny<CollectionRunRecord>()))
|
||||
.Returns(Task.CompletedTask);
|
||||
|
||||
@@ -84,7 +91,7 @@ public class KisDataCollectionOrchestratorTests
|
||||
"IsMarketClosed should return true and cached snapshot should be used, so KIS API should not be called"
|
||||
);
|
||||
|
||||
_repositoryMock.Verify(
|
||||
_writeRepositoryMock.Verify(
|
||||
r => r.SaveSnapshotAsync(It.Is<CollectionSnapshotRecord>(s =>
|
||||
s.SourceName.Contains("(Cached)"))),
|
||||
Times.Once,
|
||||
@@ -98,7 +105,7 @@ public class KisDataCollectionOrchestratorTests
|
||||
var runId = "test-run-002";
|
||||
var ticker = "005930";
|
||||
var account = "mock";
|
||||
_repositoryMock
|
||||
_readRepositoryMock
|
||||
.Setup(r => r.GetLatestSnapshotsForTickerAsync(ticker, It.IsAny<int>()))
|
||||
.ReturnsAsync(new List<CollectionSnapshotRecord>());
|
||||
|
||||
@@ -115,15 +122,15 @@ public class KisDataCollectionOrchestratorTests
|
||||
.Setup(k => k.GetDailyItemChartPriceAsync(ticker, It.IsAny<string>(), It.IsAny<string>(), "D", account))
|
||||
.ReturnsAsync(new Dictionary<string, object>());
|
||||
|
||||
_repositoryMock
|
||||
_writeRepositoryMock
|
||||
.Setup(r => r.SaveSnapshotAsync(It.IsAny<CollectionSnapshotRecord>()))
|
||||
.Returns(Task.CompletedTask);
|
||||
|
||||
_repositoryMock
|
||||
_writeRepositoryMock
|
||||
.Setup(r => r.SavePriceHistoryDailyAsync(It.IsAny<PriceHistoryDailyRecord>()))
|
||||
.Returns(Task.CompletedTask);
|
||||
|
||||
_repositoryMock
|
||||
_writeRepositoryMock
|
||||
.Setup(r => r.SaveRunAsync(It.IsAny<CollectionRunRecord>()))
|
||||
.Returns(Task.CompletedTask);
|
||||
|
||||
@@ -158,7 +165,7 @@ public class KisDataCollectionOrchestratorTests
|
||||
CapturedAt: $"{priorDay}T14:30:00"
|
||||
);
|
||||
|
||||
_repositoryMock
|
||||
_readRepositoryMock
|
||||
.Setup(r => r.GetLatestSnapshotsForTickerAsync(ticker, It.IsAny<int>()))
|
||||
.ReturnsAsync(new List<CollectionSnapshotRecord> { priorDaySnapshot });
|
||||
|
||||
@@ -174,15 +181,15 @@ public class KisDataCollectionOrchestratorTests
|
||||
.Setup(k => k.GetDailyItemChartPriceAsync(ticker, It.IsAny<string>(), It.IsAny<string>(), "D", account))
|
||||
.ReturnsAsync(new Dictionary<string, object>());
|
||||
|
||||
_repositoryMock
|
||||
_writeRepositoryMock
|
||||
.Setup(r => r.SaveSnapshotAsync(It.IsAny<CollectionSnapshotRecord>()))
|
||||
.Returns(Task.CompletedTask);
|
||||
|
||||
_repositoryMock
|
||||
_writeRepositoryMock
|
||||
.Setup(r => r.SavePriceHistoryDailyAsync(It.IsAny<PriceHistoryDailyRecord>()))
|
||||
.Returns(Task.CompletedTask);
|
||||
|
||||
_repositoryMock
|
||||
_writeRepositoryMock
|
||||
.Setup(r => r.SaveRunAsync(It.IsAny<CollectionRunRecord>()))
|
||||
.Returns(Task.CompletedTask);
|
||||
|
||||
@@ -206,7 +213,7 @@ public class KisDataCollectionOrchestratorTests
|
||||
var ticker = "005930";
|
||||
var account = "mock";
|
||||
|
||||
_repositoryMock
|
||||
_readRepositoryMock
|
||||
.Setup(r => r.GetLatestSnapshotsForTickerAsync(ticker, It.IsAny<int>()))
|
||||
.ReturnsAsync(new List<CollectionSnapshotRecord>());
|
||||
|
||||
@@ -222,15 +229,15 @@ public class KisDataCollectionOrchestratorTests
|
||||
.Setup(k => k.GetDailyItemChartPriceAsync(ticker, It.IsAny<string>(), It.IsAny<string>(), "D", account))
|
||||
.ReturnsAsync(new Dictionary<string, object>());
|
||||
|
||||
_repositoryMock
|
||||
_writeRepositoryMock
|
||||
.Setup(r => r.SaveSnapshotAsync(It.IsAny<CollectionSnapshotRecord>()))
|
||||
.Returns(Task.CompletedTask);
|
||||
|
||||
_repositoryMock
|
||||
_writeRepositoryMock
|
||||
.Setup(r => r.SavePriceHistoryDailyAsync(It.IsAny<PriceHistoryDailyRecord>()))
|
||||
.Returns(Task.CompletedTask);
|
||||
|
||||
_repositoryMock
|
||||
_writeRepositoryMock
|
||||
.Setup(r => r.SaveRunAsync(It.IsAny<CollectionRunRecord>()))
|
||||
.Returns(Task.CompletedTask);
|
||||
|
||||
@@ -261,7 +268,7 @@ public class KisDataCollectionOrchestratorTests
|
||||
var account = "mock";
|
||||
var tickers = new List<string> { "005930", "000660" };
|
||||
|
||||
_repositoryMock
|
||||
_readRepositoryMock
|
||||
.Setup(r => r.GetLatestSnapshotsForTickerAsync(It.IsAny<string>(), It.IsAny<int>()))
|
||||
.ReturnsAsync(new List<CollectionSnapshotRecord>());
|
||||
|
||||
@@ -286,7 +293,7 @@ public class KisDataCollectionOrchestratorTests
|
||||
.ReturnsAsync(new Dictionary<string, object>());
|
||||
|
||||
var callCount = 0;
|
||||
_repositoryMock
|
||||
_writeRepositoryMock
|
||||
.Setup(r => r.SaveSnapshotAsync(It.IsAny<CollectionSnapshotRecord>()))
|
||||
.Returns((CollectionSnapshotRecord snapshot) =>
|
||||
{
|
||||
@@ -296,15 +303,15 @@ public class KisDataCollectionOrchestratorTests
|
||||
return Task.CompletedTask;
|
||||
});
|
||||
|
||||
_repositoryMock
|
||||
_writeRepositoryMock
|
||||
.Setup(r => r.SavePriceHistoryDailyAsync(It.IsAny<PriceHistoryDailyRecord>()))
|
||||
.Returns(Task.CompletedTask);
|
||||
|
||||
_repositoryMock
|
||||
_writeRepositoryMock
|
||||
.Setup(r => r.SaveErrorAsync(It.IsAny<CollectionErrorRecord>()))
|
||||
.Returns(Task.CompletedTask);
|
||||
|
||||
_repositoryMock
|
||||
_writeRepositoryMock
|
||||
.Setup(r => r.SaveRunAsync(It.IsAny<CollectionRunRecord>()))
|
||||
.Returns(Task.CompletedTask);
|
||||
|
||||
@@ -315,7 +322,7 @@ public class KisDataCollectionOrchestratorTests
|
||||
Assert.Equal(1, result.SuccessCount);
|
||||
Assert.Equal(1, result.ErrorCount);
|
||||
|
||||
_repositoryMock.Verify(
|
||||
_writeRepositoryMock.Verify(
|
||||
r => r.SaveErrorAsync(It.Is<CollectionErrorRecord>(e =>
|
||||
e.Ticker == "000660" && e.ErrorMessage == "Storage Error")),
|
||||
Times.Once
|
||||
@@ -411,3 +418,5 @@ public class KisDataCollectionOrchestratorTests
|
||||
throw new InvalidOperationException("Repository root not found.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user