Files
atlantis/server/events/command/project_context_test.go
Ross Strickland 684f2fa7e0 feat(policies): Add granular policy_sets (#3086)
* Initial work.

* Periodic push.

* Fmt and start adding args to approve_policies cmd.

* keep funcs for now.

* Periodic push.

* Periodic push.

* fmt.

* Move approve policies logic to project_command_runner.

* update some tests

* More test fixes.

* update more tests. fix som logic.

* more tests. add additional info to common data for custom templates.

* fix apply with policies bug. update more tests/fmt

* file perms

* fix error parsing for conftest results.

* Update more tests and linting.

* update documentation.

* Address no-fail case. Address comments.

* Forgot changes.

* fix markdown renderer

* Fix policy fail logic. remove uneeded tmpl var

* targeted policy approvals fix

* Address PR comments.

* empty commit to trigger build

---------

Co-authored-by: PePe Amengual <jose.amengual@gmail.com>
Co-authored-by: rkstrickland <ross.strickland@instacart.com>
Co-authored-by: Dylan Page <dylan.page@autodesk.com>
2023-04-20 21:53:46 -04:00

162 lines
3.3 KiB
Go

package command_test
import (
"testing"
"github.com/runatlantis/atlantis/server/core/config/valid"
"github.com/runatlantis/atlantis/server/events/command"
"github.com/runatlantis/atlantis/server/events/models"
. "github.com/runatlantis/atlantis/testing"
)
// Test PolicyCleared and PolicySummary
func TestPolicyCheckResults_PolicyFuncs(t *testing.T) {
cases := []struct {
description string
policySetsConfig valid.PolicySets
policySetStatus []models.PolicySetStatus
policyClearedExp bool
}{
{
description: "single policy set, not passed",
policySetsConfig: valid.PolicySets{
PolicySets: []valid.PolicySet{
{
Name: "policy1",
ApproveCount: 1,
},
},
},
policySetStatus: []models.PolicySetStatus{
{
PolicySetName: "policy1",
Passed: false,
Approvals: 0,
},
},
policyClearedExp: false,
},
{
description: "single policy set, passed",
policySetsConfig: valid.PolicySets{
PolicySets: []valid.PolicySet{
{
Name: "policy1",
ApproveCount: 1,
},
},
},
policySetStatus: []models.PolicySetStatus{
{
PolicySetName: "policy1",
Passed: true,
Approvals: 0,
},
},
policyClearedExp: true,
},
{
description: "single policy set, fully approved",
policySetsConfig: valid.PolicySets{
PolicySets: []valid.PolicySet{
{
Name: "policy1",
ApproveCount: 1,
},
},
},
policySetStatus: []models.PolicySetStatus{
{
PolicySetName: "policy1",
Passed: false,
Approvals: 1,
},
},
policyClearedExp: true,
},
{
description: "multiple policy sets, different states.",
policySetsConfig: valid.PolicySets{
PolicySets: []valid.PolicySet{
{
Name: "policy1",
ApproveCount: 2,
},
{
Name: "policy2",
ApproveCount: 1,
},
{
Name: "policy3",
ApproveCount: 1,
},
},
},
policySetStatus: []models.PolicySetStatus{
{
PolicySetName: "policy1",
Passed: false,
Approvals: 0,
},
{
PolicySetName: "policy2",
Passed: false,
Approvals: 1,
},
{
PolicySetName: "policy3",
Passed: true,
Approvals: 0,
},
},
policyClearedExp: false,
},
{
description: "multiple policy sets, all cleared.",
policySetsConfig: valid.PolicySets{
PolicySets: []valid.PolicySet{
{
Name: "policy1",
ApproveCount: 2,
},
{
Name: "policy2",
ApproveCount: 1,
},
{
Name: "policy3",
ApproveCount: 1,
},
},
},
policySetStatus: []models.PolicySetStatus{
{
PolicySetName: "policy1",
Passed: false,
Approvals: 2,
},
{
PolicySetName: "policy2",
Passed: false,
Approvals: 1,
},
{
PolicySetName: "policy3",
Passed: true,
Approvals: 0,
},
},
policyClearedExp: true,
},
}
for _, c := range cases {
t.Run(c.description, func(t *testing.T) {
pcs := command.ProjectContext{
ProjectPolicyStatus: c.policySetStatus,
PolicySets: c.policySetsConfig,
}
Equals(t, c.policyClearedExp, pcs.PolicyCleared())
})
}
}