github.com/status-im/status-go@v1.1.0/services/permissions/api_test.go (about)

     1  package permissions
     2  
     3  import (
     4  	"context"
     5  	"encoding/json"
     6  	"fmt"
     7  	"sort"
     8  	"testing"
     9  
    10  	"github.com/stretchr/testify/require"
    11  
    12  	"github.com/status-im/status-go/appdatabase"
    13  	"github.com/status-im/status-go/t/helpers"
    14  )
    15  
    16  func setupTestDB(t *testing.T) (*Database, func()) {
    17  	db, cleanup, err := helpers.SetupTestSQLDB(appdatabase.DbInitializer{}, "perm-tests-")
    18  	require.NoError(t, err)
    19  	return NewDB(db), func() { require.NoError(t, cleanup()) }
    20  }
    21  
    22  func setupTestAPI(t *testing.T) (*API, func()) {
    23  	db, cancel := setupTestDB(t)
    24  	return &API{db: db}, cancel
    25  }
    26  
    27  func TestDappPermissionsStored(t *testing.T) {
    28  	api, cancel := setupTestAPI(t)
    29  	defer cancel()
    30  
    31  	expected := []DappPermissions{
    32  		{
    33  			Name:        "first",
    34  			Permissions: []string{"r", "w"},
    35  		},
    36  		{
    37  			Name:        "second",
    38  			Permissions: []string{"r", "x"},
    39  		},
    40  		{
    41  			Name: "third",
    42  		},
    43  	}
    44  	for _, perms := range expected {
    45  		require.NoError(t, api.AddDappPermissions(context.TODO(), perms))
    46  	}
    47  	rst, err := api.GetDappPermissions(context.TODO())
    48  	require.NoError(t, err)
    49  	// sort in lexicographic order by name
    50  	sort.Slice(rst, func(i, j int) bool {
    51  		return rst[i].Name < rst[j].Name
    52  	})
    53  	require.Equal(t, expected[0].Name, rst[0].Name)
    54  	require.Equal(t, expected[0].Permissions, rst[0].Permissions)
    55  
    56  	data, err := json.Marshal(rst)
    57  	require.NoError(t, err)
    58  	fmt.Println(string(data))
    59  }
    60  
    61  func TestDappPermissionsReplacedOnUpdated(t *testing.T) {
    62  	api, cancel := setupTestAPI(t)
    63  	defer cancel()
    64  
    65  	perms := DappPermissions{
    66  		Name:        "first",
    67  		Permissions: []string{"r", "w"},
    68  	}
    69  	require.NoError(t, api.AddDappPermissions(context.TODO(), perms))
    70  	perms.Permissions = append(perms.Permissions, "x")
    71  	require.NoError(t, api.AddDappPermissions(context.TODO(), perms))
    72  	rst, err := api.GetDappPermissions(context.TODO())
    73  	require.NoError(t, err)
    74  	require.Len(t, rst, 1)
    75  	require.Equal(t, perms.Name, rst[0].Name)
    76  	require.Equal(t, perms.Permissions, rst[0].Permissions)
    77  
    78  }
    79  
    80  func TestDappPermissionsDeleted(t *testing.T) {
    81  	api, cancel := setupTestAPI(t)
    82  	defer cancel()
    83  
    84  	perms := DappPermissions{
    85  		Name: "first",
    86  	}
    87  	require.NoError(t, api.AddDappPermissions(context.TODO(), perms))
    88  	rst, err := api.GetDappPermissions(context.TODO())
    89  	require.NoError(t, err)
    90  	require.Len(t, rst, 1)
    91  	require.NoError(t, api.DeleteDappPermissions(context.TODO(), perms.Name))
    92  	rst, err = api.GetDappPermissions(context.TODO())
    93  	require.NoError(t, err)
    94  	require.Len(t, rst, 0)
    95  }