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