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 }