# Browser regression recipes

Six plain-English checks for web-app releases. Each recipe names the test setup,
actions, observable outcomes, and cleanup. Copy a recipe, replace its bracketed
placeholders, and adapt the expected behavior to your app.

| Recipe | What it catches | Prepare first |
| --- | --- | --- |
| [Saved draft](saved-draft.txt) | A save that looks successful but disappears after reload | A disposable draft and a test account that can edit it |
| [Exclusive discounts](exclusive-discounts.txt) | A new discount accidentally stacking with an existing one | The exact pricing fixture below, with test-mode checkout |
| [Filter after pagination](filter-after-pagination.txt) | A filter leaving the UI on a page with no matching results | More than one page of fixture records and a known match |
| [Upload to download](upload-to-download.txt) | An upload/export journey breaking at the handoff | A small attached file your app accepts and its expected result |
| [Read-only role](read-only-role.txt) | An editor change exposing write controls to a reader | A read-only test session and a disposable visible record |
| [Cancelled checkout](cancelled-checkout.txt) | Returning from checkout marking an unpaid order as fulfilled | Your own staging shop, a test-mode checkout, and a disposable order |

These are templates, not test results for your app. A passing browser check only
establishes the outcomes actually observed in that run. The read-only recipe
checks user-visible controls; it is not an authorization audit.

## Run with Aptets

[Aptets](https://aptets.com) executes plain-English flows with an AI browser agent
and keeps observed outcomes and screenshot evidence.

1. [Get a workspace](https://aptets.com/app/start): sign in with Google and buy the
   **US $5 starter pack for 10 runs**. One-time payment, no subscription, no expiry.
2. Set the starting URL to a site you own or are authorized to test. Use staging
   for writes, with dedicated test accounts and disposable fixtures.
3. Save a recipe as a flow. Replace every placeholder. Configure its named
   credentials or saved session in Aptets; attach files when needed.
4. Review the instructions, click **Play**, and inspect the result and evidence.

Buying a pack does not start a test. A credit is used when a run starts, including
blocked or cancelled runs. Interactive MFA, a CAPTCHA, an unavailable fixture, or
an automation block can prevent completion. [Pricing and limits](https://aptets.com/pricing).

### Author with your coding agent

A workspace member can create a read-and-author MCP key in **Settings → MCP**.
Keep the key in an environment variable, then register the server with Codex CLI:

```sh
codex mcp add aptets --url https://api.aptets.com/mcp --bearer-token-env-var APTETS_MCP_TOKEN
```

Ask the agent to inspect existing coverage before creating a flow:

> Use Aptets to inspect my authorized workspace and search for existing draft-save
> coverage. Read the saved-draft recipe, replace its placeholders with the fixture
> details I provide, and propose a flow to save for my review. Keep credentials in
> named settings. Report the saved suite and flow IDs. I will review and start it.

The MCP server authors definitions and reads results; it does not start browser
runs. Read the [connection and tool guide](https://aptets.com/agents.md) for client
setup, scopes, safe retries, and exact tool schemas.

## Fixture notes

For **Exclusive discounts**, configure this business rule explicitly:

- Two units at $25 each: $50 before discounts.
- A member discount of 10%.
- A `TWENTY` coupon worth 20% and a `FIVE` coupon worth 5%.
- Only the larger discount applies. Tax and shipping are both zero.

The expected totals are $40 with `TWENTY` and $45 with `FIVE`. Change the recipe
if your product uses another rule. The check stops before payment.

For **Upload to download**, [sample.csv](sample.csv) contains two fictional
items and can be used if your app accepts this format. The recipe deliberately
leaves the expected output configurable; different products transform files in
different ways.

Keep fixtures separate from customer records. A missing prerequisite should be
reported as blocked, with the last observed state, instead of guessed into a pass.
Record incomplete cleanup so the next run starts from a known state.

## About

Published for Aptets by James Wu's authorized AI assistant. The recipes were
written with AI and reviewed against Aptets' current authoring documentation.
They have not been executed against third-party applications.

MIT licensed. Product support: [Aptets](https://aptets.com).
