github.com/status-im/status-go@v1.1.0/services/connector/commands/request_permissions_test.go (about)

     1  package commands
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  )
     8  
     9  func TestFailToRequestPermissionsWithMissingDAppFields(t *testing.T) {
    10  	cmd := &RequestPermissionsCommand{}
    11  
    12  	// Missing DApp fields
    13  	request, err := ConstructRPCRequest("wallet_requestPermissions", []interface{}{}, nil)
    14  	assert.NoError(t, err)
    15  
    16  	result, err := cmd.Execute(request)
    17  	assert.Equal(t, ErrRequestMissingDAppData, err)
    18  	assert.Empty(t, result)
    19  }
    20  
    21  func TestRequestPermissionsResponse(t *testing.T) {
    22  	cmd := &RequestPermissionsCommand{}
    23  
    24  	testCases := []struct {
    25  		name               string
    26  		params             []interface{}
    27  		expectedError      error
    28  		expectedCapability string
    29  	}{
    30  		{
    31  			name: "Single valid key",
    32  			params: []interface{}{
    33  				map[string]interface{}{
    34  					"eth_requestAccounts": struct{}{},
    35  				},
    36  			},
    37  			expectedError:      nil,
    38  			expectedCapability: "eth_requestAccounts",
    39  		},
    40  		{
    41  			name: "Single valid key",
    42  			params: []interface{}{
    43  				map[string]interface{}{
    44  					"eth_accounts": struct{}{},
    45  				},
    46  			},
    47  			expectedError:      nil,
    48  			expectedCapability: "eth_accounts",
    49  		},
    50  		{
    51  			name: "Multiple keys",
    52  			params: []interface{}{
    53  				map[string]interface{}{
    54  					"eth_requestAccounts": struct{}{},
    55  					"eth_sendTransaction": struct{}{},
    56  				},
    57  			},
    58  			expectedError:      ErrMultipleKeysFound,
    59  			expectedCapability: "",
    60  		},
    61  		{
    62  			name: "No keys",
    63  			params: []interface{}{
    64  				map[string]interface{}{},
    65  			},
    66  			expectedError:      ErrNoRequestPermissionsParamsFound,
    67  			expectedCapability: "",
    68  		},
    69  		{
    70  			name:               "Nil params",
    71  			params:             nil,
    72  			expectedError:      ErrEmptyRPCParams,
    73  			expectedCapability: "",
    74  		},
    75  		{
    76  			name: "Invalid param type",
    77  			params: []interface{}{
    78  				"invalid_param_type",
    79  			},
    80  			expectedError:      ErrInvalidParamType,
    81  			expectedCapability: "",
    82  		},
    83  	}
    84  
    85  	for _, tc := range testCases {
    86  		t.Run(tc.name, func(t *testing.T) {
    87  			request, err := ConstructRPCRequest("wallet_requestPermissions", tc.params, &testDAppData)
    88  			assert.NoError(t, err)
    89  
    90  			response, err := cmd.Execute(request)
    91  			if tc.expectedError != nil {
    92  				assert.Error(t, err)
    93  				assert.Equal(t, err, tc.expectedError)
    94  			} else {
    95  				assert.NoError(t, err)
    96  
    97  				if permission, ok := response.(Permission); ok {
    98  					assert.Equal(t, permission.ParentCapability, tc.expectedCapability)
    99  				} else {
   100  					assert.Fail(t, "Can't parse permission from the response")
   101  				}
   102  			}
   103  		})
   104  	}
   105  }