github.com/openfga/openfga@v1.5.4-rc1/pkg/server/test/list_stores.go (about) 1 package test 2 3 import ( 4 "context" 5 "testing" 6 7 openfgav1 "github.com/openfga/api/proto/openfga/v1" 8 "github.com/stretchr/testify/require" 9 "google.golang.org/protobuf/types/known/wrapperspb" 10 11 "github.com/openfga/openfga/pkg/server/commands" 12 "github.com/openfga/openfga/pkg/storage" 13 "github.com/openfga/openfga/pkg/testutils" 14 ) 15 16 func TestListStores(t *testing.T, datastore storage.OpenFGADatastore) { 17 ctx := context.Background() 18 19 // clean up all stores from other tests 20 getStoresQuery := commands.NewListStoresQuery(datastore) 21 deleteCmd := commands.NewDeleteStoreCommand(datastore) 22 deleteContinuationToken := "" 23 for ok := true; ok; ok = deleteContinuationToken != "" { 24 listStoresResponse, err := getStoresQuery.Execute(ctx, &openfgav1.ListStoresRequest{ 25 ContinuationToken: deleteContinuationToken, 26 }) 27 require.NoError(t, err) 28 for _, store := range listStoresResponse.GetStores() { 29 _, err := deleteCmd.Execute(ctx, &openfgav1.DeleteStoreRequest{ 30 StoreId: store.GetId(), 31 }) 32 require.NoError(t, err) 33 } 34 deleteContinuationToken = listStoresResponse.GetContinuationToken() 35 } 36 37 // ensure there are actually no stores 38 listStoresResponse, actualError := getStoresQuery.Execute(ctx, &openfgav1.ListStoresRequest{}) 39 require.NoError(t, actualError) 40 require.Empty(t, listStoresResponse.GetStores()) 41 42 // create two stores 43 createStoreQuery := commands.NewCreateStoreCommand(datastore) 44 firstStoreName := testutils.CreateRandomString(10) 45 _, err := createStoreQuery.Execute(ctx, &openfgav1.CreateStoreRequest{Name: firstStoreName}) 46 require.NoError(t, err, "error creating store 1") 47 48 secondStoreName := testutils.CreateRandomString(10) 49 _, err = createStoreQuery.Execute(ctx, &openfgav1.CreateStoreRequest{Name: secondStoreName}) 50 require.NoError(t, err, "error creating store 2") 51 // first page: 1st store 52 listStoresResponse, actualError = getStoresQuery.Execute(ctx, &openfgav1.ListStoresRequest{ 53 PageSize: wrapperspb.Int32(1), 54 ContinuationToken: "", 55 }) 56 require.NoError(t, actualError) 57 require.Len(t, listStoresResponse.GetStores(), 1) 58 require.Equal(t, firstStoreName, listStoresResponse.GetStores()[0].GetName()) 59 require.NotEmpty(t, listStoresResponse.GetContinuationToken()) 60 61 // first page: 2nd store 62 secondListStoresResponse, actualError := getStoresQuery.Execute(ctx, &openfgav1.ListStoresRequest{ 63 PageSize: wrapperspb.Int32(1), 64 ContinuationToken: listStoresResponse.GetContinuationToken(), 65 }) 66 require.NoError(t, actualError) 67 require.Len(t, secondListStoresResponse.GetStores(), 1) 68 require.Equal(t, secondStoreName, secondListStoresResponse.GetStores()[0].GetName()) 69 // no token <=> no more results 70 require.Empty(t, secondListStoresResponse.GetContinuationToken()) 71 }