public void WillPublishCoverageSummaryToTfs()
        {
            var summary = new CoverageSummary("flavor", "platform");

            summary.AddCoverageStatistics("lines", 10, 5, CoverageSummary.Priority.Line);
            summary.AddCoverageStatistics("blocks", 10, 5, CoverageSummary.Priority.Other);

            var token      = new CancellationToken();
            var publisher  = new AzurePipelinesPublisher(_context, _mockClientFactory.Object, _mockFFHelper.Object, _mockHtmlPublisher.Object, _mockLogStoreHelper.Object, true);
            var mockClient = new Mock <TestManagementHttpClient>(new Uri("http://localhost"), new VssCredentials());

            _mockClientFactory.Setup(x => x.GetClient <TestManagementHttpClient>()).Returns(mockClient.Object);
            _mockFFHelper.Setup(x => x.GetFeatureFlagState(
                                    It.Is <string>(a => a == Constants.FeatureFlags.EnablePublishToTcmServiceDirectlyFromTaskFF),
                                    It.Is <bool>(b => b == false))).Returns(false);

            publisher.PublishCoverageSummary(summary, token).Wait();

            mockClient.Verify(x => x.UpdateCodeCoverageSummaryAsync(
                                  It.Is <CodeCoverageData>(a => a == summary.CodeCoverageData),
                                  It.Is <Guid>(b => b == _context.ProjectId),
                                  It.Is <int>(c => c == _context.BuildId),
                                  It.IsAny <object>(),
                                  It.Is <CancellationToken>(d => d == token)));
        }
        private static void ProcessCoverage(PublisherConfiguration config, CancellationToken cancellationToken)
        {
            // Currently the publisher only works for azure pipelines, so we simply instansiate for Azure Pipelines
            AzurePipelinesPublisher publisher = null;
            IExecutionContext       context   = null;

            try
            {
                publisher = new AzurePipelinesPublisher(/*enableTelemetry*/ !config.DisableTelemetry);
                context   = publisher.ExecutionContext;
                TraceLogger.Initialize(context.Logger);
            }
            catch (Exception ex)
            {
                Console.Error.Write(string.Format(Resources.CouldNotConnectToAzurePipelines, ex));
                return;
            }


            var processor = new CoverageProcessor(publisher, context.TelemetryDataCollector);

            // By default wait for 2 minutes for coverage to publish
            var publishTimedout = processor.ParseAndPublishCoverage(config, cancellationToken, new Parser(config, context.TelemetryDataCollector))
                                  .Wait(config.TimeoutInSeconds * 1000, cancellationToken);

            if (publishTimedout)
            {
                _cancellationTokenSource.Cancel();
            }
            else
            {
                publishSuccess = true;
            }
        }
        public void WillPublishHtmlReport()
        {
            var publisher = new AzurePipelinesPublisher(_context, _mockClientFactory.Object, _mockFFHelper.Object, _mockHtmlPublisher.Object, _mockLogStoreHelper.Object, true);
            var token     = new CancellationToken();

            _mockHtmlPublisher.Setup(x => x.PublishHTMLReportAsync(It.IsAny <string>(), It.IsAny <CancellationToken>())).Returns(Task.CompletedTask);

            publisher.PublishHTMLReport("directory", token).Wait();

            _mockHtmlPublisher.Verify(x => x.PublishHTMLReportAsync(
                                          It.Is <string>(a => a == "directory"),
                                          It.Is <CancellationToken>(b => b == token)));
        }
        public void WillPublishFileCoverage()
        {
            var token      = new CancellationToken();
            var publisher  = new AzurePipelinesPublisher(_context, _mockClientFactory.Object, _mockFFHelper.Object, _mockHtmlPublisher.Object, _mockLogStoreHelper.Object, true);
            var mockClient = new Mock <TestManagementHttpClient>(new Uri("http://localhost"), new VssCredentials());

            var data = new Dictionary <string, string>();

            _mockClientFactory.Setup(x => x.GetClient <TestManagementHttpClient>()).Returns(mockClient.Object);
            _mockFFHelper.Setup(x => x.GetFeatureFlagState(
                                    It.Is <string>(a => a == Constants.FeatureFlags.EnablePublishToTcmServiceDirectlyFromTaskFF),
                                    It.Is <bool>(b => b == false))).Returns(false);

            _mockLogStoreHelper.Setup(x => x.UploadTestBuildLogAsync(
                                          It.IsAny <Guid>(),
                                          It.IsAny <int>(),
                                          It.IsAny <TestLogType>(),
                                          It.IsAny <string>(),
                                          It.IsAny <Dictionary <string, string> >(),
                                          It.IsAny <string>(),
                                          It.IsAny <bool>(),
                                          It.IsAny <CancellationToken>()))
            .Callback <Guid, int, TestLogType, string, Dictionary <string, string>, string, bool, CancellationToken>(
                (a, b, c, d, e, f, g, h) =>
            {
                data.Add(d, File.ReadAllText(d));
            })
            .Returns(Task.FromResult <TestLogStatus>(null));

            var fileCoverage = new List <FileCoverageInfo>()
            {
                new FileCoverageInfo()
                {
                    FilePath           = "C:\\a.cs",
                    LineCoverageStatus = new Dictionary <uint, CoverageStatus>()
                    {
                        { 1, CoverageStatus.Covered },
                        { 2, CoverageStatus.Covered },
                    }
                },

                new FileCoverageInfo()
                {
                    FilePath           = "C:\\b.cs",
                    LineCoverageStatus = new Dictionary <uint, CoverageStatus>()
                    {
                        { 1, CoverageStatus.Covered },
                        { 2, CoverageStatus.NotCovered },
                    }
                }
            };

            publisher.PublishFileCoverage(fileCoverage, token).Wait();

            _mockLogStoreHelper.Verify(x => x.UploadTestBuildLogAsync(
                                           It.Is <Guid>(a => a == _context.ProjectId),
                                           It.Is <int>(b => b == _context.BuildId),
                                           It.Is <TestLogType>(c => c == TestLogType.Intermediate),
                                           It.Is <string>(d => data.ContainsKey(d) && data[d] == JsonUtility.ToString(fileCoverage)),
                                           It.IsAny <Dictionary <string, string> >(),
                                           It.Is <string>(f => f == null),
                                           It.Is <bool>(g => g == true),
                                           It.Is <CancellationToken>(e => e == token)));
        }