Back to Employee Offboarding

Test and QA Plan

How the build is validated before go-live: three sequential test phases, edge cases, and production verification.

4 pagesPDF · Quality
FS-DOC-06Quality

Test and QA Plan

Employee Offboarding Automation

[YourCompany.com] · HR Department · Prepared by FullSpec · [Today's Date]

This document defines the complete testing and quality assurance strategy for the Employee Offboarding automation. It is written for the FullSpec team executing the build and covers every test case required before the workflow goes live. Testing runs in three sequential phases: Unit, Integration, and End-to-end. No phase begins until the previous phase fully passes. The process owner joins Phase 3 to review the production run and record sign-off. All sandbox credentials must be used in Phases 1 and 2; live credentials and real employee records are only permitted in Phase 3 under the conditions described in Section 04.

01Testing approach

Testing runs in three phases in sequence. No phase begins until the previous phase fully passes. Each phase has a defined scope, environment rule, credential requirement, and a clear pass condition tied to the test case IDs in this document. The FullSpec team runs Phases 1 and 2 independently. The process owner joins Phase 3 for the final production verification and approval.

1
Phase 1 — Unit Testing
Estimated time: 1 to 2 business days
Scope
Each agent tested in isolation. Inputs are mocked or injected directly; no live inter-agent handoffs are exercised.
Environment
Sandbox only. BambooHR sandbox tenant, Okta Developer Edition, Google Workspace test domain, Jira sandbox project, Xero Demo Company, Slack test workspace.
Credential rule
Sandbox credentials exclusively. No production API keys, tokens, or service accounts may be used in this phase.
Pass condition
All test cases T01 through T14 return the expected output with no unhandled exceptions. Each failure mode resolves to its documented error state.
Who runs it
FullSpec team. Process owner not required.
2
Phase 2 — Integration and Edge Case Testing
Estimated time: 1 to 2 business days
Scope
Agent-to-agent handoffs, sequential workflow execution, and edge cases including duplicate events, missing data fields, tool unavailability, and human timeout scenarios.
Environment
Sandbox only. Full sandbox stack as per Phase 1; all API calls remain routed to sandbox endpoints.
Credential rule
Sandbox credentials exclusively. Production credentials remain locked.
Pass condition
All integration test cases T15 through T22 pass and all edge cases E01 through E07 resolve to the specified safe state without data loss or unintended side effects.
Who runs it
FullSpec team. Process owner not required.
3
Phase 3 — End-to-End Production Test
Estimated time: 1 business day
Scope
Full workflow execution in the production environment using a designated internal test employee record, traced from the BambooHR trigger through to BambooHR record closure.
Environment
Production. All live API credentials active. Test record must use an internal or dummy email address.
Credential rule
Production credentials used. All tokens must be stored in the secure credential vault. No credentials written in plain text in any config file.
Pass condition
All final test cases T23 through T27 pass, including process owner review and approval recorded in the FullSpec confirmation log.
Who runs it
FullSpec team executes. Process owner joins for T27 review and approval.
Test and QA PlanPage 1 of 4
FS-DOC-06Quality

02Phase 1 — unit test cases

Sandbox credentials only for all Phase 1 tests. Do not connect production BambooHR, Okta, Google Workspace, Jira, Xero, or Slack accounts at this stage. Use the designated sandbox tenant and Developer Edition accounts for every test run. Any test that inadvertently hits a production endpoint must be flagged, halted, and re-run in the correct environment before results are recorded.

Access Revocation Agent — Unit Tests

ID
Scenario
Input
Expected Output
Pass Criteria
T01
Happy path: departure status triggers agent
BambooHR webhook payload: employee_id=EMP099, status='departing', last_working_day='2025-05-15'
Agent initialises, reads employee record, proceeds to Okta suspension step
Agent run log shows successful trigger parse; no exception thrown; Okta step called within 5 seconds
T02
Happy path: Okta account suspended
Valid Okta user ID derived from BambooHR email field; sandbox Okta token active
Okta user status set to SUSPENDED; API response 200; suspension timestamp written to log
Okta Admin API returns {status: 'SUSPENDED'}; log entry created with ISO 8601 timestamp
T03
Happy path: Google Workspace account disabled and ownership transferred
Google Workspace Admin SDK call with service account; user email from BambooHR record
User account suspended in Google Workspace; Drive ownership transferred to manager email; auto-reply set
Admin SDK returns suspended=true; Drive transfer job ID logged; auto-reply body matches template string
T04
Happy path: confirmation log entry written
Okta suspension confirmed, Google Workspace suspension confirmed
Structured log entry written with employee_id, suspension timestamps, and next agent trigger flag
Log entry present in the run history; all required fields populated; no null values
T05
Failure: Okta user not found
BambooHR email does not match any Okta user in sandbox tenant
Agent writes error to log: OKTA_USER_NOT_FOUND; workflow paused; Slack alert sent to HR channel with employee name
Error code OKTA_USER_NOT_FOUND present in log; no Google Workspace call attempted; Slack message delivered to test workspace
T06
Failure: Google Workspace Admin API token expired
Expired service account token injected via config override
Agent catches 401 response; retries once after token refresh; if second attempt fails, logs GOOGLE_AUTH_FAILURE and halts
Retry logic fires exactly once; GOOGLE_AUTH_FAILURE logged on second failure; no partial state written to Google Workspace
T07
Failure: Drive ownership transfer target (manager) not found
Manager email field in BambooHR record is blank or invalid
Agent falls back to secondary owner (HR Manager email from config); logs DRIVE_OWNER_FALLBACK with original and fallback address
Drive transfer completes to fallback address; DRIVE_OWNER_FALLBACK entry in log; no transfer to personal or external address

Task and Notification Agent — Unit Tests

ID
Scenario
Input
Expected Output
Pass Criteria
T08
Happy path: Jira offboarding board created
Trigger from Access Revocation Agent confirmation log; employee_id=EMP099, departure_date='2025-05-15', manager_id='MGR004'
Jira project created from offboarding template; subtasks for equipment return, payroll notification, and exit interview created; each assigned to correct Jira user; due date set to departure_date
Jira API returns project key; all three subtasks present with correct assignees and due dates; no orphan tasks created
T09
Happy path: Xero payroll notification sent
Leave balance from BambooHR (8.5 days), final working day, employee ID, and finance lead email from config
Structured payroll notification email sent to finance lead via Xero; includes final_working_day, leave_balance_days=8.5, employee_name, and equipment_deduction_flag=false
Email delivered to test finance address; all four data fields present in body; no PII written to Xero transactional log beyond permitted fields
T10
Happy path: exit survey dispatched
Employee personal email from BambooHR record; departure_date minus 1 day as send trigger; survey URL from config
Exit survey email sent to employee personal email on penultimate working day; from-address is HR alias; survey URL present in body
Email received at test personal address; send timestamp matches penultimate day trigger; survey URL resolves (HTTP 200 on test link)
T11
Happy path: Slack completion summary posted
All automated subtasks confirmed complete; equipment return Jira task still open (manager pending)
Slack message posted to HR channel listing all completed tasks and flagging equipment return as pending human confirmation
Slack message present in test HR channel; completed tasks listed correctly; pending items section present; no completed items listed as pending
T12
Happy path: BambooHR record marked closed
Manager updates Jira equipment return task to Done; webhook fires to automation platform
BambooHR employee status updated to 'offboarded'; timestamped closure field written; audit log entry created
BambooHR API returns updated status='offboarded'; closure_timestamp field populated with UTC ISO 8601 value; audit log entry readable in sandbox
T13
Failure: Jira project creation fails due to missing template ID
Template ID field blank in automation platform config
Agent logs JIRA_TEMPLATE_NOT_FOUND; no partial project created; Slack alert sent to FullSpec admin channel with config field reference
No Jira project created; error log entry with JIRA_TEMPLATE_NOT_FOUND; Slack alert delivered; workflow halted at Jira step only
T14
Failure: employee personal email missing from BambooHR record
personal_email field is null in BambooHR employee record
Agent logs SURVEY_EMAIL_MISSING; skips survey dispatch; flags the gap in the Slack summary under a 'Manual actions required' section
No email send attempted; SURVEY_EMAIL_MISSING in log; Slack summary includes manual action flag for exit survey; all other subtasks proceed normally
Test and QA PlanPage 2 of 4
FS-DOC-06Quality

03Phase 2 — integration and edge case tests

Integration tests verify that agents hand off correctly in sequence and that the full workflow executes without state loss between steps. All tests remain in the sandbox environment. Test IDs continue from the Phase 1 sequence.

ID
Scenario
Input
Expected Output
Pass Criteria
T15
Agent handoff: Access Revocation Agent triggers Task and Notification Agent
Access Revocation Agent completes T01 to T04 in sequence; confirmation log entry written
Task and Notification Agent initialises automatically; reads employee_id and departure_date from confirmation log without manual intervention
Task and Notification Agent run appears in execution log within 10 seconds of confirmation log write; correct employee_id passed; no duplicate trigger fires
T16
Full sequential execution: BambooHR trigger through to Slack summary
BambooHR sandbox webhook fired; employee has valid Okta user, Google Workspace account, manager email, and personal email
All six automated steps execute in order: Okta suspension, Google Workspace disable, Jira board, Xero notification, exit survey, Slack summary
Execution log shows all six steps in correct order with no skipped steps; total elapsed time under 90 seconds; all sandbox outputs present
T17
BambooHR record closure after Jira equipment task marked Done
Manager marks Jira equipment return subtask as Done in sandbox Jira project
BambooHR record updated to 'offboarded' with closure timestamp; Slack HR channel receives final confirmation message
BambooHR status field updated within 30 seconds of Jira task Done event; Slack message references employee name and closure timestamp
T18
Parallel Xero and Jira calls execute without race condition
Task and Notification Agent triggers Jira creation and Xero notification within the same execution step
Both calls complete successfully; Jira project key and Xero send confirmation both present in log; neither overwrites the other
Log shows both responses present; no timeout on either call; execution continues to exit survey step normally
T19
Okta suspension confirmation received before Google Workspace step proceeds
Okta API call returns 200 with status SUSPENDED
Google Workspace Admin SDK call fires only after Okta confirmation; no Google call without confirmed Okta suspension
Execution trace shows Okta response logged before Google SDK call timestamp; no Google call recorded when Okta response is mocked as pending
T20
Retry behaviour: transient Okta API timeout resolved on second attempt
Okta API mocked to return 503 on first call, 200 on second call
Agent retries after 5-second back-off; second call succeeds; no error logged to Slack; execution continues normally
Retry appears in execution log; 5-second minimum gap between attempts; final Okta status is SUSPENDED; no false error alert fired
T21
Xero payroll notification field mapping validated
BambooHR leave_balance_days=12.0, final_working_day='2025-05-15', employee_name='Test User'
Xero notification email body contains leave_balance_days=12.0, final_working_day='2025-05-15', employee_name='Test User'; no placeholder tokens remain
All three data fields match source values; zero unfilled template placeholders in email body; finance lead test address receives the email
T22
Slack summary accurately reflects partial completion state
Jira equipment return task still open at time of Slack post; all other tasks complete
Slack message lists five completed tasks and one pending item (equipment return) under 'Awaiting human action'; no completed task listed as pending
Completed task count in Slack message equals five; pending item count equals one; item label matches Jira subtask title exactly

Edge Case Tests

ID
Scenario
Input
Expected Output
Pass Criteria
E01
Duplicate BambooHR webhook received for same employee within 60 seconds
Two identical BambooHR webhook payloads for employee_id=EMP099 fired 15 seconds apart
Automation platform deduplication logic suppresses second trigger; only one workflow run initiated; idempotency key logged
Execution log shows one run only; second webhook payload present in raw log but no second execution started; idempotency_key field populated
E02
Missing departure date in BambooHR payload
Webhook fires with status='departing' but last_working_day field is null
Workflow halts at trigger validation; logs MISSING_DEPARTURE_DATE; Slack alert sent to HR channel requesting manual correction
No downstream API calls made; MISSING_DEPARTURE_DATE in log; Slack alert delivered with employee name and link to BambooHR record
E03
Employee has no Okta account (contractor or limited-access staff)
BambooHR record valid; Okta lookup returns 404 for the email address
Agent logs OKTA_USER_NOT_FOUND; proceeds to Google Workspace step; Slack summary flags Okta step as skipped with reason
Google Workspace step executes successfully; Slack summary includes 'Okta: not found, skipped' note; no unhandled exception
E04
Google Workspace Admin API unavailable (5xx response) for full retry window
Google Workspace Admin SDK returns 503 on all three retry attempts
Agent logs GOOGLE_WORKSPACE_UNAVAILABLE after third attempt; Jira board created with a manual action subtask for IT to disable Google account; Slack alert sent
Jira board contains manual IT subtask; GOOGLE_WORKSPACE_UNAVAILABLE in log; Slack alert lists the manual action required; workflow continues to Xero and survey steps
E05
Departure date falls on a public holiday or weekend
last_working_day='2025-12-25' (Christmas Day)
Exit survey send date adjusted to the last business day before the public holiday; Jira due dates adjusted accordingly; log notes date adjustment
Survey send timestamp falls on 2025-12-24; Jira due dates reflect adjusted date; DATE_ADJUSTED_FOR_HOLIDAY entry in log
E06
Jira equipment return task not updated by manager within 5 business days of departure
Departure date passes; Jira task remains In Progress for 5 business days
Escalation Slack message sent to HR channel and manager's direct Slack handle listing the overdue task and departure date
Escalation message delivered on day 5; contains manager name, employee name, task link, and departure date; no BambooHR record closed prematurely
E07
Employee has a shared Google Workspace account (generic role account)
Google Workspace user email matches a pattern in the shared-accounts exclusion list in config
Agent skips Google Workspace disable for that account; logs SHARED_ACCOUNT_EXCLUDED with account address; manual action Jira subtask created for IT review
No suspension call made to the shared account; SHARED_ACCOUNT_EXCLUDED in log; Jira subtask present with IT assignee and account address in description
Test and QA PlanPage 3 of 4
FS-DOC-06Quality

04Phase 3 — end-to-end production test

Important before running Phase 3: Use a designated internal test email address and a purpose-created dummy employee record in the production BambooHR account. Do not use a real departing employee's record. After the test run completes, void the test record in BambooHR, set the Okta test user back to ACTIVE, remove the Google Workspace suspension, delete the Jira test project, and confirm with the finance lead that no Xero notification requires action. The FullSpec team will walk through each rollback step before the process owner joins for T27.

Phase 3 runs the complete automation in the live production environment using a controlled internal test record. Every step is traced from the BambooHR trigger through to final record closure. The process owner reviews the output and records approval in the FullSpec confirmation log. No separate signature block is required: the T27 row below constitutes the formal process owner sign-off.

ID
Scenario
Input
Expected Output
Pass Criteria
T23
Production trigger: BambooHR webhook fires on test employee departure status
Production BambooHR webhook: employee_id=TEST001, status='departing', last_working_day set to tomorrow's date, manager_email and personal_email populated
Automation platform receives webhook; workflow run initiated in production; trigger payload logged with correct field values
Production execution log shows run started within 5 seconds; employee_id=TEST001; all required fields parsed correctly; no validation error
T24
Full Access Revocation Agent execution in production
Production Okta credentials; production Google Workspace service account; TEST001 user exists in both systems
Okta user TEST001 suspended in production; Google Workspace account disabled; Drive ownership transferred to manager; auto-reply set; confirmation log entry written to production log store
Okta Admin console shows TEST001 as SUSPENDED; Google Workspace Admin console shows account suspended and transfer job complete; auto-reply active on account; log entry present with all required fields
T25
Full Task and Notification Agent execution in production
Confirmation log from T24; production Jira, Xero, Google Workspace (email send), and Slack credentials
Jira offboarding project created with three subtasks correctly assigned; Xero payroll notification delivered to finance lead production address; exit survey sent to test personal email; Slack HR channel receives completion summary
Jira project visible in production board; finance lead confirms receipt of Xero notification email; test personal inbox receives survey email with correct URL; Slack HR channel message posted listing all tasks
T26
Error log verification: no unhandled exceptions in production run
Full execution log from T23 through T25
Error log contains zero unhandled exceptions; any retries present are resolved; all step statuses show SUCCESS
Production error log reviewed by FullSpec engineer; zero entries with status ERROR or UNHANDLED_EXCEPTION; retry entries (if any) show final status SUCCESS
T27
Process owner review and approval
Process owner reviews production execution log, Jira board output, Slack summary, and Xero notification against expected outcomes documented in this plan
Process owner confirms all outputs match specification; any deviations documented in the FullSpec confirmation log; formal approval recorded
FullSpec confirmation log entry created with process owner name, review date, and approval status (Approved or Approved with conditions). This entry constitutes the formal go-live sign-off for the Employee Offboarding automation.
After T27 approval is recorded in the FullSpec confirmation log, the FullSpec team will complete the post-test rollback steps (restore TEST001 to ACTIVE in Okta, remove Google Workspace suspension, delete the Jira test project, and confirm with finance that the Xero test notification requires no action). The automation is then cleared for live operation. Contact support@gofullspec.com for any issues arising during or after Phase 3.
Test and QA PlanPage 4 of 4

More documents for this process

Every document generated for Employee Offboarding.

Launch Plan
Operations · Owner
View
ROI and Business Case
Finance · Owner
View
Process Runbook / SOP
Operations · Owner
View
Developer Handover Pack
Technical · Developer
View
Integration and API Spec
Technical · Developer
View