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  }