package compatibility import ( "testing" "github.com/stretchr/testify/assert" ) func TestCompare(t *testing.T) { testcases := []struct { title string operation Operation staticVersion string actualVersion string err error expected bool }{ { title: "Test Case 1 - Equal Op (Variant 1)", operation: Equal, staticVersion: "0.21", actualVersion: "0.21", err: nil, expected: true, }, { title: "Test Case 1 - Equal Op (Variant 2)", operation: Equal, staticVersion: "latest", actualVersion: "latest", err: nil, expected: true, }, { title: "Test Case 1 - Equal Op (Variant 3)", operation: Equal, staticVersion: "0.21", actualVersion: "0.19", err: nil, expected: false, }, { title: "Test Case 1 - Equal Op (Variant 4)", operation: Equal, staticVersion: "", actualVersion: "0.19", err: ErrStaticVersionRequired, expected: false, }, { title: "Test Case 1 - Equal Op (Variant 4)", operation: Equal, staticVersion: "latest", actualVersion: "", err: ErrActualVersionRequired, expected: false, }, { title: "Test Case 2 - LessThan Op (Variant 1)", operation: LessThan, staticVersion: "latest", actualVersion: "0.20", err: nil, expected: false, }, { title: "Test Case 2 - LessThan Op (Variant 2)", operation: LessThan, staticVersion: "0.19", actualVersion: "0.20", err: nil, expected: true, }, { title: "Test Case 2 - LessThan Op (Variant 3)", operation: LessThan, staticVersion: "0.21", actualVersion: "0.20", err: nil, expected: false, }, { title: "Test Case 2 - LessThan Op (Variant 4)", operation: LessThan, staticVersion: "0.21", actualVersion: "0.21", err: nil, expected: false, }, { title: "Test Case 3 - GreaterThan Op (Variant 1)", operation: GreaterThan, staticVersion: "0.21", actualVersion: "0.20", err: nil, expected: true, }, { title: "Test Case 3 - GreaterThan Op (Variant 2)", operation: GreaterThan, staticVersion: "latest", actualVersion: "0.20", err: nil, expected: true, }, { title: "Test Case 3 - GreaterThan Op (Variant 3)", operation: GreaterThan, staticVersion: "0.20", actualVersion: "latest", err: nil, expected: false, }, { title: "Test Case 3 - GreaterThan Op (Variant 4)", operation: GreaterThan, staticVersion: "0.20", actualVersion: "0.20", err: nil, expected: false, }, { title: "Test Case 4 - LessThanOrEqual Op (Variant 1)", operation: LessThanOrEqual, staticVersion: "latest", actualVersion: "0.20", err: nil, expected: false, }, { title: "Test Case 4 - LessThanOrEqual Op (Variant 2)", operation: LessThanOrEqual, staticVersion: "0.19", actualVersion: "0.20", err: nil, expected: true, }, { title: "Test Case 4 - LessThanOrEqual Op (Variant 3)", operation: LessThanOrEqual, staticVersion: "latest", actualVersion: "latest", err: nil, expected: true, }, { title: "Test Case 4 - LessThanOrEqual Op (Variant 4)", operation: LessThanOrEqual, staticVersion: "0.20", actualVersion: "0.20", err: nil, expected: true, }, { title: "Test Case 4 - LessThanOrEqual Op (Variant 5)", operation: LessThanOrEqual, staticVersion: "0.21", actualVersion: "0.20", err: nil, expected: false, }, { title: "Test Case 5 - GreaterThanOrEqual Op (Variant 1)", operation: GreaterThanOrEqual, staticVersion: "latest", actualVersion: "0.20", err: nil, expected: true, }, { title: "Test Case 5 - GreaterThanOrEqual Op (Variant 1)", operation: GreaterThanOrEqual, staticVersion: "0.19", actualVersion: "0.20", err: nil, expected: false, }, { title: "Test Case 5 - GreaterThanOrEqual Op (Variant 1)", operation: GreaterThanOrEqual, staticVersion: "latest", actualVersion: "latest", err: nil, expected: true, }, { title: "Test Case 5 - GreaterThanOrEqual Op (Variant 1)", operation: GreaterThanOrEqual, staticVersion: "0.20", actualVersion: "0.20", err: nil, expected: true, }, { title: "Test Case 5 - GreaterThanOrEqual Op (Variant 1)", operation: GreaterThanOrEqual, staticVersion: "0.21", actualVersion: "0.20", err: nil, expected: true, }, } for _, testcase := range testcases { t.Run(testcase.title, func(t *testing.T) { t.Parallel() res, err := Compare(testcase.operation, testcase.staticVersion, testcase.actualVersion) if err != nil { assert.ErrorIs(t, err, testcase.err) } else { assert.Equal(t, testcase.expected, res) } }) } }