Back to Performance Review Cycle

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

Performance Review Cycle

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

This document defines the structured test and quality assurance plan for the Performance Review Cycle automation. It covers three sequential test phases: unit testing of individual agents in sandbox environments, integration and edge case testing of agent handoffs and failure modes, and a final end-to-end production run using a pilot cohort. The FullSpec team executes Phases 1 and 2 independently. Your team joins Phase 3 for the production sign-off. No phase begins until every test case in the previous phase reaches a passing state.

01Testing approach

Testing runs in three phases in strict sequence. No phase begins until the previous phase fully passes, meaning all test cases in that phase carry a confirmed pass status and any defects found have been resolved and re-tested. This sequencing prevents integration and production tests from running against agents that have known unit-level defects, which would produce misleading results and risk corrupting live records.

1
Phase 1: Unit Testing
Each agent tested in isolation against sandbox credentials
Scope
Individual agent logic: Cycle Launch Agent, Submission Tracker and Chaser Agent, Summary Drafting Agent. Each tested independently with no live dependencies.
Environment
Sandbox only. BambooHR sandbox subdomain, Google Workspace test account, Slack test workspace.
Credential rule
Only sandbox and test credentials permitted. No production API keys, production BambooHR accounts, or live Gmail addresses may be used during Phase 1.
Pass condition
All test cases T01 through T15 return an expected output matching the defined pass criteria. Zero critical failures permitted. Minor formatting issues may be logged and resolved before Phase 2 begins.
Who runs it
FullSpec team only. Process owner not required.
2
Phase 2: Integration and Edge Case Testing
Agent handoffs and failure modes tested across connected tools
Scope
Cross-agent data handoffs, conditional branching (overdue vs on-time paths), edge cases including duplicates, missing data, unavailable tools, and human timeout scenarios.
Environment
Sandbox for all automation platform logic. Staging variants of Google Sheets and Google Docs. Slack test workspace. BambooHR sandbox for read operations.
Credential rule
Sandbox and staging credentials only. No production tokens. OAuth scopes must be validated against the minimum required set before Phase 2 begins.
Pass condition
All integration test cases T16 through T23 pass, and all edge case tests E01 through E08 either pass or produce the correct documented fallback behaviour. All errors are caught and logged; no silent failures permitted.
Who runs it
FullSpec team only. Process owner not required.
3
Phase 3: End-to-End Production Test
Full pilot run with a 10-person cohort on live production credentials
Scope
Full cycle execution from BambooHR trigger through kick-off dispatch, submission tracking, reminder firing, summary document generation, manager notification, and BambooHR write-back. Uses a real 10-person pilot cohort.
Environment
Production. Live BambooHR account, live Gmail, live Google Workspace, live Slack workspace. Internal test addresses and a designated test folder must be used to contain outputs.
Credential rule
Production credentials active. All OAuth tokens must be scoped to least-privilege before this phase begins. Any test employee records created must be voided after the run.
Pass condition
All production test cases T24 through T28 pass, including process owner review recorded as approved in the FullSpec confirmation log. Sign-off is captured as test case T28.
Who runs it
FullSpec team executes the run. Process owner (HR Manager or HR Director) joins Phase 3 to review outputs and record approval as the final test case.
Test and QA PlanPage 1 of 4
FS-DOC-06Quality

02Phase 1 — unit test cases

Sandbox credentials only. All Phase 1 tests must be executed against the BambooHR sandbox subdomain, a dedicated Google Workspace test account, and the Slack test workspace. Do not connect or reference production API keys, live employee records, or real Gmail addresses at any point during Phase 1. Any test output that lands in a production system constitutes a Phase 1 failure and requires a full credentials audit before testing resumes.

Cycle Launch Agent — estimated build time: 8 hours — complexity: Moderate

