package cmd
import (
"bytes"
"encoding/json"
"io/ioutil"
"os"
"strings"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
"github.com/vmware/dispatch/pkg/api/v1"
"github.com/vmware/dispatch/pkg/client/mocks"
)
func TestCmdCreateSecret(t *testing.T) {
var buf bytes.Buffer
cli := NewCLI(os.Stdin, &buf, &buf)
cli.SetOutput(&buf)
cli.SetArgs([]string{"create", "secret", "--help"})
err := cli.Execute()
assert.Nil(t, err)
assert.True(t, strings.Contains(buf.String(), "Create a dispatch secret"))
}
func TestCreateSecret(t *testing.T) {
var stdout, stderr bytes.Buffer
cli := NewCLI(os.Stdin, &stdout, &stderr)
sc := &mocks.SecretsClient{}
body := map[string]string{"secretKey": "secretValue"}
tmpfile, err := ioutil.TempFile("", "createSecret")
assert.NoError(t, err)
defer os.Remove(tmpfile.Name())
enc := json.NewEncoder(tmpfile)
err = enc.Encode(body)
require.NoError(t, err)
args := []string{"test", tmpfile.Name()}
dispatchConfig.Output = "json"
secret := &v1.Secret{
Meta: v1.Meta{
Name: args[0],
},
Secrets: body,
}
sc.On("CreateSecret", mock.Anything, mock.Anything, secret).Once().Return(secret, nil)
err = createSecret(&stdout, &stderr, cli, args, sc)
assert.NoError(t, err)
var secObj v1.Secret
err = json.Unmarshal(stdout.Bytes(), &secObj)
assert.NoError(t, err)
assert.Equal(t, "test", secObj.Meta.Name)
assert.Equal(t, v1.SecretValue{"secretKey": "secretValue"}, secObj.Secrets)
}