Back to Client / Customer Onboarding

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

Client / Customer Onboarding Automation

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

This document defines the complete quality assurance framework for the Client Onboarding automation. It covers three sequential test phases: unit tests for each individual agent, integration and edge-case tests for agent handoffs and failure modes, and a final end-to-end production run. The FullSpec team runs Phases 1 and 2 entirely in sandbox environments. Your process owner joins Phase 3 for sign-off on a live production test before go-live is confirmed. No phase begins until the previous phase fully passes.

01Testing approach

Testing runs in three phases in strict sequence. No phase begins until every test case in the previous phase carries a Pass status. Phase 1 validates each agent in isolation against a sandbox environment. Phase 2 confirms that agents hand off correctly to each other and that the system handles edge cases gracefully. Phase 3 runs a full end-to-end production test with real credentials and a real deal record, culminating in process owner review and approval.

1
Phase 1 — Unit Testing
Each agent tested in isolation
Scope
Individual agent logic: trigger detection, action execution, output formatting, and local error handling for Onboarding Coordinator Agent and Internal Handoff Agent
Environment
Sandbox only — HubSpot sandbox org, Typeform test workspace, Gmail test account, Xero demo company, Slack test workspace
Credential rule
No production credentials used. All connections must point to sandbox or demo accounts. Real client data must not be used.
Pass condition
All test cases T01 through T14 return the expected output with no errors. Any failure blocks progression to Phase 2.
Who runs it
FullSpec team only. Process owner is not required for this phase.
2
Phase 2 — Integration and Edge-Case Testing
Agent handoffs and failure mode validation
Scope
Cross-agent data handoffs, tool-to-tool field mapping accuracy, and all defined edge cases including missing data, duplicate records, tool unavailability, and human timeout scenarios
Environment
Sandbox only — same sandbox stack as Phase 1. No production connections active.
Credential rule
Sandbox credentials remain in force. Any credential swap to production is blocked until Phase 3 is formally initiated by the FullSpec team.
Pass condition
All integration test cases T15 through T22 and all edge-case test cases E01 through E08 return expected outcomes. Error paths must surface a recoverable state, not a silent failure.
Who runs it
FullSpec team only. Process owner is not required for this phase.
3
Phase 3 — End-to-End Production Test
Live environment, process owner sign-off required
Scope
Full onboarding sequence run against the live production environment using a designated internal test contact and a real but voided deal record
Environment
Production — live HubSpot org, live Xero account (draft invoice mode recommended), live Gmail, live Typeform, live Slack onboarding channel
Credential rule
Production credentials active. The FullSpec team coordinates the credential switch. All test records must be voided or deleted after Phase 3 completes.
Pass condition
All production test cases T23 through T27 pass. Process owner reviews outputs and records approval in the FullSpec confirmation log. This approval is captured as test case T27.
Who runs it
FullSpec team executes. Process owner is required to observe and approve the final case (T27) before go-live is authorised.
Test and QA PlanPage 1 of 4
FS-DOC-06Quality

02Phase 1 — unit test cases

All Phase 1 tests must be executed using sandbox credentials only. Do not connect production HubSpot, Xero, Gmail, Typeform, or Slack accounts at this stage. Using a production credential during unit testing risks sending live emails or creating real invoices. If in doubt, contact support@gofullspec.com before proceeding.

Onboarding Coordinator Agent — covers the trigger, welcome email, intake form dispatch, reminder logic, CRM field mapping, and Xero invoice creation steps.

