Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions cmd/cliflags/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ const (
BaseURIFlag = "base-uri"
DataFlag = "data"
EmailsFlag = "emails"
EnvironmentFlag = "environment"
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added this one and sorted.

FlagFlag = "flag"
ProjectFlag = "project"
RoleFlag = "role"
Expand Down
10 changes: 9 additions & 1 deletion cmd/cmdtest.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (

"github.com/stretchr/testify/require"

"ldcli/internal/environments"
"ldcli/internal/flags"
"ldcli/internal/members"
"ldcli/internal/projects"
Expand All @@ -16,12 +17,19 @@ var ValidResponse = `{"valid": true}`

func CallCmd(
t *testing.T,
environmentsClient *environments.MockClient,
flagsClient *flags.MockClient,
membersClient *members.MockClient,
projectsClient *projects.MockClient,
args []string,
) ([]byte, error) {
rootCmd, err := NewRootCommand(flagsClient, membersClient, projectsClient, "test")
rootCmd, err := NewRootCommand(
environmentsClient,
flagsClient,
membersClient,
projectsClient,
"test",
)
require.NoError(t, err)
b := bytes.NewBufferString("")
rootCmd.SetOut(b)
Expand Down
24 changes: 24 additions & 0 deletions cmd/environments/environments.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package environments

import (
"github.com/spf13/cobra"

"ldcli/internal/environments"
)

func NewEnvironmentsCmd(client environments.Client) (*cobra.Command, error) {
cmd := &cobra.Command{
Use: "environments",
Short: "Make requests (list, create, etc.) on environments",
Long: "Make requests (list, create, etc.) on environments",
}

getCmd, err := NewGetCmd(client)
if err != nil {
return nil, err
}

cmd.AddCommand(getCmd)

return cmd, nil
}
68 changes: 68 additions & 0 deletions cmd/environments/get.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package environments

import (
"context"
"fmt"

"github.com/spf13/cobra"
"github.com/spf13/viper"

"ldcli/cmd/cliflags"
"ldcli/cmd/validators"
"ldcli/internal/environments"
)

func NewGetCmd(client environments.Client) (*cobra.Command, error) {
cmd := &cobra.Command{
Args: validators.Validate(),
Long: "Return an environment",
RunE: runGet(client),
Short: "Return an environment",
Use: "get",
}

cmd.Flags().StringP(cliflags.EnvironmentFlag, "e", "", "Environment key")
err := cmd.MarkFlagRequired(cliflags.EnvironmentFlag)
if err != nil {
return nil, err
}

err = viper.BindPFlag(cliflags.EnvironmentFlag, cmd.Flags().Lookup(cliflags.EnvironmentFlag))
if err != nil {
return nil, err
}

cmd.Flags().StringP(cliflags.ProjectFlag, "p", "", "Project key")
err = cmd.MarkFlagRequired(cliflags.ProjectFlag)
if err != nil {
return nil, err
}
err = viper.BindPFlag(cliflags.ProjectFlag, cmd.Flags().Lookup(cliflags.ProjectFlag))
if err != nil {
return nil, err
}

return cmd, nil
}

func runGet(client environments.Client) func(*cobra.Command, []string) error {
return func(cmd *cobra.Command, args []string) error {
_ = viper.BindPFlag(cliflags.EnvironmentFlag, cmd.Flags().Lookup(cliflags.EnvironmentFlag))
_ = viper.BindPFlag(cliflags.ProjectFlag, cmd.Flags().Lookup(cliflags.ProjectFlag))

response, err := client.Get(
context.Background(),
viper.GetString(cliflags.AccessTokenFlag),
viper.GetString(cliflags.BaseURIFlag),
viper.GetString(cliflags.EnvironmentFlag),
viper.GetString(cliflags.ProjectFlag),
)
if err != nil {
return err
}

fmt.Fprintf(cmd.OutOrStdout(), string(response)+"\n")

return nil
}
}
102 changes: 102 additions & 0 deletions cmd/environments/get_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
package environments_test

import (
"ldcli/cmd"
"testing"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

"ldcli/internal/environments"
"ldcli/internal/errors"
)

func TestGet(t *testing.T) {
errorHelp := ". See `ldcli environments get --help` for supported flags and usage."
mockArgs := []interface{}{
"testAccessToken",
"https://app.launchdarkly.com",
"test-env",
"test-proj",
}
t.Run("with valid environments calls projects API", func(t *testing.T) {
client := environments.MockClient{}
client.
On("Get", mockArgs...).
Return([]byte(cmd.ValidResponse), nil)
args := []string{
"environments", "get",
"--access-token", "testAccessToken",
"--environment", "test-env",
"--project", "test-proj",
}

output, err := cmd.CallCmd(t, &client, nil, nil, nil, args)

require.NoError(t, err)
assert.JSONEq(t, `{"valid": true}`, string(output))
})

t.Run("with an error response is an error", func(t *testing.T) {
client := environments.MockClient{}
client.
On("Get", mockArgs...).
Return([]byte(`{}`), errors.NewError("An error"))
args := []string{
"environments", "get",
"--access-token", "testAccessToken",
"--environment", "test-env",
"--project", "test-proj",
}

_, err := cmd.CallCmd(t, &client, nil, nil, nil, args)

require.EqualError(t, err, "An error")
})

t.Run("with missing required environments is an error", func(t *testing.T) {
args := []string{
"environments", "get",
}

_, err := cmd.CallCmd(t, &environments.MockClient{}, nil, nil, nil, args)

assert.EqualError(t, err, `required flag(s) "access-token", "environment", "project" not set`+errorHelp)
})

t.Run("with missing short flag value is an error", func(t *testing.T) {
args := []string{
"environments", "get",
"-e",
}

_, err := cmd.CallCmd(t, &environments.MockClient{}, nil, nil, nil, args)

assert.EqualError(t, err, `flag needs an argument: 'e' in -e`)
})

t.Run("with missing long flag value is an error", func(t *testing.T) {
args := []string{
"environments", "get",
"--environment",
}

_, err := cmd.CallCmd(t, &environments.MockClient{}, nil, nil, nil, args)

assert.EqualError(t, err, `flag needs an argument: --environment`)
})

t.Run("with invalid base-uri is an error", func(t *testing.T) {
args := []string{
"environments", "get",
"--access-token", "testAccessToken",
"--base-uri", "invalid",
"--environment", "test-env",
"--project", "test-proj",
}

_, err := cmd.CallCmd(t, &environments.MockClient{}, nil, nil, nil, args)

assert.EqualError(t, err, "base-uri is invalid"+errorHelp)
})
}
12 changes: 6 additions & 6 deletions cmd/flags/create_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ func TestCreate(t *testing.T) {
"--project", "test-proj-key",
}

output, err := cmd.CallCmd(t, &client, nil, nil, args)
output, err := cmd.CallCmd(t, nil, &client, nil, nil, args)

require.NoError(t, err)
assert.JSONEq(t, `{"valid": true}`, string(output))
Expand All @@ -52,7 +52,7 @@ func TestCreate(t *testing.T) {
"--project", "test-proj-key",
}

_, err := cmd.CallCmd(t, &client, nil, nil, args)
_, err := cmd.CallCmd(t, nil, &client, nil, nil, args)

require.EqualError(t, err, "An error")
})
Expand All @@ -62,7 +62,7 @@ func TestCreate(t *testing.T) {
"flags", "create",
}

_, err := cmd.CallCmd(t, &flags.MockClient{}, nil, nil, args)
_, err := cmd.CallCmd(t, nil, &flags.MockClient{}, nil, nil, args)

assert.EqualError(t, err, `required flag(s) "access-token", "data", "project" not set`+errorHelp)
})
Expand All @@ -73,7 +73,7 @@ func TestCreate(t *testing.T) {
"-d",
}

