1// +build ent
2
3package command
4
5import (
6	"strings"
7	"testing"
8
9	"github.com/mitchellh/cli"
10	"github.com/posener/complete"
11	"github.com/stretchr/testify/assert"
12)
13
14func TestQuotaStatusCommand_Implements(t *testing.T) {
15	t.Parallel()
16	var _ cli.Command = &QuotaStatusCommand{}
17}
18
19func TestQuotaStatusCommand_Fails(t *testing.T) {
20	t.Parallel()
21	ui := new(cli.MockUi)
22	cmd := &QuotaStatusCommand{Meta: Meta{Ui: ui}}
23
24	// Fails on misuse
25	if code := cmd.Run([]string{"some", "bad", "args"}); code != 1 {
26		t.Fatalf("expected exit code 1, got: %d", code)
27	}
28	if out := ui.ErrorWriter.String(); !strings.Contains(out, commandErrorText(cmd)) {
29		t.Fatalf("expected help output, got: %s", out)
30	}
31	ui.ErrorWriter.Reset()
32
33	if code := cmd.Run([]string{"-address=nope", "foo"}); code != 1 {
34		t.Fatalf("expected exit code 1, got: %d", code)
35	}
36	if out := ui.ErrorWriter.String(); !strings.Contains(out, "retrieving quota") {
37		t.Fatalf("connection error, got: %s", out)
38	}
39	ui.ErrorWriter.Reset()
40}
41
42func TestQuotaStatusCommand_Good(t *testing.T) {
43	t.Parallel()
44
45	// Create a server
46	srv, client, url := testServer(t, true, nil)
47	defer srv.Shutdown()
48
49	ui := new(cli.MockUi)
50	cmd := &QuotaStatusCommand{Meta: Meta{Ui: ui}}
51
52	// Create a quota to delete
53	qs := testQuotaSpec()
54	_, err := client.Quotas().Register(qs, nil)
55	assert.Nil(t, err)
56
57	// Delete a namespace
58	if code := cmd.Run([]string{"-address=" + url, qs.Name}); code != 0 {
59		t.Fatalf("expected exit 0, got: %d; %v", code, ui.ErrorWriter.String())
60	}
61
62	// Check for basic spec
63	out := ui.OutputWriter.String()
64	if !strings.Contains(out, "= test") {
65		t.Fatalf("expected quota, got: %s", out)
66	}
67
68	// Check for usage
69	if !strings.Contains(out, "0 / 100") {
70		t.Fatalf("expected quota, got: %s", out)
71	}
72}
73
74func TestQuotaStatusCommand_AutocompleteArgs(t *testing.T) {
75	assert := assert.New(t)
76	t.Parallel()
77
78	srv, client, url := testServer(t, true, nil)
79	defer srv.Shutdown()
80
81	ui := new(cli.MockUi)
82	cmd := &QuotaStatusCommand{Meta: Meta{Ui: ui, flagAddress: url}}
83
84	// Create a quota
85	qs := testQuotaSpec()
86	_, err := client.Quotas().Register(qs, nil)
87	assert.Nil(err)
88
89	args := complete.Args{Last: "t"}
90	predictor := cmd.AutocompleteArgs()
91
92	res := predictor.Predict(args)
93	assert.Equal(1, len(res))
94	assert.Equal(qs.Name, res[0])
95}
96