예제 #1
0
        public async Task DoPeriodicWork_CountCalls()
        {
            var feedData = new CandleMonitorFeeds(It.IsAny <ProductType>(), It.IsAny <CandleGranularity>(), It.IsAny <bool>(), DateTime.UtcNow);

            var subject = ResetSubject(feedData);

            // Use a callback on the mockCandleProducer.Send, in order to count how many times the Producer is called for each CandleSource
            setupMockCandleProducer.Callback(CountCandleSourceEvents());

            var mockProductsService = new Mock <IProductsService>();

            mockProductsService.Setup(o => o.GetHistoricRatesAsync(
                                          It.IsAny <ProductType>(), It.IsAny <DateTime>(), It.IsAny <DateTime>(), It.IsAny <CandleGranularity>()))
            .ReturnsAsync(new List <Candle>
            {
                new Candle {
                    Close = 100.0M, High = 110.0M, Low = 90M, Open = 95.0M, Time = DateTime.UtcNow, Volume = 10.0M
                }
            });

            mockCoinbaseProClient.Setup(o => o.ProductsService).Returns(mockProductsService.Object);

            await subject.StartupAsync();

            await subject.DoPeriodicWorkAsync();

            mockProductsService.Verify(o =>
                                       o.GetHistoricRatesAsync(It.IsAny <ProductType>(),
                                                               It.IsAny <DateTime>(),
                                                               It.IsAny <DateTime>(),
                                                               It.IsAny <CandleGranularity>()),
                                       Times.Exactly(1));

            Assert.That(iCountCandleSourceEvents.RestCall, Is.EqualTo(1));
        }
        public void EnsureTradeFromUtcIsUtc()
        {
            Assert.That(utcKind.Kind, Is.EqualTo(DateTimeKind.Utc));

            var subject = new CandleMonitorFeeds(ProductType.BtcUsd, CandleGranularity.Minutes1, true, utcKind);

            Assert.That(subject.TradeFromUtc, Is.Not.Null);
            Assert.That(subject.TradeFromUtc.Value, Is.EqualTo(utcKind));
        }
        public void EnsureMarketFeedSettings(ProductType productType, CandleGranularity granularity)
        {
            var subject = new CandleMonitorFeeds(productType, granularity, true, null);

            Assert.That(subject.Granularity, Is.EqualTo(granularity));
            Assert.That(subject.Granularity, Is.EqualTo(subject.MarketFeedSettings.Granularity));

            Assert.That(subject.ProductId, Is.EqualTo(productType));
            Assert.That(subject.ProductId, Is.EqualTo(subject.MarketFeedSettings.ProductId));
        }
예제 #4
0
        public async Task StartUp_Workflow_Set()
        {
            var feedData = new CandleMonitorFeeds(It.IsAny <ProductType>(), It.IsAny <CandleGranularity>(), It.IsAny <bool>(), DateTime.UtcNow);

            var subject = ResetSubject(feedData);

            await subject.StartupAsync();

            Assert.That(fakeWorkflow.CandleMonitor.Task.IsCompleted, Is.EqualTo(true));
        }
        public CandleMonitorData(CandleMonitorFeeds item, ICandleProvider candleProvider, IAppSettingCandleMonitor appSetting)
        {
            Settings = item.MarketFeedSettings;

            var p = candleProvider.Load(Settings); // Just populate the provider DataStores, don't get any data

            LastRunUtc   = p.LastUpdatedUtc;
            IsFastUpdate = item.TradeFromUtc.HasValue || (item.HasOverlay && appSetting.HasOverlayFastUpdate);
            HasOverlay   = item.HasOverlay;
            DataSource   = candleProvider.DataStores[Settings];

            BatchSize = IsFastUpdate ? 60 : 25;
        }
