11package conf
22
33import (
4+ "errors"
45 "os"
56 "reflect"
67 "testing"
@@ -40,9 +41,8 @@ func TestConfigJson(t *testing.T) {
4041 for _ , test := range tests {
4142 test := test
4243 t .Run (test , func (t * testing.T ) {
43- tmpfile , err := createTempFile (test , text )
44+ tmpfile , err := createTempFile (t , test , text )
4445 assert .Nil (t , err )
45- defer os .Remove (tmpfile )
4646
4747 var val struct {
4848 A string `json:"a"`
@@ -82,9 +82,8 @@ c = "${FOO}"
8282d = "abcd!@#$112"
8383`
8484 t .Setenv ("FOO" , "2" )
85- tmpfile , err := createTempFile (".toml" , text )
85+ tmpfile , err := createTempFile (t , ".toml" , text )
8686 assert .Nil (t , err )
87- defer os .Remove (tmpfile )
8887
8988 var val struct {
9089 A string `json:"a"`
@@ -105,9 +104,8 @@ b = 1
105104c = "FOO"
106105d = "abcd"
107106`
108- tmpfile , err := createTempFile (".toml" , text )
107+ tmpfile , err := createTempFile (t , ".toml" , text )
109108 assert .Nil (t , err )
110- defer os .Remove (tmpfile )
111109
112110 var val struct {
113111 A string `json:"a"`
@@ -127,9 +125,8 @@ func TestConfigWithLower(t *testing.T) {
127125 text := `a = "foo"
128126b = 1
129127`
130- tmpfile , err := createTempFile (".toml" , text )
128+ tmpfile , err := createTempFile (t , ".toml" , text )
131129 assert .Nil (t , err )
132- defer os .Remove (tmpfile )
133130
134131 var val struct {
135132 A string `json:"a"`
@@ -207,9 +204,8 @@ c = "${FOO}"
207204d = "abcd!@#112"
208205`
209206 t .Setenv ("FOO" , "2" )
210- tmpfile , err := createTempFile (".toml" , text )
207+ tmpfile , err := createTempFile (t , ".toml" , text )
211208 assert .Nil (t , err )
212- defer os .Remove (tmpfile )
213209
214210 var val struct {
215211 A string `json:"a"`
@@ -241,9 +237,8 @@ func TestConfigJsonEnv(t *testing.T) {
241237 for _ , test := range tests {
242238 test := test
243239 t .Run (test , func (t * testing.T ) {
244- tmpfile , err := createTempFile (test , text )
240+ tmpfile , err := createTempFile (t , test , text )
245241 assert .Nil (t , err )
246- defer os .Remove (tmpfile )
247242
248243 var val struct {
249244 A string `json:"a"`
@@ -1217,11 +1212,44 @@ Name = "bar"
12171212 })
12181213}
12191214
1215+ func Test_LoadBadConfig (t * testing.T ) {
1216+ type Config struct {
1217+ Name string `json:"name,options=foo|bar"`
1218+ }
1219+
1220+ file , err := createTempFile (t , ".json" , `{"name": "baz"}` )
1221+ assert .NoError (t , err )
1222+
1223+ var c Config
1224+ err = Load (file , & c )
1225+ assert .Error (t , err )
1226+ }
1227+
12201228func Test_getFullName (t * testing.T ) {
12211229 assert .Equal (t , "a.b" , getFullName ("a" , "b" ))
12221230 assert .Equal (t , "a" , getFullName ("" , "a" ))
12231231}
12241232
1233+ func TestValidate (t * testing.T ) {
1234+ t .Run ("normal config" , func (t * testing.T ) {
1235+ var c mockConfig
1236+ err := LoadFromJsonBytes ([]byte (`{"val": "hello", "number": 8}` ), & c )
1237+ assert .NoError (t , err )
1238+ })
1239+
1240+ t .Run ("error no int" , func (t * testing.T ) {
1241+ var c mockConfig
1242+ err := LoadFromJsonBytes ([]byte (`{"val": "hello"}` ), & c )
1243+ assert .Error (t , err )
1244+ })
1245+
1246+ t .Run ("error no string" , func (t * testing.T ) {
1247+ var c mockConfig
1248+ err := LoadFromJsonBytes ([]byte (`{"number": 8}` ), & c )
1249+ assert .Error (t , err )
1250+ })
1251+ }
1252+
12251253func Test_buildFieldsInfo (t * testing.T ) {
12261254 type ParentSt struct {
12271255 Name string
@@ -1311,13 +1339,13 @@ func Test_buildFieldsInfo(t *testing.T) {
13111339 }
13121340}
13131341
1314- func createTempFile (ext , text string ) (string , error ) {
1342+ func createTempFile (t * testing. T , ext , text string ) (string , error ) {
13151343 tmpFile , err := os .CreateTemp (os .TempDir (), hash .Md5Hex ([]byte (text ))+ "*" + ext )
13161344 if err != nil {
13171345 return "" , err
13181346 }
13191347
1320- if err : = os .WriteFile (tmpFile .Name (), []byte (text ), os .ModeTemporary ); err != nil {
1348+ if err = os .WriteFile (tmpFile .Name (), []byte (text ), os .ModeTemporary ); err != nil {
13211349 return "" , err
13221350 }
13231351
@@ -1326,5 +1354,26 @@ func createTempFile(ext, text string) (string, error) {
13261354 return "" , err
13271355 }
13281356
1357+ t .Cleanup (func () {
1358+ _ = os .Remove (filename )
1359+ })
1360+
13291361 return filename , nil
13301362}
1363+
1364+ type mockConfig struct {
1365+ Val string
1366+ Number int
1367+ }
1368+
1369+ func (m mockConfig ) Validate () error {
1370+ if len (m .Val ) == 0 {
1371+ return errors .New ("val is empty" )
1372+ }
1373+
1374+ if m .Number == 0 {
1375+ return errors .New ("number is zero" )
1376+ }
1377+
1378+ return nil
1379+ }
0 commit comments