status-im/status-go

View on GitHub
services/typeddata/types_test.go

Summary

Maintainability
A
0 mins
Test Coverage
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())
}