Skip to content

Commit

Permalink
Fix: URIToken Test (#254)
Browse files Browse the repository at this point in the history
* update tests for fixXahauV1
  • Loading branch information
dangell7 authored Mar 10, 2024
1 parent 1500522 commit cdac69a
Showing 1 changed file with 77 additions and 24 deletions.
101 changes: 77 additions & 24 deletions src/test/app/URIToken_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -362,6 +362,7 @@ struct URIToken_test : public beast::unit_test::suite
// tecNO_PERMISSION - no permission
env(uritoken::burn(carol, hexid), ter(tecNO_PERMISSION));
env.close();

// tefBAD_LEDGER - could not remove object
}

Expand Down Expand Up @@ -454,10 +455,7 @@ struct URIToken_test : public beast::unit_test::suite
using namespace std::literals::chrono_literals;

// setup env
Env env{
*this, envconfig(), features, nullptr, beast::severities::kWarning
// beast::severities::kTrace
};
Env env{*this, envconfig(), features, nullptr};
auto const alice = Account("alice");
auto const bob = Account("bob");
auto const carol = Account("carol");
Expand Down Expand Up @@ -508,7 +506,7 @@ struct URIToken_test : public beast::unit_test::suite
ter(temBAD_CURRENCY));
env.close();

// tecINSUFFICIENT_PAYMENT - insuficient buy offer amount
// tecINSUFFICIENT_PAYMENT - insufficient buy offer amount
env(uritoken::buy(bob, hexid),
uritoken::amt(USD(9)),
ter(tecINSUFFICIENT_PAYMENT));
Expand All @@ -518,21 +516,24 @@ struct URIToken_test : public beast::unit_test::suite
env(uritoken::sell(alice, hexid), uritoken::amt(XRP(10000)));
env.close();

// tecINSUFFICIENT_FUNDS - insuficient xrp - fees
env(uritoken::buy(bob, hexid),
uritoken::amt(XRP(1000)),
ter(tecINSUFFICIENT_PAYMENT));
// tecINSUFFICIENT_FUNDS - insufficient xrp - fees
// fixXahauV1 - fix checking wrong account for insufficient xrp
env(pay(env.master, alice, XRP(10000)));
auto const txResult = env.current()->rules().enabled(fixXahauV1)
? ter(tecINSUFFICIENT_FUNDS)
: ter(tecINTERNAL);
env(uritoken::buy(bob, hexid), uritoken::amt(XRP(10000)), txResult);
env.close();

// clear sell and reset new sell
env(uritoken::cancel(alice, hexid));
env(uritoken::sell(alice, hexid), uritoken::amt(USD(10000)));
env.close();

// tecINSUFFICIENT_FUNDS - insuficient amount
// tecINSUFFICIENT_FUNDS - insufficient amount
env(uritoken::buy(bob, hexid),
uritoken::amt(USD(1000)),
ter(tecINSUFFICIENT_PAYMENT));
uritoken::amt(USD(10000)),
ter(tecINSUFFICIENT_FUNDS));
env.close();

//----------------------------------------------------------------------
Expand Down Expand Up @@ -571,34 +572,38 @@ struct URIToken_test : public beast::unit_test::suite
env(uritoken::sell(alice, hexid), uritoken::amt(XRP(1000)));
env.close();

// tecINSUFFICIENT_PAYMENT - insuficient xrp sent
// tecINSUFFICIENT_PAYMENT - insufficient xrp sent
env(uritoken::buy(bob, hexid),
uritoken::amt(XRP(900)),
ter(tecINSUFFICIENT_PAYMENT));
env.close();
// tecINSUFFICIENT_FUNDS - insuficient xrp - fees
env(uritoken::buy(bob, hexid),
uritoken::amt(XRP(1000)),
ter(tecINSUFFICIENT_FUNDS));

// tecINSUFFICIENT_FUNDS - insufficient xrp - fees
// fixXahauV1 - fix checking wrong account for insufficient xrp
auto const txResult1 = env.current()->rules().enabled(fixXahauV1)
? ter(tecINSUFFICIENT_FUNDS)
: ter(tecINTERNAL);
env(uritoken::buy(bob, hexid), uritoken::amt(XRP(1000)), txResult1);
env.close();

// clear sell and set usd sell
env(uritoken::cancel(alice, hexid));
env(uritoken::sell(alice, hexid), uritoken::amt(USD(1000)));
env.close();

// tecINSUFFICIENT_PAYMENT - insuficient amount sent
// tecINSUFFICIENT_PAYMENT - insufficient amount sent
env(uritoken::buy(bob, hexid),
uritoken::amt(USD(900)),
ter(tecINSUFFICIENT_PAYMENT));
env.close();

