public void CreatingNewTrackerWithNullShareFails() { Assert.Throws<ArgumentNullException>(() => { using (ShareTracker tracker = new ShareTracker(null)) { } }); }
public void CreatingNewTrackerWithValidShareInitializesEmptyClientList() { using (ShareTracker tracker = new ShareTracker(new Share { ShortCode = "SOL" })) { Assert.Equal(0, tracker.Clients.Count); } }
public void TrackerExposesInstantiatedShareAsAProperty() { Share sasol = new Share() { ShortCode = "SOL" }; using (ShareTracker tracker = new ShareTracker(sasol)) { Assert.True(tracker.Share == sasol); } }
public void NewTrackerStartsPollForNewPrices() { Share sasol = new Share() { ShortCode = "SOL", LastTradePrice = -1 }; using (ShareTracker tracker = new ShareTracker(sasol, 1)) { System.Threading.Thread.Sleep(25); Assert.NotEqual(-1, tracker.Share.LastTradePrice); } }
public PriceDTO ListenForPriceChanges(string shortCode) { ShareTracker tracker = null; // Check if already listening to updates for that code if (!SharesTracked.ContainsKey(shortCode)) { lock (_shareLock) { if (!SharesTracked.ContainsKey(shortCode)) { var share = new Repository().GetPriceForShare(shortCode); tracker = new ShareTracker(share); SharesTracked.Add(shortCode, tracker); // Subscribe to trades tracker.TradeOccurred += tracker_TradeOccurred; } } } tracker = SharesTracked[shortCode]; if (!tracker.Clients.Contains(Context.ConnectionId)) { // Add client ID to that code's set of listeners tracker.Clients.Add(Context.ConnectionId); } // Add client to that broadcast group Groups.Add(Context.ConnectionId, shortCode); // Get current price and return return new PriceDTO { LastTradePrice = tracker.Share.LastTradePrice, ShortCode = tracker.Share.ShortCode, TradeVolume = tracker.Share.TradeVolume }; }
public void TrackerExposesPriceUpdatedEventWhichNotifiesOfUpdatedPrices() { Share sasol = new Share { ShortCode = "SOL", LastTradePrice = -1 }; using (ShareTracker tracker = new ShareTracker(sasol, 1)) { var eventOccured = false; tracker.TradeOccurred += (s, e) => { eventOccured = true; }; System.Threading.Thread.Sleep(25); Assert.True(eventOccured); } }