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."); } }
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."); } }
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."); }
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."); } }