public static DataListFormat GetTestCoverageReports(ICoverageDataObject coverageObject, Guid workspaceGuid, Dev2JsonSerializer serializer, ITestCoverageCatalog testCoverageCatalog, ITestCatalog testCatalog, IResourceCatalog resourceCatalog, out string executePayload) { DataListFormat formatter = null; if (coverageObject.CoverageReportResourceIds?.Any() ?? false) { if (coverageObject.ReturnType == EmitionTypes.CoverJson) { formatter = coverageObject.RunCoverageAndReturnJSON(testCoverageCatalog, testCatalog, resourceCatalog, workspaceGuid, serializer, out executePayload); } else if (coverageObject.ReturnType == EmitionTypes.Cover) { formatter = coverageObject.RunCoverageAndReturnHTML(testCoverageCatalog, testCatalog, resourceCatalog, workspaceGuid, out executePayload); } else { executePayload = null; } } else { executePayload = null; Common.Dev2Logger.Warn("No test coverage reports found to execute for requested resource", Common.GlobalConstants.WarewolfWarn); } return(formatter ?? DataListFormat.CreateFormat("HTML", EmitionTypes.Cover, "text/html; charset=utf-8")); }
public static DataListFormat RunCoverageAndReturnHTML(this ICoverageDataObject coverageData, ITestCoverageCatalog testCoverageCatalog, ITestCatalog testCatalog, IResourceCatalog catalog, Guid workspaceGuid, out string executePayload) { var(allCoverageReports, allTestResults) = RunListOfCoverage(coverageData, testCoverageCatalog, testCatalog, workspaceGuid, catalog); var formatter = DataListFormat.CreateFormat("HTML", EmitionTypes.Cover, "text/html; charset=utf-8"); var stringWriter = new StringWriter(); using (var writer = new HtmlTextWriter(stringWriter)) { writer.SetupNavBarHtml(); allTestResults.Results .SelectMany(o => o.Results) .ToList() .SetupCountSummaryHtml(writer, coverageData); allCoverageReports.AllCoverageReportsSummary .Where(o => o.HasTestReports) .ToList() .ForEach(oo => { var resourcePath = string.Empty; if (oo.Resource is IFilePathResource filePath) { resourcePath = filePath.Path; } writer.SetupWorkflowRowHtml(resourcePath, coverageData, oo); }); } executePayload = stringWriter.ToString(); return(formatter); }
public static DataListFormat GetTestCoverageReports(ICoverageDataObject coverageObject, Guid workspaceGuid, Dev2JsonSerializer serializer, ITestCoverageCatalog testCoverageCatalog, IResourceCatalog resourceCatalog, out string executePayload) { DataListFormat formatter = null; if (coverageObject.CoverageReportResourceIds.Any()) { if (coverageObject.ReturnType == EmitionTypes.CoverJson) { formatter = coverageObject.RunCoverageAndReturnJSON(testCoverageCatalog, resourceCatalog, workspaceGuid, serializer, out executePayload); } else if (coverageObject.ReturnType == EmitionTypes.Cover) { formatter = coverageObject.RunCoverageAndReturnHTML(testCoverageCatalog, resourceCatalog, workspaceGuid, out executePayload); } else { executePayload = null; } } else { executePayload = null; throw new Exception("do not expect this to be executed any longer"); } return(formatter); }
public static DataListFormat RunCoverageAndReturnJSON(this ICoverageDataObject coverageData, ITestCoverageCatalog testCoverageCatalog, ITestCatalog testCatalog, IResourceCatalog catalog, Guid workspaceGuid, Dev2JsonSerializer serializer, out string executePayload) { var(allCoverageReports, _) = RunListOfCoverage(coverageData, testCoverageCatalog, testCatalog, workspaceGuid, catalog); var formatter = DataListFormat.CreateFormat("JSON", EmitionTypes.JSON, "application/json"); var objArray = allCoverageReports.AllCoverageReportsSummary .Where(o => o.HasTestReports) .Select(o => { var name = o.Resource.ResourceName; if (o.Resource is IFilePathResource filePath) { name = filePath.Path; } return(new JObject { { "ResourceID", o.Resource.ResourceID }, { "Name", name }, { "Reports", new JArray(o.Reports.Select(o1 => o1.BuildTestResultJSONForWebRequest())) } }); }); var obj = new JObject { { "StartTime", allCoverageReports.StartTime }, { "EndTime", allCoverageReports.EndTime }, { "Results", new JArray(objArray) }, }; executePayload = serializer.Serialize(obj); return(formatter); }
private static WarewolfWorkflowReports RunListOfCoverage(ICoverageDataObject coverageData, ITestCoverageCatalog testCoverageCatalog, ITestCatalog testCatalog, Guid workspaceGuid, IResourceCatalog catalog) { var resourceReportTemp = new WarewolfWorkflowReports(coverageData.CoverageReportResources, coverageData.ReportName); resourceReportTemp.Calculte(testCoverageCatalog, testCatalog); resourceReportTemp.EndTime = DateTime.Now; return(resourceReportTemp); }
public static void SetTestCoverageResourceIds(this ICoverageDataObject coverageData, IContextualResourceCatalog catalog, WebRequestTO webRequest, string serviceName, IWarewolfResource resource) { if (IsRunAllCoverageRequest(coverageData.ReturnType, serviceName)) { var pathOfAllResources = webRequest.GetPathForAllResources(); var path = pathOfAllResources; if (string.IsNullOrEmpty(pathOfAllResources)) { path = "/"; } var resources = catalog.GetExecutableResources(path); coverageData.CoverageReportResourceIds = resources.Where(o => o is IWarewolfWorkflow).Select(p => p.ResourceID).GroupBy(o => o).Select(o => o.Key).ToArray(); } else if (resource != null) { coverageData.CoverageReportResourceIds = new[] { resource.ResourceID }; } }
private static AllCoverageReports RunListOfCoverage(ICoverageDataObject coverageData, ITestCoverageCatalog testCoverageCatalog, Guid workspaceGuid, IResourceCatalog catalog) { var allCoverageReports = new AllCoverageReports { StartTime = DateTime.Now }; var resources = catalog.GetResources <IWarewolfWorkflow>(workspaceGuid); var selectedResources = resources.Where(resource => coverageData.CoverageReportResourceIds.Contains(resource.ResourceID)).ToArray(); testCoverageCatalog.ReloadAllReports(); var coverageReportsTemp = new List <WorkflowCoverageReports>(); foreach (var coverageResourceId in coverageData.CoverageReportResourceIds) { var res = selectedResources.FirstOrDefault(o => o.ResourceID == coverageResourceId); if (res is null) { continue; } var coverageReports = new WorkflowCoverageReports(res); var allWorkflowReports = testCoverageCatalog.Fetch(coverageResourceId); if (allWorkflowReports?.Count > 0) { foreach (var workflowReport in allWorkflowReports) { coverageReports.Add(workflowReport); } coverageReportsTemp.Add(coverageReports); } } foreach (var item in coverageReportsTemp) { allCoverageReports.Add(item); } allCoverageReports.EndTime = DateTime.Now; return(allCoverageReports); }
public static void SetupWorkflowRowHtml(this HtmlTextWriter writer, string resourcePath, ICoverageDataObject coverageData, IWorkflowCoverageReports coverageReports) { writer.AddAttribute(HtmlTextWriterAttribute.Class, "SetupWorkflowPathHtml"); writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "#333"); writer.AddStyleAttribute(HtmlTextWriterStyle.FontWeight, "bold"); writer.AddStyleAttribute(HtmlTextWriterStyle.FontSize, "16px"); writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "20%"); writer.AddStyleAttribute(HtmlTextWriterStyle.Padding, "8px 16px 16px 8px"); writer.AddStyleAttribute(HtmlTextWriterStyle.Display, "inline-block"); writer.RenderBeginTag(HtmlTextWriterTag.Div); writer.Write(resourcePath); writer.RenderEndTag(); writer.AddAttribute(HtmlTextWriterAttribute.Class, "SetupWorkflowPathHtml-link"); writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "100px"); writer.AddStyleAttribute(HtmlTextWriterStyle.FontWeight, "bold"); writer.AddStyleAttribute(HtmlTextWriterStyle.FontSize, "12px"); writer.AddStyleAttribute(HtmlTextWriterStyle.Display, "inline-block"); writer.RenderBeginTag(HtmlTextWriterTag.Div); writer.AddAttribute(HtmlTextWriterAttribute.Target, "_new"); var testUrl = coverageData.GetTestUrl(resourcePath); writer.AddAttribute(HtmlTextWriterAttribute.Href, testUrl); writer.RenderBeginTag(HtmlTextWriterTag.A); writer.Write("Run Tests"); writer.RenderEndTag(); writer.RenderEndTag(); (double totalCoverage, List <IWorkflowNode> workflowNodes, IWorkflowNode[] coveredNodes) = coverageReports.GetTotalCoverage(); writer.SetupWorkflowReportsHtml(totalCoverage, nameof(SetupWorkflowReportsHtml)); writer.AddStyleAttribute(HtmlTextWriterStyle.FontSize, "16px"); writer.AddStyleAttribute(HtmlTextWriterStyle.FontWeight, "500"); writer.AddStyleAttribute(HtmlTextWriterStyle.Margin, "0 0 0 35px"); writer.AddAttribute(HtmlTextWriterAttribute.Class, "workflow-nodes-row"); writer.RenderBeginTag(HtmlTextWriterTag.Div); workflowNodes.ForEach(node => node.SetupWorkflowNodeHtml(writer, coveredNodes)); writer.RenderEndTag(); }
internal static void SetupCountSummaryHtml(this List <IServiceTestModelTO> allTests, HtmlTextWriter writer, ICoverageDataObject coverageData) { writer.AddStyleAttribute(HtmlTextWriterStyle.Padding, "10px 10px 20px 10px"); writer.AddStyleAttribute(HtmlTextWriterStyle.Margin, "5px"); writer.AddAttribute(HtmlTextWriterAttribute.Class, "count-summary row"); writer.RenderBeginTag(HtmlTextWriterTag.Div); writer.AddStyleAttribute(HtmlTextWriterStyle.Margin, "0 -15px 0 -15px"); writer.RenderBeginTag(HtmlTextWriterTag.Table); writer.RenderBeginTag(HtmlTextWriterTag.Tr); writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "200px"); writer.AddStyleAttribute(HtmlTextWriterStyle.FontWeight, "bold"); writer.AddStyleAttribute(HtmlTextWriterStyle.FontSize, "14px"); writer.AddStyleAttribute(HtmlTextWriterStyle.FontFamily, "roboto sans-serif"); writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "black"); writer.AddAttribute(HtmlTextWriterAttribute.Class, "table-td-black"); writer.RenderBeginTag(HtmlTextWriterTag.Td); writer.Write("Total Test Count: " + allTests.Count); writer.RenderEndTag(); writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "200px"); writer.AddStyleAttribute(HtmlTextWriterStyle.FontWeight, "bold"); writer.AddStyleAttribute(HtmlTextWriterStyle.FontSize, "14px"); writer.AddStyleAttribute(HtmlTextWriterStyle.FontFamily, "roboto sans-serif"); writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "green"); writer.AddAttribute(HtmlTextWriterAttribute.Class, "table-td-green"); writer.RenderBeginTag(HtmlTextWriterTag.Td); writer.Write("Tests Passed: " + allTests.Count(o => o.TestPassed)); writer.RenderEndTag(); var failedCount = allTests.Count(o => o.TestFailing); writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "200px"); writer.AddStyleAttribute(HtmlTextWriterStyle.FontWeight, "bold"); writer.AddStyleAttribute(HtmlTextWriterStyle.FontSize, "14px"); writer.AddStyleAttribute(HtmlTextWriterStyle.FontFamily, "roboto sans-serif"); if (failedCount > 0) { writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "red"); } else { writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "black"); } writer.AddAttribute(HtmlTextWriterAttribute.Class, "table-td-red"); writer.RenderBeginTag(HtmlTextWriterTag.Td); writer.Write("Tests Failed: " + failedCount); writer.RenderEndTag(); var invalidCount = allTests.Count(o => o.TestInvalid); writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "200px"); writer.AddStyleAttribute(HtmlTextWriterStyle.FontWeight, "bold"); writer.AddStyleAttribute(HtmlTextWriterStyle.FontSize, "14px"); writer.AddStyleAttribute(HtmlTextWriterStyle.FontFamily, "roboto sans-serif"); if (invalidCount > 0) { writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "orange"); } else { writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "black"); } writer.AddAttribute(HtmlTextWriterAttribute.Class, "table-td-red"); writer.RenderBeginTag(HtmlTextWriterTag.Td); writer.Write("Tests Invalid: " + invalidCount); writer.RenderEndTag(); writer.RenderBeginTag(HtmlTextWriterTag.Td); if (coverageData.IsMultipleWorkflowReport) { writer.AddAttribute(HtmlTextWriterAttribute.Target, "_new"); writer.AddAttribute(HtmlTextWriterAttribute.Href, coverageData.GetAllTestsUrl()); writer.RenderBeginTag(HtmlTextWriterTag.A); writer.Write("Run All Tests"); writer.RenderEndTag(); } writer.RenderEndTag(); writer.RenderEndTag(); writer.RenderEndTag(); writer.RenderEndTag(); }
private static (AllCoverageReports AllCoverageReports, TestResults AllTestResults) RunListOfCoverage(ICoverageDataObject coverageData, ITestCoverageCatalog testCoverageCatalog, ITestCatalog testCatalog, Guid workspaceGuid, IResourceCatalog catalog) { var allTestResults = new TestResults(); var allCoverageReports = new AllCoverageReports { StartTime = DateTime.Now }; var resources = catalog.GetResources <IWarewolfWorkflow>(workspaceGuid); var selectedResources = resources.Where(resource => coverageData.CoverageReportResourceIds.Contains(resource.ResourceID)).ToArray(); var testResultsTemp = new List <WorkflowTestResults>(); var coverageReportsTemp = new List <WorkflowCoverageReports>(); foreach (var coverageResourceId in coverageData.CoverageReportResourceIds) { var res = selectedResources.FirstOrDefault(o => o.ResourceID == coverageResourceId); if (res is null) { continue; } var workflowTestResults = new WorkflowTestResults(); testCatalog.Fetch(coverageResourceId) ?.ForEach(o => workflowTestResults.Add(o)); testResultsTemp.Add(workflowTestResults); var coverageReports = new WorkflowCoverageReports(res); testCoverageCatalog.Fetch(coverageResourceId) ?.ForEach(o => coverageReports.Add(o)); coverageReportsTemp.Add(coverageReports); } testResultsTemp.ForEach(o => allTestResults.Add(o)); coverageReportsTemp.ForEach(o => allCoverageReports.Add(o)); allTestResults.EndTime = DateTime.Now; allCoverageReports.EndTime = DateTime.Now; return(allCoverageReports, allTestResults); }
public static DataListFormat RunCoverageAndReturnHTML(this ICoverageDataObject coverageData, ITestCoverageCatalog testCoverageCatalog, IResourceCatalog catalog, Guid workspaceGuid, out string executePayload) { var allCoverageReports = RunListOfCoverage(coverageData, testCoverageCatalog, workspaceGuid, catalog); var allTests = TestCatalog.Instance.FetchAllTests(); var formatter = DataListFormat.CreateFormat("HTML", EmitionTypes.Cover, "text/html; charset=utf-8"); var stringWriter = new StringWriter(); using (var writer = new HtmlTextWriter(stringWriter)) { writer.SetupNavBarHtml("nav-bar-row", "Coverage Summary"); allTests.SetupCountSummaryHtml(writer, "count-summary row", allCoverageReports, coverageData); allCoverageReports.AllCoverageReportsSummary .Where(o => o.HasTestReports) .ToList() .ForEach(oo => { var resourcePath = string.Empty; if (oo.Resource is IFilePathResource filePath) { resourcePath = filePath.Path; } writer.AddAttribute(HtmlTextWriterAttribute.Class, "SetupWorkflowPathHtml"); writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "#333"); writer.AddStyleAttribute(HtmlTextWriterStyle.FontWeight, "bold"); writer.AddStyleAttribute(HtmlTextWriterStyle.FontSize, "16px"); writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "20%"); writer.AddStyleAttribute(HtmlTextWriterStyle.Padding, "8px 16px 16px 8px"); writer.AddStyleAttribute(HtmlTextWriterStyle.Display, "inline-block"); writer.RenderBeginTag(HtmlTextWriterTag.Div); writer.Write(resourcePath); writer.RenderEndTag(); writer.AddAttribute(HtmlTextWriterAttribute.Class, "SetupWorkflowPathHtml-link"); writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "100px"); writer.AddStyleAttribute(HtmlTextWriterStyle.FontWeight, "bold"); writer.AddStyleAttribute(HtmlTextWriterStyle.FontSize, "12px"); writer.AddStyleAttribute(HtmlTextWriterStyle.Display, "inline-block"); writer.RenderBeginTag(HtmlTextWriterTag.Div); writer.AddAttribute(HtmlTextWriterAttribute.Target, "_new"); var testUrl = coverageData.GetTestUrl(resourcePath); writer.AddAttribute(HtmlTextWriterAttribute.Href, testUrl); writer.RenderBeginTag(HtmlTextWriterTag.A); writer.Write("Run Tests"); writer.RenderEndTag(); writer.RenderEndTag(); var(totalCoverage, workflowNodes, coveredNodes) = oo.GetTotalCoverage(); writer.SetupWorkflowReportsHtml(totalCoverage, "SetupWorkflowReportsHtml"); writer.AddStyleAttribute(HtmlTextWriterStyle.FontSize, "16px"); writer.AddStyleAttribute(HtmlTextWriterStyle.FontWeight, "500"); writer.AddStyleAttribute(HtmlTextWriterStyle.Margin, "0 0 0 35px"); writer.AddAttribute(HtmlTextWriterAttribute.Class, "workflow-nodes-row"); writer.RenderBeginTag(HtmlTextWriterTag.Div); workflowNodes.ForEach(node => node.SetupWorkflowNodeHtml(writer, "workflow-nodes", coveredNodes)); writer.RenderEndTag(); }); } executePayload = stringWriter.ToString(); return(formatter); }
public static DataListFormat RunCoverageAndReturnJSON(this ICoverageDataObject coverageData, ITestCoverageCatalog testCoverageCatalog, ITestCatalog testCatalog, IResourceCatalog catalog, Guid workspaceGuid, Dev2JsonSerializer serializer, out string executePayload) { var warewolfWorkflowReports = RunListOfCoverage(coverageData, testCoverageCatalog, testCatalog, workspaceGuid, catalog); var allTestResults = warewolfWorkflowReports.AllTestResults; var allCoverageReports = warewolfWorkflowReports.AllCoverageReports; var formatter = DataListFormat.CreateFormat("JSON", EmitionTypes.JSON, "application/json"); var objArray = allCoverageReports .Select(o => { var name = o.Resource.ResourceName; if (o.Resource is IFilePathResource filePath) { name = filePath.Path; } return(new JObject { { "ResourceID", o.Resource.ResourceID }, { "Name", name }, { "Reports", new JArray(o.Reports.Select(o1 => o1.BuildTestResultJSONForWebRequest())) } }); }); var resultCoverageSummaryWriter = new StringWriter(); using (var writer = new JsonTextWriter(resultCoverageSummaryWriter)) { var totalNodes = warewolfWorkflowReports.TotalWorkflowNodesCount; var coveredNodes = warewolfWorkflowReports.TotalWorkflowNodesCoveredCount; var notCoveredNodes = totalNodes - coveredNodes; writer.WriteStartObject(); writer.WritePropertyName("TotalNodes"); writer.WriteValue(totalNodes); writer.WritePropertyName("CoveredNodes"); writer.WriteValue(coveredNodes); writer.WritePropertyName("NotCoveredNodes"); writer.WriteValue(notCoveredNodes); writer.WritePropertyName("TotalCoverage"); writer.WriteValueAsync(warewolfWorkflowReports.TotalWorkflowNodesCoveredPercentage); writer.WriteEndObject(); } var resultSummaryWriter = new StringWriter(); var reportName = coverageData.ReportName; if (!string.IsNullOrEmpty(reportName) && reportName != "*") { using (var writer = new JsonTextWriter(resultSummaryWriter)) { allTestResults.SetupResultSummaryJSON(writer); } } else { using (var writer = new JsonTextWriter(resultSummaryWriter)) { allTestResults.SetupResultSummaryJSON(writer); } } var obj = new JObject { { "StartTime", warewolfWorkflowReports.StartTime }, { "EndTime", warewolfWorkflowReports.EndTime }, { "CoverageSummary", JToken.Parse(resultCoverageSummaryWriter.ToString()) }, { "TestSummary", JToken.Parse(resultSummaryWriter.ToString()) }, { "TestResults", new JArray(objArray) }, }; executePayload = serializer.Serialize(obj); return(formatter); }