Back to Sales Rep Activity Tracking

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

Sales Rep Activity Tracking

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

This document defines the complete test and quality assurance process for the Sales Rep Activity Tracking automation. It covers three sequential phases: unit testing of each agent in isolation, integration and edge-case testing across agent handoffs, and a final end-to-end production run. The FullSpec team runs Phases 1 and 2 entirely in sandbox environments. The process owner joins Phase 3 to confirm that production outputs meet business expectations before the automation is handed over. No phase begins until all test cases in the previous phase have passed.

01Testing approach

Testing runs in three phases in strict sequence. No phase begins until the previous phase fully passes. Phase 1 validates each agent in isolation using sandbox credentials and synthetic data. Phase 2 tests the handoffs between agents and exercises edge cases that real traffic will produce. Phase 3 is a controlled production run that traces a real activity signal end to end and requires process owner sign-off to close.

1
Phase 1 — Unit Testing
Each agent tested in isolation with synthetic data
Scope
Individual agent logic: trigger detection, contact matching, note generation, task creation, Sheets append, and Slack digest formatting
Environment
Sandbox only — HubSpot sandbox account, Gmail test account, Google Calendar test calendar, Zoom sandbox recording, Sheets staging file, Slack test workspace
Credential rule
No production credentials used at any point in Phase 1. All tokens and API keys must reference sandbox or developer test accounts
Pass condition
All test cases T01 through T15 return the expected output with no errors. Any failure blocks progression to Phase 2
Who runs it
FullSpec team only
2
Phase 2 — Integration and Edge Case Testing
Agent handoffs and failure-mode validation
Scope
End-to-end data flow across the Activity Capture Agent, Follow-Up and Task Agent, and Reporting and Nudge Agent; plus all defined edge cases
Environment
Sandbox only — same environment as Phase 1. No production data or credentials are introduced
Credential rule
Sandbox credentials remain in force. Any live API key found in the Phase 2 environment is treated as a blocking defect
Pass condition
All integration test cases T16 through T22 pass, and all edge cases E01 through E07 produce the correct fallback or error-handling behaviour
Who runs it
FullSpec team only
3
Phase 3 — End-to-End Production Test
Live environment run with process owner review
Scope
One complete production run using a real test calendar event and a designated internal test contact in the live HubSpot account
Environment
Production — live HubSpot account, live Gmail, live Google Calendar, live Zoom account, live Slack sales channel (using a pinned test message), live Google Sheets tracker
Credential rule
Production OAuth tokens used. Confirm all scopes are correctly granted before triggering T23. The test contact record must be clearly labelled as a test record and voided after approval
Pass condition
Test cases T23 through T26 all pass, and the process owner formally approves the output in writing via the FullSpec confirmation (final row T26)
Who runs it
FullSpec team executes; process owner reviews and approves outputs in T26
Test and QA PlanPage 1 of 4
FS-DOC-06Quality

02Phase 1 — unit test cases

All Phase 1 tests must be executed with sandbox credentials only. Do not use production HubSpot, Gmail, Google Calendar, Zoom, Google Sheets, or Slack tokens during this phase. Any test that inadvertently writes to a production system must be treated as a blocking defect and investigated before re-running.

Activity Capture Agent — estimated build time: 10 hours, complexity: Moderate