ID
Scenario
Input
Expected output
Pass criteria
T01
Happy path: review cycle opened, full employee list
BambooHR sandbox event: review_cycle_opened; employee list: 10 active records
10 personalised kick-off emails sent via Gmail sandbox; 1 Slack notification posted to test channel
All 10 Gmail sends return HTTP 200; Slack post confirmed in test channel; no duplicate sends; each email contains correct employee name, form link, and deadline
T02
Employee list contains inactive/contractor records
BambooHR list includes 2 contractors flagged as non-review-eligible
Only 8 emails sent; contractors excluded
Exactly 8 Gmail sends; contractor email addresses absent from send log; exclusion event written to run log
T03
BambooHR API returns empty employee list
BambooHR sandbox returns 0 active employees
No emails sent; error alert raised to Slack ops channel; run halted
Zero Gmail sends; Slack ops alert posted with error code BAMBOO_EMPTY_LIST; run status set to FAILED_HALTED
T04
BambooHR API authentication failure
Invalid or expired sandbox API token
No emails sent; error logged; Slack ops alert posted
Zero Gmail sends; error log entry: BAMBOO_AUTH_FAIL with timestamp; Slack alert visible in ops channel within 60 seconds
T05
Gmail rate limit hit mid-send batch
Batch of 10 send requests; Gmail sandbox rate limit simulated after send 6
Sends 1 to 6 confirmed; sends 7 to 10 queued and retried with exponential backoff; no duplicates
No duplicate sends for recipients 1 to 6; retry logic triggers for 7 to 10; all 10 sends confirmed within 5 minutes; retry events in run log
T06
Slack workspace unavailable at send time
Slack test workspace returns 503 at notification step
Gmail sends complete successfully; Slack notification marked as failed; retry attempted once; failure logged
All Gmail sends succeed; Slack failure event logged with status SLACK_UNAVAILABLE; retry attempt recorded; Gmail sends not blocked

Submission Tracker and Chaser Agent — estimated build time: 10 hours — complexity: Moderate

ID
Scenario
Input
Expected output
Pass criteria
T07
Happy path: new form response received
Google Forms sandbox: one new employee self-assessment submission for test employee ID EMP_003
Google Sheets tracker updated: EMP_003 row marked complete with timestamp; no reminder queued for EMP_003
Sheets row for EMP_003 shows status SUBMITTED and ISO 8601 timestamp within 30 seconds of form response; reminder queue does not contain EMP_003
T08
Happy path: overdue submission triggers reminder
Deadline has passed; EMP_005 and EMP_007 show OUTSTANDING in tracker
Reminder email sent to EMP_005 and EMP_007 via Gmail; Slack nudge sent 48 hours before deadline marker
Exactly 2 Gmail reminders sent; Slack nudge present for both recipients; reminder log updated; no reminder sent to already-submitted employees
T09
Employee submits after receiving reminder
EMP_005 submits form after reminder was sent
Tracker updated to SUBMITTED; no further reminders queued for EMP_005
EMP_005 status updated within one polling cycle (maximum 4 hours); reminder queue cleared for EMP_005; no second reminder sent
T10
Google Forms returns duplicate submission for same employee
Two form responses with identical employee ID EMP_009 submitted within 10 minutes
First submission recorded; second flagged as duplicate and not written to tracker; HR ops alert raised
Tracker contains exactly one entry for EMP_009 marked SUBMITTED; duplicate event logged with DUPLICATE_SUBMISSION code; ops alert posted to Slack ops channel
T11
Google Sheets write fails during tracker update
Sheets API returns 503 during status update
Write retried up to 3 times with backoff; if all retries fail, error logged and ops alert raised
Retry attempts visible in run log (max 3); if resolved, status written correctly; if not resolved, SHEETS_WRITE_FAIL event raised and Slack ops alert sent within 2 minutes

Summary Drafting Agent — estimated build time: 12 hours — complexity: Complex

