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