ID
Scenario
Input
Expected Output
Pass Criteria
T01
Happy path: trigger fires on Closed Won
HubSpot sandbox deal moved to Closed Won stage with all required fields populated (contact name, email, service tier, deal value)
Automation platform detects the stage change event within 30 seconds and begins the onboarding sequence
Workflow execution log shows trigger received; no timeout or missed event
T02
Welcome email sent with correct personalisation
Closed Won deal with contact: Test Client, tier: Standard, account manager: Test AM
Gmail sandbox account sends email to test contact address with correct name, tier, and account manager name merged into the template
Email received in sandbox inbox; all merge fields populated correctly; no literal placeholder text visible
T03
Welcome email: missing contact first name in HubSpot
Closed Won deal where HubSpot contact first name field is blank
Automation uses fallback text (e.g. 'Hi there') rather than sending a blank merge field; execution continues
Email received with fallback greeting; no empty field; workflow does not halt
T04
Intake form link dispatched after welcome email
Successful T02 trigger completing the welcome email step
Typeform sandbox unique link sent to the same test contact email address within 60 seconds of the welcome email
Typeform submission URL present in the email body; link resolves to the correct sandbox form
T05
48-hour reminder fires when intake form not submitted
Intake form not submitted within the 48-hour window (simulated by advancing test clock or using a short timeout in sandbox)
Gmail sandbox sends a reminder email to the test contact address; no duplicate reminder sent
Reminder email received; timestamp shows correct delay logic; only one reminder dispatched
T06
Reminder does not fire when form submitted before 48 hours
Intake form submitted within the 48-hour window
No reminder email is sent; the sequence proceeds to CRM mapping
No reminder email in sandbox inbox; workflow log shows reminder branch skipped
T07
Happy path: intake data mapped to HubSpot record
Typeform sandbox submission with all required fields: billing email, billing contact name, service preferences, and payment terms
HubSpot sandbox contact and company record updated with all Typeform field values mapped to the correct HubSpot properties
HubSpot sandbox record shows correct field values matching the Typeform submission; no fields left blank that were provided
T08
Intake data mapping: optional field left blank in Typeform
Typeform submission where an optional field (e.g. secondary billing contact) is left blank
HubSpot record updated for all completed fields; blank optional field left as-is in HubSpot without overwriting an existing value
HubSpot record updated correctly; optional blank field does not overwrite an existing HubSpot value; no execution error
T09
Xero invoice created with correct values
HubSpot sandbox record with deal value: $2,500, billing contact email: testclient@example.com, payment terms: 14 days
Xero demo company creates a draft invoice for $2,500 addressed to testclient@example.com with 14-day payment terms and the correct line item description
Invoice visible in Xero demo company with correct amount, contact, due date, and line item; status is Draft or Sent per configuration
T10
Xero invoice: billing contact email missing from HubSpot record
HubSpot sandbox record where billing contact email field is blank after intake form mapping
Automation halts at the Xero step, logs an error to the workflow execution log, and triggers an alert (e.g. Slack message to the ops channel) notifying the team of the missing field
Xero invoice not created; error logged with deal ID and description of missing field; alert message received in sandbox Slack channel
T11
Xero invoice: deal value is zero or missing
HubSpot sandbox deal with deal value field blank or set to $0
Automation halts at the Xero step and logs a warning; no zero-value invoice created
No invoice in Xero demo; workflow log shows the zero-value guard triggered; execution paused pending manual review
T12
HubSpot deal stage updated to Onboarded after all steps complete
Successful completion of all prior steps (T01 through T09 sequence)
HubSpot sandbox deal stage updates from Closed Won to Onboarded; a timestamped note is added to the deal record
Deal stage reads Onboarded in HubSpot sandbox; note present on the record with execution timestamp
T13
HubSpot API rate limit response (429) received mid-sequence
Simulated 429 response from HubSpot sandbox during the CRM update step
Automation applies exponential backoff and retries up to three times before logging a failure and pausing the workflow
Workflow log shows retry attempts; on third failure, execution pauses and an error record is created; no duplicate writes on successful retry
T14
Duplicate trigger: same deal moved to Closed Won twice in quick succession
HubSpot sandbox deal stage toggled to Closed Won, back to another stage, then back to Closed Won within five minutes
Automation uses a deduplication check (deal ID) to prevent a second full sequence running for the same deal; second trigger is logged and suppressed
Only one welcome email sent; only one Xero invoice created; workflow log shows deduplication event for the second trigger

Internal Handoff Agent — covers the Slack notification posted after intake form submission and HubSpot record confirmation.

ID
Scenario
Input
Expected Output
Pass Criteria
T15
Happy path: Slack notification posted after intake confirmed
Typeform sandbox submission received and HubSpot sandbox record updated successfully (T07 state)
A formatted Slack message posted to the sandbox onboarding channel containing client name, service tier, assigned account manager, and kickoff scheduling link
Message appears in sandbox Slack channel with all four data fields present and correctly populated; no raw field codes visible
T16
Slack notification: missing account manager name in HubSpot
HubSpot sandbox record where the assigned account manager property is blank
Slack message posted with account manager field showing 'Unassigned' as fallback; notification is not suppressed
Slack message received with 'Unassigned' in the account manager field; no other fields affected; message not duplicated
T17
Slack API unavailable (simulated 503 response)
Simulated 503 response from Slack API during the notification step
Automation retries once after 60 seconds; on second failure, logs the error and sends a fallback email notification to the ops team email address
Retry attempt logged; fallback email received at the configured ops team address; Slack step recorded as failed in execution log
Test and QA PlanPage 2 of 4
FS-DOC-06Quality

