// Copyright 2016-2017, Pulumi Corporation. All rights reserved. package tests import ( "testing" "github.com/pulumi/pulumi/pkg/testing/integration" "github.com/stretchr/testify/assert" ptesting "github.com/pulumi/pulumi/pkg/testing" ) func TestStackErrors(t *testing.T) { t.Run("NoRepository", func(t *testing.T) { e := ptesting.NewEnvironment(t) defer func() { if !t.Failed() { e.DeleteEnvironment() } }() stdout, stderr := e.RunCommandExpectError("pulumi", "stack", "rm", "does-not-exist", "--yes") assert.Empty(t, stdout, "expected nothing to be written to stdout") assert.Contains(t, stderr, "error: no repository") }) } func TestStackCommands(t *testing.T) { // stack init, stack ls, stack rm, stack ls t.Run("SanityTest", func(t *testing.T) { e := ptesting.NewEnvironment(t) defer func() { if !t.Failed() { e.DeleteEnvironment() } }() integration.CreateBasicPulumiRepo(e) e.RunCommand("pulumi", "stack", "init", "--local", "foo") stacks, current := integration.GetStacks(e) assert.Equal(t, 1, len(stacks)) assert.NotNil(t, current) if current == nil { t.Logf("stacks: %v, current: %v", stacks, current) t.Fatalf("No current stack?") } assert.Equal(t, "foo", *current) assert.Contains(t, stacks, "foo") e.RunCommand("pulumi", "stack", "rm", "foo", "--yes") stacks, _ = integration.GetStacks(e) assert.Equal(t, 0, len(stacks)) }) t.Run("StackSelect", func(t *testing.T) { e := ptesting.NewEnvironment(t) defer func() { if !t.Failed() { e.DeleteEnvironment() } }() integration.CreateBasicPulumiRepo(e) e.RunCommand("pulumi", "stack", "init", "--local", "blighttown") e.RunCommand("pulumi", "stack", "init", "--local", "majula") e.RunCommand("pulumi", "stack", "init", "--local", "lothric") // Last one created is always selected. stacks, current := integration.GetStacks(e) if current == nil { t.Fatalf("No stack was labeled as current among: %v", stacks) } assert.Equal(t, "lothric", *current) // Select works e.RunCommand("pulumi", "stack", "select", "blighttown") stacks, current = integration.GetStacks(e) if current == nil { t.Fatalf("No stack was labeled as current among: %v", stacks) } assert.Equal(t, "blighttown", *current) // Error out, err := e.RunCommandExpectError("pulumi", "stack", "select", "anor-londo") assert.Empty(t, out) // local: "no stack with name 'anor-londo' found" // cloud: "Stack 'integration-test-59f645ba/pulumi-test/anor-londo' not found" assert.Contains(t, err, "anor-londo") }) t.Run("StackRm", func(t *testing.T) { e := ptesting.NewEnvironment(t) defer func() { if !t.Failed() { e.DeleteEnvironment() } }() integration.CreateBasicPulumiRepo(e) e.RunCommand("pulumi", "stack", "init", "--local", "blighttown") e.RunCommand("pulumi", "stack", "init", "--local", "majula") e.RunCommand("pulumi", "stack", "init", "--local", "lothric") stacks, _ := integration.GetStacks(e) assert.Equal(t, 3, len(stacks)) e.RunCommand("pulumi", "stack", "rm", "majula", "--yes") stacks, _ = integration.GetStacks(e) assert.Equal(t, 2, len(stacks)) assert.Contains(t, stacks, "blighttown") assert.Contains(t, stacks, "lothric") e.RunCommand("pulumi", "stack", "rm", "lothric", "--yes") stacks, _ = integration.GetStacks(e) assert.Equal(t, 1, len(stacks)) assert.Contains(t, stacks, "blighttown") e.RunCommand("pulumi", "stack", "rm", "blighttown", "--yes") stacks, _ = integration.GetStacks(e) assert.Equal(t, 0, len(stacks)) // Error out, err := e.RunCommandExpectError("pulumi", "stack", "rm", "anor-londo", "--yes") assert.Empty(t, out) // local: .pulumi/stacks/pulumi-test/anor-londo.json: no such file or directory // cloud: Stack 'integration-test-59f645ba/pulumi-test/anor-londo' not found assert.Contains(t, err, "anor-londo") }) }