From df001ee8e01165ed1a7fd154e9df77432e893050 Mon Sep 17 00:00:00 2001 From: Muku <44918265+muku314115@users.noreply.github.com> Date: Wed, 13 Dec 2023 01:14:21 +0530 Subject: [PATCH] chore: improve test suite testutil/keeper by adding utility methods for state initialization (#1019) * adding helper utils to shorten boilerplate code * extending * cleaning up more code and adding optional args * semantics * semantics * fix comments and code format --------- Co-authored-by: Pantani --- testutil/keeper/launch.go | 18 +++++++ testutil/keeper/profile.go | 10 ++-- testutil/keeper/project.go | 17 +++++++ x/launch/keeper/chain_test.go | 18 ++----- x/launch/keeper/msg_create_chain_test.go | 16 ++----- x/launch/keeper/msg_edit_chain_test.go | 48 +++++-------------- .../msg_update_launch_information_test.go | 14 ++---- x/project/keeper/msg_create_project_test.go | 5 +- 8 files changed, 66 insertions(+), 80 deletions(-) create mode 100644 testutil/keeper/launch.go create mode 100644 testutil/keeper/project.go diff --git a/testutil/keeper/launch.go b/testutil/keeper/launch.go new file mode 100644 index 00000000..16410340 --- /dev/null +++ b/testutil/keeper/launch.go @@ -0,0 +1,18 @@ +package keeper + +import ( + "context" + "math/rand" + + "github.com/stretchr/testify/require" + + "github.com/tendermint/spn/testutil/sample" +) + +// CreateChain creates a chain in the store and returns launch ID. +func (tm TestMsgServers) CreateChain(ctx context.Context, r *rand.Rand, coordAddress string, genesisURL string, hasProject bool, projectID uint64) uint64 { + msgCreateChain := sample.MsgCreateChain(r, coordAddress, genesisURL, hasProject, projectID) + res, err := tm.LaunchSrv.CreateChain(ctx, &msgCreateChain) + require.NoError(tm.T, err) + return res.LaunchID +} diff --git a/testutil/keeper/profile.go b/testutil/keeper/profile.go index cfd29eae..7d736b4f 100644 --- a/testutil/keeper/profile.go +++ b/testutil/keeper/profile.go @@ -6,16 +6,20 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/tendermint/spn/testutil/sample" profiletypes "github.com/tendermint/spn/x/profile/types" ) // CreateCoordinator creates a coordinator in the store and returns ID with associated address func (tm TestMsgServers) CreateCoordinator(ctx context.Context, r *rand.Rand) (id uint64, address sdk.AccAddress) { - addr := sample.AccAddress(r) + return tm.CreateCoordinatorWithAddr(ctx, r, sample.Address(r)) +} + +// CreateCoordinatorWithAddr creates a coordinator in the store and returns ID with associated address +func (tm TestMsgServers) CreateCoordinatorWithAddr(ctx context.Context, r *rand.Rand, address string) (uint64, sdk.AccAddress) { + addr := sdk.MustAccAddressFromBech32(address) res, err := tm.ProfileSrv.CreateCoordinator(ctx, &profiletypes.MsgCreateCoordinator{ - Address: addr.String(), + Address: address, Description: sample.CoordinatorDescription(r), }) require.NoError(tm.T, err) diff --git a/testutil/keeper/project.go b/testutil/keeper/project.go new file mode 100644 index 00000000..b06591df --- /dev/null +++ b/testutil/keeper/project.go @@ -0,0 +1,17 @@ +package keeper + +import ( + "context" + "math/rand" + + "github.com/stretchr/testify/require" + "github.com/tendermint/spn/testutil/sample" +) + +// CreateProject creates a coordinator in the store and returns ID with associated address +func (tm TestMsgServers) CreateProject(ctx context.Context, r *rand.Rand, coordAddress string) (id uint64) { + msgCreateProject := sample.MsgCreateProject(r, coordAddress) + resProject, err := tm.ProjectSrv.CreateProject(ctx, &msgCreateProject) + require.NoError(tm.T, err) + return resProject.ProjectID +} diff --git a/x/launch/keeper/chain_test.go b/x/launch/keeper/chain_test.go index 246cb460..a637af6d 100644 --- a/x/launch/keeper/chain_test.go +++ b/x/launch/keeper/chain_test.go @@ -15,25 +15,13 @@ import ( func TestKeeper_CreateNewChain(t *testing.T) { sdkCtx, tk, ts := testkeeper.NewTestSetup(t) ctx := sdk.WrapSDKContext(sdkCtx) - coordAddress := sample.Address(r) - coordNoProjectAddress := sample.Address(r) // Create coordinators - msgCreateCoordinator := sample.MsgCreateCoordinator(coordAddress) - res, err := ts.ProfileSrv.CreateCoordinator(ctx, &msgCreateCoordinator) - require.NoError(t, err) - coordID := res.CoordinatorID - - msgCreateCoordinator = sample.MsgCreateCoordinator(coordNoProjectAddress) - res, err = ts.ProfileSrv.CreateCoordinator(ctx, &msgCreateCoordinator) - require.NoError(t, err) - coordNoProjectID := res.CoordinatorID + coordID, coordAddress := ts.CreateCoordinator(ctx, r) + coordNoProjectID, _ := ts.CreateCoordinator(ctx, r) // Create a project - msgCreateProject := sample.MsgCreateProject(r, coordAddress) - resProject, err := ts.ProjectSrv.CreateProject(ctx, &msgCreateProject) - require.NoError(t, err) - projectID := resProject.ProjectID + projectID := ts.CreateProject(ctx, r, coordAddress.String()) for _, tc := range []struct { name string diff --git a/x/launch/keeper/msg_create_chain_test.go b/x/launch/keeper/msg_create_chain_test.go index a5201dfd..aae3d778 100644 --- a/x/launch/keeper/msg_create_chain_test.go +++ b/x/launch/keeper/msg_create_chain_test.go @@ -58,28 +58,20 @@ func TestMsgCreateChain(t *testing.T) { ) // Create an invalid coordinator - invalidCoordAddress := sample.Address(r) - msgCreateInvalidCoordinator := sample.MsgCreateCoordinator(invalidCoordAddress) - _, err := ts.ProfileSrv.CreateCoordinator(ctx, &msgCreateInvalidCoordinator) - require.NoError(t, err) + _, invalidCoordAddr := ts.CreateCoordinator(ctx, r) + invalidCoordAddress := invalidCoordAddr.String() // Create coordinators for i := range coordAddrs { addr := sample.Address(r) coordAddrs[i] = addr - msgCreateCoordinator := sample.MsgCreateCoordinator(addr) - resCoord, err := ts.ProfileSrv.CreateCoordinator(ctx, &msgCreateCoordinator) - require.NoError(t, err) - coordMap[addr] = resCoord.CoordinatorID + coordMap[addr], _ = ts.CreateCoordinatorWithAddr(ctx, r, addr) } // Create a project for each valid coordinator for i := range coordAddrs { addr := coordAddrs[i] - msgCreateProject := sample.MsgCreateProject(r, addr) - resProject, err := ts.ProjectSrv.CreateProject(ctx, &msgCreateProject) - require.NoError(t, err) - prjtMap[addr] = resProject.ProjectID + prjtMap[addr] = ts.CreateProject(ctx, r, addr) } // assign random sdk.Coins to `chainCreationFee` param and provide balance to coordinators diff --git a/x/launch/keeper/msg_edit_chain_test.go b/x/launch/keeper/msg_edit_chain_test.go index 474da94e..2f87718c 100644 --- a/x/launch/keeper/msg_edit_chain_test.go +++ b/x/launch/keeper/msg_edit_chain_test.go @@ -17,8 +17,6 @@ import ( func TestMsgEditChain(t *testing.T) { var ( - coordAddress = sample.Address(r) - coordAddress2 = sample.Address(r) coordNoExist = sample.Address(r) launchIDNoExist = uint64(1000) sdkCtx, tk, ts = testkeeper.NewTestSetup(t) @@ -26,56 +24,34 @@ func TestMsgEditChain(t *testing.T) { ) // Create coordinators - msgCreateCoordinator := sample.MsgCreateCoordinator(coordAddress) - _, err := ts.ProfileSrv.CreateCoordinator(ctx, &msgCreateCoordinator) - require.NoError(t, err) + _, coordAddr := ts.CreateCoordinator(ctx, r) + _, coordAddr2 := ts.CreateCoordinator(ctx, r) - msgCreateCoordinator = sample.MsgCreateCoordinator(coordAddress2) - _, err = ts.ProfileSrv.CreateCoordinator(ctx, &msgCreateCoordinator) - require.NoError(t, err) + coordAddress := coordAddr.String() + coordAddress2 := coordAddr2.String() // Create a chain - msgCreateChain := sample.MsgCreateChain(r, coordAddress, "", false, 0) - res, err := ts.LaunchSrv.CreateChain(ctx, &msgCreateChain) - require.NoError(t, err) - launchID := res.LaunchID + launchID := ts.CreateChain(ctx, r, coordAddress, "", false, 0) // create a project - msgCreateProject := sample.MsgCreateProject(r, coordAddress) - resProject, err := ts.ProjectSrv.CreateProject(ctx, &msgCreateProject) - require.NoError(t, err) + projectID := ts.CreateProject(ctx, r, coordAddress) // create a chain with an existing project - msgCreateChain = sample.MsgCreateChain(r, coordAddress, "", true, resProject.ProjectID) - res, err = ts.LaunchSrv.CreateChain(ctx, &msgCreateChain) - require.NoError(t, err) - launchIDHasProject := res.LaunchID + launchIDHasProject := ts.CreateChain(ctx, r, coordAddress, "", true, projectID) // create a project - msgCreateProject = sample.MsgCreateProject(r, coordAddress) - resProject, err = ts.ProjectSrv.CreateProject(ctx, &msgCreateProject) - require.NoError(t, err) - validProjectID := resProject.ProjectID + validProjectID := ts.CreateProject(ctx, r, coordAddress) // create a project from a different address - msgCreateProject = sample.MsgCreateProject(r, coordAddress2) - resProject, err = ts.ProjectSrv.CreateProject(ctx, &msgCreateProject) - require.NoError(t, err) - projectDifferentCoordinator := resProject.ProjectID + projectDifferentCoordinator := ts.CreateProject(ctx, r, coordAddress2) // Create a new chain for more tests - msgCreateChain = sample.MsgCreateChain(r, coordAddress, "", false, 0) - res, err = ts.LaunchSrv.CreateChain(ctx, &msgCreateChain) - require.NoError(t, err) - launchID2 := res.LaunchID + launchID2 := ts.CreateChain(ctx, r, coordAddress, "", false, 0) // create a new project and add a chainProjects entry to it - msgCreateProject = sample.MsgCreateProject(r, coordAddress) - resProject, err = ts.ProjectSrv.CreateProject(ctx, &msgCreateProject) - require.NoError(t, err) - projectDuplicateChain := resProject.ProjectID + projectDuplicateChain := ts.CreateProject(ctx, r, coordAddress) - err = tk.ProjectKeeper.AddChainToProject(sdkCtx, projectDuplicateChain, launchID2) + err := tk.ProjectKeeper.AddChainToProject(sdkCtx, projectDuplicateChain, launchID2) require.NoError(t, err) // create message with an invalid metadata length diff --git a/x/launch/keeper/msg_update_launch_information_test.go b/x/launch/keeper/msg_update_launch_information_test.go index 413d5ebe..baed2e14 100644 --- a/x/launch/keeper/msg_update_launch_information_test.go +++ b/x/launch/keeper/msg_update_launch_information_test.go @@ -15,21 +15,15 @@ import ( func TestMsgUpdateLaunchInformation(t *testing.T) { sdkCtx, tk, ts := testkeeper.NewTestSetup(t) ctx := sdk.WrapSDKContext(sdkCtx) - coordAddress := sample.Address(r) - coordAddress2 := sample.Address(r) coordNoExist := sample.Address(r) launchIDNoExist := uint64(1000) // Create coordinators - msgCreateCoordinator := sample.MsgCreateCoordinator(coordAddress) - resCoord, err := ts.ProfileSrv.CreateCoordinator(ctx, &msgCreateCoordinator) - require.NoError(t, err) + coordID, coordAddr := ts.CreateCoordinator(ctx, r) + coordAddress := coordAddr.String() - coordID := resCoord.CoordinatorID - - msgCreateCoordinator = sample.MsgCreateCoordinator(coordAddress2) - _, err = ts.ProfileSrv.CreateCoordinator(ctx, &msgCreateCoordinator) - require.NoError(t, err) + _, coordAddr2 := ts.CreateCoordinator(ctx, r) + coordAddress2 := coordAddr2.String() // Create a chain launchID := uint64(1) diff --git a/x/project/keeper/msg_create_project_test.go b/x/project/keeper/msg_create_project_test.go index c8da9f09..0a025158 100644 --- a/x/project/keeper/msg_create_project_test.go +++ b/x/project/keeper/msg_create_project_test.go @@ -60,10 +60,7 @@ func TestMsgCreateProject(t *testing.T) { for i := range coordAddrs { addr := sample.Address(r) coordAddrs[i] = addr - msgCreateCoordinator := sample.MsgCreateCoordinator(addr) - resCoord, err := ts.ProfileSrv.CreateCoordinator(ctx, &msgCreateCoordinator) - require.NoError(t, err) - coordMap[addr] = resCoord.CoordinatorID + coordMap[addr], _ = ts.CreateCoordinatorWithAddr(ctx, r, addr) } })