_, err := cmd.CallCmd(t, &flags.MockClient{}, nil, nil, args)
_, err := cmd.CallCmd(t, nil, &flags.MockClient{}, nil, nil, args)

assert.EqualError(t, err, `flag needs an argument: 'd' in -d`)
})
Expand All @@ -84,7 +84,7 @@ func TestCreate(t *testing.T) {
"--data",
}

_, err := cmd.CallCmd(t, &flags.MockClient{}, nil, nil, args)
_, err := cmd.CallCmd(t, nil, &flags.MockClient{}, nil, nil, args)

assert.EqualError(t, err, `flag needs an argument: --data`)
})
Expand All @@ -98,7 +98,7 @@ func TestCreate(t *testing.T) {
"--project", "test-proj-key",
}

_, err := cmd.CallCmd(t, &flags.MockClient{}, nil, nil, args)
_, err := cmd.CallCmd(t, nil, &flags.MockClient{}, nil, nil, args)

assert.EqualError(t, err, "base-uri is invalid"+errorHelp)
})
Expand Down
8 changes: 4 additions & 4 deletions cmd/flags/update_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ func TestUpdate(t *testing.T) {
"--project", "test-proj-key",
}

output, err := cmd.CallCmd(t, &client, nil, nil, args)
output, err := cmd.CallCmd(t, nil, &client, nil, nil, args)

