From 180708967e9f2cb26bc15973d46e3cd9cf3d2d80 Mon Sep 17 00:00:00 2001 From: Taras Madan Date: Fri, 24 Jan 2025 18:12:48 +0100 Subject: dashboard/app: looking for the unique coverage, hide record with zero hitcount --- pkg/cover/heatmap.go | 25 ++++++++++++++++++------- pkg/cover/heatmap_test.go | 35 +++++++++++++++++++++++++++-------- 2 files changed, 45 insertions(+), 15 deletions(-) (limited to 'pkg') diff --git a/pkg/cover/heatmap.go b/pkg/cover/heatmap.go index 4cc212fad..ce98113cf 100644 --- a/pkg/cover/heatmap.go +++ b/pkg/cover/heatmap.go @@ -71,8 +71,19 @@ func (thm *templateHeatmapRow) addParts(depth int, pathLeft []string, filePath s thm.builder[nextElement].addParts(depth+1, pathLeft[1:], filePath, instrumented, covered, timePeriod) } -func (thm *templateHeatmapRow) prepareDataFor(pageColumns []pageColumnTarget) { - thm.Items = maps.Values(thm.builder) +func (thm *templateHeatmapRow) prepareDataFor(pageColumns []pageColumnTarget, skipEmpty bool) { + for _, item := range thm.builder { + if !skipEmpty { + thm.Items = append(thm.Items, item) + continue + } + for _, hitCount := range item.covered { + if hitCount > 0 { + thm.Items = append(thm.Items, item) + break + } + } + } sort.Slice(thm.Items, func(i, j int) bool { if thm.Items[i].IsDir != thm.Items[j].IsDir { return thm.Items[i].IsDir @@ -102,7 +113,7 @@ func (thm *templateHeatmapRow) prepareDataFor(pageColumns []pageColumnTarget) { thm.LastDayInstrumented = thm.instrumented[lastDate] } for _, item := range thm.builder { - item.prepareDataFor(pageColumns) + item.prepareDataFor(pageColumns, skipEmpty) } } @@ -131,7 +142,7 @@ type pageColumnTarget struct { Commit string } -func filesCoverageToTemplateData(fCov []*fileCoverageWithDetails) *templateHeatmap { +func filesCoverageToTemplateData(fCov []*fileCoverageWithDetails, hideEmpty bool) *templateHeatmap { res := templateHeatmap{ Root: &templateHeatmapRow{ IsDir: true, @@ -164,7 +175,7 @@ func filesCoverageToTemplateData(fCov []*fileCoverageWithDetails) *templateHeatm res.Periods = append(res.Periods, fmt.Sprintf("%s(%d)", tp.DateTo.String(), tp.Days)) } - res.Root.prepareDataFor(targetDateAndCommits) + res.Root.prepareDataFor(targetDateAndCommits, hideEmpty) return &res } @@ -403,7 +414,7 @@ func DoHeatMapStyleBodyJS( if err != nil { return "", "", "", fmt.Errorf("failed to filesCoverageWithDetails: %w", err) } - templData := filesCoverageToTemplateData(covAndDates) + templData := filesCoverageToTemplateData(covAndDates, onlyUnique) templData.Subsystems = sss templData.Managers = managers return stylesBodyJSTemplate(templData) @@ -430,7 +441,7 @@ func DoSubsystemsHeatMapStyleBodyJS( ssCovAndDates = append(ssCovAndDates, &newRecord) } } - templData := filesCoverageToTemplateData(ssCovAndDates) + templData := filesCoverageToTemplateData(ssCovAndDates, onlyUnique) templData.Managers = managers return stylesBodyJSTemplate(templData) } diff --git a/pkg/cover/heatmap_test.go b/pkg/cover/heatmap_test.go index 0f66256e4..3a90dba10 100644 --- a/pkg/cover/heatmap_test.go +++ b/pkg/cover/heatmap_test.go @@ -254,16 +254,16 @@ func newRowIteratorMock(t *testing.T, events []*FileCoverageWithLineInfo, func TestFilesCoverageToTemplateData(t *testing.T) { tests := []struct { - name string - input []*fileCoverageWithDetails - want *templateHeatmap + name string + input []*fileCoverageWithDetails + hideEmpty bool + want *templateHeatmap }{ { name: "empty input", input: []*fileCoverageWithDetails{}, want: &templateHeatmap{ Root: &templateHeatmapRow{ - Items: []*templateHeatmapRow{}, IsDir: true, }, }, @@ -283,7 +283,6 @@ func TestFilesCoverageToTemplateData(t *testing.T) { Root: &templateHeatmapRow{ Items: []*templateHeatmapRow{ { - Items: []*templateHeatmapRow{}, Name: "file1", Coverage: []int64{100}, IsDir: false, @@ -332,7 +331,6 @@ func TestFilesCoverageToTemplateData(t *testing.T) { { Items: []*templateHeatmapRow{ { - Items: []*templateHeatmapRow{}, Name: "file1", Coverage: []int64{100, 0}, IsDir: false, @@ -347,7 +345,6 @@ func TestFilesCoverageToTemplateData(t *testing.T) { "/graph/coverage/file?dateto=2024-07-02&period=day&commit=commit2&filepath=dir/file1"}, }, { - Items: []*templateHeatmapRow{}, Name: "file2", Coverage: []int64{0, 0}, IsDir: false, @@ -385,10 +382,32 @@ func TestFilesCoverageToTemplateData(t *testing.T) { Periods: []string{"2024-07-01(1)", "2024-07-02(1)"}, }, }, + { + name: "hide empty", + hideEmpty: true, + input: []*fileCoverageWithDetails{ + { + Filepath: "file1", + Instrumented: 1, + Covered: 0, + TimePeriod: makeTimePeriod(t, civil.Date{Year: 2024, Month: time.July, Day: 1}, coveragedb.DayPeriod), + Commit: "commit1", + }, + }, + want: &templateHeatmap{ + Root: &templateHeatmapRow{ + Coverage: []int64{0}, + IsDir: true, + LastDayInstrumented: 1, + Tooltips: []string{"Instrumented:\t1 blocks\nCovered:\t0 blocks"}, + }, + Periods: []string{"2024-07-01(1)"}, + }, + }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { - got := filesCoverageToTemplateData(test.input) + got := filesCoverageToTemplateData(test.input, test.hideEmpty) assert.EqualExportedValues(t, test.want, got) }) } -- cgit mrf-deployment