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  }