github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/pkg/config/reporting_test.go (about)

     1  //go:build unit
     2  // +build unit
     3  
     4  package config
     5  
     6  import (
     7  	"fmt"
     8  	"os"
     9  	"path/filepath"
    10  	"testing"
    11  
    12  	"github.com/stretchr/testify/assert"
    13  )
    14  
    15  func TestMixinReportingConfig(t *testing.T) {
    16  	gcpJsonKeyFilePath := "path/key.json"
    17  	gcsFolderPath := "test/folder/path"
    18  	gcsBucketID := "testBucketId"
    19  	config := StepConfig{
    20  		Config:     map[string]interface{}{},
    21  		HookConfig: nil,
    22  	}
    23  	general := map[string]interface{}{
    24  		"gcpJsonKeyFilePath": gcpJsonKeyFilePath,
    25  		"gcsFolderPath":      gcsFolderPath,
    26  		"gcsBucketId":        "generalBucketId",
    27  	}
    28  	steps := map[string]interface{}{
    29  		"gcsBucketId":   gcsBucketID,
    30  		"unknownConfig": "test",
    31  	}
    32  
    33  	config.mixinReportingConfig(nil, general, steps)
    34  
    35  	assert.Contains(t, config.Config, "gcpJsonKeyFilePath")
    36  	assert.Equal(t, gcpJsonKeyFilePath, config.Config["gcpJsonKeyFilePath"])
    37  	assert.Contains(t, config.Config, "gcsFolderPath")
    38  	assert.Equal(t, gcsFolderPath, config.Config["gcsFolderPath"])
    39  	assert.Contains(t, config.Config, "gcsBucketId")
    40  	assert.Equal(t, gcsBucketID, config.Config["gcsBucketId"])
    41  	assert.NotContains(t, config.Config, "unknownConfig")
    42  }
    43  
    44  func TestReportingParams_GetResourceParameters(t *testing.T) {
    45  	tt := []struct {
    46  		in       ReportingParams
    47  		expected map[string]interface{}
    48  	}{
    49  		{
    50  			in:       ReportingParams{Parameters: []StepParameters{}},
    51  			expected: map[string]interface{}{},
    52  		},
    53  		{
    54  			in: ReportingParams{Parameters: []StepParameters{
    55  				{Name: "param1"},
    56  				{Name: "param2"},
    57  			}},
    58  			expected: map[string]interface{}{},
    59  		},
    60  		{
    61  			in: ReportingParams{Parameters: []StepParameters{
    62  				{Name: "param1", ResourceRef: []ResourceReference{}},
    63  				{Name: "param2", ResourceRef: []ResourceReference{}},
    64  			}},
    65  			expected: map[string]interface{}{},
    66  		},
    67  		{
    68  			in: ReportingParams{Parameters: []StepParameters{
    69  				{Name: "param1", ResourceRef: []ResourceReference{{Name: "notAvailable", Param: "envparam1"}}},
    70  				{Name: "param2", ResourceRef: []ResourceReference{{Name: "commonPipelineEnvironment", Param: "envparam2"}}, Type: "string"},
    71  			}},
    72  			expected: map[string]interface{}{"param2": "val2"},
    73  		},
    74  		{
    75  			in: ReportingParams{Parameters: []StepParameters{
    76  				{Name: "param2", ResourceRef: []ResourceReference{{Name: "commonPipelineEnvironment", Param: "envparam2"}}, Type: "string"},
    77  				{Name: "param3", ResourceRef: []ResourceReference{{Name: "commonPipelineEnvironment", Param: "jsonList"}}, Type: "[]string"},
    78  			}},
    79  			expected: map[string]interface{}{"param2": "val2", "param3": []interface{}{"value1", "value2"}},
    80  		},
    81  		{
    82  			in: ReportingParams{Parameters: []StepParameters{
    83  				{Name: "param4", ResourceRef: []ResourceReference{{Name: "commonPipelineEnvironment", Param: "jsonKeyValue"}}, Type: "map[string]interface{}"},
    84  			}},
    85  			expected: map[string]interface{}{"param4": map[string]interface{}{"key": "value"}},
    86  		},
    87  		{
    88  			in: ReportingParams{Parameters: []StepParameters{
    89  				{Name: "param1", ResourceRef: []ResourceReference{{Name: "commonPipelineEnvironment", Param: "envparam1"}}, Type: "noString"},
    90  				{Name: "param4", ResourceRef: []ResourceReference{{Name: "commonPipelineEnvironment", Param: "jsonKeyValueString"}}, Type: "string"},
    91  			}},
    92  			expected: map[string]interface{}{"param4": "{\"key\":\"valueString\"}"},
    93  		},
    94  	}
    95  
    96  	dir := t.TempDir()
    97  
    98  	cpeDir := filepath.Join(dir, "commonPipelineEnvironment")
    99  	err := os.MkdirAll(cpeDir, 0700)
   100  	if err != nil {
   101  		t.Fatal("Failed to create sub directory")
   102  	}
   103  
   104  	os.WriteFile(filepath.Join(cpeDir, "envparam1"), []byte("val1"), 0700)
   105  	os.WriteFile(filepath.Join(cpeDir, "envparam2"), []byte("val2"), 0700)
   106  	os.WriteFile(filepath.Join(cpeDir, "jsonList.json"), []byte("[\"value1\",\"value2\"]"), 0700)
   107  	os.WriteFile(filepath.Join(cpeDir, "jsonKeyValue.json"), []byte("{\"key\":\"value\"}"), 0700)
   108  	os.WriteFile(filepath.Join(cpeDir, "jsonKeyValueString"), []byte("{\"key\":\"valueString\"}"), 0700)
   109  
   110  	for run, test := range tt {
   111  		t.Run(fmt.Sprintf("Run %v", run), func(t *testing.T) {
   112  			actual := test.in.GetResourceParameters(dir, "commonPipelineEnvironment")
   113  			assert.Equal(t, test.expected, actual)
   114  		})
   115  	}
   116  }
   117  
   118  func TestReportingParams_GetGetStepFilters(t *testing.T) {
   119  	tt := []struct {
   120  		in       ReportingParams
   121  		expected StepFilters
   122  	}{
   123  		{
   124  			in:       ReportingParams{Parameters: []StepParameters{}},
   125  			expected: StepFilters{},
   126  		},
   127  		{
   128  			in: ReportingParams{Parameters: []StepParameters{
   129  				{Name: "param1"},
   130  				{Name: "param2"},
   131  			}},
   132  			expected: StepFilters{
   133  				All:     []string{"param1", "param2"},
   134  				General: []string{"param1", "param2"},
   135  				Steps:   []string{"param1", "param2"},
   136  				Stages:  []string{"param1", "param2"},
   137  			},
   138  		},
   139  		{
   140  			in: ReportingParams{Parameters: []StepParameters{
   141  				{Name: "param1"},
   142  				{Name: "param2"},
   143  				{Name: "param3"},
   144  				{Name: "param4"},
   145  				{Name: "param5"},
   146  				{Name: "param6"},
   147  			}},
   148  			expected: StepFilters{
   149  				All:     []string{"param1", "param2", "param3", "param4", "param5", "param6"},
   150  				General: []string{"param1", "param2", "param3", "param4", "param5", "param6"},
   151  				Steps:   []string{"param1", "param2", "param3", "param4", "param5", "param6"},
   152  				Stages:  []string{"param1", "param2", "param3", "param4", "param5", "param6"},
   153  			},
   154  		},
   155  	}
   156  
   157  	for run, test := range tt {
   158  		t.Run(fmt.Sprintf("Run %v", run), func(t *testing.T) {
   159  			actual := test.in.getStepFilters()
   160  			assert.Equal(t, test.expected, actual)
   161  		})
   162  	}
   163  }
   164  
   165  func TestReportingParams_GetReportingFilter(t *testing.T) {
   166  	tt := []struct {
   167  		in       ReportingParams
   168  		expected []string
   169  	}{
   170  		{
   171  			in:       ReportingParams{Parameters: []StepParameters{}},
   172  			expected: nil,
   173  		},
   174  		{
   175  			in: ReportingParams{Parameters: []StepParameters{
   176  				{Name: "param1"},
   177  				{Name: "param2"},
   178  			}},
   179  			expected: []string{"param1", "param2"},
   180  		},
   181  		{
   182  			in: ReportingParams{Parameters: []StepParameters{
   183  				{Name: "param1"},
   184  				{Name: "param2"},
   185  				{Name: "param3"},
   186  				{Name: "param4"},
   187  				{Name: "param5"},
   188  				{Name: "param6"},
   189  			}},
   190  			expected: []string{"param1", "param2", "param3", "param4", "param5", "param6"},
   191  		},
   192  	}
   193  
   194  	for run, test := range tt {
   195  		t.Run(fmt.Sprintf("Run %v", run), func(t *testing.T) {
   196  			actual := test.in.getReportingFilter()
   197  			assert.Equal(t, test.expected, actual)
   198  		})
   199  	}
   200  }