Skip to content

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.