Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Empty dTag transfer fix #303

Merged
merged 6 commits into from
Oct 15, 2020
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# Version 0.13.0
## Changes
- Removed the relationship event attribute key prefix. (#300)
- Removed the user_block event attribute key prefix. (#291)
- Removed the relationship event attribute key prefix (#300)
- Removed the user_block event attribute key prefix (#291)
- Fixed the possibility to request a transfer for an empty dTag (#292)
RiccardoM marked this conversation as resolved.
Show resolved Hide resolved

# Version 0.12.3
## Changes
Expand Down
38 changes: 25 additions & 13 deletions cli_test/cli_profile_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -339,34 +339,46 @@ func TestDesmosCLIRequestDTagTransfer(t *testing.T) {

// Save key addresses for later use
fooAddr := f.KeyAddress(keyFoo)
barAddr := f.KeyAddress(keyBar)
calAddr := f.KeyAddress(keyBaz)
f.TxSend(fooAddr.String(), barAddr, sdk.NewCoin(denom, sdk.NewInt(1000)), "-y")
f.TxSend(fooAddr.String(), calAddr, sdk.NewCoin(denom, sdk.NewInt(1000)), "-y")

// Later usage variables
fooAcc := f.QueryAccount(fooAddr)
startTokens := sdk.TokensFromConsensusPower(140)
require.Equal(t, startTokens, fooAcc.GetCoins().AmountOf(denom))

owner, err := sdk.AccAddressFromBech32("desmos15ux5mc98jlhsg30dzwwv06ftjs82uy4g3t99ru")
require.NoError(t, err)
// Create the profile of the dTag owner
RiccardoM marked this conversation as resolved.
Show resolved Hide resolved
success, _, sterr := f.TxProfileSave("mrBrown", fooAddr, "-y")
require.True(t, success)
require.Empty(t, sterr)
tests.WaitForNextNBlocksTM(1, f.Port)

owner2, err := sdk.AccAddressFromBech32("desmos16namwr0llz5p82kug58fx7xp3rccqfp25j30h6")
require.NoError(t, err)
// Make sure the profile is saved
storedProfiles := f.QueryProfiles()
require.NotEmpty(t, storedProfiles)
profile := storedProfiles[0]
require.Equal(t, profile.DTag, "mrBrown")

// Create a request
success, _, sterr := f.TxProfileRequestDTagTransfer(owner, fooAddr, "-y")
success, _, sterr = f.TxProfileRequestDTagTransfer(fooAddr, barAddr, "-y")
require.True(t, success)
require.Empty(t, sterr)
tests.WaitForNextNBlocksTM(1, f.Port)

// Make sure the request is saved
storedRequests := f.QueryUserDTagRequests(owner)
storedRequests := f.QueryUserDTagRequests(fooAddr)
require.NotEmpty(t, storedRequests)

// Test --dry-run
success, _, _ = f.TxProfileRequestDTagTransfer(owner2, fooAddr, "--dry-run")

// Create the profile of the dTag owner
success, _, sterr = f.TxProfileSave("mrPink", calAddr, "-y")
require.True(t, success)
require.Empty(t, sterr)
tests.WaitForNextNBlocksTM(1, f.Port)

success, _, _ = f.TxProfileRequestDTagTransfer(calAddr, fooAddr, "--dry-run")
require.True(t, success)

// Test --generate-only
success, stdout, stderr := f.TxProfileRequestDTagTransfer(owner2, fooAddr, "--generate-only=true")
success, stdout, stderr := f.TxProfileRequestDTagTransfer(calAddr, fooAddr, "--generate-only=true")
require.Empty(t, stderr)
require.True(t, success)
msg := unmarshalStdTx(f.T, stdout)
Expand Down
5 changes: 5 additions & 0 deletions x/profiles/keeper/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,11 @@ func handleMsgDeleteProfile(ctx sdk.Context, keeper Keeper, msg types.MsgDeleteP
// handleMsgRequestDTagTransfer handles the request of a dTag transfer
func handleMsgRequestDTagTransfer(ctx sdk.Context, keeper Keeper, msg types.MsgRequestDTagTransfer) (*sdk.Result, error) {
dtagToTrade := keeper.GetDtagFromAddress(ctx, msg.CurrentOwner)
if len(dtagToTrade) == 0 {
return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest,
fmt.Sprintf("The user with address %s doesn't have a profile yet so no dTag can be transferred",
RiccardoM marked this conversation as resolved.
Show resolved Hide resolved
msg.CurrentOwner))
}
transferRequest := types.NewDTagTransferRequest(dtagToTrade, msg.CurrentOwner, msg.ReceivingUser)

if err := keeper.SaveDTagTransferRequest(ctx, transferRequest); err != nil {
Expand Down
16 changes: 15 additions & 1 deletion x/profiles/keeper/handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -316,16 +316,27 @@ func (suite *KeeperTestSuite) Test_handleMsgRequestDTagTransfer() {
tests := []struct {
name string
msg types.MsgRequestDTagTransfer
hasProfile bool
storedDTagReqs []types.DTagTransferRequest
expErr error
expEvent sdk.Event
}{
{
name: "No DTag to transfer returns error",
msg: types.NewMsgRequestDTagTransfer(suite.testData.otherUser, suite.testData.user),
storedDTagReqs: nil,
hasProfile: false,
expErr: sdkerrors.Wrap(sdkerrors.ErrInvalidRequest,
fmt.Sprintf("The user with address %s doesn't have a profile yet so no dTag can be transferred",
RiccardoM marked this conversation as resolved.
Show resolved Hide resolved
suite.testData.otherUser)),
},
{
name: "Already present request returns error",
msg: types.NewMsgRequestDTagTransfer(suite.testData.user, suite.testData.otherUser),
storedDTagReqs: []types.DTagTransferRequest{
types.NewDTagTransferRequest("dtag", suite.testData.user, suite.testData.otherUser),
},
hasProfile: true,
expErr: sdkerrors.Wrap(sdkerrors.ErrInvalidRequest,
fmt.Sprintf("the transfer request from %s to %s has already been made",
suite.testData.otherUser, suite.testData.user)),
Expand All @@ -334,6 +345,7 @@ func (suite *KeeperTestSuite) Test_handleMsgRequestDTagTransfer() {
name: "Not already present request saved correctly",
msg: types.NewMsgRequestDTagTransfer(suite.testData.user, suite.testData.otherUser),
storedDTagReqs: nil,
hasProfile: true,
expErr: nil,
expEvent: sdk.NewEvent(
types.EventTypeDTagTransferRequest,
Expand All @@ -354,7 +366,9 @@ func (suite *KeeperTestSuite) Test_handleMsgRequestDTagTransfer() {
)
}

suite.keeper.AssociateDtagWithAddress(suite.ctx, "dtag", suite.testData.user)
if test.hasProfile {
suite.keeper.AssociateDtagWithAddress(suite.ctx, "dtag", suite.testData.user)
}

handler := keeper.NewHandler(suite.keeper)
res, err := handler(suite.ctx, test.msg)
Expand Down