ID
Scenario
Input
Expected Output
Pass Criteria
T01
Happy path: Google Calendar event ends
Sandbox calendar event with two attendees; attendee email matches HubSpot sandbox contact
Structured HubSpot activity log entry created with activity type 'Meeting', matched contact ID, correct timestamp, and auto-generated note
Activity record appears in HubSpot sandbox within 60 seconds; all four required fields (type, outcome, note, contact ID) populated
T02
Happy path: Zoom meeting concludes with transcript
Zoom sandbox cloud recording with auto-transcript; attendee email matches HubSpot contact
Structured note includes meeting duration, key topics extracted from transcript, and any next-step phrases identified
Note text contains at least the meeting duration and one topic sentence; next-step field populated if transcript includes a phrase matching the extraction pattern
T03
Happy path: outbound Gmail sent to known contact
Gmail test account sends email to an address that matches a HubSpot sandbox contact
Email logged as a 'Email' activity type in HubSpot against the correct contact and deal record
Activity created in HubSpot within 90 seconds; subject line captured in note field; deal association correct
T04
Failure: no matching HubSpot contact found
Calendar event attendee email does not exist in HubSpot sandbox
Flow halts contact-match step; error logged to the platform error log with attendee email and event ID; no HubSpot record created
No phantom HubSpot record created; error log entry visible with correct event metadata; downstream agents not triggered
T05
Failure: Zoom transcript unavailable (local recording only)
Zoom event fires but no cloud transcript is returned by the Zoom API
Agent falls back to calendar event data only; note generated from event title, duration, and attendees with a flag stating 'Transcript unavailable'
Note is written to HubSpot with the fallback flag present; no error thrown to the error log for this expected condition
T06
Failure: HubSpot API write rejected (permission error)
Agent attempts to log activity but the sandbox token lacks the 'crm.objects.contacts.write' scope
Flow catches the 403 response; error logged with the HTTP status code and the affected contact ID; no partial record created
Error log contains HTTP 403 entry; HubSpot sandbox shows no new activity record; alert mechanism triggered
T07
Multiple triggers fire simultaneously for same contact
Calendar event ends and a Gmail to the same contact is sent within the same 5-minute window
Two separate activity records created in HubSpot, one for each signal type, without duplication
Exactly two activity records exist in HubSpot for the contact after the window; no merged or overwritten record

Follow-Up and Task Agent — estimated build time: 6 hours, complexity: Moderate

ID
Scenario
Input
Expected Output
Pass Criteria
T08
Happy path: note contains explicit follow-up date
HubSpot activity note in sandbox contains the phrase 'follow up on 12 June'
HubSpot task created for the rep assigned to the deal with due date 12 June and description drawn from the note
Task visible in HubSpot sandbox; due date matches extracted date; rep assignment matches the deal owner
T09
Happy path: note contains next-step phrase but no date
Note contains 'send proposal next week' with no explicit date
Task created with due date defaulting to three business days from the activity timestamp
Task created in HubSpot; due date is exactly three business days after the sandbox activity timestamp; description references the source note
T10
Note contains no next-step phrase
Activity note is a summary with no action item or follow-up language
No HubSpot task created; agent logs a 'no task required' status to the run log
HubSpot sandbox shows no new task for the contact; run log contains a 'no task required' entry for the activity ID
T11
Failure: deal record not found for the matched contact
Activity log created for a contact with no associated deal in HubSpot sandbox
Task created at the contact level (not deal level) with a note flagging 'no deal associated'
Task exists in HubSpot linked to the contact; flag text present in task description; no unhandled error thrown
T12
Failure: extracted date is in the past
Note contains 'follow up on 3 January' and the current date is June
Agent does not create a task with a past due date; instead logs a warning and defaults to three business days out
Task due date is three business days from the activity timestamp; warning entry visible in run log referencing the extracted but invalid date

Reporting and Nudge Agent — estimated build time: 6 hours, complexity: Simple

ID
Scenario
Input
Expected Output
Pass Criteria
T13
Happy path: evening query with activity data for multiple reps
HubSpot sandbox contains 8 activity records across 3 test reps logged during the simulated day
Google Sheets staging file receives one new row per rep with rep name, activity count, and date; Slack test workspace receives a formatted digest message listing all three reps
Sheets file contains exactly 3 new rows with correct rep names and counts; Slack message posted to the designated test channel within 60 seconds of the 6 PM trigger
T14
Stale contact flag: contact with no activity in 7+ days
HubSpot sandbox contact has a last-activity date of 8 days ago
Slack digest includes the contact name and assigned rep in a 'Stale contacts' section
Stale contact appears in the Slack message under the correct section heading; rep name matches the HubSpot owner
T15
Failure: HubSpot API returns zero records (query error or empty day)
HubSpot sandbox returns an empty activity list for the query window
Sheets file receives no new rows; Slack digest posts a message stating 'No activity recorded today' rather than an empty or broken message
No new Sheets rows written; Slack message is posted with the expected zero-activity text; no unhandled exception in the run log
Test and QA PlanPage 2 of 4
FS-DOC-06Quality

03Phase 2 — integration and edge case tests

Phase 2 validates that the three agents pass data correctly to one another and that the full pipeline handles real-world failure modes gracefully. Integration tests use the same sandbox environment as Phase 1. Edge-case tests use synthetic inputs designed to stress the contact-matching logic, data completeness checks, and timeout handling.

