46 auto const USD_gw = gw[
"USD"];
48 auto const USD_bob = bob[
"USD"];
50 env.fund(
XRP(10000), gw, bob);
51 env.trust(USD_gw(1000), bob);
56 env(
pay(gw, bob, USD_gw(10)));
57 unsigned const offer_count = 12u;
58 for (
auto i = 0u; i < offer_count; i++)
61 jvo[sfExpiration.fieldName] = 10000000u;
67 env.rpc(
"account_offers", bob.
human())[jss::result][jss::offers];
74 jvParams[jss::account] = bob.
human();
75 jvParams[jss::limit] = 1u;
76 auto const jrr_l = env.rpc(
78 auto const& jro_l = jrr_l[jss::offers];
88 std::string(
"Sequential - ") + (asAdmin ?
"admin" :
"non-admin"));
93 auto const USD_gw = gw[
"USD"];
95 auto const USD_bob = bob[
"USD"];
97 env.fund(
XRP(10000), gw, bob);
98 env.trust(USD_gw(1000), bob);
103 env(
pay(gw, bob, USD_gw(10)));
105 env(
offer(bob,
XRP(100), USD_bob(1)));
106 env(
offer(bob,
XRP(200), USD_gw(2)));
107 env(
offer(bob,
XRP(30), USD_gw(6)));
110 auto const jroOuter =
111 env.rpc(
"account_offers", bob.
human())[jss::result][jss::offers];
118 BEAST_EXPECT(jroOuter[0u][jss::quality] ==
"100000000");
119 BEAST_EXPECT(jroOuter[0u][jss::taker_gets][jss::currency] ==
"USD");
121 jroOuter[0u][jss::taker_gets][jss::issuer] == gw.
human());
122 BEAST_EXPECT(jroOuter[0u][jss::taker_gets][jss::value] ==
"2");
123 BEAST_EXPECT(jroOuter[0u][jss::taker_pays] ==
"200000000");
125 BEAST_EXPECT(jroOuter[1u][jss::quality] ==
"100000000");
126 BEAST_EXPECT(jroOuter[1u][jss::taker_gets][jss::currency] ==
"USD");
128 jroOuter[1u][jss::taker_gets][jss::issuer] == bob.
human());
129 BEAST_EXPECT(jroOuter[1u][jss::taker_gets][jss::value] ==
"1");
130 BEAST_EXPECT(jroOuter[1u][jss::taker_pays] ==
"100000000");
132 BEAST_EXPECT(jroOuter[2u][jss::quality] ==
"5000000");
133 BEAST_EXPECT(jroOuter[2u][jss::taker_gets][jss::currency] ==
"USD");
135 jroOuter[2u][jss::taker_gets][jss::issuer] == gw.
human());
136 BEAST_EXPECT(jroOuter[2u][jss::taker_gets][jss::value] ==
"6");
137 BEAST_EXPECT(jroOuter[2u][jss::taker_pays] ==
"30000000");
143 jvParams[jss::account] = bob.
human();
144 jvParams[jss::limit] = 1u;
145 auto const jrr_l_1 = env.rpc(
149 auto const& jro_l_1 = jrr_l_1[jss::offers];
158 : (!jrr_l_1.isMember(jss::marker)));
161 BEAST_EXPECT(jroOuter[0u] == jro_l_1[0u]);
164 jvParams[jss::marker] = jrr_l_1[jss::marker];
165 auto const jrr_l_2 = env.rpc(
169 auto const& jro_l_2 = jrr_l_2[jss::offers];
172 BEAST_EXPECT(jroOuter[1u] == jro_l_2[0u]);
175 jvParams[jss::marker] = jrr_l_2[jss::marker];
176 jvParams[jss::limit] = 10u;
177 auto const jrr_l_3 = env.rpc(
181 auto const& jro_l_3 = jrr_l_3[jss::offers];
182 BEAST_EXPECT(!jrr_l_3.isMember(jss::marker));
184 BEAST_EXPECT(jroOuter[2u] == jro_l_3[0u]);
188 BEAST_EXPECT(jroOuter == jro_l_1);
200 jvParams[jss::account] = bob.
human();
201 jvParams[jss::limit] = 0u;
202 auto const jrr = env.rpc(
206 auto const& jro = jrr[jss::offers];
210 BEAST_EXPECT(jrr.isMember(jss::error_message));
216 BEAST_EXPECT(!jrr.isMember(jss::marker));
229 auto const USD_gw = gw[
"USD"];
231 auto const USD_bob = bob[
"USD"];
234 env.
trust(USD_gw(1000), bob);
238 auto const jrr = env.
rpc(
"account_offers");
239 BEAST_EXPECT(jrr[jss::error] ==
"badSyntax");
240 BEAST_EXPECT(jrr[jss::status] ==
"error");
241 BEAST_EXPECT(jrr[jss::error_message] ==
"Syntax error.");
246 auto testInvalidAccountParam = [&](
auto const& param) {
248 params[jss::account] = param;
250 "json",
"account_offers",
to_string(params))[jss::result];
251 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
253 jrr[jss::error_message] ==
"Invalid field 'account'.");
256 testInvalidAccountParam(1);
257 testInvalidAccountParam(1.1);
258 testInvalidAccountParam(
true);
267 jvParams[jss::account] =
"";
268 auto const jrr = env.
rpc(
272 BEAST_EXPECT(jrr[jss::error] ==
"actMalformed");
273 BEAST_EXPECT(jrr[jss::status] ==
"error");
274 BEAST_EXPECT(jrr[jss::error_message] ==
"Account malformed.");
279 auto const jrr = env.
rpc(
280 "account_offers",
Account(
"bogus").human())[jss::result];
281 BEAST_EXPECT(jrr[jss::error] ==
"actNotFound");
282 BEAST_EXPECT(jrr[jss::status] ==
"error");
283 BEAST_EXPECT(jrr[jss::error_message] ==
"Account not found.");
289 jvParams[jss::account] = bob.
human();
290 jvParams[jss::limit] =
"0";
291 auto const jrr = env.
rpc(
295 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
296 BEAST_EXPECT(jrr[jss::status] ==
"error");
298 jrr[jss::error_message] ==
299 "Invalid field 'limit', not unsigned integer.");
305 jvParams[jss::account] = bob.
human();
306 jvParams[jss::marker] =
"NOT_A_MARKER";
307 auto const jrr = env.
rpc(
311 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
312 BEAST_EXPECT(jrr[jss::status] ==
"error");
314 jrr[jss::error_message] ==
"Invalid field 'marker'.",
315 jrr.toStyledString());
321 jvParams[jss::account] = bob.
human();
322 jvParams[jss::marker] = 1;
323 auto const jrr = env.
rpc(
327 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
328 BEAST_EXPECT(jrr[jss::status] ==
"error");
330 jrr[jss::error_message] ==
331 "Invalid field 'marker', not string.");
337 jvParams[jss::account] = bob.
human();
338 jvParams[jss::ledger_index] = 10u;
339 auto const jrr = env.
rpc(
343 BEAST_EXPECT(jrr[jss::error] ==
"lgrNotFound");
344 BEAST_EXPECT(jrr[jss::status] ==
"error");
345 BEAST_EXPECT(jrr[jss::error_message] ==
"ledgerNotFound");