public RiskControlSagaTests() { _logFactory = LogFactory.Create().AddUnbufferedConsole(); _chaosKittyMock = new Mock <IChaosKitty>(); _eventsPublisherMock = new Mock <IEventPublisher>(); _commandSender = new Mock <ICommandSender>(); _cashoutRiskControlRepositoryMock = new Mock <ICashoutRiskControlRepository>(); _batchRepositoryMock = new Mock <ICashoutsBatchRepository>(); _closedBatchedCashoutsRepositoryMock = new Mock <IClosedBatchedCashoutRepository>(); _activeCashoutsBatchIdRepositoryMock = new Mock <IActiveCashoutsBatchIdRepository>(); _assetsServiceMock = new Mock <IAssetsServiceWithCache>(); _walletsClientMock = new Mock <IBlockchainWalletsClient>(); _cqrsSettings = new CqrsSettings { RabbitConnectionString = "fake-connection-string", RetryDelay = TimeSpan.FromSeconds(30) }; _blockchainConfigurationProvider = new BlockchainConfigurationsProvider ( _logFactory, new Dictionary <string, BlockchainConfiguration> { { "Bitcoin", new BlockchainConfiguration("HotWallet", false, null) } } ); _asset = new Asset { Id = "LykkeBTC", BlockchainIntegrationLayerId = "Bitcoin", BlockchainIntegrationLayerAssetId = "BTC" }; _aggregate = null; _cashoutRiskControlRepositoryMock .Setup(x => x.GetOrAddAsync( It.IsAny <Guid>(), It.IsAny <Func <CashoutRiskControlAggregate> >())) .ReturnsAsync((Guid opId, Func <CashoutRiskControlAggregate> factory) => _aggregate ?? (_aggregate = factory())); _cashoutRiskControlRepositoryMock .Setup(x => x.SaveAsync(It.IsAny <CashoutRiskControlAggregate>())) .Callback((CashoutRiskControlAggregate agg) => _aggregate = agg) .Returns(Task.CompletedTask); _cashoutRiskControlRepositoryMock .Setup(x => x.TryGetAsync(It.IsAny <Guid>())) .ReturnsAsync((Guid opId) => opId == _aggregate?.OperationId ? _aggregate : null); _assetsServiceMock .Setup(x => x.TryGetAssetAsync( It.Is <string>(p => p == "LykkeBTC"), It.IsAny <CancellationToken>())) .ReturnsAsync(() => _asset); _walletsClientMock .Setup(x => x.TryGetClientIdAsync( It.Is <string>(p => p == "Bitcoin"), It.IsAny <string>())) .ReturnsAsync((Guid?)null); _startCashoutCommandsHandler = new StartCashoutCommandsHandler(_logFactory, _blockchainConfigurationProvider, _assetsServiceMock.Object, new Mock <IHttpClientFactory>().Object); _notifyCashoutFailedCommandsHandler = new NotifyCashoutFailedCommandsHandler(); _acceptCashoutCommandsHandler = new AcceptCashoutCommandsHandler( _chaosKittyMock.Object, _batchRepositoryMock.Object, _closedBatchedCashoutsRepositoryMock.Object, _activeCashoutsBatchIdRepositoryMock.Object, _blockchainConfigurationProvider, _walletsClientMock.Object, _cqrsSettings, false); _saga = new RiskControlSaga(_chaosKittyMock.Object, _cashoutRiskControlRepositoryMock.Object); _eventsPublisherMock.Setup(x => x.PublishEvent(It.IsAny <ValidationStartedEvent>())) .Callback((object evt) => _saga.Handle((ValidationStartedEvent)evt, _commandSender.Object)); _eventsPublisherMock.Setup(x => x.PublishEvent(It.IsAny <OperationAcceptedEvent>())) .Callback((object evt) => _saga.Handle((OperationAcceptedEvent)evt, _commandSender.Object)); _eventsPublisherMock.Setup(x => x.PublishEvent(It.IsAny <OperationRejectedEvent>())) .Callback((object evt) => _saga.Handle((OperationRejectedEvent)evt, _commandSender.Object)); _commandSender .Setup(x => x.SendCommand( It.IsAny <AcceptCashoutCommand>(), It.Is <string>(v => v == BlockchainCashoutProcessorBoundedContext.Name), It.IsAny <uint>())) .Callback((AcceptCashoutCommand cmd, string bc, uint _) => _acceptCashoutCommandsHandler.Handle(cmd, _eventsPublisherMock.Object)); _commandSender .Setup(x => x.SendCommand( It.IsAny <NotifyCashoutFailedCommand>(), It.Is <string>(v => v == BlockchainCashoutProcessorBoundedContext.Name), It.IsAny <uint>())) .Callback((NotifyCashoutFailedCommand cmd, string bc, uint _) => _notifyCashoutFailedCommandsHandler.Handle(cmd, _eventsPublisherMock.Object)); }
public StartCashoutCommandsHandlerTests() { var logFactory = LogFactory.Create().AddUnbufferedConsole(); _eventsPublisherMock = new Mock <IEventPublisher>(); _batchRepositoryMock = new Mock <ICashoutsBatchRepository>(); _closedBatchedCashoutsRepositoryMock = new Mock <IClosedBatchedCashoutRepository>(); var activeCashoutsBatchIdRepositoryMock = new Mock <IActiveCashoutsBatchIdRepository>(); var assetsServiceMock = new Mock <IAssetsServiceWithCache>(); var walletsClient = new Mock <IBlockchainWalletsClient>(); _cqrsSettings = new CqrsSettings { RabbitConnectionString = "fake-connection-string", RetryDelay = TimeSpan.FromSeconds(30) }; _countTreshold = 10; var ageThreshold = TimeSpan.FromMinutes(10); var blockchainConfigurationProvider = new BlockchainConfigurationsProvider ( logFactory, new Dictionary <string, BlockchainConfiguration> { { "Bitcoin", new BlockchainConfiguration ( "HotWallet", false, new CashoutsAggregationConfiguration ( ageThreshold, _countTreshold )) } } ); _handler = new AcceptCashoutCommandsHandler ( new SilentChaosKitty(), _batchRepositoryMock.Object, _closedBatchedCashoutsRepositoryMock.Object, activeCashoutsBatchIdRepositoryMock.Object, blockchainConfigurationProvider, walletsClient.Object, _cqrsSettings, false ); var activeCashoutsBatchId = ActiveCashoutBatchId.Create(CashoutsBatchAggregate.GetNextId()); _batch = CashoutsBatchAggregate.Start ( activeCashoutsBatchId.BatchId, "Bitcoin", "LykkeBTC", "BTC", "HotWallet", 10, TimeSpan.FromMinutes(10) ); var asset = new Asset { Id = "LykkeBTC", BlockchainIntegrationLayerId = "Bitcoin", BlockchainIntegrationLayerAssetId = "BTC" }; _batchRepositoryMock .Setup ( x => x.GetOrAddAsync ( It.Is <Guid>(p => p == _batch.BatchId), It.IsAny <Func <CashoutsBatchAggregate> >() ) ) .ReturnsAsync(() => _batch); _closedBatchedCashoutsRepositoryMock .Setup(x => x.IsCashoutClosedAsync(It.Is <Guid>(p => p == _batch.BatchId))) .ReturnsAsync(false); activeCashoutsBatchIdRepositoryMock .Setup ( x => x.GetActiveOrNextBatchId ( It.Is <string>(p => p == "Bitcoin"), It.Is <string>(p => p == "BTC"), It.Is <string>(p => p == "HotWallet"), It.Is <Func <Guid> >(p => p == CashoutsBatchAggregate.GetNextId) ) ) .ReturnsAsync(() => activeCashoutsBatchId); assetsServiceMock .Setup ( x => x.TryGetAssetAsync ( It.Is <string>(p => p == "LykkeBTC"), It.IsAny <CancellationToken>() ) ) .ReturnsAsync(() => asset); walletsClient .Setup ( x => x.TryGetClientIdAsync ( It.Is <string>(p => p == "Bitcoin"), It.IsAny <string>() ) ) .ReturnsAsync((Guid?)null); }