Skip to content

Commit

Permalink
Merge pull request #18 from gruntwork-io/yori-assertions
Browse files Browse the repository at this point in the history
Add functions to make certain assertions
  • Loading branch information
yorinasub17 committed Nov 28, 2018
2 parents 2946a82 + 4bc071e commit bce40c5
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 0 deletions.
41 changes: 41 additions & 0 deletions entrypoint/assertions.go
@@ -0,0 +1,41 @@
package entrypoint

import (
"fmt"
"github.com/urfave/cli"
"os"
)

type RequiredArgsError struct {
message string
}

func (err RequiredArgsError) Error() string {
return err.message
}

func NewRequiredArgsError(message string) error {
return &RequiredArgsError{message}
}

// StringFlagRequiredE checks if a required string flag is passed in on the CLI. This will return the set string, or an
// error if the flag is not passed in.
func StringFlagRequiredE(cliContext *cli.Context, flagName string) (string, error) {
value := cliContext.String(flagName)
if value == "" {
message := fmt.Sprintf("--%s is required", flagName)
return "", NewRequiredArgsError(message)
}
return value, nil
}

// EnvironmentVarRequiredE checks if a required environment variable is set. This will return the environment variable
// value, or an error if the environment variable is not set.
func EnvironmentVarRequiredE(varName string) (string, error) {
value := os.Getenv(varName)
if value == "" {
message := fmt.Sprintf("The environment variable %s is required to be set", varName)
return "", NewRequiredArgsError(message)
}
return value, nil
}
62 changes: 62 additions & 0 deletions entrypoint/assertions_test.go
@@ -0,0 +1,62 @@
package entrypoint

import (
"os"
"testing"

"github.com/stretchr/testify/assert"
"github.com/urfave/cli"
)

func TestStringFlagRequiredOnMissingFlag(t *testing.T) {
t.Parallel()

app := createSampleAppWithRequiredFlag()
app.Action = func(cliContext *cli.Context) error {
value, err := StringFlagRequiredE(cliContext, "the-answer-to-all-problems")
assert.NotNil(t, err)
assert.IsType(t, &RequiredArgsError{}, err)
assert.Equal(t, value, "")
return nil
}
args := []string{"app"}
app.Run(args)
}

func TestStringFlagRequiredOnSetFlag(t *testing.T) {
t.Parallel()

app := createSampleAppWithRequiredFlag()
app.Action = func(cliContext *cli.Context) error {
value, err := StringFlagRequiredE(cliContext, "the-answer-to-all-problems")
assert.Nil(t, err)
assert.Equal(t, value, "42")
return nil
}
args := []string{"app", "--the-answer-to-all-problems", "42"}
app.Run(args)
}

func TestEnvironmentVarRequiredOnMissingEnvVar(t *testing.T) {
value, err := EnvironmentVarRequiredE("THE_ANSWER_TO_ALL_PROBLEMS")
assert.NotNil(t, err)
assert.IsType(t, &RequiredArgsError{}, err)
assert.Equal(t, value, "")
}

func TestEnvironmentVarRequiredOnSetEnvVar(t *testing.T) {
os.Setenv("THE_ANSWER_TO_ALL_PROBLEMS", "42")
value, err := EnvironmentVarRequiredE("THE_ANSWER_TO_ALL_PROBLEMS")
assert.Nil(t, err)
assert.Equal(t, value, "42")
}

func createSampleAppWithRequiredFlag() *cli.App {
app := cli.NewApp()
app.Flags = []cli.Flag{
cli.StringFlag{
Name: "the-answer-to-all-problems",
},
}
return app
}

0 comments on commit bce40c5

Please sign in to comment.