mirror of
https://git.vectorsigma.ru/public/atlantis.git
synced 2026-07-29 19:08:33 +00:00
* Move terraform version listing into Terraform client * Add flag to disable Terraform downloads * Fallback to exact version matching if unable to list TF versions * Add new config option to documentation * Fix and update tests * Fix check-lint errors * Change option name * Remove obsolete commented code * Migrate version detection logic into terraform client * Improve consistency in new function signatures & log statements * Test requests before calling terraform-switch, to prevent unnecessary crashes * Fix broken tests * Silence gosec error * Close response body
110 lines
3.6 KiB
Go
110 lines
3.6 KiB
Go
package events_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
. "github.com/petergtz/pegomock"
|
|
"github.com/runatlantis/atlantis/server/core/config/valid"
|
|
terraform_mocks "github.com/runatlantis/atlantis/server/core/terraform/mocks"
|
|
"github.com/runatlantis/atlantis/server/events"
|
|
"github.com/runatlantis/atlantis/server/events/command"
|
|
"github.com/runatlantis/atlantis/server/events/mocks"
|
|
"github.com/runatlantis/atlantis/server/events/models"
|
|
"github.com/runatlantis/atlantis/server/logging"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestProjectCommandContextBuilder_PullStatus(t *testing.T) {
|
|
|
|
mockCommentBuilder := mocks.NewMockCommentBuilder()
|
|
subject := events.DefaultProjectCommandContextBuilder{
|
|
CommentBuilder: mockCommentBuilder,
|
|
}
|
|
|
|
projRepoRelDir := "dir1"
|
|
projWorkspace := "default"
|
|
projName := "project1"
|
|
|
|
projCfg := valid.MergedProjectCfg{
|
|
RepoRelDir: projRepoRelDir,
|
|
Workspace: projWorkspace,
|
|
Name: projName,
|
|
Workflow: valid.Workflow{
|
|
Name: valid.DefaultWorkflowName,
|
|
Apply: valid.DefaultApplyStage,
|
|
},
|
|
}
|
|
|
|
pullStatus := &models.PullStatus{
|
|
Projects: []models.ProjectStatus{},
|
|
}
|
|
|
|
commandCtx := &command.Context{
|
|
Log: logging.NewNoopLogger(t),
|
|
PullStatus: pullStatus,
|
|
}
|
|
|
|
expectedApplyCmt := "Apply Comment"
|
|
expectedPlanCmt := "Plan Comment"
|
|
|
|
terraformClient := terraform_mocks.NewMockClient()
|
|
When(terraformClient.ListAvailableVersions(commandCtx.Log))
|
|
|
|
t.Run("with project name defined", func(t *testing.T) {
|
|
When(mockCommentBuilder.BuildPlanComment(projRepoRelDir, projWorkspace, projName, []string{})).ThenReturn(expectedPlanCmt)
|
|
When(mockCommentBuilder.BuildApplyComment(projRepoRelDir, projWorkspace, projName, false)).ThenReturn(expectedApplyCmt)
|
|
|
|
pullStatus.Projects = []models.ProjectStatus{
|
|
{
|
|
Status: models.ErroredPolicyCheckStatus,
|
|
ProjectName: "project1",
|
|
RepoRelDir: "dir1",
|
|
},
|
|
}
|
|
|
|
result := subject.BuildProjectContext(commandCtx, command.Plan, projCfg, []string{}, "some/dir", false, false, false, false, terraformClient)
|
|
assert.Equal(t, models.ErroredPolicyCheckStatus, result[0].ProjectPlanStatus)
|
|
})
|
|
|
|
t.Run("with no project name defined", func(t *testing.T) {
|
|
projCfg.Name = ""
|
|
When(mockCommentBuilder.BuildPlanComment(projRepoRelDir, projWorkspace, "", []string{})).ThenReturn(expectedPlanCmt)
|
|
When(mockCommentBuilder.BuildApplyComment(projRepoRelDir, projWorkspace, "", false)).ThenReturn(expectedApplyCmt)
|
|
pullStatus.Projects = []models.ProjectStatus{
|
|
{
|
|
Status: models.ErroredPlanStatus,
|
|
RepoRelDir: "dir2",
|
|
},
|
|
{
|
|
Status: models.ErroredPolicyCheckStatus,
|
|
RepoRelDir: "dir1",
|
|
},
|
|
}
|
|
|
|
result := subject.BuildProjectContext(commandCtx, command.Plan, projCfg, []string{}, "some/dir", false, false, false, false, terraformClient)
|
|
|
|
assert.Equal(t, models.ErroredPolicyCheckStatus, result[0].ProjectPlanStatus)
|
|
})
|
|
|
|
t.Run("when ParallelApply is set to true", func(t *testing.T) {
|
|
projCfg.Name = "Apply Comment"
|
|
When(mockCommentBuilder.BuildPlanComment(projRepoRelDir, projWorkspace, "", []string{})).ThenReturn(expectedPlanCmt)
|
|
When(mockCommentBuilder.BuildApplyComment(projRepoRelDir, projWorkspace, "", false)).ThenReturn(expectedApplyCmt)
|
|
pullStatus.Projects = []models.ProjectStatus{
|
|
{
|
|
Status: models.ErroredPlanStatus,
|
|
RepoRelDir: "dir2",
|
|
},
|
|
{
|
|
Status: models.ErroredPolicyCheckStatus,
|
|
RepoRelDir: "dir1",
|
|
},
|
|
}
|
|
|
|
result := subject.BuildProjectContext(commandCtx, command.Plan, projCfg, []string{}, "some/dir", false, true, false, false, terraformClient)
|
|
|
|
assert.True(t, result[0].ParallelApplyEnabled)
|
|
assert.False(t, result[0].ParallelPlanEnabled)
|
|
})
|
|
}
|