03Phase 2 — integration and edge case tests

Phase 2 confirms that the two agents hand off data correctly between them and that the full sandbox sequence runs end to end without manual intervention. Test IDs continue from the Phase 1 sequence.

ID
Scenario
Input
Expected Output
Pass Criteria
T18
Full agent handoff: Onboarding Coordinator to Internal Handoff Agent
Complete Closed Won trigger through to Xero invoice creation passing in the sandbox
Internal Handoff Agent fires automatically once the HubSpot record is updated with intake data; no manual trigger required
Slack notification appears in sandbox channel within 90 seconds of the HubSpot record update; execution log shows the handoff event with correct deal ID
T19
HubSpot record update from Typeform propagates correctly to Slack message
Typeform sandbox submission containing client name: Sandbox Corp, tier: Standard, account manager: Test AM
Internal Handoff Agent Slack message reflects exactly the values captured from the Typeform submission and mapped into HubSpot
Slack message fields match the Typeform submission data with no truncation, encoding errors, or stale HubSpot values
T20
Xero invoice creation does not block the Slack notification
Xero step completes successfully before the Internal Handoff Agent fires
Slack notification is sent regardless of whether the Xero invoice was created in Draft or Sent status
Slack message posted; Xero invoice present in demo account; no dependency coupling that blocks the notification if Xero step is slow
T21
HubSpot deal stage updated to Onboarded only after both agents have completed
Both agents completing their full sequences in sandbox without error
HubSpot deal stage moves to Onboarded and a note is added only after the Slack notification step confirms completion
Deal stage reads Onboarded; note timestamp is after the Slack notification timestamp in the execution log
T22
End-to-end sandbox run with all steps passing sequentially
Clean sandbox environment with no prior test state; full trigger fired from HubSpot Closed Won event
All seven automated steps complete in sequence: welcome email, intake form dispatch, reminder logic skipped (form submitted), CRM update, Xero invoice, Slack notification, HubSpot stage update
All seven execution log entries show success; total elapsed time from trigger to final HubSpot update is under five minutes in the sandbox

Edge-case tests use the E-series ID prefix and cover scenarios that fall outside the normal flow. These must all pass before Phase 3 begins.

ID
Scenario
Input
Expected Output
Pass Criteria
E01
Duplicate contact: Typeform submission email matches an existing HubSpot contact
Typeform sandbox submission where the email address already exists as a HubSpot contact under a different deal
Automation updates the existing HubSpot contact record rather than creating a duplicate; a note is added flagging the match
No duplicate contact created in HubSpot sandbox; existing record updated; note present indicating the duplicate-match logic fired
E02
Missing required field: billing email absent from Typeform submission
Typeform sandbox submission where the billing email question is left blank
Automation logs a field-missing error, halts at the Xero invoice step, and sends an internal alert to the ops Slack channel listing the missing field and the deal ID
Xero invoice not created; error logged; ops Slack alert received with correct deal ID and field description
E03
Missing required field: deal value blank in HubSpot at trigger time
HubSpot sandbox deal moved to Closed Won with the deal amount field empty
Automation completes the welcome email and intake form dispatch steps, then halts at the Xero step with a logged warning and internal notification
Welcome email and intake form sent; Xero invoice not created; warning logged; no silent failure
E04
Typeform tool unavailable: Typeform API returns a 502 error on form dispatch
Simulated 502 response from Typeform API during the intake form dispatch step
Automation retries up to three times with exponential backoff; on third failure, logs the error and sends an alert to the ops team; welcome email already sent is not resent
Retry log entries present; ops alert received; welcome email sent exactly once; intake form step recorded as failed pending manual resolution
E05
Xero contact mismatch: billing email in HubSpot does not match any existing Xero contact
HubSpot sandbox record with billing email: newcontact@testclient.com, which does not exist in the Xero demo company
Automation creates a new Xero contact using the billing email and name from HubSpot before creating the invoice
New Xero contact created in demo account; invoice raised against that contact; no error logged; execution continues
E06
Human timeout: intake form not submitted after 48-hour reminder, still no response after a further 48 hours
Intake form not submitted within 96 hours of dispatch (simulated in sandbox)
Automation sends one reminder at 48 hours, then after a further 48 hours without submission escalates by posting a message to the ops Slack channel and pausing the downstream steps
Only one reminder email sent; escalation Slack message posted at the 96-hour mark; downstream steps (CRM update, Xero, Slack notification) paused in execution log
E07
Slack channel misconfigured: onboarding channel ID not found
Internal Handoff Agent attempts to post to a Slack channel that has been deleted or renamed in the sandbox
Automation logs a channel-not-found error and sends a fallback direct message to the configured ops team Slack user ID
Error logged with channel ID; fallback DM received by the configured ops user; Slack notification step does not silently fail
E08
Automation platform execution timeout: one step exceeds the maximum allowed execution time
A simulated slow response from the HubSpot API causing the CRM update step to approach the platform execution timeout limit
Automation marks the step as timed out, logs the event, and does not proceed to the Xero or Slack steps; an alert is sent to the ops team for manual intervention
Step recorded as timed out in execution log; subsequent steps not executed; ops alert sent; no partial data written to HubSpot or Xero
Test and QA PlanPage 3 of 4
FS-DOC-06Quality