// tecINSUFFICIENT_FUNDS - insuficient amount sent
// tecINSUFFICIENT_FUNDS - insufficient amount sent
env(uritoken::buy(bob, hexid),
uritoken::amt(USD(10000)),
ter(tecINSUFFICIENT_FUNDS));
env.close();
// tecNO_LINE_INSUF_RESERVE - insuficient xrp to create line

// tecNO_LINE_INSUF_RESERVE - insufficient xrp to create line
{
// fund echo 251 xrp (not enough for line reserve)
env.fund(XRP(251), echo);
Expand All @@ -617,7 +622,7 @@ struct URIToken_test : public beast::unit_test::suite
env(uritoken::sell(echo, hexid), uritoken::amt(USD(1)));
env.close();

// tecNO_LINE_INSUF_RESERVE - insuficient xrp to create line
// tecNO_LINE_INSUF_RESERVE - insufficient xrp to create line
auto const txResult = env.current()->rules().enabled(fixXahauV1)
? ter(tecINSUF_RESERVE_SELLER)
: ter(tecNO_LINE_INSUF_RESERVE);
Expand Down Expand Up @@ -1974,13 +1979,16 @@ struct URIToken_test : public beast::unit_test::suite
std::string multiply;
std::string divide;
};
std::array<TestRateData, 6> testCases = {{
std::array<TestRateData, 9> testCases = {{
{1, USD(100), "1100", "1100"},
{1.1, USD(100), "1110", "1090.909090909091"},
{1.0005, USD(100), "1100.05", "1099.950024987506"},
{1.005, USD(100), "1100.4999999", "1099.502487661197"},
{1.25, USD(100), "1125", "1080"},
{2, USD(100), "1200", "1050"},
{1.25, USD(1), "1001.25", "1000.8"},
{1.25, USD(0.1), "1000.125", "1000.08"},
{1.25, USD(0.0001), "1000.000125", "1000.00008"},
}};

for (auto const& tc : testCases)
Expand All @@ -2001,14 +2009,13 @@ struct URIToken_test : public beast::unit_test::suite
// setup mint
std::string const uri(maxTokenURILength, '?');
std::string const id{strHex(uritoken::tokenid(alice, uri))};
auto const delta = USD(100);
auto const delta = tc.delta;
env(uritoken::mint(alice, uri));
env(uritoken::sell(alice, id), uritoken::amt(delta));
env.close();

env(uritoken::buy(bob, id), uritoken::amt(delta));
env.close();
auto xferRate = transferRate(*env.current(), gw);
auto const postAlice = env.balance(alice, USD.issue());
if (!env.current()->rules().enabled(fixXahauV1))
{
Expand All @@ -2021,6 +2028,52 @@ struct URIToken_test : public beast::unit_test::suite
BEAST_EXPECT(env.balance(bob, USD.issue()) == preBob - delta);
}

// test dust amount
{
Env env{*this, features};
env.fund(XRP(10000), alice, bob, gw);
env(rate(gw, 1.50));
env.close();
env.trust(USD(100000), alice, bob);
env.close();
env(pay(gw, alice, USD(1000)));
env(pay(gw, bob, USD(1000)));
env.close();

auto const preAlice = env.balance(alice, USD.issue());
auto const preBob = env.balance(bob, USD.issue());

// setup mint
std::string const uri(maxTokenURILength, '?');
std::string const id{strHex(uritoken::tokenid(alice, uri))};
env(uritoken::mint(alice, uri));

auto sellTx = uritoken::sell(alice, id);
sellTx[jss::Amount][jss::issuer] = gw.human();
sellTx[jss::Amount][jss::currency] = "USD";
sellTx[jss::Amount][jss::value] = "1e-81";
env(sellTx);
env.close();

auto buyTx = uritoken::buy(bob, id);
buyTx[jss::Amount][jss::issuer] = gw.human();
buyTx[jss::Amount][jss::currency] = "USD";
buyTx[jss::Amount][jss::value] = "1e-81";
env(buyTx);
env.close();
auto const postAlice = env.balance(alice, USD.issue());

if (!env.current()->rules().enabled(fixXahauV1))
{
BEAST_EXPECT(postAlice.value() == preAlice);
}
else
{
BEAST_EXPECT(postAlice.value() == preAlice);
}
BEAST_EXPECT(env.balance(bob, USD.issue()) == preBob - USD(0));
}

// test rate change
{
Env env{*this, features};
Expand Down

0 comments on commit cdac69a

Please sign in to comment.