Skip to content

Commit

Permalink
Test paying oneself with self offer and remote asset
Browse files Browse the repository at this point in the history
  • Loading branch information
Stanislas Polu committed Jan 13, 2017
1 parent 990d5ac commit 9954350
Show file tree
Hide file tree
Showing 3 changed files with 198 additions and 2 deletions.
4 changes: 2 additions & 2 deletions TODO
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,8 @@

# preview

[ ] fix mint
[ ] paying yourself with a currency you trust does not decrease the balance
[ ] finish site
[ ] cut 0.0.2-pre
[ ] blog post draft
[ ] documentation
[ ] send r?
Expand Down Expand Up @@ -52,6 +51,7 @@
[x] list asset balances
[x] list balances
[x] list assets
[x] paying yourself with a currency you trust does not decrease the balance (expeted, tested)
[x] error on offer with same currency
[x] allow cancellation without plan computation (use offer path, move CheckCanShouldCancel to plan))
[x] reintroduce transaction expiry on top of safe cancelation
Expand Down
93 changes: 93 additions & 0 deletions mint/test/functional/create_transaction_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -633,3 +633,96 @@ func TestCreateTransactionWithNoOfferAndRemoteBaseAsset(
assert.Nil(t, err)
assert.Equal(t, big.NewInt(5), (*big.Int)(&balance.Value))
}

func TestCreateTransactionUsingOfferToPayOneself(
t *testing.T,
) {
t.Parallel()
m, u, a, o := setupCreateTransaction(t)
defer tearDownCreateTransaction(t, m)

// Credit u[1] on m[0]
status, raw := u[0].Post(t,
fmt.Sprintf("/transactions"),
url.Values{
"pair": {fmt.Sprintf("%s/%s", a[0].Name, a[0].Name)},
"amount": {"10"},
"destination": {u[1].Address},
"path[]": {},
})

assert.Equal(t, 201, status)

var tx mint.TransactionResource
err := raw.Extract("transaction", &tx)
assert.Nil(t, err)

status, raw = u[0].Post(t,
fmt.Sprintf("/transactions/%s/settle", tx.ID),
url.Values{})

assert.Equal(t, 200, status)

err = raw.Extract("transaction", &tx)
assert.Nil(t, err)

// Pay u[1] (himself) using his balance at m[0]
status, raw = u[1].Post(t,
fmt.Sprintf("/transactions"),
url.Values{
"pair": {fmt.Sprintf("%s/%s", a[0].Name, a[1].Name)},
"amount": {"5"},
"destination": {u[1].Address},
"path[]": {
o[1].ID,
},
})

assert.Equal(t, 201, status)

var tx1 mint.TransactionResource
err = raw.Extract("transaction", &tx1)
assert.Nil(t, err)

assert.Regexp(t, mint.IDRegexp, tx1.ID)
assert.Equal(t, mint.TxStReserved, tx1.Status)
assert.Equal(t, 1, len(tx1.Operations))
assert.Equal(t, 1, len(tx1.Crossings))

assert.Equal(t, mint.TxStReserved, tx1.Operations[0].Status)
assert.Equal(t, big.NewInt(5), tx1.Operations[0].Amount)
assert.Equal(t, u[1].Address, tx1.Operations[0].Destination)
assert.Equal(t, u[1].Address, tx1.Operations[0].Source)

assert.Equal(t, mint.TxStReserved, tx1.Crossings[0].Status)
assert.Equal(t, u[1].Address, tx1.Crossings[0].Owner)
assert.Equal(t, o[1].ID, tx1.Crossings[0].Offer)
assert.Equal(t, big.NewInt(5), tx1.Crossings[0].Amount)

// Check transaction on m[0].
status, raw = u[0].Get(t, fmt.Sprintf("/transactions/%s", tx1.ID))

assert.Equal(t, 200, status)

var tx0 mint.TransactionResource
err = raw.Extract("transaction", &tx0)
assert.Nil(t, err)

assert.Regexp(t, mint.IDRegexp, tx0.ID)
assert.Equal(t, mint.TxStReserved, tx0.Status)
assert.Equal(t, 1, len(tx0.Operations))
assert.Equal(t, 0, len(tx0.Crossings))

assert.Equal(t, mint.TxStReserved, tx0.Operations[0].Status)
assert.Equal(t, big.NewInt(5), tx0.Operations[0].Amount)
assert.Equal(t, u[1].Address, tx0.Operations[0].Destination)
assert.Equal(t, u[1].Address, tx0.Operations[0].Source)

// Check balance on m[1]
balance, err := model.LoadCanonicalBalanceByAssetHolder(m[0].Ctx,
a[0].Name, u[1].Address)
assert.Nil(t, err)
// The balance should be 5 because you've reserved 5 for yourself (it will
// go back at 10 post settlement).
assert.Equal(t, big.NewInt(5), (*big.Int)(&balance.Value))
}
103 changes: 103 additions & 0 deletions mint/test/functional/settle_transaction_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -425,3 +425,106 @@ func TestSettleTransactionWithNoOfferAndRemoteBaseAsset(
assert.Nil(t, err)
assert.Equal(t, big.NewInt(5), (*big.Int)(&balance.Value))
}

