104 lines
2.9 KiB
TypeScript
104 lines
2.9 KiB
TypeScript
import { ProjectType } from '@/types/project';
|
|
import { testTypes, priorities, testRunCaseStatus } from '@/config/selection';
|
|
import { TestRunCaseStatusMessages } from '@/types/status';
|
|
import { CasePriorityCountType, CaseTypeCountType } from '@/types/chart';
|
|
|
|
// aggregate folder, case, run mum
|
|
function aggregateBasicInfo(project: ProjectType) {
|
|
const folderNum = project.Folders.length;
|
|
const runNum = project.Runs.length;
|
|
|
|
let caseNum = 0;
|
|
project.Folders.forEach((folder) => {
|
|
caseNum += folder.Cases.length;
|
|
});
|
|
|
|
return { folderNum, runNum, caseNum };
|
|
}
|
|
|
|
function aggregateTestType(project: ProjectType): CaseTypeCountType[] {
|
|
// count how many test cases are for each type
|
|
const typesCounts: number[] = testTypes.map(() => {
|
|
return 0;
|
|
});
|
|
project.Folders.forEach((folder) => {
|
|
folder.Cases.forEach((testcase) => {
|
|
const type = testcase.type;
|
|
typesCounts[type]++;
|
|
});
|
|
});
|
|
|
|
const result: CaseTypeCountType[] = [];
|
|
for (let type = 0; type <= testTypes.length; type++) {
|
|
result.push({ type: type, count: typesCounts[type] });
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
function aggregateTestPriority(project: ProjectType) {
|
|
// count how many test cases are for each priority
|
|
const priorityCounts: number[] = priorities.map(() => {
|
|
return 0;
|
|
});
|
|
project.Folders.forEach((folder) => {
|
|
folder.Cases.forEach((testcase) => {
|
|
const priority = testcase.priority;
|
|
priorityCounts[priority]++;
|
|
});
|
|
});
|
|
|
|
const result: CasePriorityCountType[] = [];
|
|
for (let priority = 0; priority <= priorities.length; priority++) {
|
|
result.push({ priority: priority, count: priorityCounts[priority] });
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
function aggregateProgress(project: ProjectType, testRunCaseStatusMessages: TestRunCaseStatusMessages) {
|
|
type ChartSeries = { name: string; data: number[] };
|
|
const series: ChartSeries[] = testRunCaseStatus.map((status) => {
|
|
return { name: testRunCaseStatusMessages[status.uid], data: [] };
|
|
});
|
|
const categories: string[] = [];
|
|
|
|
project.Runs.forEach((run) => {
|
|
if (!run.RunCases) {
|
|
return;
|
|
}
|
|
|
|
run.RunCases.forEach((runCase) => {
|
|
const createdAtDate = new Date(runCase.createdAt);
|
|
const dateString = createdAtDate.toISOString().slice(0, 10);
|
|
|
|
const alreadyExists = categories.includes(dateString);
|
|
if (!alreadyExists) {
|
|
categories.push(dateString);
|
|
series.forEach((itr) => {
|
|
itr.data.push(0);
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
project.Runs.forEach((run) => {
|
|
if (!run.RunCases) {
|
|
return;
|
|
}
|
|
|
|
run.RunCases.forEach((runCase) => {
|
|
const createdAtDate = new Date(runCase.createdAt);
|
|
const dateString = createdAtDate.toISOString().slice(0, 10);
|
|
const index = categories.indexOf(dateString);
|
|
|
|
const target = series[runCase.status];
|
|
target.data[index]++;
|
|
});
|
|
});
|
|
|
|
return { series, categories };
|
|
}
|
|
|
|
export { aggregateBasicInfo, aggregateTestType, aggregateTestPriority, aggregateProgress };
|