Пример #1
0
        public void OnNext_SubscribeObserverAndOnNextValid_ReturnsNonNullAndCallsFactory()
        {
            var baseDate    = new DateTime(2018, 01, 01);
            var timeWindows = new TimeWindows("1", TimeSpan.FromDays(1));
            var venueFilter = new HighVolumeVenueDecoratorFilter(
                timeWindows,
                this._baseService,
                this._highVolumeVenueFilter);

            var anObserver = A.Fake <IObserver <IUniverseEvent> >();

            var onNext1 = A.Fake <IUniverseEvent>();

            A.CallTo(() => onNext1.EventTime).Returns(baseDate);

            var onNext2 = A.Fake <IUniverseEvent>();

            A.CallTo(() => onNext2.EventTime).Returns(baseDate);
            A.CallTo(() => onNext2.StateChange).Returns(UniverseStateEvent.Eschaton);

            var result = venueFilter.Subscribe(anObserver);

            venueFilter.OnNext(onNext1);
            venueFilter.OnNext(onNext2);

            A.CallTo(() => this._baseService.Subscribe(anObserver)).MustHaveHappenedOnceExactly();

            Assert.IsNotNull(result);

            A.CallTo(() => this._baseService.OnNext(onNext1)).MustHaveHappenedOnceExactly();
            A.CallTo(() => this._baseService.OnNext(onNext2)).MustHaveHappenedOnceExactly();
        }
        public IHighVolumeVenueDecoratorFilter Build(
            TimeWindows timeWindows,
            IUniverseFilterService baseService,
            DecimalRangeRuleFilter venueVolumeFilterSetting,
            ISystemProcessOperationRunRuleContext ruleRunContext,
            IUniverseDataRequestsSubscriber dataRequestSubscriber,
            DataSource dataSource,
            RuleRunMode ruleRunMode)
        {
            var filterRule = new HighVolumeVenueFilter(
                timeWindows,
                venueVolumeFilterSetting,
                this._equityOrderFilterService,
                ruleRunContext,
                this._equityMarketCacheFactory,
                this._fixedIncomeMarketCacheFactory,
                ruleRunMode,
                this._marketTradingHoursService,
                dataRequestSubscriber,
                dataSource,
                this._tradingHistoryLogger,
                this._venueLogger);

            var filter = new HighVolumeVenueDecoratorFilter(timeWindows, baseService, filterRule);

            return(filter);
        }
Пример #3
0
        public void OnCompleted_DelegatesCallToSubscriber()
        {
            var timeWindows = new TimeWindows("1", TimeSpan.FromDays(1));
            var venueFilter = new HighVolumeVenueDecoratorFilter(
                timeWindows,
                this._baseService,
                this._highVolumeVenueFilter);

            venueFilter.OnCompleted();

            A.CallTo(() => this._baseService.OnCompleted()).MustHaveHappenedOnceExactly();
        }
Пример #4
0
        public void Version_DelegatesCallToDecoratee()
        {
            var timeWindows = new TimeWindows("1", TimeSpan.FromDays(1));
            var venueFilter = new HighVolumeVenueDecoratorFilter(
                timeWindows,
                this._baseService,
                this._highVolumeVenueFilter);

            var result = venueFilter.Version;

            A.CallTo(() => this._baseService.Version).MustHaveHappenedOnceExactly();
        }
Пример #5
0
        public void Subscribe_SubscribeObserver_ReturnsNonNullAndCallsFactory()
        {
            var timeWindows = new TimeWindows("1", TimeSpan.FromDays(1));
            var venueFilter = new HighVolumeVenueDecoratorFilter(
                timeWindows,
                this._baseService,
                this._highVolumeVenueFilter);

            var anObserver = A.Fake <IObserver <IUniverseEvent> >();

            var result = venueFilter.Subscribe(anObserver);

            A.CallTo(() => this._baseService.Subscribe(anObserver)).MustHaveHappenedOnceExactly();

            Assert.IsNotNull(result);
        }
Пример #6
0
        public void Subscribe_SubscribeNullObserver_ReturnsNullAndDoesNotCallFactory()
        {
            var timeWindows = new TimeWindows("1", TimeSpan.FromDays(1));
            var venueFilter = new HighVolumeVenueDecoratorFilter(
                timeWindows,
                this._baseService,
                this._highVolumeVenueFilter);

            var result = venueFilter.Subscribe(null);

            A.CallTo(
                () => this._universeUnsubscriberFactory.Create(
                    A <ConcurrentDictionary <IObserver <IUniverseEvent>, IObserver <IUniverseEvent> > > .Ignored,
                    A <IObserver <IUniverseEvent> > .Ignored)).MustNotHaveHappened();

            Assert.IsNull(result);
        }
        public void WhenIRunTheHighVolumeVenueFilter()
        {
            this._filter = new HighVolumeVenueFilter(
                this._timeWindows,
                new DecimalRangeRuleFilter
            {
                Max  = this._venueFilterApiParameters.Max,
                Min  = this._venueFilterApiParameters.Min,
                Type = RuleFilterType.Include
            },
                new UniverseEquityOrderFilterService(new NullLogger <UniverseEquityOrderFilterService>()),
                this._ruleCtx,
                new UniverseEquityMarketCacheFactory(
                    new StubRuleRunDataRequestRepository(),
                    new RuleRunDataRequestRepository(
                        A.Fake <IConnectionStringFactory>(),
                        new NullLogger <RuleRunDataRequestRepository>()),
                    new NullLogger <UniverseEquityMarketCacheFactory>()),
                new UniverseFixedIncomeMarketCacheFactory(
                    new StubRuleRunDataRequestRepository(),
                    new RuleRunDataRequestRepository(
                        A.Fake <IConnectionStringFactory>(),
                        new NullLogger <RuleRunDataRequestRepository>()),
                    new NullLogger <UniverseFixedIncomeMarketCacheFactory>()),
                RuleRunMode.ValidationRun,
                this._tradingHoursService,
                this._universeDataRequestsSubscriber,
                DataSource.AnyIntraday,
                new NullLogger <TradingHistoryStack>(),
                new NullLogger <HighVolumeVenueFilter>());

            this._baseUniverseFilterService = A.Fake <IUniverseFilterService>();

            var filterDecorator = new HighVolumeVenueDecoratorFilter(
                this._timeWindows,
                this._baseUniverseFilterService,
                this._filter);

            filterDecorator.Subscribe(this._observer);

            foreach (var universeEvent in this._universeSelectionState.SelectedUniverse.UniverseEvents)
            {
                filterDecorator.OnNext(universeEvent);
            }
        }