예제 #6
0
        private CandleMonitor ResetSubject(CandleMonitorFeeds feedData)
        {
            iCountCandleSourceEvents = new CandleSourceEventSummary();

            mockCoinbaseProClient = new Mock <ICoinbaseProClient>();

            fakeWorkflow = StartupWorkflow.ForCandleMonitorOnly();

            var mockCandleDataSource = new Mock <ICandleDataSource>();

            mockCandleDataSource.Setup(o => o.Load(DateTime.UtcNow)).ReturnsAsync(Mock.Of <TimeSeries>());
            mockCandleDataSource.SetupProperty(o => o.LastUpdatedUtc, DateTime.UtcNow.AddDays(-100));

            var mockCandleProvider = new Mock <ICandleProvider>();

            mockCandleProvider.Setup(o => o.Load(Mock.Of <MarketFeedSettings>()).LastUpdatedUtc).Returns(DateTime.UtcNow.AddDays(-100));
            mockCandleProvider.SetupGet(o => o.DataStores[It.IsAny <MarketFeedSettings>()]).Returns(mockCandleDataSource.Object);

            var mockCandleMonitorFeedProvider = new Mock <ICandleMonitorFeedProvider>();

            mockCandleMonitorFeedProvider.Setup(o => o.GetFeeds()).Returns(new List <CandleMonitorFeeds> {
                feedData
            });

            var mockCandleProducer = new Mock <ICandleProducer>();

            setupMockCandleProducer = mockCandleProducer.Setup(o => o.Send(It.IsAny <CandlesReceivedEventArgs>()));

            var fakeAppSettings = Options.Create(new AppSetting());
            var fakeLogger      = NUnitOutputLogger.Create <CandleMonitor>();

            var subject = new CandleMonitor(
                mockCoinbaseProClient.Object,
                fakeWorkflow,
                mockCandleProvider.Object,
                mockCandleMonitorFeedProvider.Object,
                mockCandleProducer.Object,
                fakeAppSettings,
                fakeLogger);

            return(subject);
        }
        private static CandleMonitorData MockCandleMonitorData_ForIsFastUpdate(
            MarketFeedSettings settings,
            bool hasOverlay,
            bool appSettingHasOverlayFastUpdate,
            DateTime?tradeFromUtc)
        {
            var feed = new CandleMonitorFeeds(settings.ProductId, settings.Granularity, hasOverlay, tradeFromUtc);

            var mockCandleDataSource = new Mock <ICandleDataSource>();

            var mockCandleProvider = new Mock <ICandleProvider>();

            mockCandleProvider.Setup(o => o.Load(settings).LastUpdatedUtc).Returns(DateTime.UtcNow);
            mockCandleProvider.SetupGet(o => o.DataStores[settings]).Returns(mockCandleDataSource.Object);

            var mockAppSetting = new Mock <IAppSettingCandleMonitor>();

            mockAppSetting.SetupProperty(o => o.HasOverlayFastUpdate, appSettingHasOverlayFastUpdate);

            var c = new CandleMonitorData(feed, mockCandleProvider.Object, mockAppSetting.Object);

            return(c);
        }
        public void EnsureTradeFromUtcNull()
        {
            var subject = new CandleMonitorFeeds(ProductType.BtcUsd, CandleGranularity.Minutes1, true, null);

            Assert.That(subject.TradeFromUtc, Is.Null);
        }
        public void EnsureHasOverlay(bool hasOverlay)
        {
            var subject = new CandleMonitorFeeds(ProductType.BtcUsd, CandleGranularity.Minutes1, hasOverlay, null);

            Assert.That(subject.HasOverlay, Is.EqualTo(hasOverlay));
        }
예제 #10
0
        public async Task <CandleSourceEventSummary> StartUp_Calls_Producer_With_CandleSource(CandleMonitorFeeds feedData)
        {
            var subject = ResetSubject(feedData);

            // Use a callback on the mockCandleProducer.Send, in order to count how many times the Producer is called for each CandleSource
            setupMockCandleProducer.Callback(CountCandleSourceEvents());

            await subject.StartupAsync();

            return(iCountCandleSourceEvents);
        }