コード例 #1
0
        public async Task GenerateDraw_CallsBusinessAndRepositoryLayer_ReturnsCorrectDrawNumberAsync()
        {
            // Arrange
            DateTime expectedSellUntilDate          = new DateTime(2018, 1, 1);
            int      expectedNumberOfBallots        = 10;
            int      expectedNumber                 = 222;
            var      expectedBallots                = new List <Ballot>();
            int      expectedMainPriceAmount        = 10000;
            int      expectedFinalNumberPriceAmount = 5;

            lotteryMock
            .Setup(mock => mock.GenerateBallotsAsync(expectedNumberOfBallots))
            .ReturnsAsync(expectedBallots);

            Draw actualDraw = null;

            drawRepositoryMock.Setup(mock => mock.Insert(It.IsAny <Draw>()))
            .Callback((Draw draw) =>
            {
                actualDraw = draw;
            })
            .Returns(expectedNumber);

            var drawConfiguration = new DrawConfiguration
            {
                SellUntilDate          = expectedSellUntilDate,
                NumberOfBallots        = expectedNumberOfBallots,
                MainPriceAmount        = expectedMainPriceAmount,
                FinalNumberPriceAmount = expectedFinalNumberPriceAmount
            };

            // Act
            int result = await drawController.GenerateDraw(drawConfiguration);

            // Assert
            result.Should().Be(expectedNumber);

            actualDraw.Should().NotBeNull();
            actualDraw.SellUntilDate.Should().Be(expectedSellUntilDate);
            actualDraw.Ballots.Should().Equal(expectedBallots);

            actualDraw.Prices.Should().HaveCount(2);
            var firstPrice = actualDraw.Prices.ElementAt(0);

            firstPrice.PriceType.Should().Be(PriceType.Main);
            firstPrice.Amount.Should().Be(expectedMainPriceAmount);

            var secondPrice = actualDraw.Prices.ElementAt(1);

            secondPrice.PriceType.Should().Be(PriceType.FinalDigit);
            secondPrice.Amount.Should().Be(expectedFinalNumberPriceAmount);

            lotteryMock.VerifyAll();
            drawRepositoryMock.VerifyAll();
        }