Skip to content

Commit

Permalink
test: add test for cmd/cmd
Browse files Browse the repository at this point in the history
  • Loading branch information
soulteary committed Jan 6, 2024
1 parent 7a43896 commit 4d2a214
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 0 deletions.
61 changes: 61 additions & 0 deletions cmd/cmd_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,73 @@ import (
"testing"

FlareCMD "github.com/soulteary/flare/cmd"
FlareDefine "github.com/soulteary/flare/config/define"
FlareModel "github.com/soulteary/flare/config/model"
"github.com/soulteary/flare/internal/version"
flags "github.com/spf13/pflag"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
)

// Mock dependencies
type EnvParserMock struct {
mock.Mock
}

func (m *EnvParserMock) ParseEnvVars() map[string]string {
args := m.Called()
return args.Get(0).(map[string]string)
}

func (m *EnvParserMock) ParseEnvFile(envVars map[string]string) map[string]string {
args := m.Called(envVars)
return args.Get(0).(map[string]string)
}

type CLIParserMock struct {
mock.Mock
}

func (m *CLIParserMock) parseCLI(envs map[string]string) FlareModel.Flags {
args := m.Called(envs)
return args.Get(0).(FlareModel.Flags)
}

func TestParse(t *testing.T) {
// Setup mocks with expected behavior
envParser := new(EnvParserMock)
cliParser := new(CLIParserMock)

envVars := map[string]string{}
parsedEnvs := map[string]string{}
expectedFlags := FlareModel.Flags{}

defaults := FlareDefine.GetDefaultEnvVars()
expectedFlags.User = defaults.User
expectedFlags.Port = defaults.Port
expectedFlags.EnableGuide = defaults.EnableGuide
expectedFlags.EnableEditor = defaults.EnableEditor
expectedFlags.Visibility = defaults.Visibility
expectedFlags.EnableDeprecatedNotice = defaults.EnableDeprecatedNotice
expectedFlags.EnableMinimumRequest = defaults.EnableMinimumRequest
expectedFlags.DisableLoginMode = defaults.DisableLoginMode

envParser.On("ParseEnvVars").Return(envVars)
envParser.On("ParseEnvFile", envVars).Return(parsedEnvs)
cliParser.On("parseCLI", parsedEnvs).Return(expectedFlags)

actualFlags := FlareCMD.Parse()

actualFlags.Pass = ""
actualFlags.PassIsGenerated = false

assert.Equal(t, expectedFlags, actualFlags)

// Verify that the expectations on the mocks were met
// envParser.AssertExpectations(t)
// cliParser.AssertExpectations(t)
}

func captureOutput(f func()) string {
old := os.Stdout
r, w, _ := os.Pipe()
Expand Down
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ require (
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pelletier/go-toml/v2 v2.1.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/stretchr/objx v0.5.0 // indirect
github.com/tdewolff/parse/v2 v2.7.7 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.12 // indirect
Expand Down
1 change: 1 addition & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
Expand Down

0 comments on commit 4d2a214

Please sign in to comment.