public void WhenConnectionFailsCloudFlareBypass_Should_BeTried() { // arrange bool cloudFlareCalled = false; var client = PrepareClient(); socket.Setup(s => s.State).Returns(ConnectionState.Disconnected); socket.Setup(s => s.Start()).Callback(() => { socket.Raise(s => s.StateChanged += null, new StateChange(ConnectionState.Connecting, ConnectionState.Disconnected)); }); cloud.Setup(c => c.GetCloudFlareCookies(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>())).Returns(new CookieContainer()).Callback(() => { cloudFlareCalled = true; socket.Setup(s => s.State).Returns(ConnectionState.Connected); socket.Setup(s => s.Start()).Callback(() => { socket.Raise(s => s.StateChanged += null, new StateChange(ConnectionState.Connecting, ConnectionState.Connected)); }); }); BittrexMarketSummary result = null; // act var subscription = client.SubscribeToMarketDeltaStream("TestMarket1", (test) => result = test); // assert Assert.IsTrue(subscription.Success); Assert.IsTrue(cloudFlareCalled); }
public void GetMarketSummary_Should_RespondWithMarketSummary() { // arrange var expected = new BittrexMarketSummary() { Ask = 0.001m, Bid = 0.002m, Last = 0.003m, Created = new DateTime(2017, 1, 1), MarketName = "TestMarket", BaseVolume = 1.1m, High = 2.2m, Low = 3.3m, OpenBuyOrders = 10, OpenSellOrders = 20, PrevDay = 4.4m, TimeStamp = new DateTime(2016, 1, 1), Volume = 5.5m }; var objects = TestHelpers.PrepareClient(() => Construct(), JsonConvert.SerializeObject(WrapInResult(new List <BittrexMarketSummary>() { expected }))); // act var result = objects.Client.GetMarketSummary("TestMarket"); // assert Assert.IsTrue(result.Success); Assert.IsTrue(TestHelpers.PublicInstancePropertiesEqual(result.Data, expected)); }
/// <summary> /// Responds to the changes in market data. /// </summary> /// <param name="marketDelta">Market delta stream data.</param> protected static void OnMarketDeltaUpdate(BittrexMarketSummary marketDelta) { if (_streams.TryGetValue(marketDelta.MarketName, out var stream)) { stream.UpdateMarketDelta(new BittrexMarketSummaryProvider(marketDelta)); } }
public void WhenTheSocketReturnsEmptyDataTheEvent_Should_NotTrigger() { // arrange var client = PrepareClient(); BittrexMarketSummary result = null; var subscription = client.SubscribeToMarketDeltaStream("TestMarket1", (test) => result = test); var expected = ""; // act TriggerSub(sub, expected); // assert Assert.IsTrue(subscription.Success); Assert.IsNull(result); }
public void WhenUnsubscribingTheLastSubscriptionTheSocket_Should_Close() { // arrange bool stopCalled = false; var client = PrepareClient(); socket.Setup(s => s.Stop(It.IsAny <TimeSpan>())).Callback(() => stopCalled = true); BittrexMarketSummary result = null; var subscription = client.SubscribeToMarketDeltaStream("TestMarket1", (test) => result = test); // act client.UnsubscribeFromStream(subscription.Result); Thread.Sleep(10); // assert Assert.IsTrue(subscription.Success); Assert.IsTrue(stopCalled); }
public void SubscribingToMarketDeltaStream_Should_NotTriggerWhenDeltaMessageForOtherMarketIsReceived() { // arrange Subscription sub; Mock <Interfaces.IHubConnection> socket; Mock <ICloudFlareAuthenticator> cloud; var client = PrepareClient(out sub, out socket, out cloud); BittrexMarketSummary result = null; var subscription = client.SubscribeToMarketDeltaStream("TestMarket1", (test) => result = test); var expected = new BittrexStreamDeltas() { Deltas = new List <BittrexMarketSummary>() { new BittrexMarketSummary() { Ask = 1.1m, BaseVolume = 2.2m, Bid = 3.3m, Created = new DateTime(2017, 1, 1), DisplayMarketName = null, High = 4.4m, Last = 5.5m, Low = 6.6m, MarketName = "TestMarket2", OpenBuyOrders = 10, OpenSellOrders = 20, PrevDay = 7.7m, TimeStamp = new DateTime(2016, 1, 1), Volume = 8.8m } } }; // act TriggerSub(sub, expected); // assert Assert.IsTrue(subscription.Success); Assert.IsNull(result); }
public void WhenConnectingCloudFlareBypass_Should_BeUsed() { // arrange bool cloudFlareCalled = false; var client = PrepareClient(); cloud.Setup(c => c.GetCloudFlareCookies(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>())).Returns(Task.FromResult(new CookieContainer())).Callback(() => { cloudFlareCalled = true; }); BittrexMarketSummary result = null; // act var subscription = client.SubscribeToMarketDeltaStream("TestMarket1", (test) => result = test); // assert Assert.IsTrue(subscription.Success); Assert.IsTrue(cloudFlareCalled); }
public void WhenCloudFlareFailsSubscription_Should_Fail() { // arrange Subscription sub; Mock <Interfaces.IHubConnection> socket; Mock <ICloudFlareAuthenticator> cloud; var client = PrepareClient(out sub, out socket, out cloud); socket.Setup(s => s.State).Returns(ConnectionState.Disconnected); cloud.Setup(c => c.GetCloudFlareCookies(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>())).Returns <CookieContainer>(null); socket.Setup(s => s.Start()).Callback(() => { socket.Raise(s => s.StateChanged += null, new StateChange(ConnectionState.Connecting, ConnectionState.Disconnected)); }); BittrexMarketSummary result = null; // act var subscription = client.SubscribeToMarketDeltaStream("TestMarket1", (test) => result = test); // assert Assert.IsFalse(subscription.Success); }
public void WhenTheSocketReturnsEmptyDataTheEvent_Should_NotTrigger() { // arrange Subscription sub; Mock <Interfaces.IHubConnection> socket; Mock <ICloudFlareAuthenticator> cloud; var client = PrepareClient(out sub, out socket, out cloud); BittrexMarketSummary result = null; var subscription = client.SubscribeToMarketDeltaStream("TestMarket1", (test) => result = test); var expected = ""; // act TriggerSub(sub, expected); // assert Assert.IsTrue(subscription.Success); Assert.IsNull(result); }
public static Pair24HoursStatistic ToMarketSummary(this BittrexMarketSummary marketSummaryDataType) { Pair pair; if (!BittrexPairs.TryParsePair(marketSummaryDataType.MarketName, out pair)) { return(null); } DateTime parsedTimeStamp; var timeStamp = DateTime.TryParse(marketSummaryDataType.TimeStamp, out parsedTimeStamp) ? parsedTimeStamp : (DateTime?)null; var summary = new Pair24HoursStatistic(pair, marketSummaryDataType.High, marketSummaryDataType.Low, marketSummaryDataType.BaseVolume, marketSummaryDataType.QuoteVolume, marketSummaryDataType.Last, marketSummaryDataType.PrevDay, marketSummaryDataType.CountOpenBuyOrders, marketSummaryDataType.CountOpenSellOrders, timeStamp); return(summary); }
public void SubscribingToMarketDeltaStream_Should_TriggerWhenDeltaMessageIsReceived() { // arrange var client = PrepareClient(); BittrexMarketSummary result = null; var subscription = client.SubscribeToMarketDeltaStream("TestMarket", (test) => result = test); var expected = new BittrexStreamDeltas() { Deltas = new List <BittrexMarketSummary>() { new BittrexMarketSummary() { Ask = 1.1m, BaseVolume = 2.2m, Bid = 3.3m, Created = new DateTime(2017, 1, 1), DisplayMarketName = null, High = 4.4m, Last = 5.5m, Low = 6.6m, MarketName = "TestMarket", OpenBuyOrders = 10, OpenSellOrders = 20, PrevDay = 7.7m, TimeStamp = new DateTime(2016, 1, 1), Volume = 8.8m } } }; // act TriggerSub(sub, expected); // assert Assert.IsTrue(subscription.Success); Assert.IsTrue(ObjectComparer.PublicInstancePropertiesEqual(result, expected.Deltas[0])); }
/// <summary> /// Initializes the new instance of market summary provider for Bittrex exchanger. /// </summary> /// <param name="source">Market summary data source.</param> public BittrexMarketSummaryProvider(BittrexMarketSummary source) { Source = source; }