github.com/jaylevin/jenkins-library@v1.230.4/cmd/pipelineCreateScanSummary_test.go (about)

     1  package cmd
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/SAP/jenkins-library/pkg/mock"
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  type pipelineCreateScanSummaryMockUtils struct {
    12  	*mock.FilesMock
    13  }
    14  
    15  func newPipelineCreateScanSummaryTestsUtils() pipelineCreateScanSummaryMockUtils {
    16  	utils := pipelineCreateScanSummaryMockUtils{
    17  		FilesMock: &mock.FilesMock{},
    18  	}
    19  	return utils
    20  }
    21  
    22  func TestRunPipelineCreateScanSummary(t *testing.T) {
    23  	t.Parallel()
    24  
    25  	t.Run("success", func(t *testing.T) {
    26  		t.Parallel()
    27  
    28  		config := pipelineCreateScanSummaryOptions{
    29  			OutputFilePath: "scanSummary.md",
    30  		}
    31  
    32  		utils := newPipelineCreateScanSummaryTestsUtils()
    33  		utils.AddFile(".pipeline/stepReports/step1.json", []byte(`{"title":"Title Scan 1"}`))
    34  		utils.AddFile(".pipeline/stepReports/step2.json", []byte(`{"title":"Title Scan 2"}`))
    35  		utils.AddFile(".pipeline/stepReports/step3.json", []byte(`{"title":"Title Scan 3"}`))
    36  
    37  		err := runPipelineCreateScanSummary(&config, nil, utils)
    38  
    39  		assert.NoError(t, err)
    40  		reportExists, _ := utils.FileExists("scanSummary.md")
    41  		assert.True(t, reportExists)
    42  		fileContent, _ := utils.FileRead("scanSummary.md")
    43  		fileContentString := string(fileContent)
    44  		assert.Contains(t, fileContentString, "Title Scan 1")
    45  		assert.Contains(t, fileContentString, "Title Scan 2")
    46  		assert.Contains(t, fileContentString, "Title Scan 3")
    47  	})
    48  
    49  	t.Run("success - failed only", func(t *testing.T) {
    50  		t.Parallel()
    51  
    52  		config := pipelineCreateScanSummaryOptions{
    53  			OutputFilePath: "scanSummary.md",
    54  			FailedOnly:     true,
    55  		}
    56  
    57  		utils := newPipelineCreateScanSummaryTestsUtils()
    58  		utils.AddFile(".pipeline/stepReports/step1.json", []byte(`{"title":"Title Scan 1", "successfulScan": true}`))
    59  		utils.AddFile(".pipeline/stepReports/step2.json", []byte(`{"title":"Title Scan 2", "successfulScan": false}`))
    60  		utils.AddFile(".pipeline/stepReports/step3.json", []byte(`{"title":"Title Scan 3", "successfulScan": false}`))
    61  
    62  		err := runPipelineCreateScanSummary(&config, nil, utils)
    63  
    64  		assert.NoError(t, err)
    65  		reportExists, _ := utils.FileExists("scanSummary.md")
    66  		assert.True(t, reportExists)
    67  		fileContent, _ := utils.FileRead("scanSummary.md")
    68  		fileContentString := string(fileContent)
    69  		assert.NotContains(t, fileContentString, "Title Scan 1")
    70  		assert.Contains(t, fileContentString, "Title Scan 2")
    71  		assert.Contains(t, fileContentString, "Title Scan 3")
    72  	})
    73  
    74  	t.Run("success - with source link", func(t *testing.T) {
    75  		t.Parallel()
    76  
    77  		config := pipelineCreateScanSummaryOptions{
    78  			OutputFilePath: "scanSummary.md",
    79  			PipelineLink:   "https://test.com/link",
    80  		}
    81  
    82  		utils := newPipelineCreateScanSummaryTestsUtils()
    83  
    84  		err := runPipelineCreateScanSummary(&config, nil, utils)
    85  
    86  		assert.NoError(t, err)
    87  		reportExists, _ := utils.FileExists("scanSummary.md")
    88  		assert.True(t, reportExists)
    89  		fileContent, _ := utils.FileRead("scanSummary.md")
    90  		fileContentString := string(fileContent)
    91  		assert.Contains(t, fileContentString, "https://test.com/link")
    92  	})
    93  
    94  	t.Run("error - read file", func(t *testing.T) {
    95  		t.Skip()
    96  		//ToDo
    97  		// so far mock cannot create error for reading files
    98  
    99  		config := pipelineCreateScanSummaryOptions{
   100  			OutputFilePath: "scanSummary.md",
   101  		}
   102  
   103  		utils := newPipelineCreateScanSummaryTestsUtils()
   104  
   105  		err := runPipelineCreateScanSummary(&config, nil, utils)
   106  
   107  		assert.Contains(t, fmt.Sprint(err), "failed to read report")
   108  	})
   109  
   110  	t.Run("error - unmarshal json", func(t *testing.T) {
   111  		t.Parallel()
   112  
   113  		config := pipelineCreateScanSummaryOptions{
   114  			OutputFilePath: "scanSummary.md",
   115  		}
   116  
   117  		utils := newPipelineCreateScanSummaryTestsUtils()
   118  		utils.AddFile(".pipeline/stepReports/step1.json", []byte(`{"title":"Title Scan 1"`))
   119  
   120  		err := runPipelineCreateScanSummary(&config, nil, utils)
   121  
   122  		assert.Contains(t, fmt.Sprint(err), "failed to parse report")
   123  	})
   124  
   125  	t.Run("error - write file", func(t *testing.T) {
   126  		//ToDo
   127  		// so far mock cannot create error
   128  	})
   129  
   130  }