github.com/status-im/status-go@v1.1.0/services/typeddata/types_test.go (about)

     1  package typeddata
     2  
     3  import (
     4  	"encoding/json"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/require"
     8  )
     9  
    10  func TestUnmarshalFull(t *testing.T) {
    11  	data := `
    12  {
    13    "types": {
    14      "EIP712Domain": [
    15        {
    16  	"name": "name",
    17  	"type": "string"
    18        },
    19        {
    20  	"name": "version",
    21  	"type": "string"
    22        },
    23        {
    24  	"name": "chainId",
    25  	"type": "uint256"
    26        },
    27        {
    28  	"name": "verifyingContract",
    29  	"type": "address"
    30        }
    31      ],
    32      "Person": [
    33        {
    34  	"name": "name",
    35  	"type": "string"
    36        },
    37        {
    38  	"name": "wallet",
    39  	"type": "address"
    40        }
    41      ],
    42      "Mail": [
    43        {
    44  	"name": "from",
    45  	"type": "Person"
    46        },
    47        {
    48  	"name": "to",
    49  	"type": "Person"
    50        },
    51        {
    52  	"name": "contents",
    53  	"type": "string"
    54        }
    55      ]
    56    },
    57    "primaryType": "Mail",
    58    "domain": {
    59      "name": "Ether Mail",
    60      "version": "1",
    61      "chainId": 1,
    62      "verifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"
    63    },
    64    "message": {
    65      "from": {
    66        "name": "Cow",
    67        "wallet": "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826"
    68      },
    69      "to": {
    70        "name": "Bob",
    71        "wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB"
    72      },
    73      "contents": "Hello, Bob!"
    74    }
    75  }
    76  `
    77  	var typed TypedData
    78  	require.NoError(t, json.Unmarshal([]byte(data), &typed))
    79  }
    80  
    81  func TestValidateField(t *testing.T) {
    82  	f := Field{}
    83  	require.EqualError(t, f.Validate(), "`name` is required")
    84  	f.Name = "name"
    85  	require.EqualError(t, f.Validate(), "`type` is required")
    86  	f.Type = "type"
    87  	require.NoError(t, f.Validate())
    88  }
    89  
    90  func TestValidateTypedData(t *testing.T) {
    91  	d := TypedData{Types: Types{}}
    92  	require.EqualError(t, d.Validate(), "`EIP712Domain` must be in `types`")
    93  	d.Types[eip712Domain] = []Field{}
    94  	require.EqualError(t, d.Validate(), "`primaryType` is required")
    95  	d.PrimaryType = "primary"
    96  	d.Types[d.PrimaryType] = []Field{}
    97  	require.EqualError(t, d.Validate(), "`domain` is required")
    98  	d.Domain = map[string]json.RawMessage{}
    99  	require.EqualError(t, d.Validate(), "`message` is required")
   100  	d.Message = map[string]json.RawMessage{}
   101  	require.NoError(t, d.Validate())
   102  	d.Types[d.PrimaryType] = append(d.Types[d.PrimaryType], Field{Name: "name"})
   103  	require.EqualError(t, d.Validate(), "field 0 from type `primary` is invalid: `type` is required")
   104  	d.Types[d.PrimaryType][0].Type = "tttt"
   105  	require.NoError(t, d.Validate())
   106  }