27        auto const USD_gw = gw[
"USD"];
 
   29        auto const USD_bob = bob[
"USD"];
 
   31        env.fund(
XRP(10000), gw, bob);
 
   32        env.trust(USD_gw(1000), bob);
 
   37        env(
pay(gw, bob, USD_gw(10)));
 
   38        unsigned const offer_count = 12u;
 
   39        for (
auto i = 0u; i < offer_count; i++)
 
   42            jvo[sfExpiration.fieldName] = 10000000u;
 
   48            env.rpc(
"account_offers", bob.
human())[jss::result][jss::offers];
 
   55        jvParams[jss::account] = bob.
human();
 
   56        jvParams[jss::limit] = 1u;
 
   57        auto const jrr_l = env.rpc(
 
   59        auto const& jro_l = jrr_l[jss::offers];
 
 
   69            std::string(
"Sequential - ") + (asAdmin ? 
"admin" : 
"non-admin"));
 
   74        auto const USD_gw = gw[
"USD"];
 
   76        auto const USD_bob = bob[
"USD"];
 
   78        env.fund(
XRP(10000), gw, bob);
 
   79        env.trust(USD_gw(1000), bob);
 
   84        env(
pay(gw, bob, USD_gw(10)));
 
   86        env(
offer(bob, 
XRP(100), USD_bob(1)));
 
   87        env(
offer(bob, 
XRP(200), USD_gw(2)));
 
   92            env.rpc(
"account_offers", bob.
human())[jss::result][jss::offers];
 
   99            BEAST_EXPECT(jroOuter[0u][jss::quality] == 
"100000000");
 
  100            BEAST_EXPECT(jroOuter[0u][jss::taker_gets][jss::currency] == 
"USD");
 
  102                jroOuter[0u][jss::taker_gets][jss::issuer] == gw.
human());
 
  103            BEAST_EXPECT(jroOuter[0u][jss::taker_gets][jss::value] == 
"2");
 
  104            BEAST_EXPECT(jroOuter[0u][jss::taker_pays] == 
"200000000");
 
  106            BEAST_EXPECT(jroOuter[1u][jss::quality] == 
"100000000");
 
  107            BEAST_EXPECT(jroOuter[1u][jss::taker_gets][jss::currency] == 
"USD");
 
  109                jroOuter[1u][jss::taker_gets][jss::issuer] == bob.
human());
 
  110            BEAST_EXPECT(jroOuter[1u][jss::taker_gets][jss::value] == 
"1");
 
  111            BEAST_EXPECT(jroOuter[1u][jss::taker_pays] == 
"100000000");
 
  113            BEAST_EXPECT(jroOuter[2u][jss::quality] == 
"5000000");
 
  114            BEAST_EXPECT(jroOuter[2u][jss::taker_gets][jss::currency] == 
"USD");
 
  116                jroOuter[2u][jss::taker_gets][jss::issuer] == gw.
human());
 
  117            BEAST_EXPECT(jroOuter[2u][jss::taker_gets][jss::value] == 
"6");
 
  118            BEAST_EXPECT(jroOuter[2u][jss::taker_pays] == 
"30000000");
 
  124            jvParams[jss::account] = bob.
