Payroll — Employee self-service portal¶
Manual test plan for the employee portal (/employee-portal) — the read-mostly self-service area where an employee views payslips, income statement and leave, and edits their own contact/bank/super/emergency details. Read How testing works first.
You will need: an employee login with portal access enabled (enable it from the employer side on the employee's detail → Overview → Portal Access), with at least one finalised pay run and, ideally, a finalised income statement. To test the organisation switcher, an employee attached to two companies.
A. Layout & authentication¶
A1 — Unauthenticated users are redirected to login¶
Steps
1. Sign out, then open an /employee-portal/... URL directly.
✅ Pass if you are redirected to /login (a brief skeleton may show first).
❌ Fail if portal content is visible without logging in — 🔴 Blocker.
A2 — Sidebar navigation¶
Steps 1. Log in to the portal. Click each nav item: Dashboard, Payslips, Income Statement, Leave, Profile.
✅ Pass if each opens the right screen and the active item is highlighted. Dashboard redirects to Payslips.
❌ Fail if a nav item lands on the wrong screen — 🟠 Major.
A3 — Sign out¶
Steps 1. Click Sign Out.
✅ Pass if you are logged out and returned to /login.
❌ Fail if sign-out leaves you logged in — 🔴 Blocker.
A4 — Organisation switcher (multi-company employee)¶
Steps 1. As an employee attached to two companies, open the organisation selector and pick the other company.
✅ Pass if the portal reloads scoped to that company's data. Accountant/team-member roles are excluded from the list; a revoked link shows a "Previous" badge.
❌ Fail if switching shows the wrong company's payslips/income, or the selector lists roles it shouldn't — 🔴 Blocker (data isolation).
B. Payslips¶
B1 — Payslip list¶
Steps 1. Open Payslips.
✅ Pass if it lists pay period, pay date, gross, tax, super, net (AUD, dates dd/mm/yyyy). An empty state shows "No payslips available yet" when there are none.
❌ Fail if figures are wrong or the list crashes on no data — 🔴 Blocker (money) / 🟠 Major.
B2 — Download one payslip¶
Steps 1. Click a row's download icon.
✅ Pass if the payslip PDF downloads (payslip-….pdf); a spinner shows during download; an error toast appears on failure.
❌ Fail if the download fails or returns another employee's payslip — 🔴 Blocker.
B3 — Download all payslips¶
Steps 1. Click Download all.
✅ Pass if a payslips.zip downloads containing the employee's payslips (button disabled while downloading). Only shown when there is at least one payslip.
❌ Fail if the zip is empty or fails — 🟠 Major.
C. Income statement¶
C1 — Income statement summary¶
Steps 1. Open Income Statement.
✅ Pass if it shows YTD Gross, Tax withheld, Super, Deductions, Net (AUD), a payment-types breakdown, and finalisation status. "No income statement available yet" when none.
❌ Fail if totals are wrong — 🔴 Blocker (money).
C2 — Financial-year selector¶
Steps 1. If more than one FY exists, change the FY selector.
✅ Pass if the statement reloads for the chosen FY.
❌ Fail if the FY switch shows the wrong year's figures — 🟠 Major.
C3 — Download income statement PDF¶
Steps 1. Click Download (PDF).
✅ Pass if an income-statement-{fy}.pdf downloads.
❌ Fail if the download fails — 🟠 Major.
C4 — History expand (finalised vs not-finalised)¶
Steps 1. In the History section, expand a finalised FY row; look at a not-finalised row.
✅ Pass if finalised rows expand to show STP detail (lazy-loaded); not-finalised rows are non-interactive (amber) and show inline gross/tax/super.
❌ Fail if a not-finalised row is expandable or a finalised row won't expand — 🟠 Major.
C5 — Cessation note¶
Steps 1. View the statement for a terminated employee not yet finalised.
✅ Pass if an amber cessation note is shown.
❌ Fail if the note is missing where expected — 🟡 Minor.
D. Leave¶
D1 — Leave balances & history (read-only)¶
Steps 1. Open Leave.
✅ Pass if Annual and Personal balances show with progress bars and entitlement text, and a leave history table lists period/type/accrued/taken/balance. "No leave history available yet" when empty.
❌ Fail if balances are wrong or the screen crashes on null data — 🔴 Blocker (leave is a liability) / 🟠 Major.
E. Profile (employee self-edit)¶
E1 — Employment details are read-only¶
Steps 1. Open Profile and view Employment Details.
✅ Pass if name, job title, pay frequency, salary, super rate, start date etc. are read-only ("managed by your employer").
❌ Fail if the employee can edit employer-managed fields here — 🔴 Blocker.
E2 — Edit Contact (save / cancel)¶
Steps 1. Click Edit on Contact, change phone/address fields, click Save. Repeat and Cancel.
✅ Pass if Save shows "Profile updated" and persists; Cancel discards changes. Button shows "Saving…" while pending.
❌ Fail if Save doesn't persist, or Cancel keeps the change — 🟠 Major.
E3 — Edit Bank details¶
Steps 1. Edit the Bank section (BSB/account number/name) and save.
✅ Pass if it saves with "Profile updated"; the read view shows the formatted BSB.
❌ Fail if it fails to save — 🟠 Major. (Note: fields are free-text here; any format validation is server-side and surfaces as an error toast — a rejected value should show a clear message, not save silently.)
E4 — Edit Super details¶
Steps 1. Edit the Super (choice of fund) section — fund name, ABN, USI, membership number — and save.
✅ Pass if it saves with a success toast.
❌ Fail if it fails to save — 🟠 Major.
E5 — Edit Emergency contact¶
Steps 1. Edit the Emergency section and save.
✅ Pass if it saves with a success toast.
❌ Fail if it fails to save — 🟠 Major.
E6 — Switching section abandons unsaved edits (known behaviour)¶
Steps 1. Click Edit on Contact, type something, then (without saving) click Edit on Bank.
✅ Pass if only one section is editable at a time. (Note: opening another section abandons the unsaved edit silently — verify this is acceptable; if a confirm/warning is expected, flag it.)
❌ Fail if two sections are editable at once, or edits leak between sections — 🟠 Major.