github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/pkg/versioning/inifile_test.go (about) 1 //go:build unit 2 // +build unit 3 4 package versioning 5 6 import ( 7 "fmt" 8 "os" 9 "testing" 10 11 "github.com/stretchr/testify/assert" 12 ) 13 14 func TestINIfileGetVersion(t *testing.T) { 15 t.Run("success case", func(t *testing.T) { 16 inifile := INIfile{ 17 path: "my.cfg", 18 versionSection: "test", 19 readFile: func(filename string) ([]byte, error) { return []byte("[test]\nversion = 1.2.3 "), nil }, 20 } 21 version, err := inifile.GetVersion() 22 assert.NoError(t, err) 23 assert.Equal(t, "1.2.3", version) 24 }) 25 26 t.Run("error case - read error", func(t *testing.T) { 27 inifile := INIfile{ 28 path: "my.cfg", 29 readFile: func(filename string) ([]byte, error) { return []byte{}, fmt.Errorf("read error") }, 30 } 31 _, err := inifile.GetVersion() 32 assert.EqualError(t, err, "failed to read file 'my.cfg': read error") 33 }) 34 35 t.Run("error case - load error", func(t *testing.T) { 36 inifile := INIfile{ 37 path: "my.cfg", 38 readFile: func(filename string) ([]byte, error) { return []byte("1.2.3"), nil }, 39 } 40 _, err := inifile.GetVersion() 41 assert.EqualError(t, err, "failed to load content from file 'my.cfg': key-value delimiter not found: 1.2.3") 42 }) 43 44 t.Run("error case - field not found", func(t *testing.T) { 45 inifile := INIfile{ 46 path: "my.cfg", 47 readFile: func(filename string) ([]byte, error) { return []byte("theversion = 1.2.3"), nil }, 48 } 49 _, err := inifile.GetVersion() 50 assert.EqualError(t, err, "field 'version' not found in section ''") 51 }) 52 } 53 54 func TestINIfileSetVersion(t *testing.T) { 55 t.Run("success case - flat", func(t *testing.T) { 56 var content []byte 57 inifile := INIfile{ 58 path: "my.cfg", 59 versionField: "theversion", 60 readFile: func(filename string) ([]byte, error) { return []byte("theversion = 1.2.3"), nil }, 61 writeFile: func(filename string, filecontent []byte, mode os.FileMode) error { content = filecontent; return nil }, 62 } 63 err := inifile.SetVersion("1.2.4") 64 assert.NoError(t, err) 65 assert.Contains(t, string(content), "theversion = 1.2.4") 66 }) 67 68 t.Run("success case - section", func(t *testing.T) { 69 var content []byte 70 inifile := INIfile{ 71 path: "my.cfg", 72 versionField: "theversion", 73 versionSection: "test", 74 readFile: func(filename string) ([]byte, error) { return []byte("[test]\ntheversion = 1.2.3"), nil }, 75 writeFile: func(filename string, filecontent []byte, mode os.FileMode) error { content = filecontent; return nil }, 76 } 77 err := inifile.SetVersion("1.2.4") 78 assert.NoError(t, err) 79 assert.Contains(t, string(content), "[test]") 80 assert.Contains(t, string(content), "1.2.4") 81 assert.NotContains(t, string(content), "1.2.3") 82 }) 83 84 t.Run("error case", func(t *testing.T) { 85 inifile := INIfile{ 86 path: "my.cfg", 87 versionField: "theversion", 88 readFile: func(filename string) ([]byte, error) { return []byte("theversion = 1.2.3"), nil }, 89 writeFile: func(filename string, filecontent []byte, mode os.FileMode) error { return fmt.Errorf("write error") }, 90 } 91 err := inifile.SetVersion("1.2.4") 92 assert.EqualError(t, err, "failed to write file 'my.cfg': write error") 93 }) 94 }