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  }