github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/dex/keeper/proposal_test.go (about)

     1  //go:build ignore
     2  
     3  package keeper
     4  
     5  import (
     6  	"testing"
     7  	"time"
     8  
     9  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    10  	"github.com/fibonacci-chain/fbc/x/common"
    11  	"github.com/fibonacci-chain/fbc/x/dex/types"
    12  	govTypes "github.com/fibonacci-chain/fbc/x/gov/types"
    13  	ordertypes "github.com/fibonacci-chain/fbc/x/order/types"
    14  	"github.com/stretchr/testify/require"
    15  )
    16  
    17  func TestKeeper_GetMinDeposit(t *testing.T) {
    18  	testInput := createTestInputWithBalance(t, 1, 10000)
    19  	ctx := testInput.Ctx
    20  
    21  	p := types.DefaultParams()
    22  	p.DelistMinDeposit = sdk.SysCoins{sdk.NewDecCoin(common.NativeToken, sdk.NewInt(12345))}
    23  
    24  	testInput.DexKeeper.SetParams(ctx, *p)
    25  	var contentImpl types.DelistProposal
    26  	minDeposit := testInput.DexKeeper.GetMinDeposit(ctx, contentImpl)
    27  	require.True(t, minDeposit.IsEqual(p.DelistMinDeposit))
    28  }
    29  
    30  func TestKeeper_GetMaxDepositPeriod(t *testing.T) {
    31  	testInput := createTestInputWithBalance(t, 1, 10000)
    32  	ctx := testInput.Ctx
    33  
    34  	p := types.DefaultParams()
    35  	p.DelistMaxDepositPeriod = time.Second * 123
    36  
    37  	testInput.DexKeeper.SetParams(ctx, *p)
    38  	var contentImpl types.DelistProposal
    39  	maxDepositPeriod := testInput.DexKeeper.GetMaxDepositPeriod(ctx, contentImpl)
    40  	require.EqualValues(t, maxDepositPeriod, p.DelistMaxDepositPeriod)
    41  }
    42  
    43  func TestKeeper_GetVotingPeriod(t *testing.T) {
    44  	testInput := createTestInputWithBalance(t, 1, 10000)
    45  	ctx := testInput.Ctx
    46  
    47  	p := types.DefaultParams()
    48  	p.DelistVotingPeriod = time.Second * 123
    49  
    50  	testInput.DexKeeper.SetParams(ctx, *p)
    51  	var contentImpl types.DelistProposal
    52  	maxListVotingPeriod := testInput.DexKeeper.GetVotingPeriod(ctx, contentImpl)
    53  	require.EqualValues(t, maxListVotingPeriod, p.DelistVotingPeriod)
    54  }
    55  
    56  func TestKeeper_CheckMsgSubmitProposal(t *testing.T) {
    57  	testInput := createTestInputWithBalance(t, 1, 10000)
    58  	ctx := testInput.Ctx
    59  
    60  	testInput.DexKeeper.SetParams(ctx, *types.DefaultParams())
    61  	tokenPair := GetBuiltInTokenPair()
    62  
    63  	content := types.NewDelistProposal("delist xxb_okb", "delist asset from dex", tokenPair.Owner, tokenPair.BaseAssetSymbol, tokenPair.QuoteAssetSymbol)
    64  	content.Proposer = tokenPair.Owner
    65  	proposal := govTypes.NewMsgSubmitProposal(content, sdk.SysCoins{sdk.NewDecCoin(common.NativeToken, sdk.NewInt(150))}, tokenPair.Owner)
    66  
    67  	// error case : fail to check proposal because product(token pair) not exist
    68  	err := testInput.DexKeeper.CheckMsgSubmitProposal(ctx, proposal)
    69  	require.Error(t, err)
    70  	// SaveTokenPair
    71  	saveErr := testInput.DexKeeper.SaveTokenPair(ctx, tokenPair)
    72  	require.Nil(t, saveErr)
    73  
    74  	// successful case : check proposal successfully
    75  	err = testInput.DexKeeper.CheckMsgSubmitProposal(ctx, proposal)
    76  	require.NoError(t, err)
    77  
    78  	// error case:  fail to check proposal because the proposer can't afford the initial deposit
    79  	proposal1 := govTypes.NewMsgSubmitProposal(content, sdk.SysCoins{sdk.NewDecCoin(common.NativeToken, sdk.NewInt(500000))}, tokenPair.Owner)
    80  	err = testInput.DexKeeper.CheckMsgSubmitProposal(ctx, proposal1)
    81  	require.Error(t, err)
    82  
    83  	// error case: fail to check proposal because initial deposit must not be less than 100.00000000okb
    84  	proposal2 := govTypes.NewMsgSubmitProposal(content, sdk.SysCoins{sdk.NewDecCoin(common.NativeToken, sdk.NewInt(1))}, tokenPair.Owner)
    85  	err = testInput.DexKeeper.CheckMsgSubmitProposal(ctx, proposal2)
    86  	require.Error(t, err)
    87  
    88  	// error case: fail to check proposal because the proposal is nil
    89  	proposal3 := govTypes.NewMsgSubmitProposal(nil, sdk.SysCoins{sdk.NewDecCoin(common.NativeToken, sdk.NewInt(1))}, tokenPair.Owner)
    90  	err = testInput.DexKeeper.CheckMsgSubmitProposal(ctx, proposal3)
    91  	require.Error(t, err)
    92  
    93  }
    94  
    95  func TestKeeper_RejectedHandler(t *testing.T) {
    96  	testInput := createTestInputWithBalance(t, 1, 10000)
    97  	ctx := testInput.Ctx
    98  
    99  	testInput.DexKeeper.SetParams(ctx, *types.DefaultParams())
   100  	tokenPair := GetBuiltInTokenPair()
   101  
   102  	// SaveTokenPair
   103  	saveErr := testInput.DexKeeper.SaveTokenPair(ctx, tokenPair)
   104  	require.Nil(t, saveErr)
   105  
   106  	content := types.NewDelistProposal("delist xxb_okb", "delist asset from dex", tokenPair.Owner, tokenPair.BaseAssetSymbol, tokenPair.QuoteAssetSymbol)
   107  	testInput.DexKeeper.RejectedHandler(ctx, content)
   108  
   109  }
   110  
   111  func TestKeeper_AfterDepositPeriodPassed(t *testing.T) {
   112  	testInput := createTestInputWithBalance(t, 1, 10000)
   113  	ctx := testInput.Ctx
   114  	testInput.DexKeeper.SetParams(ctx, *types.DefaultParams())
   115  	tokenPair := GetBuiltInTokenPair()
   116  
   117  	// SaveTokenPair
   118  	saveErr := testInput.DexKeeper.SaveTokenPair(ctx, tokenPair)
   119  	require.Nil(t, saveErr)
   120  
   121  	content := types.NewDelistProposal("delist xxb_okb", "delist asset from dex", tokenPair.Owner, tokenPair.BaseAssetSymbol, tokenPair.QuoteAssetSymbol)
   122  	content.Proposer = tokenPair.Owner
   123  	proposal := govTypes.Proposal{Content: content}
   124  
   125  	testInput.DexKeeper.AfterDepositPeriodPassed(ctx, proposal)
   126  
   127  }
   128  
   129  func TestKeeper_AfterSubmitProposalHandler(t *testing.T) {
   130  	testInput := createTestInputWithBalance(t, 1, 10000)
   131  	ctx := testInput.Ctx
   132  	content := types.NewDelistProposal("delist xxb_okb", "delist asset from dex", nil, "", "")
   133  	proposal := govTypes.Proposal{Content: content}
   134  
   135  	testInput.DexKeeper.AfterSubmitProposalHandler(ctx, proposal)
   136  }
   137  
   138  func TestKeeper_VoteHandler(t *testing.T) {
   139  	testInput := createTestInputWithBalance(t, 1, 10000)
   140  	ctx := testInput.Ctx
   141  	tokenPair := GetBuiltInTokenPair()
   142  
   143  	content := types.NewDelistProposal("delist xxb_okb", "delist asset from dex", nil, tokenPair.BaseAssetSymbol, tokenPair.QuoteAssetSymbol)
   144  	proposal := govTypes.Proposal{Content: content}
   145  	_, err := testInput.DexKeeper.VoteHandler(ctx, proposal, govTypes.Vote{})
   146  	require.Nil(t, err)
   147  
   148  	// SaveTokenPair
   149  	saveErr := testInput.DexKeeper.SaveTokenPair(ctx, tokenPair)
   150  	require.Nil(t, saveErr)
   151  
   152  	lock := ordertypes.ProductLock{}
   153  	testInput.DexKeeper.LockTokenPair(ctx, tokenPair.Name(), &lock)
   154  	_, err = testInput.DexKeeper.VoteHandler(ctx, proposal, govTypes.Vote{})
   155  	require.NotNil(t, err)
   156  
   157  }