human();
 
  125            jvParams[jss::limit] = 1u;
 
  126            auto const jrr_l_1 = env.rpc(
 
  130            auto const& jro_l_1 = jrr_l_1[jss::offers];
 
  139                        : (!jrr_l_1.isMember(jss::marker)));
 
  142                BEAST_EXPECT(jroOuter[0u] == jro_l_1[0u]);
 
  145                jvParams[jss::marker] = jrr_l_1[jss::marker];
 
  146                auto const jrr_l_2 = env.rpc(
 
  150                auto const& jro_l_2 = jrr_l_2[jss::offers];
 
  153                BEAST_EXPECT(jroOuter[1u] == jro_l_2[0u]);
 
  156                jvParams[jss::marker] = jrr_l_2[jss::marker];
 
  157                jvParams[jss::limit] = 10u;
 
  158                auto const jrr_l_3 = env.rpc(
 
  162                auto const& jro_l_3 = jrr_l_3[jss::offers];
 
  163                BEAST_EXPECT(!jrr_l_3.isMember(jss::marker));
 
  165                BEAST_EXPECT(jroOuter[2u] == jro_l_3[0u]);
 
  169                BEAST_EXPECT(jroOuter == jro_l_1);
 
  175            jvParams[jss::account] = bob.
human();
 
  176            jvParams[jss::limit] = 0u;
 
  177            auto const jrr = env.rpc(
 
  181            BEAST_EXPECT(jrr.isMember(jss::error_message));
 
 
  193        auto const USD_gw = gw[
"USD"];
 
  195        auto const USD_bob = bob[
"USD"];
 
  198        env.
trust(USD_gw(1000), bob);
 
  202            auto const jrr = env.
rpc(
"account_offers");
 
  203            BEAST_EXPECT(jrr[jss::error] == 
"badSyntax");
 
  204            BEAST_EXPECT(jrr[jss::status] == 
"error");
 
  205            BEAST_EXPECT(jrr[jss::error_message] == 
"Syntax error.");
 
  210            auto testInvalidAccountParam = [&](
auto const& param) {
 
  212                params[jss::account] = param;
 
  214                    "json", 
"account_offers", 
to_string(params))[jss::result];
 
  215                BEAST_EXPECT(jrr[jss::error] == 
"invalidParams");
 
  217                    jrr[jss::error_message] == 
"Invalid field 'account'.");
 
  220            testInvalidAccountParam(1);
 
  221            testInvalidAccountParam(1.1);
 
  222            testInvalidAccountParam(
true);
 
  231            jvParams[jss::account] = 
"";
 
  232            auto const jrr = env.
rpc(
 
  236            BEAST_EXPECT(jrr[jss::error] == 
"actMalformed");
 
  237            BEAST_EXPECT(jrr[jss::status] == 
"error");
 
  238            BEAST_EXPECT(jrr[jss::error_message] == 
"Account malformed.");
 
  243            auto const jrr = env.
rpc(
 
  244                "account_offers", 
Account(
"bogus").human())[jss::result];
 
  245            BEAST_EXPECT(jrr[jss::error] == 
"actNotFound");
 
  246            BEAST_EXPECT(jrr[jss::status] == 
"error");
 
  247            BEAST_EXPECT(jrr[jss::error_message] == 
"Account not found.");
 
  253            jvParams[jss::account] = bob.
human();
 
  254            jvParams[jss::limit] = 
"0";  
 
  255            auto const jrr = env.
rpc(
 
  259            BEAST_EXPECT(jrr[jss::error] == 
"invalidParams");
 
  260            BEAST_EXPECT(jrr[jss::status] == 
"error");
 
  262                jrr[jss::error_message] ==
 
  263                "Invalid field 'limit', not unsigned integer.");
 
  269            jvParams[jss::account] = bob.
human();
 
  270            jvParams[jss::marker] = 
"NOT_A_MARKER";
 
  271            auto const jrr = env.
rpc(
 
  275            BEAST_EXPECT(jrr[jss::error] == 
"invalidParams");
 
  276            BEAST_EXPECT(jrr[jss::status] == 
"error");
 
  278                jrr[jss::error_message] == 
"Invalid field 'marker'.",
 
  279                jrr.toStyledString());
 
  285            jvParams[jss::account] = bob.
human();
 
  286            jvParams[jss::marker] = 1;
 
  287            auto const jrr = env.
rpc(
 
  291            BEAST_EXPECT(jrr[jss::error] == 
"invalidParams");
 
  292            BEAST_EXPECT(jrr[jss::status] == 
"error");
 
  294                jrr[jss::error_message] ==
 
  295                "Invalid field 'marker', not string.");
 
  301            jvParams[jss::account] = bob.
human();
 
  302            jvParams[jss::ledger_index] = 10u;
 
  303            auto const jrr = env.
rpc(
 
  307            BEAST_EXPECT(jrr[jss::error] == 
"lgrNotFound");
 
  308            BEAST_EXPECT(jrr[jss::status] == 
"error");
 
  309            BEAST_EXPECT(jrr[jss::error_message] == 
"ledgerNotFound");