ID
Scenario
Input
Expected Output
Pass Criteria
T16
Full handoff: Activity Capture to Follow-Up and Task Agent
Sandbox calendar event ends; Activity Capture Agent creates a HubSpot activity with a follow-up phrase in the note
Follow-Up and Task Agent detects the new activity record and creates the corresponding HubSpot task without manual intervention
Task created in HubSpot within 2 minutes of activity log creation; task description references the correct activity ID
T17
Full handoff: Activity Capture to Reporting and Nudge Agent
Multiple sandbox activity records logged during a simulated day via the Activity Capture Agent
Reporting and Nudge Agent correctly reads all records written by the Activity Capture Agent at the 6 PM trigger and includes them in the Sheets row and Slack digest
Activity count in Slack digest matches the exact number of records created by the Activity Capture Agent in the query window
T18
Full pipeline: all three agents in sequence from a single Zoom trigger
Zoom sandbox meeting ends with transcript; contact matched in HubSpot; note includes a follow-up date
Activity Capture Agent logs the note, Follow-Up and Task Agent creates the task, Reporting and Nudge Agent includes the activity in the evening digest
All three outputs (HubSpot activity, HubSpot task, Slack digest entry) exist and reference the same source event ID
T19
Handoff failure: Activity Capture Agent logs activity but Follow-Up and Task Agent does not trigger
Activity log created in HubSpot sandbox; Follow-Up and Task Agent trigger condition not met due to a missing property value
Error captured in the platform run log; Reporting and Nudge Agent still runs independently at 6 PM without being blocked
Reporting and Nudge Agent digest is posted correctly; error log contains an entry for the missed Follow-Up and Task Agent trigger with the activity ID
T20
Reporting and Nudge Agent runs while Activity Capture Agent is still mid-execution
6 PM trigger fires while a large Zoom transcript is still being processed by the Activity Capture Agent
Reporting and Nudge Agent queries HubSpot at the scheduled time and includes only records already written; partially processed activity is not included or corrupted
Digest counts match only completed HubSpot records; no data duplication or overwrite in Sheets; Activity Capture Agent completes independently after the digest is sent
T21
Slack API unavailable at digest send time
Reporting and Nudge Agent attempts to post the Slack message but the Slack API returns a 503 error
Agent retries up to three times with a 30-second interval; if all retries fail, the error is logged and the Sheets row is still written
Sheets row exists for the day regardless of Slack failure; error log contains the Slack API failure with HTTP 503 and all retry timestamps
T22
Google Sheets API rate limit hit during Sheets append
Reporting and Nudge Agent attempts to append a row but receives a 429 Too Many Requests response from the Sheets API
Agent backs off for 60 seconds and retries once; on success, row is written; on second failure, error is logged and Slack digest still proceeds
Either the row is written on retry or an error log entry exists; Slack digest is posted regardless of Sheets write outcome

Edge Case Tests

