32 testcase(
"Bad input to account_currencies");
34 using namespace test::jtx;
37 auto const alice = Account{
"alice"};
38 env.fund(XRP(10000), alice);
43 params[jss::account] = Account{
"bob"}.human();
44 params[jss::ledger_hash] = 1;
45 auto const result = env.rpc(
46 "json",
"account_currencies",
to_string(params))[jss::result];
47 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
48 BEAST_EXPECT(result[jss::error_message] ==
"ledgerHashNotString");
53 env.rpc(
"json",
"account_currencies",
"{}")[jss::result];
54 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
56 result[jss::error_message] ==
"Missing field 'account'.");
61 auto testInvalidAccountParam = [&](
auto const& param) {
63 params[jss::account] = param;
68 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
70 jrr[jss::error_message] ==
"Invalid field 'account'.");
73 testInvalidAccountParam(1);
74 testInvalidAccountParam(1.1);
75 testInvalidAccountParam(
true);
83 auto testInvalidIdentParam = [&](
auto const& param) {
85 params[jss::ident] = param;
90 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
92 jrr[jss::error_message] ==
"Invalid field 'ident'.");
95 testInvalidIdentParam(1);
96 testInvalidIdentParam(1.1);
97 testInvalidIdentParam(
true);
105 params[jss::account] =
107 auto const result = env.rpc(
108 "json",
"account_currencies",
to_string(params))[jss::result];
109 BEAST_EXPECT(result[jss::error] ==
"actMalformed");
110 BEAST_EXPECT(result[jss::error_message] ==
"Account malformed.");
116 params[jss::account] =
"Bob";
117 auto const result = env.rpc(
118 "json",
"account_currencies",
to_string(params))[jss::result];
119 BEAST_EXPECT(result[jss::error] ==
"actMalformed");
120 BEAST_EXPECT(result[jss::error_message] ==
"Account malformed.");
125 params[jss::account] = Account{
"bob"}.human();
126 auto const result = env.rpc(
127 "json",
"account_currencies",
to_string(params))[jss::result];
128 BEAST_EXPECT(result[jss::error] ==
"actNotFound");
129 BEAST_EXPECT(result[jss::error_message] ==
"Account not found.");
136 testcase(
"Basic request for account_currencies");
138 using namespace test::jtx;
141 auto const alice = Account{
"alice"};
142 auto const gw = Account{
"gateway"};
143 env.fund(XRP(10000), alice, gw);
144 char currencySuffix{
'A'};
147 auto gwc = gw[std::string(
"US") + currencySuffix++];
148 env(trust(alice, gwc(100)));
154 params[jss::account] = alice.human();
155 auto result = env.rpc(
156 "json",
"account_currencies",
to_string(params))[jss::result];
162 bool stat = result.
isMember(fld) && result[fld].isArray() &&
163 result[fld].size() == expected.size();
164 for (
size_t i = 0; stat && i < expected.size(); ++i)
167 (
to_string(expected[i].value().currency) ==
168 result[fld][i].asString());
173 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
174 BEAST_EXPECT(arrayCheck(jss::send_currencies, {}));
177 for (
auto const& c : gwCurrencies)
178 env(pay(gw, alice, c.value()(50)));
182 "json",
"account_currencies",
to_string(params))[jss::result];
183 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
184 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies));
189 result = env.rpc(
"account_lines", alice.human());
190 for (
auto const& l : result[jss::lines])
192 l[jss::freeze].asBool() == (l[jss::currency] ==
"USD"));
194 "json",
"account_currencies",
to_string(params))[jss::result];
195 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
196 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies));
201 env(pay(gw, alice, gw[
"USA"](50)));
204 "json",
"account_currencies",
to_string(params))[jss::result];
205 decltype(gwCurrencies) gwCurrenciesNoUSA(
206 gwCurrencies.
begin() + 1, gwCurrencies.
end());
207 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrenciesNoUSA));
208 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies));
212 env(trust(gw, alice[
"USA"](100)));
213 env(pay(alice, gw, alice[
"USA"](200)));
215 "json",
"account_currencies",
to_string(params))[jss::result];
216 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
217 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrenciesNoUSA));