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  }