Files
atlantis/server/events/command/project_result_test.go
Sarvar Muminov 90e92e3a13 chore: move CommandContext and CommandResult to models (#193) (#2093)
* Moved CommandContext and CommandResult to models (#193)

* Moved CommandContext and CommandResult to models

* move from models to command

rename CommandContext -> Context
rename CommandResult -> Result

* moved command related helpers into command package

* move ProjectCommandContext and ProjectResult to command/project package

* move project command context and project result

* revert unrelated code

* move tests

* fix left over

* fix linting

* fix tests

* remove unused import

* fix project context dependencies

* fix depenedecies

* fix typo
2022-03-21 10:36:13 -07:00

228 lines
5.0 KiB
Go

package command_test
import (
"errors"
"testing"
"github.com/runatlantis/atlantis/server/events/command"
"github.com/runatlantis/atlantis/server/events/models"
. "github.com/runatlantis/atlantis/testing"
)
func TestProjectResult_IsSuccessful(t *testing.T) {
cases := map[string]struct {
pr command.ProjectResult
exp bool
}{
"plan success": {
command.ProjectResult{
PlanSuccess: &models.PlanSuccess{},
},
true,
},
"policy_check success": {
command.ProjectResult{
PolicyCheckSuccess: &models.PolicyCheckSuccess{},
},
true,
},
"apply success": {
command.ProjectResult{
ApplySuccess: "success",
},
true,
},
"failure": {
command.ProjectResult{
Failure: "failure",
},
false,
},
"error": {
command.ProjectResult{
Error: errors.New("error"),
},
false,
},
}
for name, c := range cases {
t.Run(name, func(t *testing.T) {
Equals(t, c.exp, c.pr.IsSuccessful())
})
}
}
func TestProjectResult_PlanStatus(t *testing.T) {
cases := []struct {
p command.ProjectResult
expStatus models.ProjectPlanStatus
}{
{
p: command.ProjectResult{
Command: command.Plan,
Error: errors.New("err"),
},
expStatus: models.ErroredPlanStatus,
},
{
p: command.ProjectResult{
Command: command.Plan,
Failure: "failure",
},
expStatus: models.ErroredPlanStatus,
},
{
p: command.ProjectResult{
Command: command.Plan,
PlanSuccess: &models.PlanSuccess{},
},
expStatus: models.PlannedPlanStatus,
},
{
p: command.ProjectResult{
Command: command.Apply,
Error: errors.New("err"),
},
expStatus: models.ErroredApplyStatus,
},
{
p: command.ProjectResult{
Command: command.Apply,
Failure: "failure",
},
expStatus: models.ErroredApplyStatus,
},
{
p: command.ProjectResult{
Command: command.Apply,
ApplySuccess: "success",
},
expStatus: models.AppliedPlanStatus,
},
{
p: command.ProjectResult{
Command: command.PolicyCheck,
PolicyCheckSuccess: &models.PolicyCheckSuccess{},
},
expStatus: models.PassedPolicyCheckStatus,
},
{
p: command.ProjectResult{
Command: command.PolicyCheck,
Failure: "failure",
},
expStatus: models.ErroredPolicyCheckStatus,
},
{
p: command.ProjectResult{
Command: command.ApprovePolicies,
PolicyCheckSuccess: &models.PolicyCheckSuccess{},
},
expStatus: models.PassedPolicyCheckStatus,
},
{
p: command.ProjectResult{
Command: command.ApprovePolicies,
Failure: "failure",
},
expStatus: models.ErroredPolicyCheckStatus,
},
}
for _, c := range cases {
t.Run(c.expStatus.String(), func(t *testing.T) {
Equals(t, c.expStatus, c.p.PlanStatus())
})
}
}
func TestPlanSuccess_Summary(t *testing.T) {
cases := []struct {
p command.ProjectResult
expResult string
}{
{
p: command.ProjectResult{
PlanSuccess: &models.PlanSuccess{
TerraformOutput: `
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
- destroy
Terraform will perform the following actions:
- null_resource.hi[1]
Plan: 0 to add, 0 to change, 1 to destroy.`,
},
},
expResult: "Plan: 0 to add, 0 to change, 1 to destroy.",
},
{
p: command.ProjectResult{
PlanSuccess: &models.PlanSuccess{
TerraformOutput: `
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
No changes. Infrastructure is up-to-date.`,
},
},
expResult: "No changes. Infrastructure is up-to-date.",
},
{
p: command.ProjectResult{
PlanSuccess: &models.PlanSuccess{
TerraformOutput: `
Note: Objects have changed outside of Terraform
Terraform detected the following changes made outside of Terraform since the
last "terraform apply":
No changes. Your infrastructure matches the configuration.`,
},
},
expResult: "\n**Note: Objects have changed outside of Terraform**\nNo changes. Your infrastructure matches the configuration.",
},
{
p: command.ProjectResult{
PlanSuccess: &models.PlanSuccess{
TerraformOutput: `
Note: Objects have changed outside of Terraform
Terraform detected the following changes made outside of Terraform since the
last "terraform apply":
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
- destroy
Terraform will perform the following actions:
- null_resource.hi[1]
Plan: 0 to add, 0 to change, 1 to destroy.`,
},
},
expResult: "\n**Note: Objects have changed outside of Terraform**\nPlan: 0 to add, 0 to change, 1 to destroy.",
},
{
p: command.ProjectResult{
PlanSuccess: &models.PlanSuccess{
TerraformOutput: `No match, expect empty`,
},
},
expResult: "",
},
}
for _, c := range cases {
t.Run(c.expResult, func(t *testing.T) {
Equals(t, c.expResult, c.p.PlanSuccess.Summary())
})
}
}