ID
Scenario
Input
Expected output
Pass criteria
T12
Happy path: both submissions present, summary generated
Employee self-assessment and manager assessment both submitted for EMP_002; both retrieved from Google Forms sandbox
Structured Google Doc summary created in test manager folder; Gmail notification sent to manager with direct link
Google Doc exists in designated test folder with correct naming convention (EMP_002_Summary_[CycleID]); document contains all structured sections from template; Gmail notification delivered to manager test address; generation time under 90 seconds
T13
Employee submission present but manager submission missing
Employee self-assessment submitted; manager assessment not yet submitted for EMP_006
No summary generated; agent waits; reminder logic for manager submission triggered if overdue
No Google Doc created for EMP_006; agent state set to AWAITING_MANAGER; if manager form is overdue, reminder sent to manager; no partial summary written
T14
Manager submission present but employee submission missing
Manager assessment submitted; employee self-assessment not yet submitted for EMP_008
No summary generated; agent waits; employee reminder logic triggered if overdue
No Google Doc created for EMP_008; agent state set to AWAITING_EMPLOYEE; employee reminder queued if deadline passed
T15
AI drafting step returns empty or malformed content
AI drafting step returns a response with fewer than 50 tokens or missing required section headers
Draft marked as DRAFT_FAILED; Google Doc created with placeholder sections flagged for manual completion; ops alert raised
Google Doc exists but contains clearly marked placeholder sections (e.g. [DRAFT FAILED: PLEASE COMPLETE MANUALLY]); Gmail notification to manager includes warning of draft issue; DRAFT_FAIL event in run log
Test and QA PlanPage 2 of 4
FS-DOC-06Quality

03Phase 2 — integration and edge case tests

Phase 2 validates that agents hand off data correctly to each other and that the full workflow branches as designed when conditional logic is exercised. Integration test IDs continue the T sequence from Phase 1. Edge case tests use the separate E sequence.

Integration tests: agent handoffs

ID
Scenario
Input
Expected output
Pass criteria
T16
Cycle Launch Agent to Tracker Agent handoff
Cycle Launch Agent completes full kick-off send for 10 test employees; Tracker Agent initialises
Tracker Agent creates 10 rows in Google Sheets, one per employee, all set to OUTSTANDING with correct employee IDs and manager mappings
Sheets contains exactly 10 rows; employee IDs match BambooHR sandbox list; manager mapping column populated correctly for all 10 rows; Tracker Agent polling schedule active
T17
Tracker Agent to Summary Drafting Agent handoff on matched pair
Tracker detects both employee and manager submissions complete for EMP_001
Tracker updates EMP_001 to BOTH_SUBMITTED and triggers Summary Drafting Agent with employee ID and form response references
Summary Drafting Agent receives correct payload including both form response IDs; Google Doc generation begins within one polling cycle; no duplicate triggers fired
T18
Summary Drafting Agent to Gmail notification handoff
Summary Doc successfully generated for EMP_004
Gmail notification dispatched to EMP_004 manager with direct Google Doc link
Gmail send confirmed with HTTP 200; link in email resolves to correct Google Doc in test folder; manager email address matches BambooHR sandbox record for EMP_004
T19
End-of-cycle: all submissions received, no reminders queued
All 10 test employees and managers submit before deadline
No reminder emails generated; all Sheets rows show BOTH_SUBMITTED; all 10 summary docs created
Zero reminder emails in send log post-submission; all 10 Google Docs present in test folder; Slack ops channel shows cycle completion event
T20
Overdue path: reminder fires then submission received
EMP_003 is overdue; reminder sent; EMP_003 then submits
Reminder sent once; after submission tracker updated; no second reminder; Summary Drafting Agent triggered when manager also submits
Exactly one reminder email in log for EMP_003; tracker updated to EMPLOYEE_SUBMITTED after form response received; Summary Agent triggered once manager form arrives
T21
BambooHR write-back triggered after HR approval
HR approval signal sent to automation platform for EMP_001 through EMP_010 with final rating values
All 10 employee records updated in BambooHR sandbox with correct rating values
BambooHR API PUT/POST calls confirm 200 for all 10 records; rating values in sandbox match the approved values passed in payload; write-back completion event logged
T22
Partial BambooHR write-back: one record fails
HR approval for 10 employees; BambooHR sandbox returns 422 for EMP_007 due to missing field
9 records written successfully; EMP_007 write fails with error logged; ops alert raised; other records not affected
9 successful write confirmations; EMP_007 shows BAMBOO_WRITE_FAIL in run log with error detail; Slack ops alert posted; run does not halt for other employees
T23
Cycle Launch Agent fires twice for same cycle ID
BambooHR sandbox emits two cycle_opened events with identical cycle ID within 5 minutes (duplicate webhook scenario)
Second trigger detected as duplicate; kick-off emails sent only once; idempotency key prevents double dispatch
Exactly 10 Gmail kick-off sends in log (not 20); duplicate trigger event logged with DUPLICATE_CYCLE_EVENT code; no Slack double-post

Edge case tests

ID
Scenario
Input
Expected output
Pass criteria
E01
Duplicate form submission from same employee
EMP_009 submits self-assessment form twice; second response arrives 8 minutes after first
First response recorded and used; second response flagged as duplicate and discarded; tracker shows EMPLOYEE_SUBMITTED once
Tracker row for EMP_009 has single EMPLOYEE_SUBMITTED entry; duplicate response ID stored in discard log; no double summary generation triggered
E02
Form submission with missing required fields
Employee submits form with blank responses for 3 of 8 required questions
Submission recorded; Google Doc summary generated with clearly marked MISSING_RESPONSE placeholders in affected sections; manager notified of incomplete submission
Google Doc contains MISSING_RESPONSE markers in correct sections; Gmail notification to manager flags incomplete submission; summary not blocked
E03
BambooHR API unavailable for 30 minutes mid-cycle
BambooHR sandbox returns 503 for all requests over a 30-minute window
Automation platform queues dependent operations; retry schedule activates; no data lost; operations resume automatically when API recovers
Queue depth increases during outage window; retry events logged at correct intervals; all queued operations complete within 10 minutes of API recovery; no duplicate sends result from retry
E04
Google Docs API unavailable when summary generation triggered
Docs API returns 503 when Summary Drafting Agent attempts to create document
Summary creation retried up to 3 times; if unresolved, DOCS_CREATE_FAIL logged; HR ops alert raised; Tracker row flagged as SUMMARY_PENDING
Retry attempts in log (max 3); if unresolved, DOCS_CREATE_FAIL in run log; Slack ops alert sent; Tracker row status SUMMARY_PENDING not cleared until successful retry or manual intervention
E05
Employee-manager mapping missing for a given employee
EMP_010 has no manager assigned in BambooHR sandbox
Kick-off email sent to EMP_010; manager briefing email skipped; tracker row created with MANAGER_UNKNOWN flag; ops alert raised for HR to assign manager
EMP_010 receives kick-off email; no manager briefing sent; Sheets row shows MANAGER_UNKNOWN; Slack ops alert prompts HR to update BambooHR record; agent does not crash
E06
Slack workspace token revoked mid-cycle
Slack API returns 401 for all requests after token revocation
Gmail reminder and notification paths continue unaffected; all Slack operations fail gracefully with SLACK_AUTH_FAIL logged; ops alert sent via Gmail fallback to HR inbox
Zero Slack messages sent after revocation; SLACK_AUTH_FAIL logged for each failed attempt; Gmail fallback alert delivered to HR ops address; Gmail-based reminders and notifications not blocked
E07
Manager does not submit assessment within maximum chase window
Manager for EMP_002 receives 3 reminders over 7 days and still has not submitted; maximum chase threshold reached
Escalation alert sent to HR Director via Gmail and Slack; tracker row flagged ESCALATED; no further automated reminders sent to manager
Exactly 3 reminder sends in log before escalation; HR Director escalation email sent; Slack escalation message posted; tracker row status ESCALATED; reminder queue cleared for this manager
E08
AI drafting step times out
AI drafting call exceeds 60-second timeout threshold
Timeout event logged; draft marked DRAFT_TIMEOUT; retry attempted once after 30 seconds; if second attempt also times out, document created with placeholder content and ops alert raised
Single retry attempt logged; if both attempts timeout, Google Doc created with placeholder sections; DRAFT_TIMEOUT event in run log; manager Gmail notification includes warning; run does not halt for other employees
Test and QA PlanPage 3 of 4
FS-DOC-06Quality