ID
Scenario
Input
Expected Output
Pass Criteria
E01
Duplicate trigger: same calendar event fires twice
The automation platform receives two webhook payloads for the same Google Calendar event ID within 60 seconds (e.g. a calendar update event immediately following creation)
Idempotency check on event ID prevents a second HubSpot activity record from being created
Exactly one HubSpot activity record exists for the event ID after both payloads are processed; second payload is discarded with a de-dupe log entry
E02
Missing attendee email in calendar event
Google Calendar event payload arrives with the attendees array empty or the email field null
Agent cannot match to HubSpot; flow logs the unmatched event with the event title and organiser; no activity written
No HubSpot record created; error log contains event ID, event title, and a 'no attendee email' reason code
E03
Gmail sent to multiple recipients where only one is a HubSpot contact
Outbound Gmail has three recipients; one matches a HubSpot contact, two do not
Activity logged against the matched contact only; unmatched recipients listed in the note as additional recipients
One HubSpot activity created; note text includes the names or addresses of the unmatched recipients
E04
Zoom transcript contains no recognisable text (corrupted or empty file)
Zoom API returns a transcript file that is either empty or contains only formatting characters
Agent falls back to calendar event data; note flagged as 'Transcript empty or unreadable'; no exception thrown
HubSpot note contains the fallback flag; activity is still logged with calendar-derived fields; run log records the transcript parse failure
E05
HubSpot contact record has no assigned rep (deal owner field empty)
Activity Capture Agent matches a contact but the associated deal has no owner set in HubSpot
Follow-Up and Task Agent creates the task unassigned and appends a note: 'No rep assigned to this deal. Please assign manually'
Task exists in HubSpot in an unassigned state; task description contains the manual assignment prompt
E06
Human timeout: rep does not manually create a contact for an unmatched record within 48 hours
Unmatched contact event is logged to the error queue; no manual HubSpot contact is created by the rep within the 48-hour review window
Platform sends a Slack notification to the sales manager flagging the unmatched event and the original meeting details after 48 hours
Slack notification received by the manager in the designated channel with the event title, date, and attendee email; no data loss
E07
All three monitored tools (Gmail, Calendar, Zoom) produce signals within the same 2-minute window for the same rep
Simultaneous trigger payloads arrive from Gmail, Google Calendar, and Zoom for the same HubSpot contact
Three separate activity records created in HubSpot with distinct activity types (Email, Meeting, Call); no records merged or lost
Exactly three HubSpot activity records exist for the contact after processing; each carries the correct activity type; no duplicate or overwrite
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 address (e.g. a calendar event with an internal team member listed as the prospect) so that no real customer contact record is created or modified. Label the test HubSpot contact record clearly as 'TEST — DO NOT USE'. After the process owner approves the outputs in T26, the FullSpec team will void the test activity, task, and Sheets row, and remove the test contact label. Do not run Phase 3 until Phases 1 and 2 have fully passed. Do not use a real late-stage deal contact as the test subject.
ID
Scenario
Input
Expected Output
Pass Criteria
T23
Production end-to-end: full pipeline from Zoom meeting to Slack digest
A real Zoom meeting is held between two internal team members using the production Zoom account. The calendar event attendee email matches the designated test contact in the live HubSpot account. The meeting includes at least one spoken next-step phrase captured in the auto-transcript
Activity Capture Agent logs a structured activity in live HubSpot against the test contact. Follow-Up and Task Agent creates a task with a due date. At 6 PM, Reporting and Nudge Agent appends a row to the live Google Sheets tracker and posts the Slack digest to the live sales channel
All three outputs verified in production systems within the expected time windows: HubSpot activity within 90 seconds of meeting end; HubSpot task within 2 minutes of activity creation; Sheets row and Slack digest by 6:05 PM. No manual intervention required at any step
T24
Production error log verification
Review the platform error log after T23 completes
Error log is clean: no unhandled exceptions, no failed API calls, and no missing field warnings for the T23 run
Zero error entries in the platform run log attributed to the T23 event ID. Any informational log entries (e.g. 'no stale contacts today') are acceptable
T25
Production note quality review
The process owner reviews the HubSpot activity note generated in T23
Note accurately reflects the meeting topic, duration, and the next-step phrase spoken in the meeting. Note format matches the agreed template: activity type header, summary paragraph, next steps line
Process owner confirms that the note is accurate, readable, and would be acceptable as a permanent CRM record without manual editing. Minor wording differences from verbatim transcript are acceptable; factual errors are not
T26
Process owner review and approval
Process owner reviews all Phase 3 outputs: HubSpot activity note (T23), HubSpot task (T23), Sheets row (T23), Slack digest (T23), and error log (T24)
Process owner formally approves the automation for full team go-live. Approval is recorded in the FullSpec project confirmation and linked to this test plan. No separate signoff block is required. After approval, FullSpec voids the test records and prepares the go-live brief
FullSpec receives written approval from the process owner (via the FullSpec confirmation workflow) referencing test case T26. All five output items (activity, task, Sheets row, Slack digest, clean error log) are confirmed as passing. Automation is cleared for production rollout to all reps
Once T26 approval is received, the FullSpec team will void the test HubSpot activity, task, and Sheets row created during Phase 3, remove the 'TEST' label from the contact record, and issue the go-live brief to the process owner. The go-live brief includes the rep briefing talking points and the monitoring runbook. Any questions before or after Phase 3 can be directed to support@gofullspec.com.
Test and QA PlanPage 4 of 4

More documents for this process

Every document generated for Sales Rep Activity Tracking.

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