Skip to content
Admin portal → Settings → Testing/admin/testing4 minCannot be undone

Testing and rehearsal ​

Operator page, sandboxes only

Developers and owners only, like the Rehearsal tab. In production this screen shows an explanation instead of any buttons. That is deliberate.

Where you plant practice data, check that FMS still behaves, and rehearse renewals on Stripe and Opn test accounts. The page title is Test tools. The top line names the sandbox you are in.

The Test tools screen
Demo data, Checks, Stripe test accounts, Opn test accounts, Live-fire rehearsal.
The Test tools screen

Click anywhere, or press Esc, to close.

Every button that changes something asks first in a small window. It lists what will happen. Press Cancel to back out.

Demo data ​

Demo data with What it creates open
Open What it creates to see exactly what gets planted.
Demo data with What it creates open

Click anywhere, or press Esc, to close.

Plants a full cast so every screen has something to show.

  1. Open What it creates to see the list first.
  2. Press Load demo data.
  3. Read the window, then press Load demo data again.

A green line then counts what was planted. Open Everything that was planted for each item.

It replaces the existing practice data

Anything loaded before is wiped and replanted. Real members are untouched, but do not run it while somebody else is mid-demo.

What it plants

Members on every billing source and status, members who appear twice, card routing cases, teams, a newsletter opt-out, two queue examples for Health, a broken plan for Plans → Tools, whitelist grants with end dates, and thirteen months of history for the Dashboard charts. Nothing is sent to Stripe or Mailchimp.

Checks ​

Runs FMS through each practice scenario and compares the result with what should happen. Use it after an upgrade.

  1. Press Run all checks, or Run group beside one group.
  2. Press Run checks in the window.
  3. Read the counts: passed, failed, errored.
  4. Open a failed check to see expected against actual.

Each run loads the demo data again first. Members and Teams stay populated afterwards.

Some groups leave nothing behind. They create their own test members, run, then undo every change. Nothing from them shows on Members, Health or the email queue.

What the checks cover

The first groups cover members, duplicates, card routing, teams, newsletter opt-outs, the queue, plan repair and whitelist grants.

The groups that leave nothing behind:

  • Renewal needs bank confirmation: the payment link is kept and access is held, then stops.
  • Team invoices: staff vouching for an address, the billing address, a paid notice, an unpaid team.
  • Change plan and move to Stripe billing: nothing changes before payment, and late money is refused.
  • Gift memberships and discount codes: a claimed gift, a link that works once, the discount sums.
  • Membership emails: each email only when switched on, the stop link, a send refused for good. A card membership follows its payment connection's switches checks that a card member gets only what their payment account's page switches on, and a free grant only what Email does. The emails are switched on inside the check only. Your settings on Email and on each connection do not change.
  • Refunds and webhook safety: refunds in Reports, a notice sent twice, a notice on the wrong account.
  • Opn Payments (Omise): three declined renewals and the grace that follows, cancel at period end, an Omise notice sent twice, a charge for the wrong amount. Each makes its own practice Opn account, so it runs without one connected.

None of them contacts Stripe, Omise or Mailchimp, and none sends an email.

Stripe test accounts ​

One box per connected Stripe test account. Create test members… makes a set of fake customers. Create products & subscriptions adds a handful of products. Clean test data… deletes them again. Each one shows what it will touch before it runs. Live accounts are never touched.

Open checkout page opens the public checkout in a new tab, for a single test purchase. With no test account connected, the box says so and offers Open Connections.

Opn test accounts ​

One box per Opn Payments account connected with test keys. It charges the Omise test account with Omise's own test cards, so you can see what each card does. No real money moves.

You'll need

  1. Choose a Test card. The line under it says what it should do.
  2. Leave Amount at 20.00 and Currency at THB, or change them.
  3. Press Charge, then Charge again in the window.
  4. Read the result under the box.

A successful charge shows what Reaches the bank, the Omise fee and the VAT on the fee. A declined one shows Omise's reason, such as insufficient_fund. The charge id at the bottom finds it in the Omise test dashboard under Charges.

Test cardWhat it proves
Visa · succeedsA normal payment goes through, with its fee.
Mastercard · succeedsThe same on Mastercard.
JCB · succeedsJCB pays in THB. Omise may need to enable it for test mode.
American Express · succeedsOnly once Omise has enabled AMEX on the account.
Visa · insufficient fundsA decline a renewal would retry.
Visa · stolen or lostA decline for a reported card.
Visa · processing failedA decline because the bank could not process it.
Visa · payment rejectedA decline by the bank.
Visa · fraud check failedA decline by Omise's fraud check.
Visa · invalid card numberA decline for a card the bank does not know.
Visa · 3-D Secure enrollment failsThe challenge flow, ending in a rejection.
Visa · 3-D Secure check failsThe same, failing at the bank's check.

Check capability asks Omise again which cards and currencies the account takes, and the limits of one charge.

Every test charge here asks for 3-D Secure

Our test account uses dynamic 3-D Secure. This box sends a return address with each charge, so the bank asks to confirm it, even with a success card. When a charge waits, press Complete 3DS to open the bank's page in a new tab.

