public async Task TestFilePublisher_DontPublishWhenFilesAreNotValid()
        {
            var publisher = new Agent.Plugins.Log.TestFilePublisher.TestFilePublisher(_vssConnection.Object, _pipelineConfig, _traceListener.Object, _logger.Object,
                                                                                      _telemetry.Object, _testFileFinder.Object, _testResultParser.Object, _testRunPublisher.Object);

            var testFiles = new List <string>
            {
                "/tmp/test-1.xml",
                "/tmp/test-2.xml",
                "/tmp/test-3.xml",
            };

            _testFileFinder.Setup(x => x.FindAsync(It.IsAny <IList <string> >())).ReturnsAsync(testFiles.AsEnumerable());
            _testResultParser.Setup(x => x.ParseTestResultFiles(It.IsAny <TestRunContext>(), It.IsAny <IList <string> >()))
            .Returns(new TestDataProvider(null));

            _testRunPublisher.Setup(x => x.PublishTestRunDataAsync(It.IsAny <TestRunContext>(), It.IsAny <string>(), It.IsAny <IList <TestRunData> >(),
                                                                   It.IsAny <PublishOptions>(), It.IsAny <CancellationToken>())).Throws <Exception>();

            await publisher.InitializeAsync();

            await publisher.PublishAsync();

            _testFileFinder.Verify(x => x.FindAsync(It.IsAny <IList <string> >()), Times.Once);

            _logger.Verify(x => x.Info(It.Is <string>(msg => msg.Contains("No valid Junit test result files are found which can be parsed"))), Times.Once);
        }
        public async Task TestFilePublisher_PublishMultipleFiles()
        {
            var publisher = new Agent.Plugins.Log.TestFilePublisher.TestFilePublisher(_vssConnection.Object, _pipelineConfig, _traceListener.Object, _logger.Object,
                                                                                      _telemetry.Object, _testFileFinder.Object, _testResultParser.Object, _testRunPublisher.Object);

            var testFiles = new List <string>
            {
                "/tmp/test-1.xml",
                "/tmp/test-2.xml",
                "/tmp/test-3.xml",
            };
            var testRuns = new List <TestRun>
            {
                new TestRun()
            };

            _testFileFinder.Setup(x => x.FindAsync(It.IsAny <IList <string> >())).ReturnsAsync(testFiles.AsEnumerable());
            _testResultParser.Setup(x => x.ParseTestResultFiles(It.IsAny <TestRunContext>(), It.IsAny <IList <string> >()))
            .Returns(new TestDataProvider(new List <TestData>
            {
                new TestData
                {
                    TestRunData = new TestRunData(null)
                }, new TestData()
                {
                    TestRunData = new TestRunData(null)
                }
            }));
            _testRunPublisher.Setup(x => x.PublishTestRunDataAsync(It.IsAny <TestRunContext>(), It.IsAny <string>(), It.IsAny <IList <TestRunData> >(),
                                                                   It.IsAny <PublishOptions>(), It.IsAny <CancellationToken>())).ReturnsAsync(testRuns);

            await publisher.InitializeAsync();

            await publisher.PublishAsync();

            _testFileFinder.Verify(x => x.FindAsync(It.IsAny <IList <string> >()), Times.Once);
            _testResultParser.Verify(x => x.ParseTestResultFiles(It.IsAny <TestRunContext>(), It.IsAny <IList <string> >()), Times.Once);
            _testRunPublisher.Verify(x => x.PublishTestRunDataAsync(It.IsAny <TestRunContext>(), It.IsAny <string>(), It.IsAny <IList <TestRunData> >(),
                                                                    It.IsAny <PublishOptions>(), It.IsAny <CancellationToken>()), Times.Once);


            _logger.Verify(x => x.Info(It.Is <string>(msg => msg.Contains("Number of files found with matching pattern 3"))), Times.Once);
            _logger.Verify(x => x.Info(It.Is <string>(msg => msg.Contains("Successfully parsed 2 files"))), Times.Once);
            _logger.Verify(x => x.Info(It.Is <string>(msg => msg.Contains("Successfully published 1 runs"))), Times.Once);
        }
        public async Task TestFilePublisher_DontPublishWhenFileExceptionsAreThrown()
        {
            var publisher = new Agent.Plugins.Log.TestFilePublisher.TestFilePublisher(_vssConnection.Object, _pipelineConfig, _traceListener.Object, _logger.Object,
                                                                                      _telemetry.Object, _testFileFinder.Object, _testResultParser.Object, _testRunPublisher.Object);

            _testFileFinder.Setup(x => x.FindAsync(It.IsAny <IList <string> >())).Throws <Exception>();
            _testResultParser.Setup(x => x.ParseTestResultFiles(It.IsAny <TestRunContext>(), It.IsAny <IList <string> >()))
            .Throws <Exception>();
            _testRunPublisher.Setup(x => x.PublishTestRunDataAsync(It.IsAny <TestRunContext>(), It.IsAny <string>(), It.IsAny <IList <TestRunData> >(),
                                                                   It.IsAny <PublishOptions>(), It.IsAny <CancellationToken>())).Throws <Exception>();

            await publisher.InitializeAsync();

            await publisher.PublishAsync();

            _testFileFinder.Verify(x => x.FindAsync(It.IsAny <IList <string> >()), Times.Once);

            _logger.Verify(x => x.Info(It.Is <string>(msg => msg.Contains("No test result files are found"))), Times.Once);
        }