Esempio n. 1
0
        public void Find_ShouldReturnAllDrawsOfAGameWhenThereAreNoDateLimits()
        {
            //Arrange
            var someGame      = new LotteryGameBuilder().WithRandomDraws(5, 10).Build();
            var someOtherGame = new LotteryGameBuilder().WithRandomDraws(5, 10).Build();

            using (var context = CreateDbContext())
            {
                context.Add(someGame);
                context.Add(someOtherGame);
                context.SaveChanges();
            }

            using (var context = CreateDbContext())
            {
                var repo = new DrawRepository(context);

                //Act
                var draws = repo.Find(someGame.Id, null, null);

                //Assert
                Assert.That(draws, Is.Not.Null, () => "No draws are returned.");
                Assert.That(draws.Count, Is.Not.GreaterThan(someGame.Draws.Count), () => "Too much draws are returned.");
                Assert.That(draws.Count, Is.EqualTo(someGame.Draws.Count), () => "All the draws of a game should be returned.");
                Assert.That(draws, Has.All.Matches((Draw draw) => draw.LotteryGameId == someGame.Id),
                            () =>
                            "Only draws of the lottery game with an 'Id' that matches the 'lotterGameId' parameter, should be returned.");
            }
        }
Esempio n. 2
0
        public void Add_ShouldAddADrawToTheDatabase()
        {
            //Arrange
            var someGame = new LotteryGameBuilder().Build();

            using (var context = CreateDbContext())
            {
                context.Add(someGame);
                context.SaveChanges();
            }

            var newDraw = new DrawBuilder().WithLotteryGameId(someGame.Id).WithRandomDrawNumbers(1, 1).Build();

            using (var context = CreateDbContext())
            {
                var repo = new DrawRepository(context);

                //Act
                repo.Add(newDraw);
            }

            using (var context = CreateDbContext())
            {
                //Assert
                var savedDraw = context.Set <Draw>().FirstOrDefault(draw => draw.Id == newDraw.Id);
                Assert.That(savedDraw, Is.Not.Null, () => "Cannot find the added draw in the database.");
            }
        }
Esempio n. 3
0
        public void Find_ShouldIncludeTheDrawNumbersOfTheReturnedDraws()
        {
            //Arrange
            var someGame = new LotteryGameBuilder().WithRandomDraws(1, 1).Build();

            using (var context = CreateDbContext())
            {
                context.Add(someGame);
                context.SaveChanges();
            }

            using (var context = CreateDbContext())
            {
                var repo = new DrawRepository(context);

                //Act
                var draws = repo.Find(someGame.Id, null, null);

                //Assert
                Assert.That(draws, Is.Not.Null, () => "No draws are returned.");
                var firstDraw = draws.FirstOrDefault();
                Assert.That(firstDraw, Is.Not.Null, () => "No draws are returned.");
                Assert.That(firstDraw.DrawNumbers, Is.Not.Null.And.Not.Empty, () => "The draw numbers of the draws are not returned from the database.");
            }
        }
        public void CreateDrawFor_ShouldAlwaysGenerateUniqueNumbersInADraw()
        {
            var someGame = new LotteryGameBuilder()
                           .WithId()
                           .WithMaximumNumber(3)
                           .WithMaximumNumberOfNumbersInADrawy(2)
                           .Build();

            var  amountOfRunsToRuleOutRandomness = 20;
            bool generatesRandomNumbers          = false;

            for (int i = 0; i < amountOfRunsToRuleOutRandomness; i++)
            {
                _drawRepositoryMock.Invocations.Clear();
                _service.CreateDrawFor(someGame);
                bool isDifferent = false;
                _drawRepositoryMock.Verify(repo => repo.Add(It.Is <Draw>(draw => AssertIsDrawWitUniqueNumbers(draw, out isDifferent))), Times.Once,
                                           "The draw created by the service should be added using the repository.");
                if (isDifferent)
                {
                    generatesRandomNumbers = true;
                }
            }
            Assert.That(generatesRandomNumbers, Is.True, () => "The service does not seem to use random numbers to create a draw.");
        }
Esempio n. 5
0
        public void Find_ShouldOnlyReturnDrawsBeforeUntilDate()
        {
            //Arrange
            var untilDate = DateTime.Now.AddDays(-1);
            var someGame  = new LotteryGameBuilder().WithDrawsAroundDateRange(null, untilDate).Build();

            using (var context = CreateDbContext())
            {
                context.Add(someGame);
                context.SaveChanges();
            }

            var expectedDraws = someGame.Draws.Where(d => d.Date <= untilDate).OrderBy(d => d.Date).ToList();

            TestFindForDateRange(someGame.Id, null, untilDate, expectedDraws);
        }
        public void CreateDrawFor_ShouldGenerateACorrectListOfNumbersAndAddADrawUsingTheRepository()
        {
            var someGame = new LotteryGameBuilder().WithId().Build();

            _service.CreateDrawFor(someGame);

            var amountOfRunsToRuleOutRandomness = 10;

            for (int i = 0; i < amountOfRunsToRuleOutRandomness; i++)
            {
                _drawRepositoryMock.Invocations.Clear();
                _service.CreateDrawFor(someGame);
                _drawRepositoryMock.Verify(repo => repo.Add(someGame.Id, It.Is <IList <int> >(numbers => AssertIsValidNumbersList(someGame, numbers))), Times.Once,
                                           "The Add method of the repository is not called correctly.");
            }
        }
        public void CreateDrawFor_ShouldGenerateACorrectDrawAndAddItToTheRepository()
        {
            var someGame = new LotteryGameBuilder().WithId().Build();
            var now      = DateTime.Now;

            _service.CreateDrawFor(someGame);

            var amountOfRunsToRuleOutRandomness = 10;

            for (int i = 0; i < amountOfRunsToRuleOutRandomness; i++)
            {
                _drawRepositoryMock.Invocations.Clear();
                _service.CreateDrawFor(someGame);
                _drawRepositoryMock.Verify(repo => repo.Add(It.Is <Draw>(draw => AssertIsValidDraw(draw, someGame, now))), Times.Once,
                                           "The draw created by the service should be added using the repository.");
            }
        }