github.com/lino-network/lino@v0.6.11/x/developer/model/dumper_test.go (about)

     1  package model
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"testing"
     7  	"time"
     8  
     9  	sdk "github.com/cosmos/cosmos-sdk/types"
    10  	"github.com/stretchr/testify/suite"
    11  
    12  	"github.com/lino-network/lino/testsuites"
    13  	linotypes "github.com/lino-network/lino/types"
    14  )
    15  
    16  type DumperTestSuite struct {
    17  	testsuites.CtxTestSuite
    18  	store DeveloperStorage
    19  	key   *sdk.KVStoreKey
    20  }
    21  
    22  func TestDumperTestSuite(t *testing.T) {
    23  	suite.Run(t, new(DumperTestSuite))
    24  }
    25  
    26  func (suite *DumperTestSuite) SetupTest() {
    27  	key := sdk.NewKVStoreKey("dumper")
    28  	suite.key = key
    29  	suite.SetupCtx(0, time.Unix(0, 0), suite.key)
    30  	suite.store = NewDeveloperStorage(suite.key)
    31  }
    32  
    33  func (suite *DumperTestSuite) TestDump() {
    34  	file, err := ioutil.TempFile(os.TempDir(), "linodev")
    35  	suite.Require().Nil(err)
    36  	defer os.Remove(file.Name())
    37  	suite.Require().Nil(err)
    38  	suite.store.SetDeveloper(suite.Ctx, Developer{
    39  		Username:    "test",
    40  		Website:     "web1",
    41  		Description: "desc1",
    42  	})
    43  	suite.store.SetDeveloper(suite.Ctx, Developer{
    44  		Username:    "test2",
    45  		Website:     "web2",
    46  		Description: "desc2",
    47  	})
    48  	suite.store.SetIDA(suite.Ctx, AppIDA{
    49  		App:             "app1",
    50  		Name:            "appname1",
    51  		MiniIDAPrice:    linotypes.NewMiniDollar(0),
    52  		IsRevoked:       true,
    53  		RevokeCoinPrice: linotypes.NewMiniDollar(333),
    54  	})
    55  	suite.store.SetIDABank(suite.Ctx, "app1", "user1", &IDABank{
    56  		Balance: linotypes.NewMiniDollar(33),
    57  	})
    58  	suite.store.SetAffiliatedAcc(suite.Ctx, "app1", "user1")
    59  	suite.store.SetReservePool(suite.Ctx, &ReservePool{
    60  		Total:           linotypes.NewCoinFromInt64(444),
    61  		TotalMiniDollar: linotypes.NewMiniDollar(333),
    62  	})
    63  	suite.store.SetUserRole(suite.Ctx, "user2", &Role{
    64  		AffiliatedApp: "app3",
    65  	})
    66  	DumpToFile(suite.Ctx, suite.store, file.Name())
    67  }
    68  
    69  func (suite *DumperTestSuite) TestLoad() {
    70  	LoadFromFile(suite.Ctx, suite.store, "./load.json")
    71  	dev, err := suite.store.GetDeveloper(suite.Ctx, "test")
    72  	suite.Require().Nil(err)
    73  	suite.Equal("test", string(dev.Username))
    74  	dev, err = suite.store.GetDeveloper(suite.Ctx, "test2")
    75  	suite.Require().Nil(err)
    76  	suite.Equal("test2", string(dev.Username))
    77  	ida, err := suite.store.GetIDA(suite.Ctx, "app1")
    78  	suite.Require().Nil(err)
    79  	suite.Equal(&AppIDA{
    80  		App:             "app1",
    81  		Name:            "appname1",
    82  		MiniIDAPrice:    linotypes.NewMiniDollar(0),
    83  		IsRevoked:       true,
    84  		RevokeCoinPrice: linotypes.NewMiniDollar(333),
    85  	}, ida)
    86  	suite.True(suite.store.HasAffiliatedAcc(suite.Ctx, "app1", "user1"))
    87  	suite.Equal(&ReservePool{
    88  		Total:           linotypes.NewCoinFromInt64(444),
    89  		TotalMiniDollar: linotypes.NewMiniDollar(333),
    90  	}, suite.store.GetReservePool(suite.Ctx))
    91  	role, err := suite.store.GetUserRole(suite.Ctx, "user2")
    92  	suite.Require().Nil(err)
    93  	suite.Equal(&Role{
    94  		AffiliatedApp: "app3",
    95  	}, role)
    96  }