What FMS keeps of a test charge

FMS notes each test charge before sending it, so an answer lost on the way can be found again. It is never a payment: it is not in Reports and grants nothing. Removing the Opn account forgets these notes too. In production the box is not shown and the server refuses the charge.

Live-fire rehearsal ​

Drives real Stripe test-clock renewals, so you can watch a renewal happen in minutes rather than a month. With an Opn test account picked, it also charges, renews and declines on Omise's test system. Test mode only. It exists to prove the wiring, not to be run casually.

  1. Choose the Primary account (like Thailand) and the Backup account (like Singapore).
  2. Choose an Opn test account (optional), or leave it at None.
  3. Press Run rehearsal, then Start rehearsal in the window.
  4. Wait. Each scenario shows a status: Waiting, Running, Passed, Warning, Your turn, Failed or Skipped.

Scenarios marked Uses a Stripe test clock take a few minutes. The page updates by itself.

The list now includes Renewal that needs bank confirmation (3D Secure): a renewal on Stripe's test card whose bank asks for confirmation every time, which FMS must hold for the member and then settle once the invoice is paid. It has not been run yet, so its first run is the verification.

Guided manual checks sit underneath. Open Steps, do them in a browser, then press Verify.

Opn in the live-fire rehearsal ​

The Opn scenarios run after the Stripe ones, on the Opn account you picked. With None, they show Skipped and say why.

You'll need

  • An Opn account connected with test keys, not read-only, on Connections
  • Its webhook address set and its webhook secret pasted, for the webhook check
ScenarioWhat it proves
Opn preflight: account, capability, webhookThe keys work in test mode. It lists cards, currencies, limits and the webhook.
Opn test charge: a ฿20 Visa charge succeedsA ฿20 Visa charge succeeds, with Omise's fee and what reaches the bank.
Opn decline: insufficient funds is a clean refusalThe insufficient-funds card is refused, the member gets plain words, nothing is recorded as paid.
Opn donation: charged, recorded, settled in bahtA $5 donation is charged once and settles in baht in the money ledger.
Opn checkout: a membership bought by cardA Visa buys a membership. The card is saved, the invoice is paid, the fee is recorded.
Opn renewal: FMS charges the saved cardFMS charges the saved card at the period end and moves the date on by one term.
Opn renewal declined three times → dunning graceTries at the period end, three and seven days later, then grace, the member's email and a staff alert.
Opn checkout with 3-D Secure (guided)The checkout waits for the bank and grants nothing until it says yes.
Opn duplicate check: the same ref_id makes one chargeA ฿20 charge sent twice with FMS's reference is charged once. A second charge fails the row and is refunded.
Opn renewal skips 3-D SecureOn a saved card, a payment with a return address waits for the bank. A renewal without one goes through at once.
Opn webhook reaches FMS (guided)An event Omise sends arrives and passes the signature check.
Opn reconcile: the event poll runs cleanThe safety-net poll reads the account's events without an error.
Opn clean-upPractice memberships cancelled, Omise test customers deleted, temporary changes put back.

Warning is amber. It means a setting on the Omise account, not a fault in FMS. Its step says what to change or what to ask Omise. Typical ones: USD or American Express not enabled, the webhook address or secret missing, or Omise asking for 3-D Secure where it said it would not.

Checkouts stop with a Warning on our test account

A checkout's first payment is sent with a return address, so our account asks the bank. These scenarios run without a browser, so these stop there with a Warning:

  • Opn checkout: a membership bought by card
  • Opn renewal: FMS charges the saved card
  • Opn renewal declined three times → dunning grace

Opn checkout with 3-D Secure (guided) and Opn renewal skips 3-D Secure cover what they cannot.

The 3-D Secure checkout needs you

When Opn checkout with 3-D Secure (guided) says Your turn, press Open Omise's test page. Mark the charge Successful on Omise's page. Come back and press Verify on that row. Verify then cancels the practice membership and deletes its Omise customer. If the account has 3-D Secure off, the row shows a Warning instead: Omise charged without asking the bank.

For Opn webhook reaches FMS (guided), a Warning means no event arrived. Send a test webhook from Omise's dashboard, or make one test charge above, then press Verify on that row.

What the Opn scenarios change while they run
  • Visa is sent to the Opn account first. The clean-up puts its routing priority back.
  • The checkout buys the cheapest paid plan at its USD price. On an account without USD it pays the THB price from the account's exchange rate; with no rate the checkouts are skipped with a warning.
  • Renewals are rehearsed by moving the membership's renewal date into the past.
  • The practice donation stays in the sandbox as a record of the run.
  • What the Opn scenarios created, under the list, names every member, membership, Omise customer and charge the run made, and what the clean-up did with each.

Migration rehearsal ​

There is a separate Rehearsal tab, a checklist that walks the whole cutover from a copy of the live site. Most people will never open it. The one-page description lives in the repository at docs/migration-runbooks/local-rehearsal.md.

Internal staff guide. Screenshots come from the rehearsal rig and never show real members. Project status (for developers and admins).