public void ExerciseTrackerService_GetExecutionsOfDay_ReturnsAllOfDay() { // Arrange var testDataSet = CreateTestDataSet(); var stubDataService = Substitute.For <IExerciseTrackerDataService>(); var stubTimeProvider = Substitute.For <ITimeProvider>(); var unitUnderTest = new ExerciseTrackerService(stubDataService, stubTimeProvider); var expectedDay = new DateTime(2017, 10, 19); stubDataService.GetByPeriod(Arg.Any <DateTime>(), Arg.Any <DateTime>()) .Returns(x => testDataSet .Where(ee => ee.ExecutionTime >= (DateTime)x[0] && ee.ExecutionTime <= (DateTime)x[1]) .ToList()); // Using the percentages here instead of the date to make sure that the // test won't use the same mistake in date selection. var expectedExerciseList = testDataSet.Where(ee => ee.PercentageCompleted >= 30 && ee.PercentageCompleted <= 50).ToList(); // Act var actualResult = unitUnderTest.GetExecutionsOfDay(expectedDay); // Assert Assert.AreEqual(expectedDay, actualResult.Day); Assert.AreEqual(expectedExerciseList.Count, actualResult.ExersiseExecutions.Count); for (var i = 0; i < expectedExerciseList.Count; i++) { Assert.AreEqual(expectedExerciseList[i], actualResult.ExersiseExecutions[i]); } }
public void ExerciseTrackerService_ExerciseFinished_RaisesDailyExerciseTrackerChangedEvent() { // Arrange var stubDataService = Substitute.For <IExerciseTrackerDataService>(); var stubTimeProvider = Substitute.For <ITimeProvider>(); var stubExercise = new TestableExercise(new ExerciseConfiguration()); var unitUnderTest = new ExerciseTrackerService(stubDataService, stubTimeProvider); var eventRaised = new AutoResetEvent(false); unitUnderTest.DailyExerciseTrackerChanged += (sender, args) => eventRaised.Set(); // Act unitUnderTest.ExerciseFinished(stubExercise); // Assert Assert.IsTrue(eventRaised.WaitOne(5000), "Expected event to be raised"); }
public void ExerciseTrackerService_ExerciseFinished_AddsExerciseToRepository() { // Arrange var mockDataService = Substitute.For <IExerciseTrackerDataService>(); var stubTimeProvider = Substitute.For <ITimeProvider>(); var unitUnderTest = new ExerciseTrackerService(mockDataService, stubTimeProvider); var stubExercise = new TestableExercise(new ExerciseConfiguration()); stubTimeProvider.Today.Returns(DateTime.Parse("2017/10/17 12:15:30")); // Act unitUnderTest.ExerciseFinished(stubExercise); // Assert mockDataService.Received(1) .Add(Arg.Is <ExersiseExecution>(ee => ee.ExecutionTime.Equals(DateTime.Parse("2017/10/17 12:15:30")) && ee.PercentageCompleted == 21)); }
public void ExerciseTrackerService_GetExecutionsOfPeriod_ReturnsAllOfPeriod() { // Arrange var testDataSet = CreateTestDataSet(); var stubDataService = Substitute.For <IExerciseTrackerDataService>(); var stubTimeProvider = Substitute.For <ITimeProvider>(); var unitUnderTest = new ExerciseTrackerService(stubDataService, stubTimeProvider); var expectedPeriodStart = new DateTime(2017, 10, 19); var expectedPeriodEnd = new DateTime(2017, 10, 20, 12, 00, 00); stubDataService.GetByPeriod(Arg.Any <DateTime>(), Arg.Any <DateTime>()) .Returns(x => testDataSet .Where(ee => ee.ExecutionTime >= (DateTime)x[0] && ee.ExecutionTime <= (DateTime)x[1]) .ToList()); // Act var actualResult = unitUnderTest.GetExecutionsOfPeriod(expectedPeriodStart, expectedPeriodEnd); // Assert Assert.AreEqual(2, actualResult.Count, "Expected to get the data of 2 days"); Assert.AreEqual(3, actualResult[0].ExersiseExecutions.Count, "Expected 3 exercises on 19-10"); Assert.AreEqual(2, actualResult[1].ExersiseExecutions.Count, "Expected 2 exercises on 20-10 until 12:00"); }