code.vegaprotocol.io/vega@v0.79.0/datanode/sqlstore/vesting_stats_test.go (about) 1 // Copyright (C) 2023 Gobalsky Labs Limited 2 // 3 // This program is free software: you can redistribute it and/or modify 4 // it under the terms of the GNU Affero General Public License as 5 // published by the Free Software Foundation, either version 3 of the 6 // License, or (at your option) any later version. 7 // 8 // This program is distributed in the hope that it will be useful, 9 // but WITHOUT ANY WARRANTY; without even the implied warranty of 10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 // GNU Affero General Public License for more details. 12 // 13 // You should have received a copy of the GNU Affero General Public License 14 // along with this program. If not, see <http://www.gnu.org/licenses/>. 15 16 package sqlstore_test 17 18 import ( 19 "testing" 20 "time" 21 22 "code.vegaprotocol.io/vega/datanode/entities" 23 "code.vegaprotocol.io/vega/datanode/sqlstore" 24 "code.vegaprotocol.io/vega/libs/num" 25 26 "github.com/stretchr/testify/assert" 27 "github.com/stretchr/testify/require" 28 ) 29 30 func setupVestingStatsTest(t *testing.T) (*sqlstore.Blocks, *sqlstore.VestingStats) { 31 t.Helper() 32 bs := sqlstore.NewBlocks(connectionSource) 33 plbs := sqlstore.NewVestingStats(connectionSource) 34 35 return bs, plbs 36 } 37 38 func TestVestingStats(t *testing.T) { 39 _, vs := setupVestingStatsTest(t) 40 41 const ( 42 party1 = "70432aa1dc6bc20a9b404d30f23e6a8def11a1692609dcef0ad8dc558d9df7db" 43 party2 = "a696300fec90755c90e2489af68fe2dfede5744184711ea3acde0ca55ae19585" 44 ) 45 46 ctx := tempTransaction(t) 47 48 t.Run("return error if do not exists", func(t *testing.T) { 49 _, err := vs.GetByPartyID(ctx, party1) 50 require.EqualError(t, err, "no resource corresponding to this id") 51 _, err = vs.GetByPartyID(ctx, party2) 52 require.EqualError(t, err, "no resource corresponding to this id") 53 }) 54 55 now := time.Now().Truncate(time.Millisecond) 56 57 t.Run("can insert successfully", func(t *testing.T) { 58 w := entities.VestingStatsUpdated{ 59 AtEpoch: 1, 60 VegaTime: now, 61 PartyVestingStats: []*entities.PartyVestingStats{ 62 { 63 PartyID: entities.PartyID(party1), 64 RewardBonusMultiplier: num.MustDecimalFromString("0.5"), 65 QuantumBalance: num.MustDecimalFromString("10001"), 66 SummedRewardBonusMultiplier: num.MustDecimalFromString("0.5"), 67 SummedQuantumBalance: num.MustDecimalFromString("10001"), 68 VegaTime: now, 69 AtEpoch: 1, 70 }, 71 { 72 PartyID: entities.PartyID(party2), 73 RewardBonusMultiplier: num.MustDecimalFromString("1.5"), 74 QuantumBalance: num.MustDecimalFromString("20001"), 75 SummedRewardBonusMultiplier: num.MustDecimalFromString("1.5"), 76 SummedQuantumBalance: num.MustDecimalFromString("20001"), 77 VegaTime: now, 78 AtEpoch: 1, 79 }, 80 }, 81 } 82 83 assert.NoError(t, vs.Add(ctx, &w)) 84 85 pvs1, err := vs.GetByPartyID(ctx, party1) 86 require.NoError(t, err) 87 require.Equal(t, *w.PartyVestingStats[0], pvs1) 88 pvs2, err := vs.GetByPartyID(ctx, party2) 89 require.NoError(t, err) 90 require.Equal(t, *w.PartyVestingStats[1], pvs2) 91 }) 92 93 now = now.Add(24 * time.Hour).Truncate(time.Millisecond) 94 95 t.Run("can replace exisisting values", func(t *testing.T) { 96 w := entities.VestingStatsUpdated{ 97 AtEpoch: 2, 98 VegaTime: now, 99 PartyVestingStats: []*entities.PartyVestingStats{ 100 { 101 PartyID: entities.PartyID(party1), 102 RewardBonusMultiplier: num.MustDecimalFromString("1"), 103 QuantumBalance: num.MustDecimalFromString("12001"), 104 SummedRewardBonusMultiplier: num.MustDecimalFromString("1"), 105 SummedQuantumBalance: num.MustDecimalFromString("12001"), 106 VegaTime: now, 107 AtEpoch: 2, 108 }, 109 { 110 PartyID: entities.PartyID(party2), 111 RewardBonusMultiplier: num.MustDecimalFromString("2"), 112 QuantumBalance: num.MustDecimalFromString("30001"), 113 SummedRewardBonusMultiplier: num.MustDecimalFromString("2"), 114 SummedQuantumBalance: num.MustDecimalFromString("30001"), 115 VegaTime: now, 116 AtEpoch: 2, 117 }, 118 }, 119 } 120 121 assert.NoError(t, vs.Add(ctx, &w)) 122 123 pvs1, err := vs.GetByPartyID(ctx, party1) 124 require.NoError(t, err) 125 require.Equal(t, *w.PartyVestingStats[0], pvs1) 126 pvs2, err := vs.GetByPartyID(ctx, party2) 127 require.NoError(t, err) 128 require.Equal(t, *w.PartyVestingStats[1], pvs2) 129 }) 130 }