package groups_test

import (
	"testing"

	"github.com/stretchr/testify/assert"

	"github.com/dexidp/dex/pkg/groups"
)

func TestFilter(t *testing.T) {
	cases := map[string]struct {
		given, required, expected []string
	}{
		"nothing given":                 {given: []string{}, required: []string{"ops"}, expected: []string{}},
		"exactly one match":             {given: []string{"foo"}, required: []string{"foo"}, expected: []string{"foo"}},
		"no group of the required ones": {given: []string{"foo", "bar"}, required: []string{"baz"}, expected: []string{}},
		"subset matching":               {given: []string{"foo", "bar", "baz"}, required: []string{"bar", "baz"}, expected: []string{"bar", "baz"}},
	}
	for name, tc := range cases {
		t.Run(name, func(t *testing.T) {
			actual := groups.Filter(tc.given, tc.required)
			assert.ElementsMatch(t, tc.expected, actual)
		})
	}
}