github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/erc20/types/proposal_test.go (about) 1 package types 2 3 import ( 4 "encoding/hex" 5 "fmt" 6 "testing" 7 8 "github.com/ethereum/go-ethereum/common" 9 "github.com/stretchr/testify/require" 10 ) 11 12 func TestTokenMappingProposal_ValidateBasic(t *testing.T) { 13 contractAddrStr := "0x7D4B7B8CA7E1a24928Bb96D59249c7a5bd1DfBe6" 14 contractAddr := common.HexToAddress(contractAddrStr) 15 16 proposal := NewTokenMappingProposal("proposal", "right delist proposal", "eth", &contractAddr) 17 require.Equal(t, "proposal", proposal.GetTitle()) 18 require.Equal(t, "right delist proposal", proposal.GetDescription()) 19 require.Equal(t, RouterKey, proposal.ProposalRoute()) 20 require.Equal(t, proposalTypeTokenMapping, proposal.ProposalType()) 21 22 tests := []struct { 23 name string 24 drp TokenMappingProposal 25 result bool 26 }{ 27 {"valid-proposal", proposal, true}, 28 {"no-title", TokenMappingProposal{"", "delist proposal", "eth", contractAddrStr}, false}, 29 {"no-description", TokenMappingProposal{"proposal", "", "eth", contractAddrStr}, false}, 30 {"no-denom", TokenMappingProposal{"proposal", "delist proposal", "", contractAddrStr}, false}, 31 {"err-denom", TokenMappingProposal{"proposal", "delist proposal", ".@..", contractAddrStr}, false}, 32 {"no-contract", TokenMappingProposal{"proposal", "delist proposal", "btc", ""}, true}, 33 {"err-contract", TokenMappingProposal{"proposal", "delist proposal", "btc", "0xqwoifej923jd"}, false}, 34 {"long-title", TokenMappingProposal{getLongString(15), 35 "right delist proposal", "eth", contractAddrStr}, false}, 36 {"long-description", TokenMappingProposal{"proposal", 37 getLongString(501), "eth", contractAddrStr}, false}, 38 } 39 for _, tt := range tests { 40 t.Run(tt.name, func(t *testing.T) { 41 42 if tt.result { 43 require.Nil(t, tt.drp.ValidateBasic(), "test: %v", tt.name) 44 } else { 45 require.NotNil(t, tt.drp.ValidateBasic(), "test: %v", tt.name) 46 } 47 }) 48 } 49 } 50 51 func TestContractTemplateProposal_ValidateBasic(t *testing.T) { 52 f := func(bin string) string { 53 json := `[{ "inputs": [{"internalType": "uint256","name": "a","type": "uint256" },{ "internalType": "uint256","name": "b","type": "uint256"}],"stateMutability": "nonpayable","type": "constructor"}]` 54 str := fmt.Sprintf(`{"abi":%s,"bin":"%s"}`, json, bin) 55 return str 56 } 57 tests := []struct { 58 name string 59 drp ContractTemplateProposal 60 result bool 61 }{ 62 {"invalid hex", ContractTemplateProposal{"title", "desc", ProposalTypeContextTemplateProxy, f("invalid hex")}, false}, 63 {"invalid type", ContractTemplateProposal{"title", "desc", "mis", f(hex.EncodeToString([]byte("valid hex")))}, false}, 64 } 65 for _, tt := range tests { 66 t.Run(tt.name, func(t *testing.T) { 67 68 if tt.result { 69 require.Nil(t, tt.drp.ValidateBasic(), "test: %v", tt.name) 70 } else { 71 require.NotNil(t, tt.drp.ValidateBasic(), "test: %v", tt.name) 72 } 73 }) 74 } 75 } 76 77 func getLongString(n int) (s string) { 78 str := "0123456789" 79 for i := 0; i < n; i++ { 80 s = fmt.Sprintf("%s%s", s, str) 81 } 82 fmt.Println(len(s)) 83 return s 84 }