public void CreateRandomBets_GivenXBatchSize_ReturnsXInBatchSize(int numberOfBets, int maxBetsBatchSize)
        {
            // Given
            var betsRecieved = new List<List<Bet>>();
            var randomBetDataProvider = new RandomBetDataProvider(numberOfBets, maxBetsBatchSize);
            randomBetDataProvider.BetsProvided += (sender, args) => { betsRecieved.Add(new List<Bet>(args.Bets)); };
            randomBetDataProvider.BetsProviderFinished += (sender, args) =>
            {
                lock (_lockObject)
                {
                    Monitor.Pulse(_lockObject);
                }
            };

            // When
            randomBetDataProvider.Start();
            lock (_lockObject)
            {
                Monitor.Wait(_lockObject, TimeOut);
            }

            // Then
            var lastBatch = betsRecieved.Last();
            foreach (var betsRecievedBatch in betsRecieved)
            {
                if(betsRecievedBatch != lastBatch)
                    Assert.That(betsRecievedBatch.Count, Is.EqualTo(maxBetsBatchSize));
                else
                    Assert.That(betsRecievedBatch.Count, Is.LessThanOrEqualTo(maxBetsBatchSize));
            }
        }
        public void CreateRandomBets_GivenXBets_ReturnsXBets(int numberOfBets)
        {
            // Given
            var betsRecieved = new List<Bet>();
            var randomBetDataProvider = new RandomBetDataProvider(numberOfBets);
            randomBetDataProvider.BetsProvided += (sender, args) => { betsRecieved.AddRange(args.Bets); };
            randomBetDataProvider.BetsProviderFinished += (sender, args) =>
            {
                lock (_lockObject)
                {
                    Monitor.Pulse(_lockObject);
                }
            };

            // When
            randomBetDataProvider.Start();
            lock (_lockObject)
            {
                Monitor.Wait(_lockObject, TimeOut);
            }

            // Then
            Assert.That(betsRecieved.Count, Is.EqualTo(numberOfBets));
        }
 public BetDataProvider CreateRandomBetDataProvider(int numberOfBets, int maxBetBatchSize)
 {
     var randomBetDataProvider = new RandomBetDataProvider(numberOfBets, maxBetBatchSize);
     return randomBetDataProvider;
 }