04Phase 3 — end-to-end production test

Important before running Phase 3: Use only internal test email addresses for all kick-off, reminder, and notification sends. Do not include real employees outside the confirmed 10-person pilot cohort. Any test employee records created or modified in the production BambooHR account must be clearly labelled TEST and voided (status set to inactive and ratings cleared) immediately after the Phase 3 run is complete and all test cases have been confirmed. The FullSpec team will coordinate this cleanup step. Confirm with the HR Director that the calibration meeting simulation will not affect compensation planning records before proceeding.

The following test cases cover a complete production run traced end to end, error log verification across all three agents, and the final process owner approval. Test case IDs continue from Phase 2.

ID
Scenario
Input
Expected output
Pass criteria
T24
Full production cycle launch: 10-person pilot cohort
HR marks review cycle open in production BambooHR; pilot cohort of 10 employees confirmed; all internal test addresses in use
10 personalised kick-off emails delivered to internal test inboxes via production Gmail; Slack kick-off notification posted to designated HR test channel; Google Sheets tracker populated with 10 rows
All 10 Gmail sends confirmed delivered (no bounces); Slack post visible in test channel within 2 minutes of BambooHR trigger; Sheets tracker contains correct employee IDs, manager mappings, and OUTSTANDING status for all 10
T25
Submission tracking and reminder firing on production schedule
5 of 10 pilot employees submit within the window; 5 remain outstanding past the 24-hour overdue threshold
Tracker updated in real time for 5 submissions; 5 overdue employees receive reminder email and Slack nudge on production schedule
Sheets rows for 5 submitters show EMPLOYEE_SUBMITTED with correct timestamps; 5 reminder emails delivered to internal test inboxes; Slack nudges visible in personal test DMs; no reminders sent to submitted employees
T26
Summary document generation for matched pairs in production
All 10 pilot employees and their managers submit forms; 10 matched pairs detected by Summary Drafting Agent
10 Google Docs summaries generated in production HR folder structure; 10 Gmail notifications sent to manager test addresses with correct document links
10 Google Docs present in correct production folder; each document contains all structured template sections with real form response content; all 10 Gmail notifications delivered; links resolve correctly; generation time per summary under 90 seconds
T27
Error log verification across all three agents
Full Phase 3 run log reviewed by FullSpec team after T24 through T26 complete
Run log contains complete event trail for all three agents; no unhandled exceptions; any warnings documented with resolution status
Run log accessible and parseable; all expected event types present (cycle_opened, email_sent, form_received, tracker_updated, reminder_sent, doc_created, notification_sent); zero events with status UNHANDLED_ERROR; any warnings carry a resolution note
T28
Process owner review and approval: final Phase 3 sign-off
HR Manager and HR Director review all 10 pilot summary documents, the Google Sheets tracker state, the Gmail send logs, and the BambooHR write-back results
Process owner confirms all outputs meet quality expectations; approval recorded in the FullSpec confirmation log; Phase 3 declared complete
Process owner approval recorded in the FullSpec confirmation log with reviewer name, date, and explicit APPROVED status. All 10 summary documents rated acceptable or above. Tracker accuracy confirmed. BambooHR write-back values verified against approved pilot ratings. Phase 3 status set to PASSED in the FullSpec project record.
Once T28 is recorded as APPROVED in the FullSpec confirmation log, the automation is cleared for the first live review cycle. The FullSpec team will initiate post-launch monitoring for the first 7 days and remain available at support@gofullspec.com for any issues arising in the live cycle.
Test and QA PlanPage 4 of 4

More documents for this process

Every document generated for Performance Review Cycle.

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