21 #include <ripple/protocol/Feature.h>
22 #include <ripple/protocol/jss.h>
29 "00000000000000000000000000000000"
30 "00000000000000000000000000000001";
50 bool other_target =
false,
51 bool expiration =
false)
53 using namespace std::string_literals;
55 bool is_cancel = tx[jss::TransactionType] == jss::TicketCancel;
67 if (is_cancel && other_target)
93 for (
auto const& it : expected_nodes)
95 auto const& idx = std::get<0>(it);
96 auto const& field = std::get<1>(it);
97 auto const& type = std::get<2>(it);
108 testcase (
"Feature Not Enabled");
110 using namespace test::jtx;
113 env (ticket::create (env.master), ter(
temDISABLED));
119 testcase (
"Cancel Nonexistent");
121 using namespace test::jtx;
128 testcase (
"Create/Cancel Ticket with Bad Fee, Fail Preflight");
130 using namespace test::jtx;
133 env (ticket::create (env.master), fee (XRP (-1)), ter (
temBAD_FEE));
134 env (ticket::cancel (env.master,
idOne), fee (XRP (-1)), ter (
temBAD_FEE));
139 testcase (
"Create Tickets with Nonexistent Accounts");
141 using namespace test::jtx;
143 Account alice {
"alice"};
146 env (ticket::create (env.master, alice), ter(
tecNO_TARGET));
148 env (ticket::create (alice, env.master),
149 json (jss::Sequence, 1),
155 testcase (
"Create Tickets with Same Account and Target");
157 using namespace test::jtx;
160 env (ticket::create (env.master, env.master));
162 auto const& jticket = cr[1];
165 "7F58A0AE17775BA3404D55D406DD1C2E91EADD7AF3F03A26877BCE764CCB75E3");
176 testcase (
"Create Ticket and Then Cancel by Creator");
178 using namespace test::jtx;
182 env (ticket::create (env.master));
184 auto const& jacct = cr[0];
185 auto const& jticket = cr[1];
193 "7F58A0AE17775BA3404D55D406DD1C2E91EADD7AF3F03A26877BCE764CCB75E3");
200 auto const& jacctd = crd[0];
208 testcase (
"Create Ticket Insufficient Reserve");
210 using namespace test::jtx;
212 Account alice {
"alice"};
214 env.fund (env.current ()->fees ().accountReserve (0), alice);
222 testcase (
"Create Ticket and Then Cancel by Target");
224 using namespace test::jtx;
226 Account alice {
"alice"};
228 env.fund (XRP (10000), alice);
232 env (ticket::create (env.master, alice));
234 auto const& jacct = cr[0];
235 auto const& jticket = cr[1];
240 "C231BA31A0E13A4D524A75F990CE0D6890B800FF1AE75E51A2D33559547AC1A2");
250 auto const& jacctd = crd[0];
251 auto const& jdir = crd[2];
268 testcase (
"Create Ticket with Future Expiration");
270 using namespace test::jtx;
274 using namespace std::chrono_literals;
276 (env.timeKeeper ().closeTime () + 60s)
277 .time_since_epoch ().count ();
278 env (ticket::create (env.master, expire));
280 auto const& jacct = cr[0];
281 auto const& jticket = cr[1];
294 testcase (
"Create Ticket with Zero Expiration");
296 using namespace test::jtx;
305 testcase (
"Create Ticket with Past Expiration");
307 using namespace test::jtx;
310 env.timeKeeper ().adjustCloseTime (
days {2});
314 uint32_t expire = 60;
315 env (ticket::create (env.master, expire));
334 testcase (
"Create Ticket and Allow to Expire");
336 using namespace test::jtx;
342 .time_since_epoch().count();
343 env (ticket::create (env.master, expire));
345 auto const& jacct = cr[0];
346 auto const& jticket = cr[1];
354 "7F58A0AE17775BA3404D55D406DD1C2E91EADD7AF3F03A26877BCE764CCB75E3");
356 Account alice {
"alice"};
357 env.fund (XRP (10000), alice);
365 env.timeKeeper ().adjustCloseTime (
days {3});
371 auto const& jticketd = crd[1];