22 testcase(
"Bad input to noripple_check");
24 using namespace test::jtx;
27 auto const alice = Account{
"alice"};
28 env.fund(XRP(10000), alice);
32 auto const result = env.rpc(
"json",
"noripple_check",
"{}")[jss::result];
33 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
34 BEAST_EXPECT(result[jss::error_message] ==
"Missing field 'account'.");
39 params[jss::account] = alice.human();
40 auto const result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
41 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
42 BEAST_EXPECT(result[jss::error_message] ==
"Missing field 'role'.");
47 auto testInvalidAccountParam = [&](
auto const& param) {
49 params[jss::account] = param;
50 params[jss::role] =
"user";
51 auto jrr = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
52 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
53 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'account'.");
56 testInvalidAccountParam(1);
57 testInvalidAccountParam(1.1);
58 testInvalidAccountParam(
true);
66 params[jss::account] = alice.human();
67 params[jss::role] =
"not_a_role";
68 auto const result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
69 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
70 BEAST_EXPECT(result[jss::error_message] ==
"Invalid field 'role'.");
75 params[jss::account] = alice.human();
76 params[jss::role] =
"user";
77 params[jss::limit] = -1;
78 auto const result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
79 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
81 result[jss::error_message] ==
"Invalid field 'limit', not unsigned integer.");
86 params[jss::account] = alice.human();
87 params[jss::role] =
"user";
88 params[jss::ledger_hash] = 1;
89 auto const result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
90 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
92 result[jss::error_message] ==
"Invalid field 'ledger_hash', not hex string.");
97 params[jss::account] = Account{
"nobody"}.human();
98 params[jss::role] =
"user";
99 params[jss::ledger] =
"current";
100 auto const result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
101 BEAST_EXPECT(result[jss::error] ==
"actNotFound");
102 BEAST_EXPECT(result[jss::error_message] ==
"Account not found.");
109 params[jss::role] =
"user";
110 params[jss::ledger] =
"current";
111 auto const result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
112 BEAST_EXPECT(result[jss::error] ==
"actMalformed");
113 BEAST_EXPECT(result[jss::error_message] ==
"Account malformed.");
119 params[jss::account] = Account{
"nobody"}.human();
120 params[jss::role] =
"user";
121 params[jss::ledger] =
"current";
122 params[jss::ledger_hash] =
"ABCDEF";
123 auto const result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
124 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
126 result[jss::error_message] ==
127 "Exactly one of 'ledger', 'ledger_hash', or 'ledger_index' can "
134 params[jss::account] = Account{
"nobody"}.human();
135 params[jss::role] =
"user";
137 auto const result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
138 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
140 result[jss::error_message] ==
"Invalid field 'ledger', not string or number.");
147 testcase <<
"Request noripple_check for " << (user ?
"user" :
"gateway") <<
" role, expect"
148 << (problems ?
"" :
" no") <<
" problems";
150 using namespace test::jtx;
153 auto const gw = Account{
"gw"};
154 auto const alice = Account{
"alice"};
156 env.fund(XRP(10000), gw, alice);
157 if ((user && problems) || (!user && !problems))
159 env(fset(alice, asfDefaultRipple));
160 env(trust(alice, gw[
"USD"](100)));
164 env(fclear(alice, asfDefaultRipple));
165 env(trust(alice, gw[
"USD"](100), gw, tfSetNoRipple));
170 params[jss::account] = alice.human();
171 params[jss::role] = (user ?
"user" :
"gateway");
172 params[jss::ledger] =
"current";
173 auto result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
175 auto const pa = result[
"problems"];
176 if (!BEAST_EXPECT(pa.isArray()))
181 if (!BEAST_EXPECT(pa.size() == 2))
186 BEAST_EXPECT(boost::starts_with(pa[0u].asString(),
"You appear to have set"));
187 BEAST_EXPECT(boost::starts_with(pa[1u].asString(),
"You should probably set"));
191 BEAST_EXPECT(boost::starts_with(pa[0u].asString(),
"You should immediately set"));
192 BEAST_EXPECT(boost::starts_with(pa[1u].asString(),
"You should clear"));
197 BEAST_EXPECT(pa.size() == 0);
202 params[jss::transactions] =
true;
203 result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
204 if (!BEAST_EXPECT(result[jss::transactions].isArray()))
207 auto const txs = result[jss::transactions];
210 if (!BEAST_EXPECT(txs.size() == (user ? 1 : 2)))
215 BEAST_EXPECT(txs[0u][jss::Account] == alice.human());
216 BEAST_EXPECT(txs[0u][jss::TransactionType] == jss::AccountSet);
219 BEAST_EXPECT(result[jss::transactions][txs.size() - 1][jss::Account] == alice.human());
221 result[jss::transactions][txs.size() - 1][jss::TransactionType] == jss::TrustSet);
223 result[jss::transactions][txs.size() - 1][jss::LimitAmount] ==
228 BEAST_EXPECT(txs.size() == 0);