diff --git a/internal/permissions/validation_test.go b/internal/permissions/validation_test.go new file mode 100644 index 0000000..d034961 --- /dev/null +++ b/internal/permissions/validation_test.go @@ -0,0 +1,77 @@ +package permissions + +import ( + "net/http" + "testing" + + "github.com/stretchr/testify/assert" +) + +type test_alwaysTrue struct { + PermissionGroup +} + +func (t test_alwaysTrue) IsAuthorized(r *http.Request) bool { + return true +} + +type test_alwaysFalse struct { + PermissionGroup +} + +func (t test_alwaysFalse) IsAuthorized(r *http.Request) bool { + return false +} + +func TestValidateAllOf(t *testing.T) { + t.Run("should return true in the trivial case without any permissions", func(t *testing.T) { + groups := []PermissionGroup{} + allOf := AllOf{Groups: groups} + assert.True(t, allOf.IsAuthorized(nil)) + }) + t.Run("should return true if all groups return true", func(t *testing.T) { + groups := []PermissionGroup{ + test_alwaysTrue{}, + test_alwaysTrue{}, + test_alwaysTrue{}, + } + allOf := AllOf{Groups: groups} + assert.True(t, allOf.IsAuthorized(nil)) + }) + t.Run("should return false if any group returns false", func(t *testing.T) { + groups := []PermissionGroup{ + test_alwaysTrue{}, + test_alwaysFalse{}, + test_alwaysTrue{}, + } + allOf := AllOf{Groups: groups} + assert.False(t, allOf.IsAuthorized(nil)) + }) +} + +func TestValidateAnyOf(t *testing.T) { + t.Run("should return true in the trivial case without any permissions", func(t *testing.T) { + groups := []PermissionGroup{} + anyOf := AnyOf{Groups: groups} + assert.True(t, anyOf.IsAuthorized(nil)) + }) + t.Run("should return false if all groups return false", func(t *testing.T) { + groups := []PermissionGroup{ + test_alwaysFalse{}, + test_alwaysFalse{}, + test_alwaysFalse{}, + } + anyOf := AnyOf{Groups: groups} + assert.False(t, anyOf.IsAuthorized(nil)) + }) + t.Run("should return true if any group returns true", func(t *testing.T) { + groups := []PermissionGroup{ + test_alwaysFalse{}, + test_alwaysTrue{}, + test_alwaysFalse{}, + } + anyOf := AnyOf{Groups: groups} + assert.True(t, anyOf.IsAuthorized(nil)) + }) + +} diff --git a/internal/router/errors_test.go b/internal/router/errors_test.go new file mode 100644 index 0000000..35178df --- /dev/null +++ b/internal/router/errors_test.go @@ -0,0 +1,20 @@ +package router + +import ( + "net/http" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestHandleAPIError(t *testing.T) { + mockController := func(w http.ResponseWriter, r *http.Request) error { + return nil + } + t.Run("Should return a http.HandlerFunc", func(t *testing.T) { + var handler interface{} = handleAPIError(mockController) + assert.NotNil(t, handler, "Should not be nil") + _, ok := handler.(http.HandlerFunc) + assert.True(t, ok, "Should be a http.HandlerFunc") + }) +}