From 012a63f45c5dab020781aff16f35fae88918a5ce Mon Sep 17 00:00:00 2001 From: Jan Galek Date: Mon, 16 Dec 2024 20:31:51 +0100 Subject: [PATCH] [Test] cover mode by tests --- .github/workflows/commit-lint.yml | 2 + Makefile | 7 ++ go.mod | 8 +++ go.sum | 10 +++ mode.go | 7 +- tests/mode_test.go | 116 ++++++++++++++++++++++++++++++ 6 files changed, 149 insertions(+), 1 deletion(-) create mode 100644 Makefile create mode 100644 go.sum create mode 100644 tests/mode_test.go diff --git a/.github/workflows/commit-lint.yml b/.github/workflows/commit-lint.yml index 87f41bf..44b9e8c 100644 --- a/.github/workflows/commit-lint.yml +++ b/.github/workflows/commit-lint.yml @@ -16,6 +16,8 @@ on: - develop - feature/** - release/** + - test/** + - bugfix/** jobs: lint-commits: diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..ca4a860 --- /dev/null +++ b/Makefile @@ -0,0 +1,7 @@ +.PHONY: install tests + +install: + go mod tidy && go mod vendor + +tests: + go test -v ./tests \ No newline at end of file diff --git a/go.mod b/go.mod index 722515b..f2196b7 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,11 @@ module github.com/gouef/mode go 1.23.4 + +require github.com/stretchr/testify v1.10.0 + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..713a0b4 --- /dev/null +++ b/go.sum @@ -0,0 +1,10 @@ +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/mode.go b/mode.go index a576777..10152ba 100644 --- a/mode.go +++ b/mode.go @@ -48,7 +48,7 @@ func NewMode(additionalModes []string) (*Mode, error) { return &Mode{ mode: DebugMode, modes: modes, - }, errors.New(fmt.Sprintf("mode from env doest not exists in available modes, used \"%s\", \"%s\" will be used.", mode, DebugMode)) + }, errors.New(fmt.Sprintf("mode from env doest not exists in available modes, used \"%s\", \"%s\" will be use.", mode, DebugMode)) } return &Mode{ @@ -117,6 +117,11 @@ func (m *Mode) GetMode() string { return m.mode } +// Modes return available modes +func (m Mode) Modes() []string { + return m.modes +} + // modeExists internal function for check if mode is inside available modes func (m *Mode) modeExists(mode string) bool { return modeExists(m.modes, mode) diff --git a/tests/mode_test.go b/tests/mode_test.go new file mode 100644 index 0000000..bede52a --- /dev/null +++ b/tests/mode_test.go @@ -0,0 +1,116 @@ +package tests + +import ( + "os" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/gouef/mode" // Nahraď správnou cestou k balíčku "mode" +) + +func TestNewBasicMode_DefaultMode(t *testing.T) { + os.Unsetenv(mode.EnvMode) + + m, err := mode.NewBasicMode() + + require.Error(t, err, "mode from env doest not exists in available modes, used \"\", \"debug\" will be used.\n") + assert.Equal(t, mode.DebugMode, m.GetMode()) + assert.ElementsMatch(t, []string{mode.DebugMode, mode.TestMode, mode.ReleaseMode}, m.Modes()) +} + +func TestNewBasicMode_InvalidEnvMode(t *testing.T) { + os.Setenv(mode.EnvMode, "invalid") + + m, err := mode.NewBasicMode() + + assert.Error(t, err) + assert.Equal(t, mode.DebugMode, m.GetMode()) + assert.Contains(t, err.Error(), "mode from env doest not exists in available modes") +} + +func TestNewMode_ValidEnvMode(t *testing.T) { + os.Setenv(mode.EnvMode, mode.TestMode) + + m, err := mode.NewMode([]string{"staging"}) + + require.NoError(t, err) + assert.Equal(t, mode.TestMode, m.GetMode()) + assert.Contains(t, m.Modes(), "staging") +} + +func TestMode_AddMode(t *testing.T) { + os.Unsetenv(mode.EnvMode) + m, _ := mode.NewBasicMode() + + m.AddMode("staging") + + assert.Contains(t, m.Modes(), "staging") +} + +func TestMode_EnableMode(t *testing.T) { + os.Unsetenv(mode.EnvMode) + m, _ := mode.NewBasicMode() + + success, err := m.EnableMode(mode.TestMode) + + require.NoError(t, err) + assert.True(t, success) + assert.Equal(t, mode.TestMode, m.GetMode()) +} + +func TestMode_EnableMode_Invalid(t *testing.T) { + os.Unsetenv(mode.EnvMode) + m, _ := mode.NewBasicMode() + + success, err := m.EnableMode("invalid") + + assert.Error(t, err) + assert.False(t, success) + assert.Contains(t, err.Error(), "mode doest not exists") +} + +func TestMode_IsMode(t *testing.T) { + os.Setenv(mode.EnvMode, mode.DebugMode) + m, _ := mode.NewBasicMode() + + isMode, err := m.IsMode(mode.DebugMode) + + require.NoError(t, err) + assert.True(t, isMode) + + isMode, err = m.IsMode("invalid") + assert.Error(t, err) + assert.False(t, isMode) +} + +func TestMode_IsDebug(t *testing.T) { + os.Setenv(mode.EnvMode, mode.DebugMode) + m, _ := mode.NewBasicMode() + + isDebug, err := m.IsDebug() + + require.NoError(t, err) + assert.True(t, isDebug) +} + +func TestMode_IsTest(t *testing.T) { + os.Setenv(mode.EnvMode, mode.TestMode) + m, _ := mode.NewBasicMode() + + isTest, err := m.IsTest() + + require.NoError(t, err) + assert.True(t, isTest) +} + +func TestMode_IsRelease(t *testing.T) { + os.Setenv(mode.EnvMode, mode.ReleaseMode) + m, _ := mode.NewBasicMode() + + isRelease, err := m.IsRelease() + + require.NoError(t, err) + assert.True(t, isRelease) +}