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 auto const result = env.rpc(
66 boost::lexical_cast<std::string>(params))[jss::result];
67 BEAST_EXPECT(result[jss::error] ==
"actMalformed");
68 BEAST_EXPECT(result[jss::error_message] ==
"Account malformed.");
74 params[jss::account] =
"Bob";
75 auto const result = env.rpc(
78 boost::lexical_cast<std::string>(params))[jss::result];
79 BEAST_EXPECT(result[jss::error] ==
"actMalformed");
80 BEAST_EXPECT(result[jss::error_message] ==
"Account malformed.");
85 params[jss::account] = Account{
"bob"}.human();
86 auto const result = env.rpc(
89 boost::lexical_cast<std::string>(params))[jss::result];
90 BEAST_EXPECT(result[jss::error] ==
"actNotFound");
91 BEAST_EXPECT(result[jss::error_message] ==
"Account not found.");
98 testcase(
"Basic request for account_currencies");
100 using namespace test::jtx;
103 auto const alice = Account{
"alice"};
104 auto const gw = Account{
"gateway"};
105 env.fund(XRP(10000), alice, gw);
106 char currencySuffix{
'A'};
109 auto gwc = gw[std::string(
"US") + currencySuffix++];
110 env(trust(alice, gwc(100)));
116 params[jss::account] = alice.human();
117 auto result = env.rpc(
119 "account_currencies",
120 boost::lexical_cast<std::string>(params))[jss::result];
126 bool stat = result.
isMember(fld) && result[fld].isArray() &&
127 result[fld].size() == expected.size();
128 for (
size_t i = 0; stat && i < expected.size(); ++i)
131 (
to_string(expected[i].value().currency) ==
132 result[fld][i].asString());
137 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
138 BEAST_EXPECT(arrayCheck(jss::send_currencies, {}));
141 for (
auto const& c : gwCurrencies)
142 env(pay(gw, alice, c.value()(50)));
147 "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"));
161 "account_currencies",
162 boost::lexical_cast<std::string>(params))[jss::result];
163 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
164 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies));
169 env(pay(gw, alice, gw[
"USA"](50)));
173 "account_currencies",
174 boost::lexical_cast<std::string>(params))[jss::result];
175 decltype(gwCurrencies) gwCurrenciesNoUSA(
176 gwCurrencies.begin() + 1, gwCurrencies.end());
177 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrenciesNoUSA));
178 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies));
182 env(trust(gw, alice[
"USA"](100)));
183 env(pay(alice, gw, alice[
"USA"](200)));
186 "account_currencies",
187 boost::lexical_cast<std::string>(params))[jss::result];
188 BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies));
189 BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrenciesNoUSA));