github.com/adevinta/lava@v0.7.2/internal/report/humanprinter_test.go (about) 1 // Copyright 2023 Adevinta 2 3 package report 4 5 import ( 6 "bytes" 7 "strings" 8 "testing" 9 10 vreport "github.com/adevinta/vulcan-report" 11 12 "github.com/adevinta/lava/internal/config" 13 ) 14 15 func TestUserFriendlyPrinter_Print(t *testing.T) { 16 tests := []struct { 17 name string 18 vulnerabilities []vulnerability 19 summ summary 20 status []checkStatus 21 want []string 22 }{ 23 { 24 name: "User Friendly Report", 25 vulnerabilities: []vulnerability{ 26 { 27 Vulnerability: vreport.Vulnerability{ 28 Summary: "Vulnerability Summary 1", 29 Description: "Lorem ipsum dolor sit amet, " + 30 "consectetur adipiscing elit. Nam malesuada " + 31 "pretium ligula, ac egestas leo egestas nec. " + 32 "Morbi id placerat ipsum. Donec semper enim urna, " + 33 "et bibendum ex dictum in. Quisque venenatis " + 34 "in sem in lacinia. Fusce lacus odio, molestie " + 35 "vitae mi nec, elementum pellentesque augue. " + 36 "Aenean imperdiet odio eu sodales molestie. " + 37 "Fusce ut elementum leo. Nam sodales molestie " + 38 "lorem in rutrum. Pellentesque nec sapien elit. " + 39 "Sed tincidunt ut augue sit amet cursus. " + 40 "In convallis magna sit amet tempus pellentesque. " + 41 "Nam commodo porttitor ante sed volutpat. " + 42 "Ut vulputate leo quis ultricies sodales.", 43 AffectedResource: "Affected Resource 1", 44 ImpactDetails: "Impact detail 1", 45 Recommendations: []string{ 46 "Recommendation 1", 47 "Recommendation 2", 48 "Recommendation 3", 49 }, 50 Details: "Vulnerability Detail 1", 51 References: []string{ 52 "Reference 1", 53 "Reference 2", 54 "Reference 3", 55 }, 56 Resources: []vreport.ResourcesGroup{ 57 { 58 Name: "Resource 1", 59 Header: []string{ 60 "Header 1", 61 "Header 2", 62 "Header 3", 63 "Header 4", 64 }, 65 Rows: []map[string]string{ 66 { 67 "Header 1": "row 11", 68 "Header 2": "row 12", 69 "Header 3": "row 13", 70 "Header 4": "row 14", 71 }, 72 { 73 "Header 1": "row 21", 74 "Header 2": "row 22", 75 "Header 3": "row 23", 76 "Header 4": "row 24", 77 }, 78 { 79 "Header 1": "row 31", 80 "Header 2": "row 32", 81 "Header 3": "row 33", 82 "Header 4": "row 34", 83 }, 84 { 85 "Header 1": "row 41", 86 "Header 2": "row 42", 87 "Header 3": "row 43", 88 "Header 4": "row 44", 89 }, 90 }, 91 }, 92 { 93 Name: "Resource 2", 94 Header: []string{ 95 "Header 1", 96 "Header 2", 97 }, 98 Rows: []map[string]string{ 99 { 100 "Header 1": "row 11", 101 "Header 2": "row 12", 102 }, 103 { 104 "Header 1": "row 21", 105 "Header 2": "row 22", 106 }, 107 }, 108 }, 109 { 110 Name: "Resource 3", 111 Header: []string{ 112 "Header 1", 113 "Header 2", 114 }, 115 Rows: []map[string]string{ 116 { 117 "Header 1": "row 11", 118 "Header 2": "row 12", 119 }, 120 { 121 "Header 1": "row 21", 122 "Header 2": "row 22", 123 }, 124 }, 125 }, 126 { 127 Name: "Resource 4", 128 Header: []string{ 129 "Header 1", 130 "Header 2", 131 }, 132 Rows: []map[string]string{ 133 { 134 "Header 1": "row 11", 135 "Header 2": "row 12", 136 }, 137 { 138 "Header 1": "row 21", 139 "Header 2": "row 22", 140 }, 141 }, 142 }, 143 }, 144 }, 145 CheckData: vreport.CheckData{ 146 CheckID: "CheckID1", 147 Target: ".", 148 }, 149 }, 150 }, 151 summ: summary{ 152 count: map[config.Severity]int{ 153 config.SeverityHigh: 3, 154 config.SeverityMedium: 15, 155 }, 156 excluded: 3, 157 }, 158 status: []checkStatus{ 159 { 160 Checktype: "Check1", 161 Target: ".", 162 Status: "FINISHED", 163 }, 164 }, 165 want: []string{ 166 "STATUS", 167 "FINISHED", 168 "SUMMARY", 169 "Number of excluded vulnerabilities not included in the summary table: 3", 170 "VULNERABILITIES", 171 "Vulnerability Summary 1", 172 }, 173 }, 174 { 175 name: "No vulnerabilities", 176 vulnerabilities: nil, 177 status: []checkStatus{ 178 { 179 Checktype: "Check1", 180 Target: ".", 181 Status: "FINISHED", 182 }, 183 }, 184 want: []string{ 185 "STATUS", 186 "FINISHED", 187 "SUMMARY", 188 "No vulnerabilities found during the scan.", 189 }, 190 }, 191 } 192 for _, tt := range tests { 193 t.Run(tt.name, func(t *testing.T) { 194 var buf bytes.Buffer 195 w := humanPrinter{} 196 if err := w.Print(&buf, tt.vulnerabilities, tt.summ, tt.status); err != nil { 197 t.Errorf("unexpected error value: %v", err) 198 } 199 text := buf.String() 200 201 for _, wantLine := range tt.want { 202 if !strings.Contains(text, wantLine) { 203 t.Errorf("text not found: %s", wantLine) 204 } 205 } 206 }) 207 } 208 }