Skip to content

Short Links App QA

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:

RoutePurpose
/business/apps/shortlinksDashboard with stats and recent links
/business/apps/shortlinks/linksFilterable link list
/business/apps/shortlinks/links/newCreate a new short link
/business/apps/shortlinks/links/[id]View and edit a short link
/business/apps/shortlinks/splashSplash page list
/business/apps/shortlinks/splash/newCreate a splash page
/business/apps/shortlinks/splash/[id]Edit a splash page
/business/apps/shortlinks/settingsSettings (placeholder)

IDDescriptionPreconditionsStepsExpected ResultPriority
SL-001Dashboard loads statsUser has short links1. Navigate to /business/apps/shortlinksFour stat cards display: Total Links, Active, Expired, ClicksP0
SL-002Recent links sectionUser has links1. Navigate to /business/apps/shortlinksUp to 5 recent links shown with slug, status badge, and truncated destination URLP0
SL-003Empty dashboardUser has no links1. Navigate to /business/apps/shortlinks”No links yet” empty state message displayedP1
SL-004New Link buttonUser is on dashboard1. Click “New Link” buttonNavigates to /business/apps/shortlinks/links/newP1
SL-005Quick nav cardsUser is on dashboard1. Click each quick-nav card (Links, Splash Pages, Settings)Each navigates to the correct sub-pageP1

IDDescriptionPreconditionsStepsExpected ResultPriority
SL-010Link list rendersUser has short links1. Navigate to /business/apps/shortlinks/linksAll links displayed with slug (monospace), status badge, destination URL, creation date, and copy buttonP0
SL-011Search filterUser has links with distinct slugs1. Type a slug or URL fragment into search 2. SubmitOnly matching links displayed; URL updates with ?search=...P0
SL-012Status filter — ActiveUser has mixed-status links1. Click “Active” filter buttonOnly active links displayedP0
SL-013Status filter — InactiveUser has inactive links1. Click “Inactive” filterOnly inactive links displayedP1
SL-014Status filter — ExpiredUser has expired links1. Click “Expired” filterOnly expired links displayedP1
SL-015Status filter — AllFilters are applied1. Click “All” filterAll links displayedP1
SL-016Copy slug to clipboardLink list is displayed1. Click the copy icon next to a linkSlug is copied to clipboard; success toast “Slug copied!” shownP1
SL-017Empty link listNo links match filters1. Apply filters that match nothing”No links found.” with “Create your first link” button displayedP1
SL-018Link row navigates to detailLink list is displayed1. Click on a link rowNavigates to /business/apps/shortlinks/links/[id]P0

IDDescriptionPreconditionsStepsExpected ResultPriority
SL-020Create link with only destination URLUser is authenticated1. 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 slugP0
SL-021Create link with custom slugUser is authenticated1. Enter destination URL 2. Enter a custom slug “my-promo” 3. Click “Create Link”Link created with slug “my-promo”P0
SL-022Create link with passwordUser is authenticated1. Enter destination URL 2. Enter a password 3. Click “Create Link”Link is created with password protectionP1
SL-023Create link with expirationUser is authenticated1. Enter destination URL 2. Set an expiration date/time 3. Click “Create Link”Link is created with expires_at setP1
SL-024Create link with UTM paramsUser is authenticated1. Enter destination URL 2. Fill in UTM Source, Medium, and Campaign 3. Click “Create Link”Link is created with UTM parameters storedP1
SL-025Create link with splash pageUser has at least one splash page1. Enter destination URL 2. Select a splash page from the dropdown 3. Click “Create Link”Link is created with splash_page_id setP1
SL-026Splash page dropdown hidden when none existUser has no splash pages1. Navigate to /business/apps/shortlinks/links/newSplash page select field is not renderedP2
SL-027Validation — empty destination URLUser is on create form1. Leave destination URL blank 2. Click “Create Link”Validation error on destination_url field; form does not submitP0
SL-028Validation — invalid URL formatUser is on create form1. Enter “not-a-url” as destination 2. Click “Create Link”Validation error for invalid URL formatP1
SL-029Cancel button returns to listUser is on create form1. Click “Cancel”Navigates to /business/apps/shortlinks/linksP2

IDDescriptionPreconditionsStepsExpected ResultPriority
SL-030Link detail page loadsLink exists1. 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-031UTM parameters displayLink has UTM params1. Navigate to link detailUTM card shows Source, Medium, Campaign, Term, Content as applicableP1
SL-032Update link destination URLLink detail is open1. Change Destination URL in the edit form 2. Click “Save Changes”Success toast shown; destination URL updatesP0
SL-033Update link slugLink detail is open1. Change slug 2. Click “Save Changes”Slug updates; header refreshesP0
SL-034Update passwordLink detail is open1. Enter or change password 2. Click “Save Changes”Password updatesP1
SL-035Update expiration dateLink detail is open1. Change expiration date 2. Click “Save Changes”Expiration date updatesP1
SL-036Update UTM parametersLink detail is open1. Change UTM Source, Medium, Campaign, Term, or Content 2. Click “Save Changes”UTM parameters updateP1
SL-037Toggle sensitive content flagLink detail is open1. Check or uncheck “Mark as sensitive content” 2. Click “Save Changes”is_sensitive flag updatesP2
SL-038Change splash page assignmentLink detail is open; splash pages exist1. Select a different splash page or “None” 2. Click “Save Changes”splash_page_id updatesP1
SL-039Delete linkLink detail is open1. Click the trash icon in the headerLink is deleted; redirected to /business/apps/shortlinks/linksP0
SL-040Non-owner cannot access linkLink belongs to another user1. Navigate to /business/apps/shortlinks/links/[id] as a different user403 Forbidden errorP1

IDDescriptionPreconditionsStepsExpected ResultPriority
SL-050Splash page list rendersUser has splash pages1. Navigate to /business/apps/shortlinks/splashList shows splash names with redirect delay; count badge displayedP0
SL-051Empty splash listUser has no splash pages1. Navigate to /business/apps/shortlinks/splash”No splash pages yet.” with “Create your first splash page” buttonP1
SL-052Create splash page with valid dataUser is authenticated1. 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 appearsP0
SL-053Validation — empty nameUser is on new splash form1. Leave name blank 2. Click “Create Splash Page”Validation error on name fieldP0
SL-054Edit splash pageSplash page exists1. Navigate to /business/apps/shortlinks/splash/[id] 2. Change name and redirect delay 3. Click “Save Changes”Success toast; values persist on reloadP0
SL-055Edit splash — logo URLSplash page detail is open1. Enter a logo URL 2. SaveLogo URL persistsP2
SL-056Edit splash — show ad toggleSplash page detail is open1. Toggle “Show advertisement” checkbox 2. Saveshow_ad flag updatesP2
SL-057Edit splash — custom CSSSplash page detail is open1. Enter custom CSS 2. SaveCustom CSS persistsP2
SL-058Splash page preview rendersSplash page detail is open1. Observe the preview panelSplashPreview component renders reflecting current form stateP1
SL-059Delete splash pageSplash page detail is open1. Click the trash icon in the headerSplash is deleted; redirected to /business/apps/shortlinks/splashP0
SL-060Non-owner cannot access splashSplash belongs to another user1. Navigate to splash detail as different user403 Forbidden errorP1

IDDescriptionPreconditionsStepsExpected ResultPriority
SL-070Settings page loadsUser is authenticated1. Navigate to /business/apps/shortlinks/settingsPage renders with “Settings coming soon.” placeholderP2