github.com/lino-network/lino@v0.6.11/x/developer/model/storage_test.go (about) 1 package model 2 3 import ( 4 "testing" 5 6 "github.com/cosmos/cosmos-sdk/store" 7 linotypes "github.com/lino-network/lino/types" 8 9 "github.com/stretchr/testify/suite" 10 "github.com/tendermint/tendermint/libs/log" 11 12 sdk "github.com/cosmos/cosmos-sdk/types" 13 abci "github.com/tendermint/tendermint/abci/types" 14 dbm "github.com/tendermint/tm-db" 15 ) 16 17 type DevStorageTestSuite struct { 18 suite.Suite 19 ctx sdk.Context 20 ds DeveloperStorage 21 } 22 23 func TestDevStorageTestSuite(t *testing.T) { 24 suite.Run(t, new(DevStorageTestSuite)) 25 } 26 27 func (suite *DevStorageTestSuite) SetupTest() { 28 TestKVStoreKey := sdk.NewKVStoreKey("dev") 29 db := dbm.NewMemDB() 30 ms := store.NewCommitMultiStore(db) 31 ms.MountStoreWithDB(TestKVStoreKey, sdk.StoreTypeIAVL, db) 32 _ = ms.LoadLatestVersion() 33 suite.ctx = sdk.NewContext(ms, abci.Header{}, false, log.NewNopLogger()) 34 suite.ds = NewDeveloperStorage(TestKVStoreKey) 35 } 36 37 func (suite *DevStorageTestSuite) TestDeveloperGetSetHas() { 38 app1 := linotypes.AccountKey("app1") 39 app2 := linotypes.AccountKey("app2") 40 app3 := linotypes.AccountKey("app3") 41 suite.False(suite.ds.HasDeveloper(suite.ctx, app1)) 42 suite.False(suite.ds.HasDeveloper(suite.ctx, app2)) 43 44 dev1 := Developer{ 45 Username: app1, 46 Deposit: linotypes.NewCoinFromInt64(123), 47 AppConsumption: linotypes.NewMiniDollar(456), 48 Website: "web.com", 49 Description: "test app", 50 AppMetaData: "empty1", 51 IsDeleted: false, 52 NAffiliated: 0, 53 } 54 dev2 := Developer{ 55 Username: app2, 56 Deposit: linotypes.NewCoinFromInt64(333), 57 AppConsumption: linotypes.NewMiniDollar(444), 58 Website: "xyz", 59 Description: "test app 2", 60 AppMetaData: "nonnon", 61 IsDeleted: true, 62 NAffiliated: 100, 63 } 64 65 suite.ds.SetDeveloper(suite.ctx, dev1) 66 suite.ds.SetDeveloper(suite.ctx, dev2) 67 68 rst1, err := suite.ds.GetDeveloper(suite.ctx, app1) 69 suite.Require().Nil(err) 70 suite.Equal(&dev1, rst1) 71 rst2, err := suite.ds.GetDeveloper(suite.ctx, app2) 72 suite.Require().Nil(err) 73 suite.Equal(&dev2, rst2) 74 _, err = suite.ds.GetDeveloper(suite.ctx, app3) 75 suite.Require().NotNil(err) 76 77 suite.True(suite.ds.HasDeveloper(suite.ctx, app1)) 78 suite.True(suite.ds.HasDeveloper(suite.ctx, app2)) 79 suite.False(suite.ds.HasDeveloper(suite.ctx, app3)) 80 81 alldevs := suite.ds.GetAllDevelopers(suite.ctx) 82 suite.Require().Equal(2, len(alldevs)) 83 suite.Equal(dev1, alldevs[0]) 84 suite.Equal(dev2, alldevs[1]) 85 } 86 87 func (suite *DevStorageTestSuite) TestIDAGetSetHas() { 88 app1 := linotypes.AccountKey("app1") 89 app2 := linotypes.AccountKey("app2") 90 app3 := linotypes.AccountKey("app3") 91 suite.False(suite.ds.HasIDA(suite.ctx, app1)) 92 suite.False(suite.ds.HasIDA(suite.ctx, app2)) 93 94 ida1 := AppIDA{ 95 App: app1, 96 Name: "COOL", 97 MiniIDAPrice: linotypes.NewMiniDollar(99), 98 IsRevoked: false, 99 RevokeCoinPrice: linotypes.NewMiniDollar(0), 100 } 101 ida2 := AppIDA{ 102 App: app2, 103 Name: "DUDE", 104 MiniIDAPrice: linotypes.NewMiniDollar(5), 105 IsRevoked: true, 106 RevokeCoinPrice: linotypes.NewMiniDollar(7), 107 } 108 109 suite.ds.SetIDA(suite.ctx, ida1) 110 suite.ds.SetIDA(suite.ctx, ida2) 111 112 rst1, err := suite.ds.GetIDA(suite.ctx, app1) 113 suite.Require().Nil(err) 114 suite.Equal(&ida1, rst1) 115 rst2, err := suite.ds.GetIDA(suite.ctx, app2) 116 suite.Require().Nil(err) 117 suite.Equal(&ida2, rst2) 118 _, err = suite.ds.GetIDA(suite.ctx, app3) 119 suite.Require().NotNil(err) 120 121 _, err = suite.ds.GetDeveloper(suite.ctx, app3) 122 suite.Require().NotNil(err) 123 124 suite.True(suite.ds.HasIDA(suite.ctx, app1)) 125 suite.True(suite.ds.HasIDA(suite.ctx, app2)) 126 suite.False(suite.ds.HasIDA(suite.ctx, app3)) 127 } 128 129 func (suite *DevStorageTestSuite) TestIDAStatsGetSet() { 130 app1 := linotypes.AccountKey("app1") 131 suite.Equal(&AppIDAStats{ 132 Total: linotypes.NewMiniDollar(0), 133 }, suite.ds.GetIDAStats(suite.ctx, app1)) 134 suite.ds.SetIDAStats(suite.ctx, app1, AppIDAStats{ 135 Total: linotypes.NewMiniDollar(3), 136 }) 137 suite.Equal(&AppIDAStats{ 138 Total: linotypes.NewMiniDollar(3), 139 }, suite.ds.GetIDAStats(suite.ctx, app1)) 140 } 141 142 func (suite *DevStorageTestSuite) TestUserRoleGetSetHasDel() { 143 app1 := linotypes.AccountKey("app1") 144 user1 := linotypes.AccountKey("user1") 145 app2 := linotypes.AccountKey("app2") 146 user2 := linotypes.AccountKey("user2") 147 user3 := linotypes.AccountKey("user3") 148 role1 := &Role{ 149 AffiliatedApp: app1, 150 } 151 role2 := &Role{ 152 AffiliatedApp: app2, 153 } 154 155 _, err := suite.ds.GetUserRole(suite.ctx, user1) 156 suite.Require().NotNil(err) 157 _, err = suite.ds.GetUserRole(suite.ctx, user2) 158 suite.Require().NotNil(err) 159 suite.False(suite.ds.HasUserRole(suite.ctx, user1)) 160 suite.False(suite.ds.HasUserRole(suite.ctx, user2)) 161 suite.False(suite.ds.HasUserRole(suite.ctx, user3)) 162 163 suite.ds.SetUserRole(suite.ctx, user1, role1) 164 suite.ds.SetUserRole(suite.ctx, user2, role2) 165 166 rst1, err := suite.ds.GetUserRole(suite.ctx, user1) 167 suite.Require().Nil(err) 168 suite.Equal(role1, rst1) 169 rst2, err := suite.ds.GetUserRole(suite.ctx, user2) 170 suite.Require().Nil(err) 171 suite.Equal(role2, rst2) 172 suite.True(suite.ds.HasUserRole(suite.ctx, user1)) 173 suite.True(suite.ds.HasUserRole(suite.ctx, user2)) 174 suite.False(suite.ds.HasUserRole(suite.ctx, user3)) 175 176 suite.ds.DelUserRole(suite.ctx, user2) 177 suite.ds.DelUserRole(suite.ctx, user3) 178 179 rst1, err = suite.ds.GetUserRole(suite.ctx, user1) 180 suite.Require().Nil(err) 181 suite.Equal(role1, rst1) 182 _, err = suite.ds.GetUserRole(suite.ctx, user2) 183 suite.Require().NotNil(err) 184 suite.True(suite.ds.HasUserRole(suite.ctx, user1)) 185 suite.False(suite.ds.HasUserRole(suite.ctx, user2)) 186 suite.False(suite.ds.HasUserRole(suite.ctx, user3)) 187 } 188 189 func (suite *DevStorageTestSuite) TestGetSetIDABank() { 190 app1 := linotypes.AccountKey("app1") 191 user1 := linotypes.AccountKey("user1") 192 app2 := linotypes.AccountKey("app2") 193 user2 := linotypes.AccountKey("user2") 194 195 empty := suite.ds.GetIDABank(suite.ctx, app1, user1) 196 suite.Equal(&IDABank{ 197 Balance: linotypes.NewMiniDollar(0), 198 Unauthed: false, 199 }, empty) 200 201 suite.ds.SetIDABank(suite.ctx, app1, user1, &IDABank{ 202 Balance: linotypes.NewMiniDollar(123), 203 Unauthed: false, 204 }) 205 suite.Equal(&IDABank{ 206 Balance: linotypes.NewMiniDollar(123), 207 Unauthed: false, 208 }, suite.ds.GetIDABank(suite.ctx, app1, user1)) 209 210 suite.Equal(&IDABank{ 211 Balance: linotypes.NewMiniDollar(0), 212 Unauthed: false, 213 }, suite.ds.GetIDABank(suite.ctx, app2, user2)) 214 } 215 216 func (suite *DevStorageTestSuite) TestSetHasDelItrAffiliated() { 217 app1 := linotypes.AccountKey("app1") 218 user1 := linotypes.AccountKey("user1") 219 app2 := linotypes.AccountKey("app2") 220 user2 := linotypes.AccountKey("user2") 221 222 suite.False(suite.ds.HasAffiliatedAcc(suite.ctx, app1, user1)) 223 suite.False(suite.ds.HasAffiliatedAcc(suite.ctx, app2, user2)) 224 225 suite.ds.SetAffiliatedAcc(suite.ctx, app1, user1) 226 suite.ds.SetAffiliatedAcc(suite.ctx, app1, user2) 227 suite.True(suite.ds.HasAffiliatedAcc(suite.ctx, app1, user1)) 228 suite.True(suite.ds.HasAffiliatedAcc(suite.ctx, app1, user2)) 229 suite.False(suite.ds.HasAffiliatedAcc(suite.ctx, app2, user2)) 230 231 all := suite.ds.GetAllAffiliatedAcc(suite.ctx, app1) 232 suite.Require().Equal(2, len(all)) 233 suite.Equal([]linotypes.AccountKey{user1, user2}, all) 234 235 all2 := suite.ds.GetAllAffiliatedAcc(suite.ctx, app2) 236 suite.Equal(0, len(all2)) 237 238 suite.ds.DelAffiliatedAcc(suite.ctx, app1, user1) 239 suite.ds.DelAffiliatedAcc(suite.ctx, app2, user2) 240 suite.False(suite.ds.HasAffiliatedAcc(suite.ctx, app1, user1)) 241 suite.True(suite.ds.HasAffiliatedAcc(suite.ctx, app1, user2)) 242 243 all = suite.ds.GetAllAffiliatedAcc(suite.ctx, app1) 244 suite.Require().Equal(1, len(all)) 245 suite.Equal([]linotypes.AccountKey{user2}, all) 246 } 247 248 func (suite *DevStorageTestSuite) TestGetSetReservePool() { 249 suite.Panics(func() { 250 suite.ds.GetReservePool(suite.ctx) 251 }) 252 suite.ds.SetReservePool(suite.ctx, &ReservePool{ 253 Total: linotypes.NewCoinFromInt64(123), 254 TotalMiniDollar: linotypes.NewMiniDollar(456), 255 }) 256 suite.Equal(&ReservePool{ 257 Total: linotypes.NewCoinFromInt64(123), 258 TotalMiniDollar: linotypes.NewMiniDollar(456), 259 }, suite.ds.GetReservePool(suite.ctx)) 260 } 261 262 func (suite *DevStorageTestSuite) TestGetSetEmptyReservePool() { 263 suite.ds.SetReservePool(suite.ctx, &ReservePool{}) 264 suite.Equal(&ReservePool{ 265 Total: linotypes.NewCoinFromInt64(0), 266 TotalMiniDollar: linotypes.NewMiniDollar(0), 267 }, suite.ds.GetReservePool(suite.ctx)) 268 }