status-go/services/typeddata/types_test.go

107 lines
2.2 KiB
Go

package typeddata
import (
"encoding/json"
"testing"
"github.com/stretchr/testify/require"
)
func TestUnmarshalFull(t *testing.T) {
data := `
{
"types": {
"EIP712Domain": [
{
"name": "name",
"type": "string"
},
{
"name": "version",
"type": "string"
},
{
"name": "chainId",
"type": "uint256"
},
{
"name": "verifyingContract",
"type": "address"
}
],
"Person": [
{
"name": "name",
"type": "string"
},
{
"name": "wallet",
"type": "address"
}
],
"Mail": [
{
"name": "from",
"type": "Person"
},
{
"name": "to",
"type": "Person"
},
{
"name": "contents",
"type": "string"
}
]
},
"primaryType": "Mail",
"domain": {
"name": "Ether Mail",
"version": "1",
"chainId": 1,
"verifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"
},
"message": {
"from": {
"name": "Cow",
"wallet": "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826"
},
"to": {
"name": "Bob",
"wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB"
},
"contents": "Hello, Bob!"
}
}
`
var typed TypedData
require.NoError(t, json.Unmarshal([]byte(data), &typed))
}
func TestValidateField(t *testing.T) {
f := Field{}
require.EqualError(t, f.Validate(), "`name` is required")
f.Name = "name"
require.EqualError(t, f.Validate(), "`type` is required")
f.Type = "type"
require.NoError(t, f.Validate())
}
func TestValidateTypedData(t *testing.T) {
d := TypedData{Types: Types{}}
require.EqualError(t, d.Validate(), "`EIP712Domain` must be in `types`")
d.Types[eip712Domain] = []Field{}
require.EqualError(t, d.Validate(), "`primaryType` is required")
d.PrimaryType = "primary"
d.Types[d.PrimaryType] = []Field{}
require.EqualError(t, d.Validate(), "`domain` is required")
d.Domain = map[string]json.RawMessage{}
require.EqualError(t, d.Validate(), "`message` is required")
d.Message = map[string]json.RawMessage{}
require.NoError(t, d.Validate())
d.Types[d.PrimaryType] = append(d.Types[d.PrimaryType], Field{Name: "name"})
require.EqualError(t, d.Validate(), "field 0 from type `primary` is invalid: `type` is required")
d.Types[d.PrimaryType][0].Type = "tttt"
require.NoError(t, d.Validate())
}