Merge pull request #417 from chris-crone/config-test-framework

Move config package to gotest.tools
This commit is contained in:
Chris Crone 2020-08-04 14:16:52 +02:00 committed by GitHub
commit 40aec033e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 35 additions and 44 deletions

View File

@ -22,8 +22,7 @@ import (
"path/filepath" "path/filepath"
"testing" "testing"
"github.com/stretchr/testify/require" "gotest.tools/v3/assert"
"github.com/stretchr/testify/suite"
) )
var sampleConfig = []byte(`{ var sampleConfig = []byte(`{
@ -31,62 +30,54 @@ var sampleConfig = []byte(`{
"currentContext": "local" "currentContext": "local"
}`) }`)
type ConfigTestSuite struct { func testConfigDir(t *testing.T) string {
suite.Suite
configDir string
}
func (s *ConfigTestSuite) BeforeTest(suite, test string) {
d, _ := ioutil.TempDir("", "") d, _ := ioutil.TempDir("", "")
s.configDir = d t.Cleanup(func() {
} _ = os.RemoveAll(d)
})
func (s *ConfigTestSuite) AfterTest(suite, test string) { return d
err := os.RemoveAll(s.configDir)
require.NoError(s.T(), err)
} }
func writeSampleConfig(t *testing.T, d string) { func writeSampleConfig(t *testing.T, d string) {
err := ioutil.WriteFile(filepath.Join(d, ConfigFileName), sampleConfig, 0644) err := ioutil.WriteFile(filepath.Join(d, ConfigFileName), sampleConfig, 0644)
require.NoError(t, err) assert.NilError(t, err)
} }
func (s *ConfigTestSuite) TestLoadFile() { func TestLoadFile(t *testing.T) {
writeSampleConfig(s.T(), s.configDir) d := testConfigDir(t)
f, err := LoadFile(s.configDir) writeSampleConfig(t, d)
require.NoError(s.T(), err) f, err := LoadFile(d)
require.Equal(s.T(), "local", f.CurrentContext) assert.NilError(t, err)
assert.Equal(t, f.CurrentContext, "local")
} }
func (s *ConfigTestSuite) TestOverWriteCurrentContext() { func TestOverWriteCurrentContext(t *testing.T) {
writeSampleConfig(s.T(), s.configDir) d := testConfigDir(t)
f, err := LoadFile(s.configDir) writeSampleConfig(t, d)
require.NoError(s.T(), err) f, err := LoadFile(d)
require.Equal(s.T(), "local", f.CurrentContext) assert.NilError(t, err)
assert.Equal(t, f.CurrentContext, "local")
err = WriteCurrentContext(s.configDir, "overwrite") err = WriteCurrentContext(d, "overwrite")
require.NoError(s.T(), err) assert.NilError(t, err)
f, err = LoadFile(s.configDir) f, err = LoadFile(d)
require.NoError(s.T(), err) assert.NilError(t, err)
require.Equal(s.T(), "overwrite", f.CurrentContext) assert.Equal(t, f.CurrentContext, "overwrite")
m := map[string]interface{}{} m := map[string]interface{}{}
err = loadFile(filepath.Join(s.configDir, ConfigFileName), &m) err = loadFile(filepath.Join(d, ConfigFileName), &m)
require.NoError(s.T(), err) assert.NilError(t, err)
require.Equal(s.T(), "overwrite", m["currentContext"]) assert.Equal(t, "overwrite", m["currentContext"])
require.Equal(s.T(), "value", m["otherField"]) assert.Equal(t, "value", m["otherField"])
} }
// TestWriteDefaultContextToEmptyConfig tests a specific case seen on the CI: // TestWriteDefaultContextToEmptyConfig tests a specific case seen on the CI:
// panic when setting context to default with empty config file // panic when setting context to default with empty config file
func (s *ConfigTestSuite) TestWriteDefaultContextToEmptyConfig() { func TestWriteDefaultContextToEmptyConfig(t *testing.T) {
err := WriteCurrentContext(s.configDir, "default") d := testConfigDir(t)
require.NoError(s.T(), err) err := WriteCurrentContext(d, "default")
d, err := ioutil.ReadFile(filepath.Join(s.configDir, ConfigFileName)) assert.NilError(t, err)
require.NoError(s.T(), err) c, err := ioutil.ReadFile(filepath.Join(d, ConfigFileName))
require.Equal(s.T(), string(d), "{}") assert.NilError(t, err)
} assert.Equal(t, string(c), "{}")
func TestConfig(t *testing.T) {
suite.Run(t, new(ConfigTestSuite))
} }