Skip to content

Commit

Permalink
Merge pull request #441 from cfstras/fix/support-more-env-keys
Browse files Browse the repository at this point in the history
fix: allow configuring flags with "-" as environment variables
  • Loading branch information
LandonTClipp committed Apr 5, 2022
2 parents 4703d1a + 17abd96 commit c943e69
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 1 deletion.
1 change: 1 addition & 0 deletions cmd/mockery.go
Expand Up @@ -106,6 +106,7 @@ func Execute() {

func initConfig() {
viper.SetEnvPrefix("mockery")
viper.SetEnvKeyReplacer(strings.NewReplacer("-", "_"))
viper.AutomaticEnv()

if cfgFile != "" {
Expand Down
79 changes: 79 additions & 0 deletions cmd/mockery_test.go
@@ -1,12 +1,91 @@
package cmd

import (
"fmt"
"os"
"testing"

"github.com/spf13/viper"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/vektra/mockery/v2/pkg/config"
)

func TestNewRootCmd(t *testing.T) {
cmd := NewRootCmd()
assert.Equal(t, "mockery", cmd.Name())
}

func TestConfigEnvFlags(t *testing.T) {
expected := config.Config{
Config: "my_file.yaml",
Name: "SomeInterface",
Print: true,
Output: "/some/dir",
Outpkg: "some/package",
Packageprefix: "prefix_",
Dir: "dir/to/search",
Recursive: true,
All: true,
InPackage: true,
TestOnly: true,
Case: "underscore",
Note: "// this is a test",
Cpuprofile: "test.pprof",
Version: true,
KeepTree: true,
BuildTags: "test mock",
FileName: "my-file.go",
StructName: "Interface1",
LogLevel: "warn",
SrcPkg: "some/other/package",
DryRun: true,
DisableVersionString: true,
BoilerplateFile: "some/file",
UnrollVariadic: false,
Exported: true,
WithExpecter: true,
}

env(t, "CONFIG", expected.Config)
env(t, "NAME", expected.Name)
env(t, "PRINT", fmt.Sprint(expected.Print))
env(t, "OUTPUT", expected.Output)
env(t, "OUTPKG", expected.Outpkg)
env(t, "PACKAGEPREFIX", expected.Packageprefix)
env(t, "DIR", expected.Dir)
env(t, "RECURSIVE", fmt.Sprint(expected.Recursive))
env(t, "ALL", fmt.Sprint(expected.All))
env(t, "INPACKAGE", fmt.Sprint(expected.InPackage))
env(t, "TESTONLY", fmt.Sprint(expected.TestOnly))
env(t, "CASE", expected.Case)
env(t, "NOTE", expected.Note)
env(t, "CPUPROFILE", expected.Cpuprofile)
env(t, "VERSION", fmt.Sprint(expected.Version))
env(t, "QUIET", fmt.Sprint(expected.Quiet))
env(t, "KEEPTREE", fmt.Sprint(expected.KeepTree))
env(t, "TAGS", expected.BuildTags)
env(t, "FILENAME", expected.FileName)
env(t, "STRUCTNAME", expected.StructName)
env(t, "LOG_LEVEL", expected.LogLevel)
env(t, "SRCPKG", expected.SrcPkg)
env(t, "DRY_RUN", fmt.Sprint(expected.DryRun))
env(t, "DISABLE_VERSION_STRING", fmt.Sprint(expected.DisableVersionString))
env(t, "BOILERPLATE_FILE", expected.BoilerplateFile)
env(t, "UNROLL_VARIADIC", fmt.Sprint(expected.UnrollVariadic))
env(t, "EXPORTED", fmt.Sprint(expected.Exported))
env(t, "WITH_EXPECTER", fmt.Sprint(expected.WithExpecter))

initConfig()

app, err := GetRootAppFromViper(viper.GetViper())
require.NoError(t, err)

assert.Equal(t, expected, app.Config)
}

func env(t *testing.T, key, value string) {
key = "MOCKERY_" + key
t.Cleanup(func() { os.Unsetenv(key) })
os.Setenv(key, value)
}
1 change: 0 additions & 1 deletion pkg/config/config.go
Expand Up @@ -48,7 +48,6 @@ type Config struct {
// StructName overrides the name given to the mock struct and should only be nonempty
// when generating for an exact match (non regex expression in -name).
StructName string
Tags string
TestOnly bool
UnrollVariadic bool `mapstructure:"unroll-variadic"`
Version bool
Expand Down

0 comments on commit c943e69

Please sign in to comment.