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

     1  //go:build unit
     2  // +build unit
     3  
     4  package npm
     5  
     6  import (
     7  	"path/filepath"
     8  	"testing"
     9  
    10  	filesmock "github.com/SAP/jenkins-library/pkg/mock"
    11  
    12  	"github.com/stretchr/testify/assert"
    13  	"github.com/stretchr/testify/mock"
    14  )
    15  
    16  func TestNewNPMRC(t *testing.T) {
    17  	type args struct {
    18  		path string
    19  	}
    20  	type want struct {
    21  		path     string
    22  		errLoad  string
    23  		errWrite string
    24  		files    map[string]string
    25  	}
    26  
    27  	tests := []struct {
    28  		name  string
    29  		args  args
    30  		files map[string]string
    31  		want  want
    32  	}{
    33  		{
    34  			name: "success - path pointing to no dir - no content",
    35  			args: args{""},
    36  			files: map[string]string{
    37  				defaultConfigFilename: "",
    38  			},
    39  			want: want{
    40  				path: defaultConfigFilename,
    41  				files: map[string]string{
    42  					defaultConfigFilename: "",
    43  				},
    44  			},
    45  		},
    46  		{
    47  			name: "success - path pointing to cwd - no content",
    48  			args: args{"."},
    49  			files: map[string]string{
    50  				defaultConfigFilename: "",
    51  			},
    52  			want: want{
    53  				path: defaultConfigFilename,
    54  				files: map[string]string{
    55  					defaultConfigFilename: "",
    56  				},
    57  			},
    58  		},
    59  		{
    60  			name: "success - path pointing to sub dir - no content",
    61  			args: args{mock.Anything},
    62  			files: map[string]string{
    63  				filepath.Join(mock.Anything, ".piperNpmrc"): "",
    64  			},
    65  			want: want{
    66  				path: filepath.Join(mock.Anything, ".piperNpmrc"),
    67  				files: map[string]string{
    68  					filepath.Join(mock.Anything, ".piperNpmrc"): "",
    69  				},
    70  			},
    71  		},
    72  		{
    73  			name: "success - path pointing to file in current folder - no content",
    74  			args: args{".piperNpmrc"},
    75  			files: map[string]string{
    76  				".piperNpmrc": "",
    77  			},
    78  			want: want{
    79  				path: ".piperNpmrc",
    80  				files: map[string]string{
    81  					".piperNpmrc": "",
    82  				},
    83  			},
    84  		},
    85  		{
    86  			name: "success - path pointing to file in sub folder - no content",
    87  			args: args{filepath.Join(mock.Anything, ".piperNpmrc")},
    88  			files: map[string]string{
    89  				filepath.Join(mock.Anything, ".piperNpmrc"): "",
    90  			},
    91  			want: want{
    92  				path: filepath.Join(mock.Anything, ".piperNpmrc"),
    93  				files: map[string]string{
    94  					filepath.Join(mock.Anything, ".piperNpmrc"): "",
    95  				},
    96  			},
    97  		},
    98  		{
    99  			name: "success - doesn't modify existing content",
   100  			args: args{filepath.Join(mock.Anything, ".piperNpmrc")},
   101  			files: map[string]string{
   102  				filepath.Join(mock.Anything, ".piperNpmrc"): `
   103  _auth=dGVzdDp0ZXN0
   104  registry=https://my.private.registry/
   105  @piper:registry=https://my.scoped.private.registry/
   106  //my.private.registry/:_auth=dGVzdDp0ZXN0
   107  //my.scoped.private.registry/:_auth=dGVzdDp0ZXN0
   108  `,
   109  			},
   110  			want: want{
   111  				path: filepath.Join(mock.Anything, ".piperNpmrc"),
   112  				files: map[string]string{
   113  					filepath.Join(mock.Anything, ".piperNpmrc"): `
   114  _auth=dGVzdDp0ZXN0
   115  registry=https://my.private.registry/
   116  @piper:registry=https://my.scoped.private.registry/
   117  //my.private.registry/:_auth=dGVzdDp0ZXN0
   118  //my.scoped.private.registry/:_auth=dGVzdDp0ZXN0
   119  `,
   120  				},
   121  			},
   122  		},
   123  		{
   124  			name:  "failure - path pointing to sth which doesnt exist",
   125  			args:  args{"./this/path/doesnt/exist/.piperNpmrc"},
   126  			files: map[string]string{},
   127  			want: want{
   128  				path:    "./this/path/doesnt/exist/.piperNpmrc",
   129  				errLoad: "could not read './this/path/doesnt/exist/.piperNpmrc'",
   130  			},
   131  		},
   132  	}
   133  	for _, tt := range tests {
   134  		files := filesmock.FilesMock{}
   135  
   136  		for path, content := range tt.files {
   137  			files.AddFile(path, []byte(content))
   138  		}
   139  
   140  		propertiesLoadFile = files.FileRead
   141  		propertiesWriteFile = files.FileWrite
   142  
   143  		t.Run(tt.name, func(t *testing.T) {
   144  			uut := NewNPMRC(tt.args.path)
   145  
   146  			assert.Equal(t, tt.want.path, uut.filepath)
   147  
   148  			if err := uut.Load(); len(tt.want.errLoad) == 0 {
   149  				assert.NoError(t, err)
   150  			} else {
   151  				assert.EqualError(t, err, tt.want.errLoad)
   152  			}
   153  
   154  			if err := uut.Write(); len(tt.want.errWrite) == 0 {
   155  				assert.NoError(t, err)
   156  			} else {
   157  				assert.EqualError(t, err, tt.want.errWrite)
   158  			}
   159  
   160  			for wantFile, wantContent := range tt.want.files {
   161  				if actualContent, err := files.FileRead(wantFile); assert.NoError(t, err) {
   162  					assert.Equal(t, wantContent, string(actualContent))
   163  				}
   164  			}
   165  		})
   166  	}
   167  }