func TestSettleTransactionUsingOfferToPayOneself(
t *testing.T,
) {
t.Parallel()
m, u, a, o := setupSettleTransaction(t)
defer tearDownSettleTransaction(t, m)

// Credit u[1] on m[0]
status, raw := u[0].Post(t,
fmt.Sprintf("/transactions"),
url.Values{
"pair": {fmt.Sprintf("%s/%s", a[0].Name, a[0].Name)},
"amount": {"10"},
"destination": {u[1].Address},
"path[]": {},
})

assert.Equal(t, 201, status)

var tx mint.TransactionResource
err := raw.Extract("transaction", &tx)
assert.Nil(t, err)

status, raw = u[0].Post(t,
fmt.Sprintf("/transactions/%s/settle", tx.ID),
url.Values{})

assert.Equal(t, 200, status)

err = raw.Extract("transaction", &tx)
assert.Nil(t, err)

// Pay u[1] (himself) using his balance at m[0]
status, raw = u[1].Post(t,
fmt.Sprintf("/transactions"),
url.Values{
"pair": {fmt.Sprintf("%s/%s", a[0].Name, a[1].Name)},
"amount": {"5"},
"destination": {u[1].Address},
"path[]": {
o[1].ID,
},
})

assert.Equal(t, 201, status)

var tx1 mint.TransactionResource
err = raw.Extract("transaction", &tx1)
assert.Nil(t, err)

status, raw = u[1].Post(t,
fmt.Sprintf("/transactions/%s/settle", tx1.ID),
url.Values{})

assert.Equal(t, 200, status)

err = raw.Extract("transaction", &tx1)
assert.Nil(t, err)

assert.Regexp(t, mint.IDRegexp, tx1.ID)
assert.Equal(t, mint.TxStSettled, tx1.Status)
assert.Equal(t, 1, len(tx1.Operations))
assert.Equal(t, 1, len(tx1.Crossings))

assert.Equal(t, mint.TxStSettled, tx1.Operations[0].Status)
assert.Equal(t, big.NewInt(5), tx1.Operations[0].Amount)
assert.Equal(t, u[1].Address, tx1.Operations[0].Destination)
assert.Equal(t, u[1].Address, tx1.Operations[0].Source)

assert.Equal(t, mint.TxStSettled, tx1.Crossings[0].Status)
assert.Equal(t, u[1].Address, tx1.Crossings[0].Owner)
assert.Equal(t, o[1].ID, tx1.Crossings[0].Offer)
assert.Equal(t, big.NewInt(5), tx1.Crossings[0].Amount)

// Check transaction on m[0].
status, raw = u[0].Get(t, fmt.Sprintf("/transactions/%s", tx1.ID))

assert.Equal(t, 200, status)

var tx0 mint.TransactionResource
err = raw.Extract("transaction", &tx0)
assert.Nil(t, err)

assert.Regexp(t, mint.IDRegexp, tx0.ID)
assert.Equal(t, mint.TxStSettled, tx0.Status)
assert.Equal(t, 1, len(tx0.Operations))
assert.Equal(t, 0, len(tx0.Crossings))

assert.Equal(t, mint.TxStSettled, tx0.Operations[0].Status)
assert.Equal(t, big.NewInt(5), tx0.Operations[0].Amount)
assert.Equal(t, u[1].Address, tx0.Operations[0].Destination)
assert.Equal(t, u[1].Address, tx0.Operations[0].Source)

// Check balance on m[1]
balance, err := model.LoadCanonicalBalanceByAssetHolder(m[0].Ctx,
a[0].Name, u[1].Address)
assert.Nil(t, err)
// The balance should be 10 (unchanged) because you've settled 5 to
// yourself (no change in balance) to issue some of your own asset to
// yourself (no change of balance again). So, really it dtrt.
assert.Equal(t, big.NewInt(10), (*big.Int)(&balance.Value))
}

0 comments on commit 9954350

Please sign in to comment.