21 #include <ripple/beast/unit_test.h>
22 #include <ripple/protocol/jss.h>
31 testcase (
"Bad input to account_currencies");
33 using namespace test::jtx;
36 auto const alice = Account {
"alice"};
37 env.fund (XRP(10000), alice);
42 params[jss::ledger_hash] = 1;
43 auto const result = env.rpc (
"json",
"account_currencies",
44 boost::lexical_cast<std::string>(params)) [jss::result];
45 BEAST_EXPECT (result[jss::error] ==
"invalidParams");
46 BEAST_EXPECT (result[jss::error_message] ==
47 "ledgerHashNotString");
52 env.rpc (
"json",
"account_currencies",
"{}") [jss::result];
53 BEAST_EXPECT (result[jss::error] ==
"invalidParams");
54 BEAST_EXPECT (result[jss::error_message] ==
55 "Missing field 'account'.");
60 params[jss::account] =
"llIIOO";
61 params[jss::strict] =
true;
62 auto const result = env.rpc (
"json",
"account_currencies",
63 boost::lexical_cast<std::string>(params)) [jss::result];
64 BEAST_EXPECT (result[jss::error] ==
"actMalformed");
65 BEAST_EXPECT (result[jss::error_message] ==
66 "Account malformed.");
73 params[jss::strict] =
true;
74 auto const result = env.rpc (
"json",
"account_currencies",
75 boost::lexical_cast<std::string>(params)) [jss::result];
76 BEAST_EXPECT (result[jss::error] ==
"actBitcoin");
77 BEAST_EXPECT (result[jss::error_message] ==
78 "Account is bitcoin address.");
83 params[jss::account] = Account{
"bob"}.human();
84 auto const result = env.rpc (
"json",
"account_currencies",
85 boost::lexical_cast<std::string>(params)) [jss::result];
86 BEAST_EXPECT (result[jss::error] ==
"actNotFound");
87 BEAST_EXPECT (result[jss::error_message] ==
88 "Account not found.");
95 testcase (
"Basic request for account_currencies");
97 using namespace test::jtx;
100 auto const alice = Account {
"alice"};
101 auto const gw = Account {
"gateway"};
102 env.fund (XRP(10000), alice, gw);
103 char currencySuffix {
'A'};
108 auto gwc = gw[std::string(
"US") + currencySuffix++];
109 env (trust (alice, gwc (100)));
115 params[jss::account] = alice.human();
116 auto result = env.rpc (
"json",
"account_currencies",
117 boost::lexical_cast<std::string>(params)) [jss::result];
126 result[fld].isArray() &&
127 result[fld].size() == expected.size();
128 for (
size_t i = 0; stat && i < expected.size(); ++i)
132 to_string(expected[i].value().currency) ==
133 result[fld][i].asString()
139 BEAST_EXPECT (arrayCheck (jss::receive_currencies, gwCurrencies));
140 BEAST_EXPECT (arrayCheck (jss::send_currencies, {}));
143 for (
auto const& c : gwCurrencies)
144 env (pay (gw, alice, c.value()(50)));
147 result = env.rpc (
"json",
"account_currencies",
148 boost::lexical_cast<std::string>(params)) [jss::result];
149 BEAST_EXPECT (arrayCheck (jss::receive_currencies, gwCurrencies));
150 BEAST_EXPECT (arrayCheck (jss::send_currencies, gwCurrencies));
155 result = env.rpc (
"account_lines", alice.human());
156 for (
auto const& l : result[jss::lines])
158 l[jss::freeze].asBool() == (l[jss::currency] ==
"USD"));
159 result = env.rpc (
"json",
"account_currencies",
160 boost::lexical_cast<std::string>(params)) [jss::result];
161 BEAST_EXPECT (arrayCheck (jss::receive_currencies, gwCurrencies));
162 BEAST_EXPECT (arrayCheck (jss::send_currencies, gwCurrencies));
167 env (pay (gw, alice, gw[
"USA"](50)));
169 result = env.rpc (
"json",
"account_currencies",
170 boost::lexical_cast<std::string>(params)) [jss::result];
171 decltype(gwCurrencies) gwCurrenciesNoUSA (gwCurrencies.begin() + 1,
173 BEAST_EXPECT (arrayCheck (jss::receive_currencies, gwCurrenciesNoUSA));
174 BEAST_EXPECT (arrayCheck (jss::send_currencies, gwCurrencies));
178 env (trust (gw, alice[
"USA"] (100)));
179 env (pay (alice, gw, alice[
"USA"](200)));
180 result = env.rpc (
"json",
"account_currencies",
181 boost::lexical_cast<std::string>(params)) [jss::result];
182 BEAST_EXPECT (arrayCheck (jss::receive_currencies, gwCurrencies));
183 BEAST_EXPECT (arrayCheck (jss::send_currencies, gwCurrenciesNoUSA));