diff --git a/pkg/go/graph/weighted_graph_builder_test.go b/pkg/go/graph/weighted_graph_builder_test.go index 7f6d3949..10b75bd5 100644 --- a/pkg/go/graph/weighted_graph_builder_test.go +++ b/pkg/go/graph/weighted_graph_builder_test.go @@ -4,6 +4,7 @@ import ( "slices" "testing" + openfgav1 "github.com/openfga/api/proto/openfga/v1" "github.com/stretchr/testify/require" language "github.com/openfga/language/pkg/go/transformer" @@ -1930,6 +1931,68 @@ func TestGraphConstructionIntersection(t *testing.T) { _, err := wgb.Build(authorizationModel) require.ErrorContains(t, err, "invalid model: not all paths return the same type for the node document#viewer:intersection:0") }) + t.Run("empty_intersection", func(t *testing.T) { + t.Parallel() + authorizationModel := &openfgav1.AuthorizationModel{ + SchemaVersion: "1.1", + TypeDefinitions: []*openfgav1.TypeDefinition{ + { + Type: "user", + }, + { + Type: "document", + Relations: map[string]*openfgav1.Userset{ + "viewer": { + Userset: &openfgav1.Userset_Intersection{ + Intersection: &openfgav1.Usersets{ + Child: []*openfgav1.Userset{}, + }, + }, + }, + }, + Metadata: &openfgav1.Metadata{ + Relations: map[string]*openfgav1.RelationMetadata{ + "viewer": {}, + }, + }, + }, + }, + } + wgb := NewWeightedAuthorizationModelGraphBuilder() + _, err := wgb.Build(authorizationModel) + require.Error(t, err) + }) + t.Run("empty_union", func(t *testing.T) { + t.Parallel() + authorizationModel := &openfgav1.AuthorizationModel{ + SchemaVersion: "1.1", + TypeDefinitions: []*openfgav1.TypeDefinition{ + { + Type: "user", + }, + { + Type: "document", + Relations: map[string]*openfgav1.Userset{ + "viewer": { + Userset: &openfgav1.Userset_Union{ + Union: &openfgav1.Usersets{ + Child: []*openfgav1.Userset{}, + }, + }, + }, + }, + Metadata: &openfgav1.Metadata{ + Relations: map[string]*openfgav1.RelationMetadata{ + "viewer": {}, + }, + }, + }, + }, + } + wgb := NewWeightedAuthorizationModelGraphBuilder() + _, err := wgb.Build(authorizationModel) + require.Error(t, err) + }) }) t.Run("multiple_intersections", func(t *testing.T) {