Beispiel #1
0
        public async Task SellBallotAsync_PicksRandomBallotRegistersAsSold()
        {
            // Arrange
            int expectedRandomNumber  = 2;
            var expectedRandomNumbers = new List <int> {
                expectedRandomNumber
            };
            int      expectedBallotNumber = 123456789;
            DateTime expectedSellDate     = new DateTime(2017, 12, 25);

            SystemTime.SetDateTime(expectedSellDate);

            var expectedBallots = new List <Ballot>
            {
                new Ballot(),
                new Ballot(),
                new Ballot()
                {
                    Number = expectedBallotNumber
                }
            };

            int?lastNumber = null;

            var expectedDraw = new Draw
            {
                SellUntilDate = new DateTime(2018, 1, 1),
                Ballots       = expectedBallots
            };

            GenerationSettings actualGenerationSettings = null;

            RandomGeneratorMock
            .Setup(mock => mock.GenerateRandomNumbersAsync(It.IsAny <GenerationSettings>()))
            .Callback((GenerationSettings generationSettings) =>
            {
                actualGenerationSettings = generationSettings;
            })
            .ReturnsAsync(expectedRandomNumbers);

            // Act
            Ballot result = await Lottery.SellBallotAsync(expectedDraw, lastNumber);

            // Assert
            result.Should().NotBeNull();
            result.Number.Should().Be(expectedBallotNumber);
            result.SellDate.Should().Be(expectedSellDate);

            actualGenerationSettings.Should().NotBeNull();
            actualGenerationSettings.NumberOfIntegers.Should().Be(1);
            actualGenerationSettings.MinimalIntValue.Should().Be(0);
            actualGenerationSettings.MaximumIntValue.Should().Be(2);

            RandomGeneratorMock.VerifyAll();
        }