package reporting import ( "testing" "time" "github.com/stretchr/testify/assert" ) func TestToHTML(t *testing.T) { t.Run("empty table", func(t *testing.T) { report := ScanReport{ Title: "Report Test Title", Subheaders: []Subheader{{Description: "sub 1", Details: "1"}, {Description: "sub 2", Details: "2"}}, Overview: []OverviewRow{ {"overview 1", "1", Green}, {"overview 2", "2", Green}, }, FurtherInfo: "this is further information", ReportTime: time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC), DetailTable: ScanDetailTable{ Headers: []string{"column 1", "column 2"}, Rows: []ScanRow{}, WithCounter: true, CounterHeader: "Entry #", NoRowsMessage: "no rows available", }, } expectedSub := ` sub 1: 1
sub 2: 2
` expectedOverview := `

overview 1: 1
overview 2: 2

` res, err := report.ToHTML() result := string(res) assert.NoError(t, err) assert.Contains(t, result, "

Report Test Title

") assert.Contains(t, result, expectedSub) assert.Contains(t, result, expectedOverview) assert.Contains(t, result, `this is further information`) assert.Contains(t, result, `Entry #`) assert.Contains(t, result, `column 1`) assert.Contains(t, result, `column 2`) assert.Contains(t, result, "Snapshot taken: Jan 01, 2021 - 00:00:00 UTC") assert.Contains(t, result, `no rows available`) }) t.Run("table with content", func(t *testing.T) { report := ScanReport{ Title: "Report Test Title", ReportTime: time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC), DetailTable: ScanDetailTable{ Headers: []string{"column 1", "column 2"}, Rows: []ScanRow{ {Columns: []ScanCell{{Content: "c1 r1"}, {Content: "c2 r1"}}}, {Columns: []ScanCell{{Content: "c1 r2"}, {Content: "c2 r2"}}}, {Columns: []ScanCell{{Content: "c1 r3", Style: Green}, {Content: "c2 r3", Style: Black}}}, }, CounterHeader: "Entry #", WithCounter: true, }, } res, err := report.ToHTML() result := string(res) assert.NoError(t, err) assert.Contains(t, result, `Entry #`) assert.Contains(t, result, `1`) assert.Contains(t, result, `c1 r1`) assert.Contains(t, result, `c2 r1`) assert.Contains(t, result, `2`) assert.Contains(t, result, `c1 r2`) assert.Contains(t, result, `c2 r2`) assert.Contains(t, result, `3`) assert.Contains(t, result, `c1 r3`) assert.Contains(t, result, `c2 r3`) }) } func TestToMarkdown(t *testing.T) { report := ScanReport{ Title: "Report Test Title", Subheaders: []Subheader{{Description: "sub 1", Details: "1"}, {Description: "sub 2", Details: "2"}}, Overview: []OverviewRow{ {"overview 1", "1", Green}, {"overview 2", "2", Green}, }, FurtherInfo: "this is further information", ReportTime: time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC), } res, err := report.ToMarkdown() result := string(res) assert.NoError(t, err) assert.Contains(t, result, `
Report Test Title`) assert.Contains(t, result, `**sub 1**: 1`) assert.Contains(t, result, `**sub 2**: 2`) assert.Contains(t, result, `**overview 1**: 1`) assert.Contains(t, result, `**overview 2**: 2`) assert.Contains(t, result, `this is further information`) assert.Contains(t, result, "Snapshot taken: _Jan 01, 2021 - 00:00:00 UTC_") } func TestTableColumnCount(t *testing.T) { t.Run("table without counter", func(t *testing.T) { details := ScanDetailTable{ Headers: []string{"column 1", "column 1"}, WithCounter: false, } assert.Equal(t, 2, tableColumnCount(details)) }) t.Run("table with counter", func(t *testing.T) { details := ScanDetailTable{ Headers: []string{"column 1", "column 1"}, WithCounter: true, } assert.Equal(t, 3, tableColumnCount(details)) }) }