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(
27 "json",
"account_currencies",
to_string(params))[jss::result];
28 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
30 result[jss::error_message] ==
31 "Invalid field 'ledger_hash', not hex string.");
36 env.rpc(
"json",
"account_currencies",
"{}")[jss::result];
37 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
39 result[jss::error_message] ==
"Missing field 'account'.");
44 auto testInvalidAccountParam = [&](
auto const& param) {
46 params[jss::account] = param;
51 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
53 jrr[jss::error_message] ==
"Invalid field 'account'.");
56 testInvalidAccountParam(1);
57 testInvalidAccountParam(1.1);
58 testInvalidAccountParam(
true);
66 auto testInvalidIdentParam = [&](
auto const& param) {
68 params[jss::ident] = param;
73 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
75 jrr[jss::error_message] ==
"Invalid field 'ident'.");
78 testInvalidIdentParam(1);
79 testInvalidIdentParam(1.1);
80 testInvalidIdentParam(
true);
88 params[jss::account] =
90 auto const result = env.rpc(
91 "json",
"account_currencies",
to_string(params))[jss::result];
92 BEAST_EXPECT(result[jss::error] ==
"actMalformed");
93 BEAST_EXPECT(result[jss::error_message] ==
"Account malformed.");
99 params[jss::account] =
"Bob";
100 auto const result = env.rpc(
101 "json",
"account_currencies",
to_string(params))[jss::result];
102 BEAST_EXPECT(result[jss::error] ==
"actMalformed");
103 BEAST_EXPECT(result[jss::error_message] ==
"Account malformed.");
108 params[jss::account] = Account{
"bob"}.human();
109 auto const result = env.rpc(
110 "json",
"account_currencies",
to_string(params))[jss::result];
111 BEAST_EXPECT(result[jss::error] ==
"actNotFound");
112 BEAST_EXPECT(result[jss::error_message] ==
"Account not found.");
119 testcase(
"Basic request for account_currencies");
121 using namespace test::jtx;
124 auto const alice = Account{
"alice"};
125 auto const gw = Account{
"gateway"};
126 env.fund(XRP(10000), alice, gw);
127 char currencySuffix{
'A'};
130 auto gwc = gw[std::string(
"US") + currencySuffix++];
131 env(trust(alice, gwc(100)));
137 params[jss::account] = alice.human();
138 auto result = env.rpc(
139 "json",
"account_currencies",
to_string(params))[jss::result];
145 bool stat = result.
isMember(fld) && result[fld].isArray() &&
146 result[fld].size() == expected.size();
147 for (
size_t i = 0; stat && i < expected.size(); ++i)
150 (
to_string(expected[i].value().currency) ==
151 result[fld][i].asString());
156 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
157 BEAST_EXPECT(arrayCheck(jss::send_currencies, {}));
160 for (
auto const& c : gwCurrencies)
161 env(pay(gw, alice, c.value()(50)));
165 "json",
"account_currencies",
to_string(params))[jss::result];
166 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
167 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies));
172 result = env.rpc(
"account_lines", alice.human());
173 for (
auto const& l : result[jss::lines])
175 l[jss::freeze].asBool() == (l[jss::currency] ==
"USD"));
177 "json",
"account_currencies",
to_string(params))[jss::result];
178 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
179 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies));
184 env(pay(gw, alice, gw[
"USA"](50)));
187 "json",
"account_currencies",
to_string(params))[jss::result];
188 decltype(gwCurrencies) gwCurrenciesNoUSA(
189 gwCurrencies.
begin() + 1, gwCurrencies.
end());
190 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrenciesNoUSA));
191 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies));
195 env(trust(gw, alice[
"USA"](100)));
196 env(pay(alice, gw, alice[
"USA"](200)));
198 "json",
"account_currencies",
to_string(params))[jss::result];
199 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
200 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrenciesNoUSA));