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