73 lines
2.3 KiB
Go
73 lines
2.3 KiB
Go
package keeper_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
"github.com/stretchr/testify/require"
|
|
"mukan/x/poj/types"
|
|
)
|
|
|
|
func TestProcessBlockReward(t *testing.T) {
|
|
f := initFixture(t)
|
|
miner := "mukan1miner"
|
|
|
|
// Initial block height 1
|
|
ctx := sdk.UnwrapSDKContext(f.ctx).WithBlockHeight(1)
|
|
|
|
// 1st Win
|
|
allowed := f.keeper.ProcessBlockReward(ctx, miner)
|
|
require.True(t, allowed)
|
|
|
|
state, found := f.keeper.GetMinerState(ctx, miner)
|
|
require.True(t, found)
|
|
require.Equal(t, int64(1), state.ConsecutiveWins)
|
|
require.Equal(t, int64(0), state.StreakCount)
|
|
require.Equal(t, int64(0), state.CooldownUntil)
|
|
|
|
// 2nd Win (at same height or next, doesn't matter for logic, but usually next)
|
|
ctx = ctx.WithBlockHeight(2)
|
|
allowed = f.keeper.ProcessBlockReward(ctx, miner)
|
|
require.True(t, allowed)
|
|
|
|
state, _ = f.keeper.GetMinerState(ctx, miner)
|
|
require.Equal(t, int64(0), state.ConsecutiveWins)
|
|
require.Equal(t, int64(1), state.StreakCount)
|
|
require.Equal(t, int64(3), state.CooldownUntil) // current (2) + micro_cooldown (1)
|
|
|
|
// Win at block 3 (should be rejected due to cooldown)
|
|
ctx = ctx.WithBlockHeight(3)
|
|
allowed = f.keeper.ProcessBlockReward(ctx, miner)
|
|
require.False(t, allowed)
|
|
|
|
// Win at block 4 (cooldown expired)
|
|
ctx = ctx.WithBlockHeight(4)
|
|
allowed = f.keeper.ProcessBlockReward(ctx, miner)
|
|
require.True(t, allowed)
|
|
}
|
|
|
|
func TestMacroFren(t *testing.T) {
|
|
f := initFixture(t)
|
|
miner := "mukan1miner"
|
|
|
|
// Set macro limit to 2 for faster testing
|
|
params := types.DefaultParams()
|
|
params.MacroStreakLimit = 2
|
|
f.keeper.Params.Set(f.ctx, params)
|
|
|
|
// Streak 1 (wins at 1 and 2)
|
|
f.keeper.ProcessBlockReward(sdk.UnwrapSDKContext(f.ctx).WithBlockHeight(1), miner)
|
|
f.keeper.ProcessBlockReward(sdk.UnwrapSDKContext(f.ctx).WithBlockHeight(2), miner)
|
|
|
|
state, _ := f.keeper.GetMinerState(f.ctx, miner)
|
|
require.Equal(t, int64(1), state.StreakCount)
|
|
require.Equal(t, int64(3), state.CooldownUntil)
|
|
|
|
// Streak 2 (wins at 4 and 5)
|
|
f.keeper.ProcessBlockReward(sdk.UnwrapSDKContext(f.ctx).WithBlockHeight(4), miner)
|
|
f.keeper.ProcessBlockReward(sdk.UnwrapSDKContext(f.ctx).WithBlockHeight(5), miner)
|
|
|
|
state, _ = f.keeper.GetMinerState(f.ctx, miner)
|
|
require.Equal(t, int64(0), state.StreakCount) // Reset after Macro
|
|
require.Equal(t, int64(10), state.CooldownUntil) // 5 + 5 (macro_cooldown)
|
|
}
|