Generate markdown summary file for raw results

This commit is contained in:
shati-patel
2022-04-26 15:44:25 +01:00
committed by Shati Patel
parent 04d7b12dd8
commit ffcc1f82f1
2 changed files with 35 additions and 4 deletions

View File

@@ -1,5 +1,5 @@
import { createRemoteFileRef } from '../pure/location-link-utils';
import { parseHighlightedLine, shouldHighlightLine } from '../pure/sarif-utils';
import { getAnalysisResultCount, parseHighlightedLine, shouldHighlightLine } from '../pure/sarif-utils';
import { RemoteQuery } from './remote-query';
import { AnalysisAlert, AnalysisResults, CodeSnippet, FileLink, HighlightedRegion } from './shared/analysis-result';
@@ -14,14 +14,13 @@ export function generateMarkdown(query: RemoteQuery, analysesResults: AnalysisRe
// Generate summary file with links to individual files
const summaryLines: MarkdownFile = generateMarkdownSummary(query);
for (const analysisResult of analysesResults) {
if (analysisResult.interpretedResults.length === 0) {
// TODO: We'll add support for non-interpreted results later.
if (analysisResult.interpretedResults.length === 0 && !analysisResult.rawResults) {
continue;
}
// Append nwo and results count to the summary table
const nwo = analysisResult.nwo;
const resultsCount = analysisResult.interpretedResults.length;
const resultsCount = getAnalysisResultCount(analysisResult);
const link = createGistRelativeLink(nwo);
summaryLines.push(`| ${nwo} | [${resultsCount} result(s)](${link}) |`);
@@ -34,6 +33,9 @@ export function generateMarkdown(query: RemoteQuery, analysesResults: AnalysisRe
const individualResult = generateMarkdownForInterpretedResult(interpretedResult, query.language);
lines.push(...individualResult);
}
if (analysisResult.rawResults) {
// TODO: Generate markdown table for raw results
}
files.push(lines);
}
return [summaryLines, ...files];

View File

@@ -61,6 +61,35 @@ describe('markdown generation', async function() {
expect(markdownFile2.join('\n')).to.equal(expectedTestOutput2);
});
});
describe('for non-alert query', async function() {
it('should generate markdown file for each repo with results', async function() {
const query = JSON.parse(
await fs.readFile(path.join(__dirname, 'data/raw-results/query.json'), 'utf8')
);
const analysesResults = JSON.parse(
await fs.readFile(path.join(__dirname, 'data/raw-results/analyses-results.json'), 'utf8')
);
const markdownFiles = generateMarkdown(query, analysesResults);
// Check that query has results for two repositories, plus a summary file
expect(markdownFiles.length).to.equal(3);
const markdownFile0 = markdownFiles[0]; // summary file
const markdownFile1 = markdownFiles[1]; // results for github/codeql repo
const markdownFile2 = markdownFiles[2]; // results for meteor/meteor repo
const expectedSummaryFile = await readTestOutputFile('data/raw-results/summary.md');
const expectedTestOutput1 = await readTestOutputFile('data/raw-results/results-repo1.md');
const expectedTestOutput2 = await readTestOutputFile('data/raw-results/results-repo2.md');
// Check that markdown output is correct, after making line endings consistent
expect(markdownFile0.join('\n')).to.equal(expectedSummaryFile);
expect(markdownFile1.join('\n')).to.equal(expectedTestOutput1);
expect(markdownFile2.join('\n')).to.equal(expectedTestOutput2);
});
});
});
/**