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  }