github.com/jaylevin/jenkins-library@v1.230.4/pkg/reporting/reporting_test.go (about) 1 package reporting 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func TestToHTML(t *testing.T) { 11 t.Run("empty table", func(t *testing.T) { 12 report := ScanReport{ 13 ReportTitle: "Report Test Title", 14 Subheaders: []Subheader{{Description: "sub 1", Details: "1"}, {Description: "sub 2", Details: "2"}}, 15 Overview: []OverviewRow{ 16 {"overview 1", "1", Green}, 17 {"overview 2", "2", Green}, 18 }, 19 FurtherInfo: "this is further information", 20 ReportTime: time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC), 21 DetailTable: ScanDetailTable{ 22 Headers: []string{"column 1", "column 2"}, 23 Rows: []ScanRow{}, 24 WithCounter: true, 25 CounterHeader: "Entry #", 26 NoRowsMessage: "no rows available", 27 }, 28 } 29 expectedSub := `<span> 30 sub 1: 1<br /> 31 sub 2: 2<br /> 32 </span> 33 </h2>` 34 expectedOverview := `<h3> 35 overview 1: 1<br /> 36 overview 2: 2<br /> 37 </h3>` 38 39 res, err := report.ToHTML() 40 result := string(res) 41 assert.NoError(t, err) 42 assert.Contains(t, result, "<h1>Report Test Title</h1>") 43 assert.Contains(t, result, expectedSub) 44 assert.Contains(t, result, expectedOverview) 45 assert.Contains(t, result, `<span>this is further information</span>`) 46 assert.Contains(t, result, `<th>Entry #</th>`) 47 assert.Contains(t, result, `<th>column 1</th>`) 48 assert.Contains(t, result, `<th>column 2</th>`) 49 assert.Contains(t, result, "Snapshot taken: Jan 01, 2021 - 00:00:00 UTC") 50 assert.Contains(t, result, `<td colspan="3">no rows available</td>`) 51 }) 52 53 t.Run("table with content", func(t *testing.T) { 54 report := ScanReport{ 55 ReportTitle: "Report Test Title", 56 ReportTime: time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC), 57 DetailTable: ScanDetailTable{ 58 Headers: []string{"column 1", "column 2"}, 59 Rows: []ScanRow{ 60 {Columns: []ScanCell{{Content: "c1 r1"}, {Content: "c2 r1"}}}, 61 {Columns: []ScanCell{{Content: "c1 r2"}, {Content: "c2 r2"}}}, 62 {Columns: []ScanCell{{Content: "c1 r3", Style: Green}, {Content: "c2 r3", Style: Black}}}, 63 }, 64 CounterHeader: "Entry #", 65 WithCounter: true, 66 }, 67 } 68 res, err := report.ToHTML() 69 result := string(res) 70 assert.NoError(t, err) 71 assert.Contains(t, result, `<th>Entry #</th>`) 72 assert.Contains(t, result, `<td>1</td>`) 73 assert.Contains(t, result, `<td>c1 r1</td>`) 74 assert.Contains(t, result, `<td>c2 r1</td>`) 75 assert.Contains(t, result, `<td>2</td>`) 76 assert.Contains(t, result, `<td>c1 r2</td>`) 77 assert.Contains(t, result, `<td>c2 r2</td>`) 78 assert.Contains(t, result, `<td>3</td>`) 79 assert.Contains(t, result, `<td class="green-cell">c1 r3</td>`) 80 assert.Contains(t, result, `<td class="black-cell">c2 r3</td>`) 81 }) 82 } 83 84 func TestToMarkdown(t *testing.T) { 85 t.Run("table with details", func(t *testing.T) { 86 report := ScanReport{ 87 ReportTitle: "Report Test Title", 88 Subheaders: []Subheader{{Description: "sub 1", Details: "1"}, {Description: "sub 2", Details: "2"}}, 89 Overview: []OverviewRow{ 90 {"overview 1", "1", Green}, 91 {"overview 2", "2", Green}, 92 }, 93 FurtherInfo: "this is further information", 94 SuccessfulScan: true, 95 ReportTime: time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC), 96 DetailTable: ScanDetailTable{ 97 Headers: []string{"column 1", "column 2"}, 98 Rows: []ScanRow{ 99 {Columns: []ScanCell{{Content: "c1 r1"}, {Content: "c2 r1"}}}, 100 {Columns: []ScanCell{{Content: "c1 r2"}, {Content: "c2 r2"}}}, 101 {Columns: []ScanCell{{Content: "c1 r3", Style: Green}, {Content: "c2 r3", Style: Black}}}, 102 }, 103 CounterHeader: "Entry #", 104 WithCounter: true, 105 }, 106 } 107 108 res, err := report.ToMarkdown() 109 result := string(res) 110 assert.NoError(t, err) 111 assert.Contains(t, result, `## :white_check_mark: Report Test Title`) 112 assert.Contains(t, result, `<td><b>sub 1:</b></td><td>1</td>`) 113 assert.Contains(t, result, `<td><b>sub 2:</b></td><td>2</td>`) 114 assert.Contains(t, result, `<tr><td>overview 1:</td><td>1</td></tr>`) 115 assert.Contains(t, result, `<tr><td>overview 2:</td><td>2</td></tr>`) 116 assert.Contains(t, result, `this is further information`) 117 assert.Contains(t, result, "Snapshot taken: <i>Jan 01, 2021 - 00:00:00 UTC</i>") 118 assert.Contains(t, result, "<details><summary><i>Report Test Title details:</i></summary>") 119 }) 120 121 t.Run("table without details", func(t *testing.T) { 122 report := ScanReport{ 123 ReportTitle: "Report Test Title", 124 Subheaders: []Subheader{{Description: "sub 1", Details: "1"}, {Description: "sub 2", Details: "2"}}, 125 Overview: []OverviewRow{ 126 {"overview 1", "1", Green}, 127 {"overview 2", "2", Green}, 128 }, 129 FurtherInfo: "this is further information", 130 ReportTime: time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC), 131 } 132 133 res, err := report.ToMarkdown() 134 result := string(res) 135 assert.NoError(t, err) 136 assert.Contains(t, result, `## :x: Report Test Title`) 137 assert.NotContains(t, result, "<details><summary><i>Report Test Title details:</i></summary>") 138 }) 139 } 140 141 func TestTableColumnCount(t *testing.T) { 142 t.Run("table without counter", func(t *testing.T) { 143 details := ScanDetailTable{ 144 Headers: []string{"column 1", "column 1"}, 145 WithCounter: false, 146 } 147 assert.Equal(t, 2, tableColumnCount(details)) 148 }) 149 t.Run("table with counter", func(t *testing.T) { 150 details := ScanDetailTable{ 151 Headers: []string{"column 1", "column 1"}, 152 WithCounter: true, 153 } 154 assert.Equal(t, 3, tableColumnCount(details)) 155 }) 156 } 157 158 func TestShouldDrawTable(t *testing.T) { 159 tt := []struct { 160 table ScanDetailTable 161 expected bool 162 }{ 163 {table: ScanDetailTable{}, expected: false}, 164 {table: ScanDetailTable{Headers: []string{"column1", "column2"}}, expected: true}, 165 } 166 167 for _, test := range tt { 168 assert.Equal(t, test.expected, shouldDrawTable(test.table)) 169 } 170 }