Skip to content

Commit

Permalink
refactored test to follow table driven approach (#868)
Browse files Browse the repository at this point in the history
  • Loading branch information
stackman27 authored Mar 8, 2022
1 parent 493feb8 commit d7c165c
Showing 1 changed file with 87 additions and 50 deletions.
137 changes: 87 additions & 50 deletions x/lockup/keeper/msg_server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,55 +9,92 @@ import (
"github.com/osmosis-labs/osmosis/v7/x/lockup/types"
)

// TODO: Make table driven
func (suite *KeeperTestSuite) TestMsgLockTokens() {
suite.SetupTest()

// lock coins
addr1 := sdk.AccAddress([]byte("addr1---------------"))
coins := sdk.Coins{sdk.NewInt64Coin("stake", 10)}

err := simapp.FundAccount(suite.app.BankKeeper, suite.ctx, addr1, coins)
suite.Require().NoError(err)
_, err = suite.app.LockupKeeper.LockTokens(suite.ctx, addr1, coins, time.Second)
suite.Require().NoError(err)

// creation of lock via LockTokens
msgServer := keeper.NewMsgServerImpl(suite.app.LockupKeeper)
_, err = msgServer.LockTokens(sdk.WrapSDKContext(suite.ctx), types.NewMsgLockTokens(addr1, time.Second, coins))

// check locks
locks, err := suite.app.LockupKeeper.GetPeriodLocks(suite.ctx)
suite.Require().NoError(err)
suite.Require().Len(locks, 1)
suite.Require().Equal(locks[0].Coins, coins)
// check accumulation store is correctly updated
accum := suite.app.LockupKeeper.GetPeriodLocksAccumulation(suite.ctx, types.QueryCondition{
LockQueryType: types.ByDuration,
Denom: "stake",
Duration: time.Second,
})
suite.Require().Equal(accum.String(), "10")

// add more tokens to lock via LockTokens
addCoins := sdk.Coins{sdk.NewInt64Coin("stake", 10)}
err = simapp.FundAccount(suite.app.BankKeeper, suite.ctx, addr1, addCoins)
suite.Require().NoError(err)

_, err = msgServer.LockTokens(sdk.WrapSDKContext(suite.ctx), types.NewMsgLockTokens(addr1, locks[0].Duration, addCoins))
suite.Require().NoError(err)

// check locks after adding tokens to lock
locks, err = suite.app.LockupKeeper.GetPeriodLocks(suite.ctx)
suite.Require().NoError(err)
suite.Require().Len(locks, 1)
suite.Require().Equal(locks[0].Coins, coins.Add(addCoins...))

// check accumulation store is correctly updated
accum = suite.app.LockupKeeper.GetPeriodLocksAccumulation(suite.ctx, types.QueryCondition{
LockQueryType: types.ByDuration,
Denom: "stake",
Duration: time.Second,
})
suite.Require().Equal(accum.String(), "20")
type param struct {
coinsToLock sdk.Coins
lockOwner sdk.AccAddress
duration time.Duration
coinsInOwnerAddress sdk.Coins
}

tests := []struct {
name string
param param
expectPass bool
}{
{
name: "creation of lock via lockTokens",
param: param{
coinsToLock: sdk.Coins{sdk.NewInt64Coin("stake", 10)}, // setup wallet
lockOwner: sdk.AccAddress([]byte("addr1---------------")), // setup wallet
duration: time.Second,
coinsInOwnerAddress: sdk.Coins{sdk.NewInt64Coin("stake", 10)},
},
expectPass: true,
},
{
name: "locking more coins than are in the address",
param: param{
coinsToLock: sdk.Coins{sdk.NewInt64Coin("stake", 20)}, // setup wallet
lockOwner: sdk.AccAddress([]byte("addr1---------------")), // setup wallet
duration: time.Second,
coinsInOwnerAddress: sdk.Coins{sdk.NewInt64Coin("stake", 10)},
},
expectPass: false,
},
}

for _, test := range tests {
suite.SetupTest()

err := simapp.FundAccount(suite.app.BankKeeper, suite.ctx, test.param.lockOwner, test.param.coinsInOwnerAddress)
suite.Require().NoError(err)

_, err = suite.app.LockupKeeper.LockTokens(suite.ctx, test.param.lockOwner, test.param.coinsToLock, test.param.duration)

if test.expectPass {
// creation of lock via LockTokens
msgServer := keeper.NewMsgServerImpl(suite.app.LockupKeeper)
_, err = msgServer.LockTokens(sdk.WrapSDKContext(suite.ctx), types.NewMsgLockTokens(test.param.lockOwner, test.param.duration, test.param.coinsToLock))

// Check Locks
locks, err := suite.app.LockupKeeper.GetPeriodLocks(suite.ctx)
suite.Require().NoError(err)
suite.Require().Len(locks, 1)
suite.Require().Equal(locks[0].Coins, test.param.coinsToLock)

// check accumulation store is correctly updated
accum := suite.app.LockupKeeper.GetPeriodLocksAccumulation(suite.ctx, types.QueryCondition{
LockQueryType: types.ByDuration,
Denom: "stake",
Duration: test.param.duration,
})
suite.Require().Equal(accum.String(), "10")

// add more tokens to lock via LockTokens
err = simapp.FundAccount(suite.app.BankKeeper, suite.ctx, test.param.lockOwner, test.param.coinsInOwnerAddress)
suite.Require().NoError(err)

_, err = msgServer.LockTokens(sdk.WrapSDKContext(suite.ctx), types.NewMsgLockTokens(test.param.lockOwner, locks[0].Duration, test.param.coinsToLock))
suite.Require().NoError(err)

// check locks after adding tokens to lock
locks, err = suite.app.LockupKeeper.GetPeriodLocks(suite.ctx)
suite.Require().NoError(err)
suite.Require().Len(locks, 1)
suite.Require().Equal(locks[0].Coins, test.param.coinsToLock.Add(test.param.coinsToLock...))

// check accumulation store is correctly updated
accum = suite.app.LockupKeeper.GetPeriodLocksAccumulation(suite.ctx, types.QueryCondition{
LockQueryType: types.ByDuration,
Denom: "stake",
Duration: test.param.duration,
})
suite.Require().Equal(accum.String(), "20")

} else {
// Fail simple lock token
suite.Require().Error(err)
}
}
}

0 comments on commit d7c165c

Please sign in to comment.