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;
26 auto const result = env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
27 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
28 BEAST_EXPECT(result[jss::error_message] ==
"Invalid field 'ledger_hash', not hex string.");
32 auto const result = env.rpc(
"json",
"account_currencies",
"{}")[jss::result];
33 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
34 BEAST_EXPECT(result[jss::error_message] ==
"Missing field 'account'.");
39 auto testInvalidAccountParam = [&](
auto const& param) {
41 params[jss::account] = param;
42 auto jrr = env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
43 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
44 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'account'.");
47 testInvalidAccountParam(1);
48 testInvalidAccountParam(1.1);
49 testInvalidAccountParam(
true);
57 auto testInvalidIdentParam = [&](
auto const& param) {
59 params[jss::ident] = param;
60 auto jrr = env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
61 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
62 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'ident'.");
65 testInvalidIdentParam(1);
66 testInvalidIdentParam(1.1);
67 testInvalidIdentParam(
true);
75 params[jss::account] =
"llIIOO";
76 auto const result = env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
77 BEAST_EXPECT(result[jss::error] ==
"actMalformed");
78 BEAST_EXPECT(result[jss::error_message] ==
"Account malformed.");
84 params[jss::account] =
"Bob";
85 auto const result = env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
86 BEAST_EXPECT(result[jss::error] ==
"actMalformed");
87 BEAST_EXPECT(result[jss::error_message] ==
"Account malformed.");
92 params[jss::account] = Account{
"bob"}.human();
93 auto const result = env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
94 BEAST_EXPECT(result[jss::error] ==
"actNotFound");
95 BEAST_EXPECT(result[jss::error_message] ==
"Account not found.");
102 testcase(
"Basic request for account_currencies");
104 using namespace test::jtx;
107 auto const alice = Account{
"alice"};
108 auto const gw = Account{
"gateway"};
109 env.fund(XRP(10000), alice, gw);
110 char currencySuffix{
'A'};
113 auto gwc = gw[std::string(
"US") + currencySuffix++];
114 env(trust(alice, gwc(100)));
120 params[jss::account] = alice.human();
121 auto result = env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
123 auto arrayCheck = [&result](
125 bool stat = result.
isMember(fld) && result[fld].isArray() && result[fld].size() == expected.size();
126 for (
size_t i = 0; stat && i < expected.size(); ++i)
128 stat &= (
to_string(expected[i].value().currency) == result[fld][i].asString());
133 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
134 BEAST_EXPECT(arrayCheck(jss::send_currencies, {}));
137 for (
auto const& c : gwCurrencies)
138 env(pay(gw, alice, c.value()(50)));
141 result = env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
142 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
143 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies));
148 result = env.rpc(
"account_lines", alice.human());
149 for (
auto const& l : result[jss::lines])
150 BEAST_EXPECT(l[jss::freeze].asBool() == (l[jss::currency] ==
"USD"));
151 result = env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
152 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
153 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies));
158 env(pay(gw, alice, gw[
"USA"](50)));
160 result = env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
161 decltype(gwCurrencies) gwCurrenciesNoUSA(gwCurrencies.
begin() + 1, gwCurrencies.
end());
162 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrenciesNoUSA));
163 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies));
167 env(trust(gw, alice[
"USA"](100)));
168 env(pay(alice, gw, alice[
"USA"](200)));
169 result = env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
170 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
171 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrenciesNoUSA));