Example #1
0
        public async Task should_send_an_error_when_no_forex_data_after_five_seconds()
        {
            // given
            var scheduler = new MarbleScheduler();
            IObservable <String> quoteSource = scheduler.CreateHotObservable <string>("-g-----", new { g = new Quote("GOOGL", 1300).ToJson() });
            IObservable <String> forexSource = scheduler.CreateHotObservable <string>("-------");

            // when
            var stockQuoteServer = CreateServer(quoteSource, forexSource, scheduler);
            var stream           = await stockQuoteServer.GetEvents("GOOGL");

            // then
            scheduler.ExpectObservable(stream)
            .ToBe("------#");
            scheduler.Flush();
        }
Example #2
0
        public async Task should_unsubscribe_to_forex_stream_when_unscribing_to_quote()
        {
            // given
            var scheduler   = new MarbleScheduler();
            var quoteSource = scheduler.CreateHotObservable <string>("----g---", new { g = new Quote("GOOGL", 1300).ToJson() });
            var forexSource = scheduler.CreateHotObservable <string>("---f----", new { f = new Quote("EUR/USD", 1.2).ToJson() });
            var stopSource  = scheduler.CreateHotObservable <string>("------s-");

            // when
            var stockQuoteServer = CreateServer(quoteSource, forexSource, scheduler);
            var stream           = await stockQuoteServer.GetEvents("GOOGL");

            stream.TakeUntil(stopSource).Subscribe();


            // then
            scheduler.ExpectSubscription(forexSource.Subscriptions)
            .ToBe("^-----!-");
            scheduler.Flush();
        }
Example #3
0
        public async Task should_generate_quotes_in_euro_using_latest_known_foreign_exchange_rate()
        {
            // given
            var scheduler   = new MarbleScheduler();
            var quoteSource = scheduler.CreateHotObservable <string>("----g-", new { g = new Quote("GOOGL", 1300).ToJson() });
            var forexSource = scheduler.CreateHotObservable <string>("-f-x--", new
            {
                f = new Quote("EUR/USD", 1.2).ToJson(),
                x = new Quote("EUR/USD", 1.3).ToJson()
            });

            // when
            var stockQuoteServer = CreateServer(quoteSource, forexSource, scheduler);
            var stream           = await stockQuoteServer.GetEvents("GOOGL");

            // then
            scheduler.ExpectObservable(stream.Select(q => q.QuoteValue))
            .ToBe("----v-", new { v = 1000d });
            scheduler.Flush();
        }
Example #4
0
        public async Task should_filter_quotes_for_requested_stock()
        {
            // given
            var scheduler = new MarbleScheduler();
            IObservable <String> quoteSource = scheduler.CreateHotObservable <string>("--(ga)--", new
            {
                g = new Quote("GOOGL", 705.8673).ToJson(),
                a = new Quote("APPLE", 98.18).ToJson()
            });
            IObservable <String> forexSource = scheduler.CreateHotObservable <string>("--f--", new { f = new Quote("EUR/USD", 1).ToJson() });

            // when
            var stockQuoteServer = CreateServer(quoteSource, forexSource, scheduler);
            var stockQuoteStream = await stockQuoteServer.GetEvents("GOOGL");

            // then
            scheduler.ExpectObservable(stockQuoteStream.Select(q => q.Code))
            .ToBe("--v--", new { v = "GOOGL" });

            scheduler.Flush();
        }