Skip to content
This repository was archived by the owner on Aug 30, 2024. It is now read-only.

Commit d604c27

Browse files
authored
chore: simple no auth unit test (#279)
1 parent f34aafe commit d604c27

File tree

11 files changed

+94
-20
lines changed

11 files changed

+94
-20
lines changed

internal/cmd/envs.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func lsEnvsCommand() *cobra.Command {
7474

7575
switch outputFmt {
7676
case humanOutput:
77-
err := tablewriter.WriteTable(len(envs), func(i int) interface{} {
77+
err := tablewriter.WriteTable(cmd.OutOrStdout(), len(envs), func(i int) interface{} {
7878
return envs[i]
7979
})
8080
if err != nil {

internal/cmd/envs_test.go

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package cmd
2+
3+
import (
4+
"bytes"
5+
"fmt"
6+
"io"
7+
"io/ioutil"
8+
"strings"
9+
"testing"
10+
11+
"cdr.dev/slog"
12+
"cdr.dev/slog/sloggers/slogtest"
13+
"cdr.dev/slog/sloggers/slogtest/assert"
14+
"golang.org/x/xerrors"
15+
16+
"cdr.dev/coder-cli/internal/config"
17+
"cdr.dev/coder-cli/pkg/clog"
18+
)
19+
20+
func init() {
21+
tmpDir, err := ioutil.TempDir("", "coder-cli-config-dir")
22+
if err != nil {
23+
panic(err)
24+
}
25+
config.SetRoot(tmpDir)
26+
}
27+
28+
func TestEnvsCommand(t *testing.T) {
29+
res := execute(t, []string{"envs", "ls"}, nil)
30+
assert.Error(t, "execute without auth", res.ExitErr)
31+
32+
err := assertClogErr(t, res.ExitErr)
33+
assert.True(t, "login hint in error", strings.Contains(err.String(), "did you run \"coder login"))
34+
}
35+
36+
type result struct {
37+
OutBuffer *bytes.Buffer
38+
ErrBuffer *bytes.Buffer
39+
ExitErr error
40+
}
41+
42+
func execute(t *testing.T, args []string, in io.Reader) result {
43+
cmd := Make()
44+
45+
outStream := bytes.NewBuffer(nil)
46+
errStream := bytes.NewBuffer(nil)
47+
48+
cmd.SetArgs(args)
49+
50+
cmd.SetIn(in)
51+
cmd.SetOut(outStream)
52+
cmd.SetErr(errStream)
53+
54+
err := cmd.Execute()
55+
56+
slogtest.Debug(t, "execute command",
57+
slog.F("outBuffer", outStream.String()),
58+
slog.F("errBuffer", errStream.String()),
59+
slog.F("args", args),
60+
slog.F("execute_error", err),
61+
)
62+
return result{
63+
OutBuffer: outStream,
64+
ErrBuffer: errStream,
65+
ExitErr: err,
66+
}
67+
}
68+
69+
func assertClogErr(t *testing.T, err error) clog.CLIError {
70+
var cliErr clog.CLIError
71+
if !xerrors.As(err, &cliErr) {
72+
slogtest.Fatal(t, "expected clog error, none found", slog.Error(err), slog.F("type", fmt.Sprintf("%T", err)))
73+
}
74+
slogtest.Debug(t, "clog error", slog.F("message", cliErr.String()))
75+
return cliErr
76+
}

internal/cmd/images.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func lsImgsCommand(user *string) *cobra.Command {
7070
}
7171
return nil
7272
case humanOutput:
73-
err = tablewriter.WriteTable(len(imgs), func(i int) interface{} {
73+
err = tablewriter.WriteTable(cmd.OutOrStdout(), len(imgs), func(i int) interface{} {
7474
return imgs[i]
7575
})
7676
if err != nil {

internal/cmd/providers.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ coder providers create my-provider --hostname=https://provider.example.com --clu
6363
return xerrors.Errorf("create workspace provider: %w", err)
6464
}
6565

66-
err = tablewriter.WriteTable(1, func(i int) interface{} {
66+
err = tablewriter.WriteTable(cmd.OutOrStdout(), 1, func(i int) interface{} {
6767
return *wp
6868
})
6969
if err != nil {
@@ -100,7 +100,7 @@ coder providers ls`,
100100
return xerrors.Errorf("list workspace providers: %w", err)
101101
}
102102

103-
err = tablewriter.WriteTable(len(wps.Kubernetes), func(i int) interface{} {
103+
err = tablewriter.WriteTable(cmd.OutOrStdout(), len(wps.Kubernetes), func(i int) interface{} {
104104
return wps.Kubernetes[i]
105105
})
106106
if err != nil {

internal/cmd/tags.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ func tagsLsCmd() *cobra.Command {
107107

108108
switch outputFmt {
109109
case humanOutput:
110-
err = tablewriter.WriteTable(len(tags), func(i int) interface{} { return tags[i] })
110+
err = tablewriter.WriteTable(cmd.OutOrStdout(), len(tags), func(i int) interface{} { return tags[i] })
111111
if err != nil {
112112
return err
113113
}

internal/cmd/tokens.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ func lsTokensCmd() *cobra.Command {
4848

4949
switch outputFmt {
5050
case humanOutput:
51-
err := tablewriter.WriteTable(len(tokens), func(i int) interface{} {
51+
err := tablewriter.WriteTable(cmd.OutOrStdout(), len(tokens), func(i int) interface{} {
5252
return tokens[i]
5353
})
5454
if err != nil {

internal/cmd/urls.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ func listDevURLsCmd(outputFmt *string) func(cmd *cobra.Command, args []string) e
9999
clog.LogInfo(fmt.Sprintf("no devURLs found for environment %q", envName))
100100
return nil
101101
}
102-
err := tablewriter.WriteTable(len(devURLs), func(i int) interface{} {
102+
err := tablewriter.WriteTable(cmd.OutOrStdout(), len(devURLs), func(i int) interface{} {
103103
return devURLs[i]
104104
})
105105
if err != nil {

internal/cmd/users.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ func listUsers(outputFmt *string) func(cmd *cobra.Command, args []string) error
4646
case humanOutput:
4747
// For each element, return the user.
4848
each := func(i int) interface{} { return users[i] }
49-
if err := tablewriter.WriteTable(len(users), each); err != nil {
49+
if err := tablewriter.WriteTable(cmd.OutOrStdout(), len(users), each); err != nil {
5050
return xerrors.Errorf("write table: %w", err)
5151
}
5252
case "json":

internal/config/dir.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,17 @@ import (
88
"github.com/kirsle/configdir"
99
)
1010

11-
func dir() string {
12-
return configdir.LocalConfig("coder")
11+
var configRoot = configdir.LocalConfig("coder")
12+
13+
// SetRoot overrides the package-level config root configuration.
14+
func SetRoot(root string) {
15+
configRoot = root
1316
}
1417

1518
// open opens a file in the configuration directory,
1619
// creating all intermediate directories.
1720
func open(path string, flag int, mode os.FileMode) (*os.File, error) {
18-
path = filepath.Join(dir(), path)
21+
path = filepath.Join(configRoot, path)
1922

2023
err := os.MkdirAll(filepath.Dir(path), 0750)
2124
if err != nil {
@@ -45,5 +48,5 @@ func read(path string) ([]byte, error) {
4548
}
4649

4750
func rm(path string) error {
48-
return os.Remove(filepath.Join(dir(), path))
51+
return os.Remove(filepath.Join(configRoot, path))
4952
}

pkg/tablewriter/tablewriter.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package tablewriter
33
import (
44
"fmt"
55
"io"
6-
"os"
76
"reflect"
87
"strings"
98
"text/tabwriter"
@@ -55,19 +54,16 @@ func StructFieldNames(data interface{}) string {
5554
return s.String()
5655
}
5756

58-
// The output io.Writer for WriteTable. This is globally defined to allow overriding in tests.
59-
var tableOutput io.Writer = os.Stdout
60-
6157
// WriteTable writes the given list elements to stdout in a human readable
6258
// tabular format. Headers abide by the `table` struct tag.
6359
//
6460
// `table:"-"` omits the field and no tag defaults to the Go identifier.
6561
// `table:"_"` flattens a fields subfields.
66-
func WriteTable(length int, each func(i int) interface{}) error {
62+
func WriteTable(writer io.Writer, length int, each func(i int) interface{}) error {
6763
if length < 1 {
6864
return nil
6965
}
70-
w := tabwriter.NewWriter(tableOutput, 0, 0, 4, ' ', 0)
66+
w := tabwriter.NewWriter(writer, 0, 0, 4, ' ', 0)
7167
defer func() { _ = w.Flush() }() // Best effort.
7268
for ix := 0; ix < length; ix++ {
7369
item := each(ix)

pkg/tablewriter/tablewriter_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,7 @@ func TestTableWriter(t *testing.T) {
4949
}
5050

5151
buf := bytes.NewBuffer(nil)
52-
tableOutput = buf
53-
err := WriteTable(len(items), func(i int) interface{} { return items[i] })
52+
err := WriteTable(buf, len(items), func(i int) interface{} { return items[i] })
5453
assert.Success(t, "write table", err)
5554

5655
assertGolden(t, "table_output.golden", buf.Bytes())

0 commit comments

Comments
 (0)