22 testcase(
"Bad input to noripple_check");
24 using namespace test::jtx;
27 auto const alice = Account{
"alice"};
28 env.fund(XRP(10000), alice);
33 env.rpc(
"json",
"noripple_check",
"{}")[jss::result];
34 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
36 result[jss::error_message] ==
"Missing field 'account'.");
41 params[jss::account] = alice.human();
42 auto const result = env.rpc(
43 "json",
"noripple_check",
to_string(params))[jss::result];
44 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
45 BEAST_EXPECT(result[jss::error_message] ==
"Missing field 'role'.");
50 auto testInvalidAccountParam = [&](
auto const& param) {
52 params[jss::account] = param;
53 params[jss::role] =
"user";
55 "json",
"noripple_check",
to_string(params))[jss::result];
56 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
58 jrr[jss::error_message] ==
"Invalid field 'account'.");
61 testInvalidAccountParam(1);
62 testInvalidAccountParam(1.1);
63 testInvalidAccountParam(
true);
71 params[jss::account] = alice.human();
72 params[jss::role] =
"not_a_role";
73 auto const result = env.rpc(
74 "json",
"noripple_check",
to_string(params))[jss::result];
75 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
76 BEAST_EXPECT(result[jss::error_message] ==
"Invalid field 'role'.");
81 params[jss::account] = alice.human();
82 params[jss::role] =
"user";
83 params[jss::limit] = -1;
84 auto const result = env.rpc(
85 "json",
"noripple_check",
to_string(params))[jss::result];
86 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
88 result[jss::error_message] ==
89 "Invalid field 'limit', not unsigned integer.");
94 params[jss::account] = alice.human();
95 params[jss::role] =
"user";
96 params[jss::ledger_hash] = 1;
97 auto const result = env.rpc(
98 "json",
"noripple_check",
to_string(params))[jss::result];
99 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
101 result[jss::error_message] ==
102 "Invalid field 'ledger_hash', not hex string.");
107 params[jss::account] = Account{
"nobody"}.human();
108 params[jss::role] =
"user";
109 params[jss::ledger] =
"current";
110 auto const result = env.rpc(
111 "json",
"noripple_check",
to_string(params))[jss::result];
112 BEAST_EXPECT(result[jss::error] ==
"actNotFound");
113 BEAST_EXPECT(result[jss::error_message] ==
"Account not found.");
120 params[jss::role] =
"user";
121 params[jss::ledger] =
"current";
122 auto const result = env.rpc(
123 "json",
"noripple_check",
to_string(params))[jss::result];
124 BEAST_EXPECT(result[jss::error] ==
"actMalformed");
125 BEAST_EXPECT(result[jss::error_message] ==
"Account malformed.");
131 params[jss::account] = Account{
"nobody"}.human();
132 params[jss::role] =
"user";
133 params[jss::ledger] =
"current";
134 params[jss::ledger_hash] =
"ABCDEF";
135 auto const result = env.rpc(
136 "json",
"noripple_check",
to_string(params))[jss::result];
137 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
139 result[jss::error_message] ==
140 "Exactly one of 'ledger', 'ledger_hash', or 'ledger_index' can "
147 params[jss::account] = Account{
"nobody"}.human();
148 params[jss::role] =
"user";
150 auto const result = env.rpc(
151 "json",
"noripple_check",
to_string(params))[jss::result];
152 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
154 result[jss::error_message] ==
155 "Invalid field 'ledger', not string or number.");
162 testcase <<
"Request noripple_check for " << (user ?
"user" :
"gateway")
163 <<
" role, expect" << (problems ?
"" :
" no") <<
" problems";
165 using namespace test::jtx;
168 auto const gw = Account{
"gw"};
169 auto const alice = Account{
"alice"};
171 env.fund(XRP(10000), gw, alice);
172 if ((user && problems) || (!user && !problems))
175 env(trust(alice, gw[
"USD"](100)));
185 params[jss::account] = alice.human();
186 params[jss::role] = (user ?
"user" :
"gateway");
187 params[jss::ledger] =
"current";
189 env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
191 auto const pa = result[
"problems"];
192 if (!BEAST_EXPECT(pa.isArray()))
197 if (!BEAST_EXPECT(pa.size() == 2))
202 BEAST_EXPECT(boost::starts_with(
203 pa[0u].asString(),
"You appear to have set"));
204 BEAST_EXPECT(boost::starts_with(
205 pa[1u].asString(),
"You should probably set"));
209 BEAST_EXPECT(boost::starts_with(
210 pa[0u].asString(),
"You should immediately set"));
212 boost::starts_with(pa[1u].asString(),
"You should clear"));
217 BEAST_EXPECT(pa.size() == 0);
222 params[jss::transactions] =
true;
224 env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
225 if (!BEAST_EXPECT(result[jss::transactions].isArray()))
228 auto const txs = result[jss::transactions];
231 if (!BEAST_EXPECT(txs.size() == (user ? 1 : 2)))
236 BEAST_EXPECT(txs[0u][jss::Account] == alice.human());
237 BEAST_EXPECT(txs[0u][jss::TransactionType] == jss::AccountSet);
241 result[jss::transactions][txs.size() - 1][jss::Account] ==
244 result[jss::transactions][txs.size() - 1]
245 [jss::TransactionType] == jss::TrustSet);
247 result[jss::transactions][txs.size() - 1][jss::LimitAmount] ==
252 BEAST_EXPECT(txs.size() == 0);