-
Notifications
You must be signed in to change notification settings - Fork 47
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
feat: mint & burn e2e tests for fiattokenfactory #371
Merged
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -1288,3 +1288,236 @@ func TestFiatTFUnblacklist(t *testing.T) { | |
_, err = e2e.ShowBlacklisted(ctx, val, blacklistedUser1) | ||
require.Error(t, err, "query succeeded, blacklisted account should not exist") | ||
} | ||
|
||
func TestFiatTFMint(t *testing.T) { | ||
if testing.Short() { | ||
t.Skip() | ||
} | ||
t.Parallel() | ||
|
||
ctx := context.Background() | ||
|
||
nw := e2e.NobleSpinUp(t, ctx, true) | ||
noble := nw.Chain | ||
val := noble.Validators[0] | ||
|
||
// ACTION: Mint while TF is paused | ||
// EXPECTED: Request fails; amount not minted | ||
|
||
w := interchaintest.GetAndFundTestUsers(t, ctx, "receiver-1", math.OneInt(), noble) | ||
receiver1 := w[0] | ||
|
||
e2e.PauseFiatTF(t, ctx, val, nw.FiatTfRoles.Pauser) | ||
|
||
showMinterPreMint, err := e2e.ShowMinters(ctx, val, nw.FiatTfRoles.Minter) | ||
require.NoError(t, err, "failed to query show-minter") | ||
|
||
preMintAllowance := showMinterPreMint.Minters.Allowance.Amount | ||
|
||
_, err = val.ExecTx(ctx, nw.FiatTfRoles.Minter.KeyName(), "fiat-tokenfactory", "mint", receiver1.FormattedAddress(), "1uusdc") | ||
require.ErrorContains(t, err, "minting is paused") | ||
|
||
bal, err := noble.GetBalance(ctx, receiver1.FormattedAddress(), "uusdc") | ||
require.NoError(t, err, "error getting balance") | ||
require.True(t, bal.IsZero()) | ||
|
||
// allowance should not have changed | ||
showMinterPostMint, err := e2e.ShowMinters(ctx, val, nw.FiatTfRoles.Minter) | ||
require.NoError(t, err, "failed to query show-minter") | ||
expectedShowMinters := fiattokenfactorytypes.QueryGetMintersResponse{ | ||
Minters: fiattokenfactorytypes.Minters{ | ||
Address: nw.FiatTfRoles.Minter.FormattedAddress(), | ||
Allowance: sdk.Coin{ | ||
Denom: "uusdc", | ||
Amount: preMintAllowance, | ||
}, | ||
}, | ||
} | ||
|
||
require.Equal(t, expectedShowMinters.Minters, showMinterPostMint.Minters) | ||
|
||
e2e.UnpauseFiatTF(t, ctx, val, nw.FiatTfRoles.Pauser) | ||
|
||
// ACTION: Mint from non minter | ||
// EXPECTED: Request fails; amount not minted | ||
|
||
w = interchaintest.GetAndFundTestUsers(t, ctx, "alice", math.OneInt(), noble) | ||
alice := w[0] | ||
|
||
_, err = val.ExecTx(ctx, alice.KeyName(), "fiat-tokenfactory", "mint", receiver1.FormattedAddress(), "1uusdc") | ||
require.ErrorContains(t, err, "you are not a minter") | ||
|
||
bal, err = noble.GetBalance(ctx, receiver1.FormattedAddress(), "uusdc") | ||
require.NoError(t, err, "error getting balance") | ||
require.True(t, bal.IsZero()) | ||
|
||
// ACTION: Mint from blacklisted minter | ||
// EXPECTED: Request fails; amount not minted | ||
|
||
e2e.BlacklistAccount(t, ctx, val, nw.FiatTfRoles.Blacklister, nw.FiatTfRoles.Minter) | ||
|
||
_, err = val.ExecTx(ctx, nw.FiatTfRoles.Minter.KeyName(), "fiat-tokenfactory", "mint", receiver1.FormattedAddress(), "1uusdc") | ||
require.ErrorContains(t, err, "minter address is blacklisted") | ||
|
||
bal, err = noble.GetBalance(ctx, receiver1.FormattedAddress(), "uusdc") | ||
require.NoError(t, err, "error getting balance") | ||
require.True(t, bal.IsZero()) | ||
|
||
// allowance should not have changed | ||
showMintersRes, err := e2e.ShowMinters(ctx, val, nw.FiatTfRoles.Minter) | ||
require.NoError(t, err, "failed to query show-minter") | ||
|
||
require.Equal(t, expectedShowMinters.Minters, showMintersRes.Minters) | ||
|
||
e2e.UnblacklistAccount(t, ctx, val, nw.FiatTfRoles.Blacklister, nw.FiatTfRoles.Minter) | ||
|
||
// ACTION: Mint to blacklisted account | ||
// EXPECTED: Request fails; amount not minted | ||
|
||
e2e.BlacklistAccount(t, ctx, val, nw.FiatTfRoles.Blacklister, receiver1) | ||
|
||
_, err = val.ExecTx(ctx, nw.FiatTfRoles.Minter.KeyName(), "fiat-tokenfactory", "mint", receiver1.FormattedAddress(), "1uusdc") | ||
require.ErrorContains(t, err, "receiver address is blacklisted") | ||
|
||
bal, err = noble.GetBalance(ctx, receiver1.FormattedAddress(), "uusdc") | ||
require.NoError(t, err, "error getting balance") | ||
require.True(t, bal.IsZero()) | ||
|
||
// allowance should not have changed | ||
showMintersRes, err = e2e.ShowMinters(ctx, val, nw.FiatTfRoles.Minter) | ||
require.NoError(t, err, "failed to query show-minter") | ||
|
||
require.Equal(t, expectedShowMinters.Minters, showMintersRes.Minters) | ||
|
||
e2e.UnblacklistAccount(t, ctx, val, nw.FiatTfRoles.Blacklister, receiver1) | ||
|
||
// ACTION: Mint an amount that exceeds the minters allowance | ||
// EXPECTED: Request fails; amount not minted | ||
|
||
exceedAllowance := preMintAllowance.Add(math.NewInt(99)) | ||
_, err = val.ExecTx(ctx, nw.FiatTfRoles.Minter.KeyName(), "fiat-tokenfactory", "mint", receiver1.FormattedAddress(), fmt.Sprintf("%duusdc", exceedAllowance.Int64())) | ||
require.ErrorContains(t, err, "minting amount is greater than the allowance") | ||
|
||
bal, err = noble.GetBalance(ctx, receiver1.FormattedAddress(), "uusdc") | ||
require.NoError(t, err, "error getting balance") | ||
require.True(t, bal.IsZero()) | ||
|
||
// allowance should not have changed | ||
showMintersRes, err = e2e.ShowMinters(ctx, val, nw.FiatTfRoles.Minter) | ||
require.NoError(t, err, "failed to query show-minter") | ||
require.Equal(t, expectedShowMinters.Minters, showMintersRes.Minters) | ||
|
||
// ACTION: Successfully mint into an account | ||
// EXPECTED: Success | ||
|
||
mintAmount := int64(3) | ||
_, err = val.ExecTx(ctx, nw.FiatTfRoles.Minter.KeyName(), "fiat-tokenfactory", "mint", receiver1.FormattedAddress(), fmt.Sprintf("%duusdc", mintAmount)) | ||
require.NoError(t, err, "error minting") | ||
|
||
bal, err = noble.GetBalance(ctx, receiver1.FormattedAddress(), "uusdc") | ||
require.NoError(t, err, "error getting balance") | ||
require.True(t, bal.Equal(math.NewInt(mintAmount))) | ||
|
||
showMintersRes, err = e2e.ShowMinters(ctx, val, nw.FiatTfRoles.Minter) | ||
require.NoError(t, err, "failed to query show-minter") | ||
expectedShowMinters.Minters.Allowance = sdk.Coin{ | ||
Denom: "uusdc", | ||
Amount: preMintAllowance.Sub(math.NewInt(mintAmount)), | ||
} | ||
|
||
require.Equal(t, expectedShowMinters.Minters, showMintersRes.Minters) | ||
} | ||
|
||
func TestFiatTFBurn(t *testing.T) { | ||
if testing.Short() { | ||
t.Skip() | ||
} | ||
t.Parallel() | ||
|
||
ctx := context.Background() | ||
|
||
nw := e2e.NobleSpinUp(t, ctx, true) | ||
noble := nw.Chain | ||
val := noble.Validators[0] | ||
|
||
// setup - mint into minter's wallet | ||
mintAmount := int64(5) | ||
_, err := val.ExecTx(ctx, nw.FiatTfRoles.Minter.KeyName(), "fiat-tokenfactory", "mint", nw.FiatTfRoles.Minter.FormattedAddress(), fmt.Sprintf("%duusdc", mintAmount)) | ||
require.NoError(t, err, "error minting") | ||
|
||
bal, err := noble.GetBalance(ctx, nw.FiatTfRoles.Minter.FormattedAddress(), "uusdc") | ||
require.NoError(t, err, "error getting balance") | ||
require.EqualValues(t, mintAmount, bal.Int64()) | ||
|
||
// ACTION: Burn while TF is paused | ||
// EXPECTED: Request fails; amount not burned | ||
|
||
e2e.PauseFiatTF(t, ctx, val, nw.FiatTfRoles.Pauser) | ||
|
||
burnAmount := int64(1) | ||
_, err = val.ExecTx(ctx, nw.FiatTfRoles.Minter.KeyName(), "fiat-tokenfactory", "burn", fmt.Sprintf("%duusdc", burnAmount)) | ||
require.ErrorContains(t, err, "burning is paused") | ||
|
||
bal, err = noble.GetBalance(ctx, nw.FiatTfRoles.Minter.FormattedAddress(), "uusdc") | ||
require.NoError(t, err, "error getting balance") | ||
require.EqualValues(t, mintAmount, bal.Int64(), "minters balance should not have decreased") | ||
|
||
e2e.UnpauseFiatTF(t, ctx, val, nw.FiatTfRoles.Pauser) | ||
|
||
// ACTION: Burn from non minter account | ||
// EXPECTED: Request fails; amount not burned | ||
|
||
w := interchaintest.GetAndFundTestUsers(t, ctx, "alice", math.NewInt(burnAmount), noble) | ||
alice := w[0] | ||
|
||
// mint into Alice's account to give her a balance to burn | ||
_, err = val.ExecTx(ctx, nw.FiatTfRoles.Minter.KeyName(), "fiat-tokenfactory", "mint", alice.FormattedAddress(), fmt.Sprintf("%duusdc", mintAmount)) | ||
require.NoError(t, err, "error minting") | ||
|
||
bal, err = noble.GetBalance(ctx, alice.FormattedAddress(), "uusdc") | ||
require.NoError(t, err, "error getting balance") | ||
require.True(t, bal.Equal(math.NewInt(mintAmount))) | ||
|
||
_, err = val.ExecTx(ctx, alice.KeyName(), "fiat-tokenfactory", "burn", fmt.Sprintf("%duusdc", burnAmount)) | ||
require.ErrorContains(t, err, "you are not a minter") | ||
|
||
bal, err = noble.GetBalance(ctx, alice.FormattedAddress(), "uusdc") | ||
require.NoError(t, err, "error getting balance") | ||
require.EqualValues(t, mintAmount, bal.Int64(), "minters balance should not have decreased") | ||
|
||
// ACTION: Burn from a blacklisted minter account | ||
// EXPECTED: Request fails; amount not burned | ||
|
||
e2e.BlacklistAccount(t, ctx, val, nw.FiatTfRoles.Blacklister, nw.FiatTfRoles.Minter) | ||
|
||
_, err = val.ExecTx(ctx, nw.FiatTfRoles.Minter.KeyName(), "fiat-tokenfactory", "burn", fmt.Sprintf("%duusdc", burnAmount)) | ||
require.ErrorContains(t, err, "minter address is blacklisted") | ||
|
||
bal, err = noble.GetBalance(ctx, nw.FiatTfRoles.Minter.FormattedAddress(), "uusdc") | ||
require.NoError(t, err, "error getting balance") | ||
require.EqualValues(t, mintAmount, bal.Int64(), "minters balance should not have decreased") | ||
|
||
e2e.UnblacklistAccount(t, ctx, val, nw.FiatTfRoles.Blacklister, nw.FiatTfRoles.Minter) | ||
|
||
// ACTION: Burn amount greater than the minters balance | ||
// EXPECTED: Request fails; amount not burned | ||
|
||
exceedAllowance := bal.Add(math.NewInt(99)) | ||
_, err = val.ExecTx(ctx, nw.FiatTfRoles.Minter.KeyName(), "fiat-tokenfactory", "burn", fmt.Sprintf("%duusdc", exceedAllowance.Int64())) | ||
require.ErrorContains(t, err, "insufficient funds") | ||
|
||
bal, err = noble.GetBalance(ctx, nw.FiatTfRoles.Minter.FormattedAddress(), "uusdc") | ||
require.NoError(t, err, "error getting balance") | ||
require.EqualValues(t, mintAmount, bal.Int64(), "minters balance should not have decreased") | ||
|
||
// ACTION: Successfully burn tokens | ||
// EXPECTED: Success; amount burned and Minters balance is decreased | ||
|
||
_, err = val.ExecTx(ctx, nw.FiatTfRoles.Minter.KeyName(), "fiat-tokenfactory", "burn", fmt.Sprintf("%duusdc", burnAmount)) | ||
require.NoError(t, err, "error broadcasting burn") | ||
|
||
bal, err = noble.GetBalance(ctx, nw.FiatTfRoles.Minter.FormattedAddress(), "uusdc") | ||
expectedAmount := mintAmount - burnAmount | ||
require.NoError(t, err, "error getting balance") | ||
require.EqualValues(t, expectedAmount, bal.Int64()) | ||
} | ||
Comment on lines
+1431
to
+1523
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Organize Similarly, the |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Organize
TestFiatTFMint
using sub-tests for clarityThe
TestFiatTFMint
function contains multiple test scenarios within a single function. Consider usingt.Run
to create sub-tests for each scenario. This approach enhances readability, allows for better isolation of test cases, and provides more detailed test output.