2021-06-22 19:16:25 +00:00
|
|
|
package api
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestCombination(t *testing.T) {
|
|
|
|
tcases := []struct {
|
|
|
|
Name string
|
|
|
|
Required [][]string
|
|
|
|
Active []string
|
|
|
|
Granted bool
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
Name: "no requirement none given",
|
|
|
|
Required: [][]string{},
|
|
|
|
Active: []string{},
|
|
|
|
Granted: true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Name: "empty requirements none given",
|
|
|
|
Required: [][]string{{}},
|
|
|
|
Active: []string{},
|
|
|
|
Granted: true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Name: "no requirement 1 given",
|
|
|
|
Required: [][]string{},
|
|
|
|
Active: []string{"a"},
|
|
|
|
Granted: true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Name: "no requirement some given",
|
|
|
|
Required: [][]string{},
|
|
|
|
Active: []string{"a", "b"},
|
|
|
|
Granted: true,
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
Name: "1 required none given",
|
|
|
|
Required: [][]string{{"a"}},
|
|
|
|
Active: []string{},
|
|
|
|
Granted: false,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Name: "1 required fulfilled",
|
|
|
|
Required: [][]string{{"a"}},
|
|
|
|
Active: []string{"a"},
|
|
|
|
Granted: true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Name: "1 required mismatch",
|
|
|
|
Required: [][]string{{"a"}},
|
|
|
|
Active: []string{"b"},
|
|
|
|
Granted: false,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Name: "2 required none gien",
|
|
|
|
Required: [][]string{{"a", "b"}},
|
|
|
|
Active: []string{},
|
|
|
|
Granted: false,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Name: "2 required other given",
|
|
|
|
Required: [][]string{{"a", "b"}},
|
|
|
|
Active: []string{"c"},
|
|
|
|
Granted: false,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Name: "2 required one given",
|
|
|
|
Required: [][]string{{"a", "b"}},
|
|
|
|
Active: []string{"a"},
|
|
|
|
Granted: false,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Name: "2 required fulfilled",
|
|
|
|
Required: [][]string{{"a", "b"}},
|
|
|
|
Active: []string{"a", "b"},
|
|
|
|
Granted: true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Name: "2 or 2 required first fulfilled",
|
|
|
|
Required: [][]string{{"a", "b"}, {"c", "d"}},
|
|
|
|
Active: []string{"a", "b"},
|
|
|
|
Granted: true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Name: "2 or 2 required second fulfilled",
|
|
|
|
Required: [][]string{{"a", "b"}, {"c", "d"}},
|
|
|
|
Active: []string{"c", "d"},
|
|
|
|
Granted: true,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, tcase := range tcases {
|
|
|
|
t.Run(tcase.Name, func(t *testing.T) {
|
|
|
|
|
|
|
|
auth := Auth{
|
|
|
|
Required: tcase.Required,
|
|
|
|
Active: tcase.Active,
|
|
|
|
}
|
|
|
|
|
|
|
|
// all right
|
|
|
|
if tcase.Granted == auth.Granted() {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if tcase.Granted && !auth.Granted() {
|
|
|
|
t.Fatalf("expected granted authorization")
|
|
|
|
}
|
|
|
|
t.Fatalf("unexpected granted authorization")
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|