Back to Customer Feedback Loop

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

Customer Feedback Loop

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

This document defines the complete testing and quality assurance protocol for the Customer Feedback Loop automation. It covers three sequential phases: unit testing of individual agents in sandbox, integration and edge-case testing across agent handoffs, and a final end-to-end production run with process owner sign-off. The FullSpec team runs all phases and manages all tooling. Your team joins at Phase 3 to confirm the workflow behaves correctly against live data before handoff is recorded.

01Testing approach

Testing runs in three phases in strict sequence. No phase begins until the previous phase fully passes. Any failing test case within a phase blocks progression and requires a fix and re-run of the affected cases before the phase is marked complete. This sequencing prevents integration faults from masking unit-level defects and keeps production credentials out of scope until all logic is confirmed stable.

1
Phase 1: Unit Testing
Each agent tested in isolation against sandbox data
Scope
Each agent tested individually: trigger detection, data extraction, sentiment scoring, routing logic, email dispatch, and Notion append. No cross-agent handoffs tested here.
Environment
Sandbox only. All tools connected to test instances or sandbox workspaces. No production data written.
Credential rule
Sandbox OAuth tokens and API keys only. Production credentials must not be present in the environment during Phase 1.
Pass condition
All cases T01 through T13 return the expected output with zero data-loss or unhandled exceptions.
Who runs it
FullSpec team only.
2
Phase 2: Integration and Edge Case Testing
Agent handoffs and failure-mode scenarios across connected tools
Scope
End-to-end data flow between agents: Feedback Intake Agent output consumed by Sentiment and Routing Agent, Sentiment and Routing Agent output consumed by Response and Reporting Agent. Edge cases covering missing data, duplicate records, unavailable services, and human timeout on escalation.
Environment
Sandbox for integration handoff tests (T14 through T19). Isolated sandbox for edge-case tests (E01 through E06). No production credentials in scope.
Credential rule
Sandbox credentials only. HubSpot sandbox, Slack test workspace, Notion sandbox page, and Gmail alias used throughout.
Pass condition
All integration cases T14 through T19 pass and all edge cases E01 through E06 are handled gracefully with correct fallback behaviour and error logging.
Who runs it
FullSpec team only.
3
Phase 3: End-to-End Production Test
Full workflow traced against live tools with process owner present
Scope
One complete production run per sentiment category (positive, neutral, negative), error-log verification, and process owner review and approval recorded in the FullSpec confirmation.
Environment
Production. Live Typeform, Gmail, Google Sheets, HubSpot, Slack, and Notion instances connected with production credentials.
Credential rule
Production credentials active. All test records created during this phase must be voided or deleted from production systems immediately after the phase is signed off.
Pass condition
All cases T20 through T24 return correct outputs, error logs are clean, and the process owner records approval in the FullSpec confirmation (case T24).
Who runs it
FullSpec team leads the run. Process owner joins to observe and approve at case T24.
Test and QA PlanPage 1 of 4
FS-DOC-06Quality

02Phase 1 — unit test cases

Sandbox credentials only during Phase 1. Do not connect production Typeform, Gmail, HubSpot, Google Sheets, Slack, or Notion accounts at any point during this phase. All test submissions must go to sandbox or test-alias endpoints. No real customer data should be present in the test environment.

Feedback Intake Agent — estimated build time: 8 hours, complexity: Moderate. Tests cover Typeform webhook detection, Gmail tag matching, structured field extraction, and Google Sheets append.

ID
Scenario
Input
Expected Output
Pass Criteria
T01
Typeform submission received — happy path
Webhook POST from sandbox Typeform with all fields populated: customer name, email, response text, timestamp, source.
Structured record written to Google Sheets row: timestamp, source='Typeform', customer name, email, raw text. No fields blank.
Google Sheets sandbox row appended within 10 seconds; all five fields present and correctly mapped.
T02
Gmail feedback-tagged email received — happy path
Inbound email to sandbox Gmail alias with subject tag '[feedback]'; contains customer name in From field and body text of 80+ words.
Structured record written to Google Sheets: source='Gmail', from_email extracted, subject extracted, body text captured, timestamp from email headers.
Row appended; source field reads 'Gmail'; from_email matches sender; body text intact and untruncated.
T03
Typeform submission with optional fields blank
Typeform response where the customer name field is skipped (optional). Email and response text present.
Record written with customer_name='Unknown' or null; all other fields populated correctly.
Row appended without error; name field shows null or default placeholder; no workflow halt.
T04
Gmail email without feedback tag — rejection
Inbound email to sandbox Gmail inbox without the '[feedback]' subject tag.
Email ignored by the automation; no row written to Google Sheets.
Zero new rows appear in the sandbox sheet after the untagged email arrives.
T05
Typeform webhook delivery failure — retry
Simulated webhook timeout on first delivery attempt (HTTP 503 response from the automation platform).
Automation platform retries delivery up to three times with exponential backoff; on success, record is written once only.
Single row written to Google Sheets after successful retry; no duplicate row created; retry event logged.

Sentiment and Routing Agent — estimated build time: 12 hours, complexity: Complex. Tests cover AI sentiment scoring, theme tagging, HubSpot contact lookup, conditional Slack alert, and score threshold boundary behaviour.

ID
Scenario
Input
Expected Output
Pass Criteria
T06
Positive feedback scored and routed — happy path
Google Sheets row with response text clearly positive ('Really happy with the service, everything arrived on time'). Known customer email.
Sentiment score 7 to 10 assigned; theme tag='delivery'; HubSpot contact note added with score and theme; no Slack alert fired.
Score in range 7 to 10; HubSpot sandbox contact record shows new note; Slack sandbox channel has zero new messages.
T07
Negative feedback scored and Slack alert triggered — happy path
Google Sheets row with strongly negative text ('Terrible experience, product was damaged and no one responded'). Known customer email. Expected score: 2.
Sentiment score 1 to 4 assigned; theme tag='product quality'; HubSpot note added; Slack alert posted to designated sandbox channel with customer name, score, theme, and response link.
Score in range 1 to 4; Slack sandbox channel receives one message containing customer name and score within 15 seconds; HubSpot note present.
T08
Neutral feedback — no alert, standard route
Google Sheets row with neutral text ('It was fine, nothing special'). Score expected in range 5 to 6.
Score 5 or 6 assigned; theme tag applied; HubSpot note added; no Slack alert.
Score 5 or 6; no Slack message posted; HubSpot note present.
T09
Boundary score exactly 4 — Slack alert fires
Response text calibrated to target a score of exactly 4.
Score of 4 triggers Slack alert (threshold is 4 or below).
Slack alert posted; score recorded as 4 in Google Sheets.
T10
Boundary score exactly 5 — no Slack alert
Response text calibrated to target a score of exactly 5.
Score of 5 does not trigger Slack alert.
No Slack message posted; score recorded as 5.
T11
HubSpot contact not found — graceful skip
Google Sheets row with an email address that has no matching HubSpot contact in sandbox.
Sentiment scoring and Slack routing proceed normally; HubSpot update step skipped; unmatched flag written to Google Sheets row.
No HubSpot error thrown; unmatched_crm flag in sheet set to true; all other outputs correct.

Response and Reporting Agent — estimated build time: 8 hours, complexity: Moderate. Tests cover Gmail acknowledgement template selection by sentiment category and Notion dashboard append.

ID
Scenario
Input
Expected Output
Pass Criteria
T12
Positive acknowledgement email sent — happy path
Classified record with score 8, theme='support', customer email present.
Gmail sandbox sends acknowledgement using the positive-sentiment template; Notion sandbox page receives new row with score 8 and theme 'support'.
Email arrives in sandbox recipient inbox within 60 seconds; subject line matches positive template; Notion row appended.
T13
Negative acknowledgement email sent and Notion updated
Classified record with score 3, theme='delivery', customer email present.
Gmail sandbox sends acknowledgement using the negative-sentiment template committing to follow-up; Notion row appended with score 3 and theme 'delivery'.
Email subject and body match negative template; Notion row present; no positive template used in error.
Test and QA PlanPage 2 of 4
FS-DOC-06Quality

03Phase 2 — integration and edge case tests

Integration tests verify that data flows correctly across agent boundaries without loss, corruption, or duplication. All tests use sandbox environments and credentials.

ID
Scenario
Input
Expected Output
Pass Criteria
T14
Full handoff: Intake Agent to Sentiment Agent — positive path
Live Typeform sandbox submission triggers Intake Agent; structured record written to Google Sheets.
Sentiment and Routing Agent detects new row automatically, scores it, updates HubSpot, and produces a Slack or no-Slack decision within 30 seconds of row creation.
No manual trigger needed between agents; timestamp delta between Sheets row creation and HubSpot update under 30 seconds.
T15
Full handoff: Sentiment Agent to Response Agent — positive path
Sentiment-scored record in Google Sheets with all fields populated.
Response and Reporting Agent detects completed scoring status, dispatches correct email template, and appends Notion row.
Email dispatched and Notion row present within 60 seconds of score field being written; correct template selected.
T16
Gmail intake to full pipeline — end-to-end sandbox
Tagged email sent to sandbox Gmail alias; no Typeform involvement.
Intake Agent captures email, writes Google Sheets row; Sentiment Agent scores and routes; Response Agent sends acknowledgement and updates Notion.
All four tool outputs present (Sheets row, HubSpot note, acknowledgement email, Notion entry) within 90 seconds of email receipt.
T17
Rapid back-to-back submissions — no data collision
Five Typeform submissions posted within 10 seconds of each other to sandbox webhook.
Five distinct Google Sheets rows created; five distinct HubSpot notes written; five acknowledgement emails sent; no records merged or overwritten.
Row count in Sheets equals 5; each row has a unique timestamp and customer email; zero duplicate HubSpot notes.
T18
Slack alert fires while previous alert is unacknowledged
Two negative-scoring records (score 2 and score 3) processed in sequence within 60 seconds; no human acknowledgement of first Slack alert.
Both Slack alerts posted independently to the designated channel; second alert does not wait for or suppress the first.
Slack sandbox channel shows two separate messages with distinct customer names, scores, and links.
T19
Notion append with pre-existing rows — no overwrite
Notion sandbox dashboard already contains 20 rows from previous test runs; new classified record triggers append.
New row added at bottom of table; existing rows unchanged.
Row count increments by exactly one; no existing row modified; page render intact.

Edge case tests below cover failure modes, data anomalies, and human timeout scenarios. Each must resolve without unhandled exceptions and must write an appropriate error or fallback log entry.

ID
Scenario
Input
Expected Output
Pass Criteria
E01
Duplicate Typeform submission — idempotency check
The same Typeform response_id delivered twice to the webhook within 5 minutes (simulating a Typeform retry after a network fault).
Only one Google Sheets row created; second delivery detected as duplicate and discarded.
Sheet row count increments by one only; duplicate discarded event written to error log.
E02
Missing customer email — acknowledgement skipped
Typeform submission where the email field is blank; all other fields present.
Record logged in Google Sheets with email='null'; sentiment scored; HubSpot update skipped (no email to match); acknowledgement email skipped; missing_email flag set; no unhandled error.
Workflow completes without crash; missing_email flag present in Sheets row; no email dispatch attempted; Notion still updated.
E03
Google Sheets API rate limit hit
Burst of 60 records within one minute exceeding the Google Sheets API write quota (60 write requests per minute for service accounts).
Automation platform queues excess writes and retries with backoff; all records eventually written; no records lost; rate-limit event logged.
Final row count in Sheets matches total submissions; no missing rows after backoff period; error log shows rate-limit event and retry count.
E04
Slack API unavailable — alert queued or logged
Slack API returns HTTP 503 for a negative-scoring record that should trigger an alert.
Automation retries up to three times; on continued failure, a fallback alert is written to the error log and an email alert is sent to the configured fallback address; workflow does not halt.
Fallback email received at the configured address; error log entry present; Google Sheets row and HubSpot note still written correctly.
E05
HubSpot API token expired mid-run
HubSpot OAuth access token is manually expired in sandbox before a record requiring CRM update is processed.
Automation detects 401 response, attempts OAuth token refresh automatically; on success, CRM update proceeds; on failure, unmatched_crm flag set and error logged.
If refresh succeeds: HubSpot note written, no user action required. If refresh fails: error log entry present, unmatched_crm flag set, all other outputs unaffected.
E06
Human owner does not acknowledge Slack alert within 24 hours — timeout handling
Negative-scoring record triggers Slack alert; no acknowledgement or response from the business owner within 24 hours.
Automation sends a follow-up reminder to the same Slack channel after 24 hours; reminder contains original customer name, score, and link; event logged.
Reminder message appears in sandbox Slack channel at the 24-hour mark (simulated via time offset in test); original alert still present; reminder references correct record.
Test and QA PlanPage 3 of 4
FS-DOC-06Quality

04Phase 3 — end-to-end production test

Important before running Phase 3: Use a dedicated internal test email address (e.g. test-feedback@[YourCompany.com]) for all Typeform submissions and Gmail triggers during this phase. Do not use real customer email addresses. After the phase is complete and the process owner has recorded approval, all test records must be voided: delete the Google Sheets rows created during the test, remove the HubSpot notes added to any contact records used, delete the Notion rows appended, and remove the Slack messages from the designated channel. Confirm deletion in the FullSpec confirmation log before the workflow is handed over for live use.

The following test cases run against fully connected production instances of Typeform, Gmail, Google Sheets, HubSpot, Slack, and Notion. The FullSpec team operates the workflow. The process owner observes the run in real time and records approval at case T24.

ID
Scenario
Input
Expected Output
Pass Criteria
T20
Production run — positive feedback, full pipeline
Typeform submission via the internal test address with clearly positive response text ('Everything was excellent, very happy'). Score expected: 8 to 10.
Google Sheets production row appended; HubSpot production contact note added; acknowledgement email sent to internal test address using positive template; Notion production dashboard row appended; no Slack alert.
All four tool outputs confirmed in production within 90 seconds; email received at internal test address; Notion row visible on dashboard; no Slack message in designated channel.
T21
Production run — neutral feedback, full pipeline
Typeform submission via internal test address with neutral text ('It was okay, nothing outstanding'). Score expected: 5 to 6.
Sheets row appended; HubSpot note added; neutral-template acknowledgement email sent; Notion row appended; no Slack alert.
All four outputs confirmed; neutral email template used (not positive or negative); no Slack message.
T22
Production run — negative feedback, Slack alert and escalation path
Typeform submission via internal test address with strongly negative text. Score expected: 2 to 3.
Sheets row appended; HubSpot note added; Slack alert posted to production designated channel with customer name, score, theme, and link; negative-template acknowledgement email sent; Notion row appended.
Slack message visible in production channel within 15 seconds of submission; all five outputs confirmed; negative template used for email.
T23
Error log verification
Review the automation platform error log after cases T20 through T22.
Error log shows zero unhandled exceptions; any retried events show successful resolution; all records traceable by submission timestamp.
Zero open errors in the log; each test record traceable end to end; retry events (if any) show final status 'success'.
T24
Process owner review and approval
Process owner reviews the outputs of T20 through T23 in real time: checks the Sheets rows, HubSpot notes, Slack messages, acknowledgement emails, and Notion dashboard entries.
Process owner confirms all outputs are correct, thresholds are set as agreed, templates are on-brand, and the workflow is ready for live use. Approval is recorded in the FullSpec confirmation log.
Process owner verbally or in writing confirms approval during the live session. The FullSpec team records the confirmation in the FullSpec confirmation log with the owner's name, the date, and the test case IDs covered. No separate signoff block is used.
After T24 approval is logged, the FullSpec team proceeds with post-launch cleanup: voiding all test records across production tools as listed in the red callout above, confirming deletion in the FullSpec confirmation log, and scheduling the first threshold review meeting for four weeks after go-live to assess sentiment scoring accuracy against real response samples.
Test and QA PlanPage 4 of 4

More documents for this process

Every document generated for Customer Feedback Loop.

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