04Phase 3 — end-to-end production test

Important before running Phase 3: use an internal test email address (e.g. test-onboarding@[YourCompany.com]) as the client contact for this run. Do not use a real client's details. The Xero invoice must be created in Draft mode or voided immediately after the test to avoid sending a live invoice. The HubSpot deal record used for this test must be deleted or moved out of the Closed Won stage after Phase 3 completes. The FullSpec team will coordinate all credential switches to production before this phase begins. Do not switch credentials manually.
Confirm with the FullSpec team that the Xero production account is set to Draft invoice mode before T23 runs. If your Xero account is configured to send invoices automatically on creation, switch it to Draft mode for the duration of this test. Contact support@gofullspec.com if you are unsure how to make this change.
ID
Scenario
Input
Expected Output
Pass Criteria
T23
Full production run: trigger to welcome email and intake form dispatch
Live HubSpot deal moved to Closed Won for the internal test contact (test-onboarding@[YourCompany.com]); all required fields populated with realistic test data
Welcome email received at the test inbox within 60 seconds of the deal stage change; Typeform intake link present in the email body and resolves correctly
Email received; merge fields correctly populated with test contact name and tier; Typeform link functional; no duplicate trigger fired
T24
Production intake form submission and CRM field mapping
Test team submits the live Typeform intake form using the link received in T23
Live HubSpot contact and company record updated with all Typeform responses mapped to the correct HubSpot properties within 90 seconds of submission
HubSpot record reflects all submitted Typeform values; no fields missing or misaligned; submission timestamp visible in HubSpot activity log
T25
Production Xero invoice creation in Draft mode
HubSpot record updated from T24 with deal value, billing contact, and payment terms all present
Draft invoice created in the live Xero account against the test billing contact with the correct amount, due date, and line item description; invoice is not sent to the client
Invoice visible in Xero with Draft status; amount, contact, and payment terms match the HubSpot deal record; no email dispatched from Xero to the test contact
T26
Production Slack notification and HubSpot deal stage update
Successful completion of T23 through T25 in the live environment
Formatted Slack message posted to the live onboarding channel with client name, tier, account manager, and kickoff link; HubSpot deal stage updated to Onboarded with a timestamped execution note
Slack message present in the live onboarding channel with all four data fields; HubSpot deal stage reads Onboarded; execution note timestamp is within 30 seconds of the Slack post
T27
Process owner review and approval — final Phase 3 gate
Process owner reviews the outputs from T23 through T26: the test inbox email, the HubSpot record update, the Xero draft invoice, and the Slack notification
Process owner confirms all outputs are correct and accurate, records their approval in the FullSpec confirmation log, and authorises go-live. The test deal record is then voided or deleted by the FullSpec team.
Process owner approval recorded in the FullSpec confirmation log. All test records voided. Go-live authorised. Phase 3 is complete.
Once T27 is approved, the FullSpec team will remove all test records, confirm production credentials are locked to the live workflow, and move the project to the Go-Live milestone. Any issues identified during Phase 3 are logged, fixed in the automation platform, and retested from T23 before approval is re-sought. Contact support@gofullspec.com for any Phase 3 coordination queries.
Test and QA PlanPage 4 of 4

More documents for this process

Every document generated for Client / Customer Onboarding.

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