require.NoError(t, err)
assert.JSONEq(t, `{"valid": true}`, string(output))
Expand All @@ -61,7 +61,7 @@ func TestUpdate(t *testing.T) {
"--project", "test-proj-key",
}

_, err := cmd.CallCmd(t, &client, nil, nil, args)
_, err := cmd.CallCmd(t, nil, &client, nil, nil, args)

require.EqualError(t, err, "An error")
})
Expand All @@ -71,7 +71,7 @@ func TestUpdate(t *testing.T) {
"flags", "update",
}

_, err := cmd.CallCmd(t, &flags.MockClient{}, nil, nil, args)
_, err := cmd.CallCmd(t, nil, &flags.MockClient{}, nil, nil, args)

assert.EqualError(t, err, `required flag(s) "access-token", "data", "flag", "project" not set`+errorHelp)
})
Expand All @@ -85,7 +85,7 @@ func TestUpdate(t *testing.T) {
"--project", "test-proj-key",
}

_, err := cmd.CallCmd(t, &flags.MockClient{}, nil, nil, args)
_, err := cmd.CallCmd(t, nil, &flags.MockClient{}, nil, nil, args)

assert.EqualError(t, err, "base-uri is invalid"+errorHelp)
})
Expand Down
8 changes: 4 additions & 4 deletions cmd/members/create_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ func TestCreate(t *testing.T) {
`{"email": "testemail@test.com", "role": "writer"}`,
}

output, err := cmd.CallCmd(t, nil, &client, nil, args)
output, err := cmd.CallCmd(t, nil, nil, &client, nil, args)

require.NoError(t, err)
assert.JSONEq(t, `{"valid": true}`, string(output))
Expand All @@ -57,7 +57,7 @@ func TestCreate(t *testing.T) {
`{"email": "testemail@test.com", "role": "writer"}`,
}

_, err := cmd.CallCmd(t, nil, &client, nil, args)
_, err := cmd.CallCmd(t, nil, nil, &client, nil, args)

require.EqualError(t, err, "An error")
})
Expand All @@ -68,7 +68,7 @@ func TestCreate(t *testing.T) {
"create",
}

_, err := cmd.CallCmd(t, nil, &members.MockClient{}, nil, args)
_, err := cmd.CallCmd(t, nil, nil, &members.MockClient{}, nil, args)

assert.EqualError(t, err, `required flag(s) "access-token", "data" not set`+errorHelp)
})
Expand All @@ -80,7 +80,7 @@ func TestCreate(t *testing.T) {
"--base-uri", "invalid",
}

_, err := cmd.CallCmd(t, nil, &members.MockClient{}, nil, args)
_, err := cmd.CallCmd(t, nil, nil, &members.MockClient{}, nil, args)

assert.EqualError(t, err, "base-uri is invalid"+errorHelp)
})
Expand Down
Loading