20 #include <ripple/beast/unit_test.h>
21 #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(
46 boost::lexical_cast<std::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 params[jss::account] =
63 params[jss::strict] =
true;
64 auto const result = env.rpc(
67 boost::lexical_cast<std::string>(params))[jss::result];
68 BEAST_EXPECT(result[jss::error] ==
"actMalformed");
69 BEAST_EXPECT(result[jss::error_message] ==
"Account malformed.");
76 params[jss::strict] =
true;
77 auto const result = env.rpc(
80 boost::lexical_cast<std::string>(params))[jss::result];
81 BEAST_EXPECT(result[jss::error] ==
"actBitcoin");
83 result[jss::error_message] ==
"Account is bitcoin address.");
88 params[jss::account] = Account{
"bob"}.human();
89 auto const result = env.rpc(
92 boost::lexical_cast<std::string>(params))[jss::result];
93 BEAST_EXPECT(result[jss::error] ==
"actNotFound");
94 BEAST_EXPECT(result[jss::error_message] ==
"Account not found.");
101 testcase(
"Basic request for account_currencies");
103 using namespace test::jtx;
106 auto const alice = Account{
"alice"};
107 auto const gw = Account{
"gateway"};
108 env.fund(XRP(10000), alice, gw);
109 char currencySuffix{
'A'};
112 auto gwc = gw[std::string(
"US") + currencySuffix++];
113 env(trust(alice, gwc(100)));
119 params[jss::account] = alice.human();
120 auto result = env.rpc(
122 "account_currencies",
123 boost::lexical_cast<std::string>(params))[jss::result];
129 bool stat = result.
isMember(fld) && result[fld].isArray() &&
130 result[fld].size() == expected.size();
131 for (
size_t i = 0; stat && i < expected.size(); ++i)
135 (
to_string(expected[i].value().currency) ==
136 result[fld][i].asString());
141 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
142 BEAST_EXPECT(arrayCheck(jss::send_currencies, {}));
145 for (
auto const& c : gwCurrencies)
146 env(pay(gw, alice, c.value()(50)));
151 "account_currencies",
152 boost::lexical_cast<std::string>(params))[jss::result];
153 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
154 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies));
159 result = env.rpc(
"account_lines", alice.human());
160 for (
auto const& l : result[jss::lines])
162 l[jss::freeze].asBool() == (l[jss::currency] ==
"USD"));
165 "account_currencies",
166 boost::lexical_cast<std::string>(params))[jss::result];
167 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
168 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies));
173 env(pay(gw, alice, gw[
"USA"](50)));
177 "account_currencies",
178 boost::lexical_cast<std::string>(params))[jss::result];
179 decltype(gwCurrencies) gwCurrenciesNoUSA(
180 gwCurrencies.begin() + 1, gwCurrencies.end());
181 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrenciesNoUSA));
182 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies));
186 env(trust(gw, alice[
"USA"](100)));
187 env(pay(alice, gw, alice[
"USA"](200)));
190 "account_currencies",
191 boost::lexical_cast<std::string>(params))[jss::result];
192 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
193 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrenciesNoUSA));