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");
29 BEAST_EXPECT(result[jss::error_message] ==
"ledgerHashNotString");
34 env.rpc(
"json",
"account_currencies",
"{}")[jss::result];
35 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
37 result[jss::error_message] ==
"Missing field 'account'.");
42 auto testInvalidAccountParam = [&](
auto const& param) {
44 params[jss::account] = param;
49 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
51 jrr[jss::error_message] ==
"Invalid field 'account'.");
54 testInvalidAccountParam(1);
55 testInvalidAccountParam(1.1);
56 testInvalidAccountParam(
true);
64 auto testInvalidIdentParam = [&](
auto const& param) {
66 params[jss::ident] = param;
71 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
73 jrr[jss::error_message] ==
"Invalid field 'ident'.");
76 testInvalidIdentParam(1);
77 testInvalidIdentParam(1.1);
78 testInvalidIdentParam(
true);
86 params[jss::account] =
88 auto const result = env.rpc(
89 "json",
"account_currencies",
to_string(params))[jss::result];
90 BEAST_EXPECT(result[jss::error] ==
"actMalformed");
91 BEAST_EXPECT(result[jss::error_message] ==
"Account malformed.");
97 params[jss::account] =
"Bob";
98 auto const result = env.rpc(
99 "json",
"account_currencies",
to_string(params))[jss::result];
100 BEAST_EXPECT(result[jss::error] ==
"actMalformed");
101 BEAST_EXPECT(result[jss::error_message] ==
"Account malformed.");
106 params[jss::account] = Account{
"bob"}.human();
107 auto const result = env.rpc(
108 "json",
"account_currencies",
to_string(params))[jss::result];
109 BEAST_EXPECT(result[jss::error] ==
"actNotFound");
110 BEAST_EXPECT(result[jss::error_message] ==
"Account not found.");
117 testcase(
"Basic request for account_currencies");
119 using namespace test::jtx;
122 auto const alice = Account{
"alice"};
123 auto const gw = Account{
"gateway"};
124 env.fund(XRP(10000), alice, gw);
125 char currencySuffix{
'A'};
128 auto gwc = gw[std::string(
"US") + currencySuffix++];
129 env(trust(alice, gwc(100)));
135 params[jss::account] = alice.human();
136 auto result = env.rpc(
137 "json",
"account_currencies",
to_string(params))[jss::result];
143 bool stat = result.
isMember(fld) && result[fld].isArray() &&
144 result[fld].size() == expected.size();
145 for (
size_t i = 0; stat && i < expected.size(); ++i)
148 (
to_string(expected[i].value().currency) ==
149 result[fld][i].asString());
154 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
155 BEAST_EXPECT(arrayCheck(jss::send_currencies, {}));
158 for (
auto const& c : gwCurrencies)
159 env(pay(gw, alice, c.value()(50)));
163 "json",
"account_currencies",
to_string(params))[jss::result];
164 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
165 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies));
170 result = env.rpc(
"account_lines", alice.human());
171 for (
auto const& l : result[jss::lines])
173 l[jss::freeze].asBool() == (l[jss::currency] ==
"USD"));
175 "json",
"account_currencies",
to_string(params))[jss::result];
176 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
177 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies));
182 env(pay(gw, alice, gw[
"USA"](50)));
185 "json",
"account_currencies",
to_string(params))[jss::result];
186 decltype(gwCurrencies) gwCurrenciesNoUSA(
187 gwCurrencies.
begin() + 1, gwCurrencies.
end());
188 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrenciesNoUSA));
189 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies));
193 env(trust(gw, alice[
"USA"](100)));
194 env(pay(alice, gw, alice[
"USA"](200)));
196 "json",
"account_currencies",
to_string(params))[jss::result];
197 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
198 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrenciesNoUSA));