179 lines
5.8 KiB
Go
179 lines
5.8 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
tfe "github.com/hashicorp/go-tfe"
|
|
tfversion "github.com/hashicorp/terraform/version"
|
|
)
|
|
|
|
func Test_terraform_apply_autoApprove(t *testing.T) {
|
|
t.Parallel()
|
|
skipIfMissingEnvVar(t)
|
|
skipWithoutRemoteTerraformVersion(t)
|
|
|
|
ctx := context.Background()
|
|
|
|
cases := testCases{
|
|
"workspace manual apply, terraform apply without auto-approve, expect prompt": {
|
|
operations: []operationSets{
|
|
{
|
|
prep: func(t *testing.T, orgName, dir string) {
|
|
wsName := "app"
|
|
_ = createWorkspace(t, orgName, tfe.WorkspaceCreateOptions{
|
|
Name: tfe.String(wsName),
|
|
TerraformVersion: tfe.String(tfversion.String()),
|
|
AutoApply: tfe.Bool(false),
|
|
})
|
|
tfBlock := terraformConfigCloudBackendName(orgName, wsName)
|
|
writeMainTF(t, tfBlock, dir)
|
|
},
|
|
commands: []tfCommand{
|
|
{
|
|
command: []string{"init"},
|
|
expectedCmdOutput: `Terraform Cloud has been successfully initialized!`,
|
|
},
|
|
{
|
|
command: []string{"apply"},
|
|
expectedCmdOutput: `Do you want to perform these actions in workspace "app"?`,
|
|
userInput: []string{"yes"},
|
|
postInputOutput: []string{`Apply complete!`},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
validations: func(t *testing.T, orgName string) {
|
|
workspace, err := tfeClient.Workspaces.ReadWithOptions(ctx, orgName, "app", &tfe.WorkspaceReadOptions{Include: "current_run"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if workspace.CurrentRun == nil {
|
|
t.Fatal("Expected workspace to have run, but got nil")
|
|
}
|
|
if workspace.CurrentRun.Status != tfe.RunApplied {
|
|
t.Fatalf("Expected run status to be `applied`, but is %s", workspace.CurrentRun.Status)
|
|
}
|
|
},
|
|
},
|
|
"workspace auto apply, terraform apply without auto-approve, expect prompt": {
|
|
operations: []operationSets{
|
|
{
|
|
prep: func(t *testing.T, orgName, dir string) {
|
|
wsName := "app"
|
|
_ = createWorkspace(t, orgName, tfe.WorkspaceCreateOptions{
|
|
Name: tfe.String(wsName),
|
|
TerraformVersion: tfe.String(tfversion.String()),
|
|
AutoApply: tfe.Bool(true),
|
|
})
|
|
tfBlock := terraformConfigCloudBackendName(orgName, wsName)
|
|
writeMainTF(t, tfBlock, dir)
|
|
},
|
|
commands: []tfCommand{
|
|
{
|
|
command: []string{"init"},
|
|
expectedCmdOutput: `Terraform Cloud has been successfully initialized!`,
|
|
},
|
|
{
|
|
command: []string{"apply"},
|
|
expectedCmdOutput: `Do you want to perform these actions in workspace "app"?`,
|
|
userInput: []string{"yes"},
|
|
postInputOutput: []string{`Apply complete!`},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
validations: func(t *testing.T, orgName string) {
|
|
workspace, err := tfeClient.Workspaces.ReadWithOptions(ctx, orgName, "app", &tfe.WorkspaceReadOptions{Include: "current_run"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if workspace.CurrentRun == nil {
|
|
t.Fatal("Expected workspace to have run, but got nil")
|
|
}
|
|
if workspace.CurrentRun.Status != tfe.RunApplied {
|
|
t.Fatalf("Expected run status to be `applied`, but is %s", workspace.CurrentRun.Status)
|
|
}
|
|
},
|
|
},
|
|
"workspace manual apply, terraform apply with auto-approve, no prompt": {
|
|
operations: []operationSets{
|
|
{
|
|
prep: func(t *testing.T, orgName, dir string) {
|
|
wsName := "app"
|
|
_ = createWorkspace(t, orgName, tfe.WorkspaceCreateOptions{
|
|
Name: tfe.String(wsName),
|
|
TerraformVersion: tfe.String(tfversion.String()),
|
|
AutoApply: tfe.Bool(false),
|
|
})
|
|
tfBlock := terraformConfigCloudBackendName(orgName, wsName)
|
|
writeMainTF(t, tfBlock, dir)
|
|
},
|
|
commands: []tfCommand{
|
|
{
|
|
command: []string{"init"},
|
|
expectedCmdOutput: `Terraform Cloud has been successfully initialized!`,
|
|
},
|
|
{
|
|
command: []string{"apply", "-auto-approve"},
|
|
expectedCmdOutput: `Apply complete!`,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
validations: func(t *testing.T, orgName string) {
|
|
workspace, err := tfeClient.Workspaces.ReadWithOptions(ctx, orgName, "app", &tfe.WorkspaceReadOptions{Include: "current_run"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if workspace.CurrentRun == nil {
|
|
t.Fatal("Expected workspace to have run, but got nil")
|
|
}
|
|
if workspace.CurrentRun.Status != tfe.RunApplied {
|
|
t.Fatalf("Expected run status to be `applied`, but is %s", workspace.CurrentRun.Status)
|
|
}
|
|
},
|
|
},
|
|
"workspace auto apply, terraform apply with auto-approve, no prompt": {
|
|
operations: []operationSets{
|
|
{
|
|
prep: func(t *testing.T, orgName, dir string) {
|
|
wsName := "app"
|
|
_ = createWorkspace(t, orgName, tfe.WorkspaceCreateOptions{
|
|
Name: tfe.String(wsName),
|
|
TerraformVersion: tfe.String(tfversion.String()),
|
|
AutoApply: tfe.Bool(true),
|
|
})
|
|
tfBlock := terraformConfigCloudBackendName(orgName, wsName)
|
|
writeMainTF(t, tfBlock, dir)
|
|
},
|
|
commands: []tfCommand{
|
|
{
|
|
command: []string{"init"},
|
|
expectedCmdOutput: `Terraform Cloud has been successfully initialized!`,
|
|
},
|
|
{
|
|
command: []string{"apply", "-auto-approve"},
|
|
expectedCmdOutput: `Apply complete!`,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
validations: func(t *testing.T, orgName string) {
|
|
workspace, err := tfeClient.Workspaces.ReadWithOptions(ctx, orgName, "app", &tfe.WorkspaceReadOptions{Include: "current_run"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if workspace.CurrentRun == nil {
|
|
t.Fatal("Expected workspace to have run, but got nil")
|
|
}
|
|
if workspace.CurrentRun.Status != tfe.RunApplied {
|
|
t.Fatalf("Expected run status to be `applied`, but is %s", workspace.CurrentRun.Status)
|
|
}
|
|
},
|
|
},
|
|
}
|
|
|
|
testRunner(t, cases, 1)
|
|
}
|