26 testcase(
"Bad input to account_currencies");
31 auto const alice =
Account{
"alice"};
32 env.fund(XRP(10000), alice);
37 params[jss::account] =
Account{
"bob"}.human();
38 params[jss::ledger_hash] = 1;
40 env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
41 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
43 result[jss::error_message] ==
"Invalid field 'ledger_hash', not hex string.");
47 auto const result = env.rpc(
"json",
"account_currencies",
"{}")[jss::result];
48 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
49 BEAST_EXPECT(result[jss::error_message] ==
"Missing field 'account'.");
54 auto testInvalidAccountParam = [&](
auto const& param) {
56 params[jss::account] = param;
57 auto jrr = env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
58 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
59 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'account'.");
62 testInvalidAccountParam(1);
63 testInvalidAccountParam(1.1);
64 testInvalidAccountParam(
true);
72 auto testInvalidIdentParam = [&](
auto const& param) {
74 params[jss::ident] = param;
75 auto jrr = env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
76 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
77 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'ident'.");
80 testInvalidIdentParam(1);
81 testInvalidIdentParam(1.1);
82 testInvalidIdentParam(
true);
90 params[jss::account] =
"llIIOO";
92 env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
93 BEAST_EXPECT(result[jss::error] ==
"actMalformed");
94 BEAST_EXPECT(result[jss::error_message] ==
"Account malformed.");
100 params[jss::account] =
"Bob";
102 env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
103 BEAST_EXPECT(result[jss::error] ==
"actMalformed");
104 BEAST_EXPECT(result[jss::error_message] ==
"Account malformed.");
109 params[jss::account] =
Account{
"bob"}.human();
111 env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
112 BEAST_EXPECT(result[jss::error] ==
"actNotFound");
113 BEAST_EXPECT(result[jss::error_message] ==
"Account not found.");
120 testcase(
"Basic request for account_currencies");
125 auto const alice =
Account{
"alice"};
126 auto const gw =
Account{
"gateway"};
127 env.fund(XRP(10000), alice, gw);
128 char currencySuffix{
'A'};
131 auto gwc = gw[
std::string(
"US") + currencySuffix++];
132 env(trust(alice, gwc(100)));
138 params[jss::account] = alice.human();
139 auto result = env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
141 auto arrayCheck = [&result](
144 bool stat = result.isMember(fld) && result[fld].isArray() &&
145 result[fld].size() == expected.size();
146 for (
size_t i = 0; stat && i < expected.size(); ++i)
148 stat &= (
to_string(expected[i].value().currency) == result[fld][i].asString());
153 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
154 BEAST_EXPECT(arrayCheck(jss::send_currencies, {}));
157 for (
auto const& c : gwCurrencies)
158 env(pay(gw, alice, c.value()(50)));
161 result = env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
162 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
163 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies));
167 env(trust(alice, gw[
"USD"](100), tfSetFreeze));
168 result = env.rpc(
"account_lines", alice.human());
169 for (
auto const& l : result[jss::lines])
170 BEAST_EXPECT(l[jss::freeze].asBool() == (l[jss::currency] ==
"USD"));
171 result = env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
172 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
173 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies));
175 env(trust(alice, gw[
"USD"](100), tfClearFreeze));
178 env(pay(gw, alice, gw[
"USA"](50)));
180 result = env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
181 decltype(gwCurrencies)
182 const gwCurrenciesNoUSA(gwCurrencies.
begin() + 1, gwCurrencies.
end());
183 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrenciesNoUSA));
184 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies));
188 env(trust(gw, alice[
"USA"](100)));
189 env(pay(alice, gw, alice[
"USA"](200)));
190 result = env.rpc(
"json",
"account_currencies",
to_string(params))[jss::result];
191 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
192 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrenciesNoUSA));