github.com/KiraCore/sekai@v0.3.43/x/basket/keeper/basket_action_history_test.go (about)

     1  package keeper_test
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/KiraCore/sekai/x/basket/types"
     7  	sdk "github.com/cosmos/cosmos-sdk/types"
     8  )
     9  
    10  func (suite *KeeperTestSuite) TestMintActions() {
    11  	suite.SetupTest()
    12  
    13  	now := time.Now().UTC()
    14  	suite.ctx = suite.ctx.WithBlockTime(now.Add(time.Hour))
    15  
    16  	baskets := []types.Basket{
    17  		{
    18  			Id:           1,
    19  			LimitsPeriod: 1800,
    20  		},
    21  		{
    22  			Id:           2,
    23  			LimitsPeriod: 7200,
    24  		},
    25  	}
    26  
    27  	for _, basket := range baskets {
    28  		suite.app.BasketKeeper.SetBasket(suite.ctx, basket)
    29  	}
    30  
    31  	actions := []types.AmountAtTime{
    32  		{
    33  			BasketId: 1,
    34  			Time:     uint64(now.Unix()),
    35  			Amount:   sdk.NewInt(1000),
    36  		},
    37  		{
    38  			BasketId: 1,
    39  			Time:     uint64(now.Add(time.Second).Unix()),
    40  			Amount:   sdk.NewInt(10000),
    41  		},
    42  		{
    43  			BasketId: 2,
    44  			Time:     uint64(now.Unix()),
    45  			Amount:   sdk.NewInt(1000),
    46  		},
    47  		{
    48  			BasketId: 2,
    49  			Time:     uint64(now.Add(time.Hour).Unix()),
    50  			Amount:   sdk.NewInt(10000),
    51  		},
    52  	}
    53  
    54  	for _, action := range actions {
    55  		suite.app.BasketKeeper.SetMintAmount(suite.ctx, time.Unix(int64(action.Time), 0), action.BasketId, action.Amount)
    56  	}
    57  
    58  	for _, action := range actions {
    59  		amount := suite.app.BasketKeeper.GetMintAmount(suite.ctx, action.BasketId, time.Unix(int64(action.Time), 0))
    60  		suite.Require().Equal(amount, action.Amount)
    61  	}
    62  
    63  	allAmounts := suite.app.BasketKeeper.GetAllMintAmounts(suite.ctx)
    64  	suite.Require().Len(allAmounts, len(actions))
    65  
    66  	historicalAmount := suite.app.BasketKeeper.GetLimitsPeriodMintAmount(suite.ctx, 1, 1800)
    67  	suite.Require().Equal(historicalAmount, sdk.NewInt(0))
    68  	historicalAmount = suite.app.BasketKeeper.GetLimitsPeriodMintAmount(suite.ctx, 2, 1800)
    69  	suite.Require().Equal(historicalAmount, sdk.NewInt(10000))
    70  	historicalAmount = suite.app.BasketKeeper.GetLimitsPeriodMintAmount(suite.ctx, 2, 7200)
    71  	suite.Require().Equal(historicalAmount, sdk.NewInt(11000))
    72  
    73  	suite.app.BasketKeeper.RegisterMintAction(suite.ctx, 1, sdk.NewInt(1000))
    74  	historicalAmount = suite.app.BasketKeeper.GetLimitsPeriodMintAmount(suite.ctx, 1, 1800)
    75  	suite.Require().Equal(historicalAmount, sdk.NewInt(1000))
    76  
    77  	suite.app.BasketKeeper.ClearOldMintAmounts(suite.ctx, 1, 1800)
    78  	historicalAmount = suite.app.BasketKeeper.GetLimitsPeriodMintAmount(suite.ctx, 1, 1800000)
    79  	suite.Require().Equal(historicalAmount, sdk.NewInt(1000))
    80  }
    81  
    82  func (suite *KeeperTestSuite) TestBurnActions() {
    83  	suite.SetupTest()
    84  
    85  	now := time.Now().UTC()
    86  	suite.ctx = suite.ctx.WithBlockTime(now.Add(time.Hour))
    87  
    88  	baskets := []types.Basket{
    89  		{
    90  			Id:           1,
    91  			LimitsPeriod: 1800,
    92  		},
    93  		{
    94  			Id:           2,
    95  			LimitsPeriod: 7200,
    96  		},
    97  	}
    98  
    99  	for _, basket := range baskets {
   100  		suite.app.BasketKeeper.SetBasket(suite.ctx, basket)
   101  	}
   102  
   103  	actions := []types.AmountAtTime{
   104  		{
   105  			BasketId: 1,
   106  			Time:     uint64(now.Unix()),
   107  			Amount:   sdk.NewInt(1000),
   108  		},
   109  		{
   110  			BasketId: 1,
   111  			Time:     uint64(now.Add(time.Second).Unix()),
   112  			Amount:   sdk.NewInt(10000),
   113  		},
   114  		{
   115  			BasketId: 2,
   116  			Time:     uint64(now.Unix()),
   117  			Amount:   sdk.NewInt(1000),
   118  		},
   119  		{
   120  			BasketId: 2,
   121  			Time:     uint64(now.Add(time.Hour).Unix()),
   122  			Amount:   sdk.NewInt(10000),
   123  		},
   124  	}
   125  
   126  	for _, action := range actions {
   127  		suite.app.BasketKeeper.SetBurnAmount(suite.ctx, time.Unix(int64(action.Time), 0), action.BasketId, action.Amount)
   128  	}
   129  
   130  	for _, action := range actions {
   131  		amount := suite.app.BasketKeeper.GetBurnAmount(suite.ctx, action.BasketId, time.Unix(int64(action.Time), 0))
   132  		suite.Require().Equal(amount, action.Amount)
   133  	}
   134  
   135  	allAmounts := suite.app.BasketKeeper.GetAllBurnAmounts(suite.ctx)
   136  	suite.Require().Len(allAmounts, len(actions))
   137  
   138  	historicalAmount := suite.app.BasketKeeper.GetLimitsPeriodBurnAmount(suite.ctx, 1, 1800)
   139  	suite.Require().Equal(historicalAmount, sdk.NewInt(0))
   140  	historicalAmount = suite.app.BasketKeeper.GetLimitsPeriodBurnAmount(suite.ctx, 2, 1800)
   141  	suite.Require().Equal(historicalAmount, sdk.NewInt(10000))
   142  	historicalAmount = suite.app.BasketKeeper.GetLimitsPeriodBurnAmount(suite.ctx, 2, 7200)
   143  	suite.Require().Equal(historicalAmount, sdk.NewInt(11000))
   144  
   145  	suite.app.BasketKeeper.RegisterBurnAction(suite.ctx, 1, sdk.NewInt(1000))
   146  	historicalAmount = suite.app.BasketKeeper.GetLimitsPeriodBurnAmount(suite.ctx, 1, 1800)
   147  	suite.Require().Equal(historicalAmount, sdk.NewInt(1000))
   148  
   149  	suite.app.BasketKeeper.ClearOldBurnAmounts(suite.ctx, 1, 1800)
   150  	historicalAmount = suite.app.BasketKeeper.GetLimitsPeriodBurnAmount(suite.ctx, 1, 1800000)
   151  	suite.Require().Equal(historicalAmount, sdk.NewInt(1000))
   152  }
   153  
   154  func (suite *KeeperTestSuite) TestSwapActions() {
   155  	suite.SetupTest()
   156  
   157  	now := time.Now().UTC()
   158  	suite.ctx = suite.ctx.WithBlockTime(now.Add(time.Hour))
   159  
   160  	baskets := []types.Basket{
   161  		{
   162  			Id:           1,
   163  			LimitsPeriod: 1800,
   164  		},
   165  		{
   166  			Id:           2,
   167  			LimitsPeriod: 7200,
   168  		},
   169  	}
   170  
   171  	for _, basket := range baskets {
   172  		suite.app.BasketKeeper.SetBasket(suite.ctx, basket)
   173  	}
   174  
   175  	actions := []types.AmountAtTime{
   176  		{
   177  			BasketId: 1,
   178  			Time:     uint64(now.Unix()),
   179  			Amount:   sdk.NewInt(1000),
   180  		},
   181  		{
   182  			BasketId: 1,
   183  			Time:     uint64(now.Add(time.Second).Unix()),
   184  			Amount:   sdk.NewInt(10000),
   185  		},
   186  		{
   187  			BasketId: 2,
   188  			Time:     uint64(now.Unix()),
   189  			Amount:   sdk.NewInt(1000),
   190  		},
   191  		{
   192  			BasketId: 2,
   193  			Time:     uint64(now.Add(time.Hour).Unix()),
   194  			Amount:   sdk.NewInt(10000),
   195  		},
   196  	}
   197  
   198  	for _, action := range actions {
   199  		suite.app.BasketKeeper.SetSwapAmount(suite.ctx, time.Unix(int64(action.Time), 0), action.BasketId, action.Amount)
   200  	}
   201  
   202  	for _, action := range actions {
   203  		amount := suite.app.BasketKeeper.GetSwapAmount(suite.ctx, action.BasketId, time.Unix(int64(action.Time), 0))
   204  		suite.Require().Equal(amount, action.Amount)
   205  	}
   206  
   207  	allAmounts := suite.app.BasketKeeper.GetAllSwapAmounts(suite.ctx)
   208  	suite.Require().Len(allAmounts, len(actions))
   209  
   210  	historicalAmount := suite.app.BasketKeeper.GetLimitsPeriodSwapAmount(suite.ctx, 1, 1800)
   211  	suite.Require().Equal(historicalAmount, sdk.NewInt(0))
   212  	historicalAmount = suite.app.BasketKeeper.GetLimitsPeriodSwapAmount(suite.ctx, 2, 1800)
   213  	suite.Require().Equal(historicalAmount, sdk.NewInt(10000))
   214  	historicalAmount = suite.app.BasketKeeper.GetLimitsPeriodSwapAmount(suite.ctx, 2, 7200)
   215  	suite.Require().Equal(historicalAmount, sdk.NewInt(11000))
   216  
   217  	suite.app.BasketKeeper.RegisterSwapAction(suite.ctx, 1, sdk.NewInt(1000))
   218  	historicalAmount = suite.app.BasketKeeper.GetLimitsPeriodSwapAmount(suite.ctx, 1, 1800)
   219  	suite.Require().Equal(historicalAmount, sdk.NewInt(1000))
   220  
   221  	suite.app.BasketKeeper.ClearOldSwapAmounts(suite.ctx, 1, 1800)
   222  	historicalAmount = suite.app.BasketKeeper.GetLimitsPeriodSwapAmount(suite.ctx, 1, 1800000)
   223  	suite.Require().Equal(historicalAmount, sdk.NewInt(1000))
   224  }