forked from gemaraproj/go-gemara
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcontrol_evaluation_test.go
More file actions
127 lines (118 loc) · 3.74 KB
/
control_evaluation_test.go
File metadata and controls
127 lines (118 loc) · 3.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package gemara
import (
"testing"
)
var controlEvaluationTestData = []struct {
testName string
control *ControlEvaluation
failBeforePass bool
expectedResult Result
expectedCorrupted bool
}{
{
testName: "ControlEvaluation with no AssessmentLogs",
expectedResult: NeedsReview,
expectedCorrupted: false,
control: &ControlEvaluation{
AssessmentLogs: []*AssessmentLog{},
},
},
{
testName: "ControlEvaluation with one passing AssessmentLog",
expectedResult: Passed,
expectedCorrupted: false,
control: &ControlEvaluation{
AssessmentLogs: []*AssessmentLog{passingAssessmentPtr()},
},
},
{
testName: "ControlEvaluation with one failing AssessmentLog",
expectedResult: Failed,
expectedCorrupted: false,
control: &ControlEvaluation{
AssessmentLogs: []*AssessmentLog{failingAssessmentPtr()},
},
},
{
testName: "ControlEvaluation with one NeedsReview AssessmentLog",
expectedResult: NeedsReview,
expectedCorrupted: false,
control: &ControlEvaluation{
AssessmentLogs: []*AssessmentLog{needsReviewAssessmentPtr()},
},
},
{
testName: "ControlEvaluation with one Unknown AssessmentLog",
expectedResult: Unknown,
expectedCorrupted: false,
control: &ControlEvaluation{
AssessmentLogs: []*AssessmentLog{unknownAssessmentPtr()},
},
},
{
testName: "ControlEvaluation with first NeedsReview and then Unknown AssessmentLog",
expectedResult: Unknown,
expectedCorrupted: false,
control: &ControlEvaluation{
AssessmentLogs: []*AssessmentLog{
needsReviewAssessmentPtr(),
unknownAssessmentPtr(),
},
},
},
{
testName: "ControlEvaluation with first Unknown and then NeedsReview AssessmentLog",
expectedResult: Unknown,
expectedCorrupted: false,
control: &ControlEvaluation{
AssessmentLogs: []*AssessmentLog{
unknownAssessmentPtr(),
needsReviewAssessmentPtr(),
},
},
},
{
testName: "ControlEvaluation with first Failed and then NeedsReview AssessmentLog",
expectedResult: Failed,
expectedCorrupted: false,
control: &ControlEvaluation{
AssessmentLogs: []*AssessmentLog{
failingAssessmentPtr(),
needsReviewAssessmentPtr(),
},
},
},
{
testName: "ControlEvaluation with first Failing and then Passing AssessmentLog",
expectedResult: Failed,
failBeforePass: true,
expectedCorrupted: false,
control: &ControlEvaluation{
AssessmentLogs: []*AssessmentLog{
failingAssessmentPtr(),
passingAssessmentPtr(),
},
},
},
}
// TestEvaluate runs a series of tests on the ControlEvaluation.Evaluate method
func TestEvaluate(t *testing.T) {
for _, test := range controlEvaluationTestData {
t.Run(test.testName, func(t *testing.T) {
c := test.control // copy the control to avoid duplication in the next test
c.Evaluate(nil, testingApplicability)
if c.Result != test.expectedResult {
t.Errorf("Expected Result to be %v, but it was %v", test.expectedResult, c.Result)
}
})
}
}
func TestAddAssesment(t *testing.T) {
controlEvaluationTestData[0].control.AddAssessment("test", "test", []string{}, []AssessmentStep{})
if controlEvaluationTestData[0].control.Result != Failed {
t.Errorf("Expected Result to be Failed, but it was %v", controlEvaluationTestData[0].control.Result)
}
if controlEvaluationTestData[0].control.Message != "expected all AssessmentLog fields to have a value, but got: requirementId=len(4), description=len=(4), applicability=len(0), steps=len(0)" {
t.Errorf("Expected error message to be 'expected all AssessmentLog fields to have a value, but got: requirementId=len(4), description=len=(4), applicability=len(0), steps=len(0)', but instead it was '%v'", controlEvaluationTestData[0].control.Message)
}
}