13 testcase(
"Bad input to account_currencies");
15 using namespace test::jtx;
18 auto const alice = Account{
"alice"};
19 env.fund(XRP(10000), alice);
24 params[jss::account] = Account{
"bob"}.human();
25 params[jss::ledger_hash] = 1;
27 env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
28 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
30 result[jss::error_message] ==
"Invalid field 'ledger_hash', not hex string.");
34 auto const result = env.rpc(
"json",
"account_currencies",
"{}")[jss::result];
35 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
36 BEAST_EXPECT(result[jss::error_message] ==
"Missing field 'account'.");
41 auto testInvalidAccountParam = [&](
auto const& param) {
43 params[jss::account] = param;
44 auto jrr = env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
45 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
46 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'account'.");
49 testInvalidAccountParam(1);
50 testInvalidAccountParam(1.1);
51 testInvalidAccountParam(
true);
59 auto testInvalidIdentParam = [&](
auto const& param) {
61 params[jss::ident] = param;
62 auto jrr = env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
63 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
64 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'ident'.");
67 testInvalidIdentParam(1);
68 testInvalidIdentParam(1.1);
69 testInvalidIdentParam(
true);
77 params[jss::account] =
"llIIOO";
79 env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
80 BEAST_EXPECT(result[jss::error] ==
"actMalformed");
81 BEAST_EXPECT(result[jss::error_message] ==
"Account malformed.");
87 params[jss::account] =
"Bob";
89 env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
90 BEAST_EXPECT(result[jss::error] ==
"actMalformed");
91 BEAST_EXPECT(result[jss::error_message] ==
"Account malformed.");
96 params[jss::account] = Account{
"bob"}.human();
98 env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
99 BEAST_EXPECT(result[jss::error] ==
"actNotFound");
100 BEAST_EXPECT(result[jss::error_message] ==
"Account not found.");
107 testcase(
"Basic request for account_currencies");
109 using namespace test::jtx;
112 auto const alice = Account{
"alice"};
113 auto const gw = Account{
"gateway"};
114 env.fund(XRP(10000), alice, gw);
115 char currencySuffix{
'A'};
118 auto gwc = gw[std::string(
"US") + currencySuffix++];
119 env(trust(alice, gwc(100)));
125 params[jss::account] = alice.human();
126 auto result = env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
128 auto arrayCheck = [&result](
131 bool stat = result.
isMember(fld) && result[fld].isArray() &&
132 result[fld].size() == expected.size();
133 for (
size_t i = 0; stat && i < expected.size(); ++i)
135 stat &= (
to_string(expected[i].value().currency) == result[fld][i].asString());
140 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
141 BEAST_EXPECT(arrayCheck(jss::send_currencies, {}));
144 for (
auto const& c : gwCurrencies)
145 env(pay(gw, alice, c.value()(50)));
148 result = env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
149 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
150 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies));
154 env(trust(alice, gw[
"USD"](100), tfSetFreeze));
155 result = env.rpc(
"account_lines", alice.human());
156 for (
auto const& l : result[jss::lines])
157 BEAST_EXPECT(l[jss::freeze].asBool() == (l[jss::currency] ==
"USD"));
158 result = env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
159 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
160 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies));
162 env(trust(alice, gw[
"USD"](100), tfClearFreeze));
165 env(pay(gw, alice, gw[
"USA"](50)));
167 result = env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
168 decltype(gwCurrencies)
169 const gwCurrenciesNoUSA(gwCurrencies.
begin() + 1, gwCurrencies.
end());
170 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrenciesNoUSA));
171 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies));
175 env(trust(gw, alice[
"USA"](100)));
176 env(pay(alice, gw, alice[
"USA"](200)));
177 result = env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
178 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
179 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrenciesNoUSA));