Emberstore logoEmberstore

Test mode

Try the whole purchase flow without real money, push fake payment statuses and check your webhook address.

Test mode lets you run real purchases through the real reward code without paying. Orders are tagged as tests, and two admin tools let you pretend to be the gateway and check that gateways can reach you.

With test-mode.enabled true, orders are tagged TEST, live exchange rates are skipped and the admin test tools work. fake-invoices hands out a test.invalid link. simulate pushes a status through the real handler and webhook-selftest checks the public webhook address.
test-mode:
  # Turns on the admin test tools. Keep false on a live store
  enabled: false
  # Skip the gateway call and hand out a dummy checkout link
  fake-invoices: false

What changes while it is on

  • The console warns that test mode is on at every start and reload.
  • Every new order is a test order. /store admin orders and /store admin order show a [TEST] tag, Discord embeds end with [TEST], and the purchase log says TEST. Test orders are left out of /store admin stats, /store history, /store top and the dashboard figures (the dashboard has a switch to show them).
  • Only fixed-rates are used for currency conversion. No rate source is contacted.
  • With fake-invoices: true, no gateway is contacted. The payment link is https://test.invalid/pay/<order id> and everything else works as normal. With false, the real gateway (or its sandbox) is used, which is how you test a gateway's own test mode.

A full test run

Turn it on

Set enabled: true and fake-invoices: true, then /store admin reload. You still need at least one gateway turned on with its keys filled in, because only listed gateways are offered at checkout.

Buy something

Open /store and buy an item. You get the pay dialog with a test link. Do not open it.

Mark it paid

Run /store admin orders, copy the order id, then:

/store admin simulate <order_id> paid

The reward runs exactly as for a real payment. Run it again and nothing happens, which is the point.

Try the rest

simulate <order_id> refunded takes the reward back. Try a gift, a code, a timed item, or log off before simulating to see offline delivery.

/store admin simulate

/store admin simulate <order_id> <status>

Pushes a made-up status through the same handler that real webhooks use. Statuses: pending, confirming, paid, partial, failed, expired, refunded, disputed, renewed, cancelled. It only works while test mode is on, and only on test orders. Real orders are refused.

/store admin webhook-selftest

/store admin webhook-selftest [gateway]

Checks that your public webhook address really reaches the listener. For each enabled gateway (or just the one you name), it sends a correctly signed, harmless request to <webhook.public-base-url>/webhook/<id> and expects a 200 answer, then the same request with a broken signature and expects a 401. PayPal and BitPay check their messages by asking the gateway, so for them only the route is tested.

A failure usually means public-base-url is wrong, the reverse proxy does not pass /webhook/ through, or a firewall blocks it.

On this page