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 }