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  }