The Short Links app (/business/apps/shortlinks) lets users create shortened URLs with optional custom slugs, passwords, expiration dates, UTM parameters, and splash pages. It provides a dashboard with stats, a filterable link list, splash page management, and settings.
Routes under test:
| Route | Purpose |
|---|
/business/apps/shortlinks | Dashboard with stats and recent links |
/business/apps/shortlinks/links | Filterable link list |
/business/apps/shortlinks/links/new | Create a new short link |
/business/apps/shortlinks/links/[id] | View and edit a short link |
/business/apps/shortlinks/splash | Splash page list |
/business/apps/shortlinks/splash/new | Create a splash page |
/business/apps/shortlinks/splash/[id] | Edit a splash page |
/business/apps/shortlinks/settings | Settings (placeholder) |
| ID | Description | Preconditions | Steps | Expected Result | Priority |
|---|
| SL-001 | Dashboard loads stats | User has short links | 1. Navigate to /business/apps/shortlinks | Four stat cards display: Total Links, Active, Expired, Clicks | P0 |
| SL-002 | Recent links section | User has links | 1. Navigate to /business/apps/shortlinks | Up to 5 recent links shown with slug, status badge, and truncated destination URL | P0 |
| SL-003 | Empty dashboard | User has no links | 1. Navigate to /business/apps/shortlinks | ”No links yet” empty state message displayed | P1 |
| SL-004 | New Link button | User is on dashboard | 1. Click “New Link” button | Navigates to /business/apps/shortlinks/links/new | P1 |
| SL-005 | Quick nav cards | User is on dashboard | 1. Click each quick-nav card (Links, Splash Pages, Settings) | Each navigates to the correct sub-page | P1 |
| ID | Description | Preconditions | Steps | Expected Result | Priority |
|---|
| SL-010 | Link list renders | User has short links | 1. Navigate to /business/apps/shortlinks/links | All links displayed with slug (monospace), status badge, destination URL, creation date, and copy button | P0 |
| SL-011 | Search filter | User has links with distinct slugs | 1. Type a slug or URL fragment into search 2. Submit | Only matching links displayed; URL updates with ?search=... | P0 |
| SL-012 | Status filter — Active | User has mixed-status links | 1. Click “Active” filter button | Only active links displayed | P0 |
| SL-013 | Status filter — Inactive | User has inactive links | 1. Click “Inactive” filter | Only inactive links displayed | P1 |
| SL-014 | Status filter — Expired | User has expired links | 1. Click “Expired” filter | Only expired links displayed | P1 |
| SL-015 | Status filter — All | Filters are applied | 1. Click “All” filter | All links displayed | P1 |
| SL-016 | Copy slug to clipboard | Link list is displayed | 1. Click the copy icon next to a link | Slug is copied to clipboard; success toast “Slug copied!” shown | P1 |
| SL-017 | Empty link list | No links match filters | 1. Apply filters that match nothing | ”No links found.” with “Create your first link” button displayed | P1 |
| SL-018 | Link row navigates to detail | Link list is displayed | 1. Click on a link row | Navigates to /business/apps/shortlinks/links/[id] | P0 |
| ID | Description | Preconditions | Steps | Expected Result | Priority |
|---|
| SL-020 | Create link with only destination URL | User is authenticated | 1. Navigate to /business/apps/shortlinks/links/new 2. Enter a valid destination URL 3. Click “Create Link” | Redirected to link list; new link appears with an auto-generated slug | P0 |
| SL-021 | Create link with custom slug | User is authenticated | 1. Enter destination URL 2. Enter a custom slug “my-promo” 3. Click “Create Link” | Link created with slug “my-promo” | P0 |
| SL-022 | Create link with password | User is authenticated | 1. Enter destination URL 2. Enter a password 3. Click “Create Link” | Link is created with password protection | P1 |
| SL-023 | Create link with expiration | User is authenticated | 1. Enter destination URL 2. Set an expiration date/time 3. Click “Create Link” | Link is created with expires_at set | P1 |
| SL-024 | Create link with UTM params | User is authenticated | 1. Enter destination URL 2. Fill in UTM Source, Medium, and Campaign 3. Click “Create Link” | Link is created with UTM parameters stored | P1 |
| SL-025 | Create link with splash page | User has at least one splash page | 1. Enter destination URL 2. Select a splash page from the dropdown 3. Click “Create Link” | Link is created with splash_page_id set | P1 |
| SL-026 | Splash page dropdown hidden when none exist | User has no splash pages | 1. Navigate to /business/apps/shortlinks/links/new | Splash page select field is not rendered | P2 |
| SL-027 | Validation — empty destination URL | User is on create form | 1. Leave destination URL blank 2. Click “Create Link” | Validation error on destination_url field; form does not submit | P0 |
| SL-028 | Validation — invalid URL format | User is on create form | 1. Enter “not-a-url” as destination 2. Click “Create Link” | Validation error for invalid URL format | P1 |
| SL-029 | Cancel button returns to list | User is on create form | 1. Click “Cancel” | Navigates to /business/apps/shortlinks/links | P2 |
| ID | Description | Preconditions | Steps | Expected Result | Priority |
|---|
| SL-030 | Link detail page loads | Link exists | 1. Navigate to /business/apps/shortlinks/links/[id] | Header shows slug (monospace), status badge; info card shows Destination, Created, Expires (if set), Splash Page (if set) | P0 |
| SL-031 | UTM parameters display | Link has UTM params | 1. Navigate to link detail | UTM card shows Source, Medium, Campaign, Term, Content as applicable | P1 |
| SL-032 | Update link destination URL | Link detail is open | 1. Change Destination URL in the edit form 2. Click “Save Changes” | Success toast shown; destination URL updates | P0 |
| SL-033 | Update link slug | Link detail is open | 1. Change slug 2. Click “Save Changes” | Slug updates; header refreshes | P0 |
| SL-034 | Update password | Link detail is open | 1. Enter or change password 2. Click “Save Changes” | Password updates | P1 |
| SL-035 | Update expiration date | Link detail is open | 1. Change expiration date 2. Click “Save Changes” | Expiration date updates | P1 |
| SL-036 | Update UTM parameters | Link detail is open | 1. Change UTM Source, Medium, Campaign, Term, or Content 2. Click “Save Changes” | UTM parameters update | P1 |
| SL-037 | Toggle sensitive content flag | Link detail is open | 1. Check or uncheck “Mark as sensitive content” 2. Click “Save Changes” | is_sensitive flag updates | P2 |
| SL-038 | Change splash page assignment | Link detail is open; splash pages exist | 1. Select a different splash page or “None” 2. Click “Save Changes” | splash_page_id updates | P1 |
| SL-039 | Delete link | Link detail is open | 1. Click the trash icon in the header | Link is deleted; redirected to /business/apps/shortlinks/links | P0 |
| SL-040 | Non-owner cannot access link | Link belongs to another user | 1. Navigate to /business/apps/shortlinks/links/[id] as a different user | 403 Forbidden error | P1 |
| ID | Description | Preconditions | Steps | Expected Result | Priority |
|---|
| SL-050 | Splash page list renders | User has splash pages | 1. Navigate to /business/apps/shortlinks/splash | List shows splash names with redirect delay; count badge displayed | P0 |
| SL-051 | Empty splash list | User has no splash pages | 1. Navigate to /business/apps/shortlinks/splash | ”No splash pages yet.” with “Create your first splash page” button | P1 |
| SL-052 | Create splash page with valid data | User is authenticated | 1. Navigate to /business/apps/shortlinks/splash/new 2. Enter name “Promo Splash” 3. Set redirect delay to 10 4. Click “Create Splash Page” | Redirected to splash list; new splash appears | P0 |
| SL-053 | Validation — empty name | User is on new splash form | 1. Leave name blank 2. Click “Create Splash Page” | Validation error on name field | P0 |
| SL-054 | Edit splash page | Splash page exists | 1. Navigate to /business/apps/shortlinks/splash/[id] 2. Change name and redirect delay 3. Click “Save Changes” | Success toast; values persist on reload | P0 |
| SL-055 | Edit splash — logo URL | Splash page detail is open | 1. Enter a logo URL 2. Save | Logo URL persists | P2 |
| SL-056 | Edit splash — show ad toggle | Splash page detail is open | 1. Toggle “Show advertisement” checkbox 2. Save | show_ad flag updates | P2 |
| SL-057 | Edit splash — custom CSS | Splash page detail is open | 1. Enter custom CSS 2. Save | Custom CSS persists | P2 |
| SL-058 | Splash page preview renders | Splash page detail is open | 1. Observe the preview panel | SplashPreview component renders reflecting current form state | P1 |
| SL-059 | Delete splash page | Splash page detail is open | 1. Click the trash icon in the header | Splash is deleted; redirected to /business/apps/shortlinks/splash | P0 |
| SL-060 | Non-owner cannot access splash | Splash belongs to another user | 1. Navigate to splash detail as different user | 403 Forbidden error | P1 |
| ID | Description | Preconditions | Steps | Expected Result | Priority |
|---|
| SL-070 | Settings page loads | User is authenticated | 1. Navigate to /business/apps/shortlinks/settings | Page renders with “Settings coming soon.” placeholder | P2 |