public async Task Handle_WhenExecuteMutation_ShouldLogMutations()
        {
            var mutationRunLoggerManager = new Mock <IMutationRunLoggerManager>();
            var mutationDocumentExecutor = new ExecuteMutationsCommandHandler(_mutationExecutor, mutationRunLoggerManager.Object);

            await mutationDocumentExecutor.Handle(new ExecuteMutationsCommand(_config, _mutationDocuments), CancellationToken.None);

            mutationRunLoggerManager.Verify(m => m.LogAfterMutation(It.IsAny <MutationDocument>(), It.IsAny <List <MutationDocumentResult> >(), It.IsAny <int>()), Times.Exactly(3));
            mutationRunLoggerManager.Verify(m => m.LogBeforeMutation(It.IsAny <MutationDocument>()), Times.Exactly(3));
            mutationRunLoggerManager.Verify(m => m.LogBeforeRun(It.IsAny <List <MutationDocument> >()), Times.Once);
        }
        public async Task Handle_WhenExecuteMutation_ShouldGetCorrectResults()
        {
            var mutationDocumentExecutor = new ExecuteMutationsCommandHandler(_mutationExecutor, new MutationRunLoggerManager());
            var results = await mutationDocumentExecutor.Handle(new ExecuteMutationsCommand(_config, _mutationDocuments), CancellationToken.None);

            Assert.AreEqual(3, results.MutationDocumentResults.Count);

            var result = results.MutationDocumentResults.First();

            Assert.IsFalse(result.Survived);
        }
        public async Task Handle_WhenExecuteMutation_ShouldGetCallBacks()
        {
            var startedCallbackCount   = 0;
            var completedCallbackCount = 0;

            var mutationDocumentExecutor = new ExecuteMutationsCommandHandler(_mutationExecutor, new MutationRunLoggerManager());

            await mutationDocumentExecutor.Handle(new ExecuteMutationsCommand(_config, _mutationDocuments, document => startedCallbackCount++, documentResult => completedCallbackCount++), CancellationToken.None);

            Assert.AreEqual(3, startedCallbackCount, "wrong started callback count");
            Assert.AreEqual(3, completedCallbackCount, "Wrong completed callback count");
        }
        public async Task Handle_WhenExecuteMutationAndGetUnknownError_ShouldFindUnknownMutation()
        {
            var dependency = new TestRunnerDependencyFilesHandler(_fileSystem);

            var compiler   = ProjectCompilerCreator.CreatePositiveCompiler(_fileSystem);
            var testRunner = TestRunnerClientCreator.CreateEmptyTestResult();

            _mutationExecutor = new MutationDocumentExecutor(compiler, dependency, testRunner, _fileSystem);
            var mutationDocumentExecutor = new ExecuteMutationsCommandHandler(_mutationExecutor, new MutationRunLoggerManager());


            var results = await mutationDocumentExecutor.Handle(new ExecuteMutationsCommand(_config, _mutationDocuments), CancellationToken.None);

            Assert.AreEqual(3, results.MutationDocumentResults.Count);

            var result = results.MutationDocumentResults.First();

            Assert.IsNotNull(result.UnexpectedError);
        }