github.com/openfga/openfga@v1.5.4-rc1/internal/test/listusers/listusers.go (about) 1 package listuserstest 2 3 import ( 4 "fmt" 5 "strings" 6 7 openfgav1 "github.com/openfga/api/proto/openfga/v1" 8 "google.golang.org/protobuf/types/known/structpb" 9 10 "github.com/openfga/openfga/pkg/tuple" 11 ) 12 13 type Assertion struct { 14 Request *TestListUsersRequest 15 ContextualTuples []*openfgav1.TupleKey `json:"contextualTuples"` 16 Context *structpb.Struct 17 Expectation []string 18 ErrorCode int `json:"errorCode"` // If ErrorCode is non-zero then we expect that the ListUsers call failed. 19 } 20 21 type TestListUsersRequest struct { 22 Object string 23 Relation string 24 Filters []string `json:"filters"` 25 } 26 27 func (t *TestListUsersRequest) ToString() string { 28 return fmt.Sprintf("object=%s, relation=%s, filters=%v", t.Object, t.Relation, strings.Join(t.Filters, ", ")) 29 } 30 31 func FromProtoResponse(r *openfgav1.ListUsersResponse) []string { 32 var users []string 33 for _, user := range r.GetUsers() { 34 users = append(users, tuple.UserProtoToString(user)) 35 } 36 return users 37 } 38 39 func (t *TestListUsersRequest) ToProtoRequest() *openfgav1.ListUsersRequest { 40 var protoFilters []*openfgav1.UserTypeFilter 41 42 for _, filterString := range t.Filters { 43 protoFilters = append(protoFilters, toProtoFilter(filterString)) 44 } 45 46 objectType, objectID := tuple.SplitObject(t.Object) 47 return &openfgav1.ListUsersRequest{ 48 Object: &openfgav1.Object{ 49 Type: objectType, 50 Id: objectID, 51 }, 52 Relation: t.Relation, 53 UserFilters: protoFilters, 54 } 55 } 56 57 func toProtoFilter(user string) *openfgav1.UserTypeFilter { 58 userObjType, userRel := tuple.SplitObjectRelation(user) 59 60 sourceUserRef := openfgav1.UserTypeFilter{ 61 Type: userObjType, 62 } 63 64 if userRel != "" { 65 sourceUserRef.Relation = userRel 66 } 67 return &sourceUserRef 68 }