Back to Event & Webinar Promotion

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

Event and Webinar Promotion Automation

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

This document defines the complete quality assurance process for the Event and Webinar Promotion automation, covering all three agents: Event Setup Agent, Social Promotion Agent, and Post-Event Sync Agent. It is written for the FullSpec build team and is structured in three sequential phases. No phase begins until every test case in the previous phase has achieved a full pass. The process owner joins Phase 3 to confirm production behaviour and record formal approval.

01Testing approach

All testing runs in three phases in sequence. No phase begins until the previous phase fully passes. Phase 1 isolates each agent in a sandbox environment and verifies its individual logic. Phase 2 tests agent handoffs and edge cases that fall outside the happy path. Phase 3 executes a full end-to-end run in production with real credentials, observed by the process owner, whose sign-off closes the QA cycle.

1
Phase 1: Unit Testing
Each agent tested in isolation against its own inputs and outputs
Scope
Individual agent logic: trigger detection, API calls, and output validation for Event Setup Agent, Social Promotion Agent, and Post-Event Sync Agent
Environment
Sandbox only. No production credentials or live API calls permitted in this phase
Credential rule
Use sandbox API keys for all tools. HubSpot sandbox portal, Zoom sandbox account, LinkedIn test organisation page, and a dedicated Google Sheets test file
Pass condition
All test cases T01 through T15 return expected outputs with no errors logged
Who runs it
FullSpec team only. Process owner is not required for Phase 1
2
Phase 2: Integration and Edge Case Testing
Agent handoffs, tool-to-tool flows, and failure mode validation
Scope
Cross-agent handoffs, sequential data passing between tools, and all identified edge cases including duplicates, missing fields, tool unavailability, and human approval timeout
Environment
Sandbox only. Simulated tool failures injected via mock responses where the tool does not natively support error simulation
Credential rule
Sandbox credentials only. No production data or real contact records are touched in this phase
Pass condition
All integration test cases T16 through T22 and all edge cases E01 through E07 pass with expected error handling and no unhandled exceptions
Who runs it
FullSpec team only. Process owner is not required for Phase 2
3
Phase 3: End-to-End Production Test
Full live run with real credentials and process owner sign-off
Scope
Complete promotion workflow from Google Sheets trigger through to post-event metrics write-back, using a real upcoming test event and internal test addresses
Environment
Production credentials. All API calls are live. Test event record is voided and test contacts are deleted after the run
Credential rule
Production API keys active. All token scopes must match the Integration and API Spec. No hardcoded secrets permitted in the workflow configuration
Pass condition
All end-to-end test cases T23 through T27 pass, including error log verification and process owner approval recorded in the FullSpec confirmation
Who runs it
FullSpec team executes the workflow. Process owner observes, reviews outputs, and records approval as the final test case (T27)
Test and QA PlanPage 1 of 4
FS-DOC-06Quality

02Phase 1 — unit test cases

Sandbox credentials only. Do not use production HubSpot, Zoom, LinkedIn, or Google Sheets credentials during Phase 1. All test rows must use the designated test Google Sheet file and the sandbox portal identifiers documented in the Developer Handover Pack.

Event Setup Agent — Build complexity: Moderate. Estimated build time: 18 hours.

ID
Scenario
Input
Expected Output
Pass Criteria
T01
Happy path: new confirmed event row detected
Google Sheets row with status = Confirmed, event title, date, time, speaker name, and contact list ID populated
Automation platform detects the row within 60 seconds and passes all fields to the Event Setup Agent
Row read confirmed in execution log; all fields present and correctly parsed
T02
Zoom webinar creation from brief data
Event title, date/time (ISO 8601), duration, and host email from the confirmed row
Zoom sandbox webinar created; registration link returned and stored in the workflow context
Zoom API returns 201 status; webinar ID and registration URL are non-null in the workflow payload
T03
HubSpot sequence activated with dynamic send dates
Registration link, contact list ID, and event date; sequence IDs for announcement, one-week reminder, one-day reminder, and one-hour reminder
HubSpot sandbox sequence enrolled for the target list with send dates calculated from the event date
HubSpot API returns 204; sequence enrollment visible in sandbox portal with correct send timestamps
T04
Trigger fires on unconfirmed row
Google Sheets row with status = Draft
Automation platform does not start the workflow; row is ignored
No Zoom call or HubSpot call made; execution log shows trigger condition not met
T05
Zoom creation fails: missing event date
Google Sheets row with status = Confirmed but event date cell empty
Agent logs a validation error; Zoom API call is not attempted; error written to the execution log
Execution log contains a validation error entry referencing the missing date field; no Zoom API call recorded
T06
HubSpot sequence activation fails: invalid contact list ID
Valid Zoom creation; HubSpot list ID set to a non-existent sandbox value
HubSpot API returns 404; agent logs the error and halts the sequence activation step without crashing the entire workflow
Error captured in execution log with HubSpot 404 response body; workflow status set to Error with step reference

Social Promotion Agent — Build complexity: Moderate. Estimated build time: 16 hours.

ID
Scenario
Input
Expected Output
Pass Criteria
T07
Happy path: AI copy generation for three LinkedIn posts
Event title, speaker name, date, key topic, and registration link from the workflow context
Three LinkedIn post drafts generated: announcement, mid-cycle, and day-of, each under 3,000 characters
Three draft strings returned; character counts within limit; registration link present in each post
T08
Human approval step queued correctly
Three generated post drafts
Coordinator receives an approval request (via the configured channel) containing all three drafts and an approve or revise action
Approval request delivered within 2 minutes of draft generation; workflow pauses and awaits response
T09
LinkedIn posts scheduled after approval
Approval signal received with no revisions requested
Three posts scheduled to the sandbox LinkedIn Page at the pre-configured intervals relative to the event date
LinkedIn API returns 201 for all three posts; scheduled timestamps match the configured slot logic
T10
Slack launch notification posted
Registration link and event name from workflow context
Slack message posted to the designated internal channel with event name, date, and registration link
Slack API returns 200; message visible in the sandbox workspace channel; link is the correct Zoom registration URL
T11
AI copy generation returns empty output
Event brief with topic field containing only whitespace
Agent logs a content generation failure; posts are not scheduled; coordinator is notified to provide copy manually
Execution log records content generation error; LinkedIn API not called; notification sent
T12
LinkedIn API authentication failure
Valid post drafts; LinkedIn sandbox token expired or revoked
Agent logs a 401 authentication error; posts are not scheduled; error escalated via the execution log
LinkedIn API returns 401; error logged with token reference; workflow step marked as failed

Post-Event Sync Agent — Build complexity: Moderate. Estimated build time: 18 hours.

ID
Scenario
Input
Expected Output
Pass Criteria
T13
Happy path: Zoom attendance data pulled and HubSpot contacts updated
Webinar ID from the event brief row; event end time elapsed by at least 60 minutes
Zoom attendance report fetched; each attendee contact in HubSpot sandbox updated with attendance tag and event name property
Zoom API returns participant list; HubSpot PATCH call returns 200 for each matched contact; attendance tag visible in sandbox contact records
T14
Segmented follow-up emails triggered correctly
Attendance data from T13 with at least one attendee and one no-show contact in the sandbox list
Attendee contacts receive the replay email sequence; no-show contacts receive the re-invite email sequence in HubSpot sandbox
HubSpot sandbox shows two distinct sequence enrollments; contact segments match attendance status; no contact enrolled in both sequences
T15
Event metrics written to Google Sheets reporting row
Registration count, attendance count, and email open rate from HubSpot and Zoom sandbox data
The correct Google Sheets row for the event is updated with registration count, attendance rate percentage, and email open rate; no new row created
Google Sheets API returns 200; the existing event row is updated; no duplicate rows present; values match the source data
Test and QA PlanPage 2 of 4
FS-DOC-06Quality

03Phase 2 — integration and edge case tests

Integration tests verify that data passes correctly between agents and that the handoff signals trigger the next agent reliably. All tests run in the sandbox environment with sandbox credentials.

ID
Scenario
Input
Expected Output
Pass Criteria
T16
Event Setup Agent to Social Promotion Agent handoff
Event Setup Agent completes successfully and passes the Zoom registration link and event context to the workflow
Social Promotion Agent activates immediately after the Zoom registration link is confirmed; no manual trigger required
Execution log shows Social Promotion Agent start timestamp within 30 seconds of Event Setup Agent completion; registration link present in Social Promotion Agent input payload
T17
Registration link propagation across all downstream steps
Zoom registration URL generated by Event Setup Agent
The same URL appears in the HubSpot email sequence, all three LinkedIn post drafts, and the Slack notification without manual copy-paste
URL string comparison across HubSpot sequence tokens, LinkedIn post body, and Slack message confirms identical value; no truncation or encoding error
T18
Post-Event Sync Agent triggered by scheduled time, not manual call
Event end time recorded in the Google Sheets brief row set to 60 minutes in the past relative to the test execution time
Post-Event Sync Agent activates automatically at the correct scheduled time without requiring a manual trigger
Execution log shows agent activation timestamp within 5 minutes of the calculated trigger time; no manual trigger entry in the log
T19
HubSpot sequence dates recalculate when event date changes in Google Sheets
An existing confirmed event row has its date field updated to a new value
The automation detects the date change, updates the HubSpot sequence send dates to reflect the new event date, and logs the update
HubSpot sandbox sequence shows revised send timestamps; execution log records the date change detection and sequence update call
T20
Coordinator revises LinkedIn copy and resubmits for approval
Approval request returned with revision notes; revised copy resubmitted
Agent accepts the revised drafts, replaces the original drafts in the workflow context, and schedules the revised posts to LinkedIn after second approval
LinkedIn API called with revised copy text; original draft text not present in the scheduled post payload; second approval signal recorded in execution log
T21
End-to-end data integrity: Google Sheets row values match all downstream tool records
A single confirmed event row with all fields populated
Event title, date, and speaker name in the Google Sheets row exactly match the Zoom webinar settings, HubSpot email subject lines, LinkedIn post copy, and the Slack notification
Manual field comparison across all four tools confirms no data mutation, truncation, or encoding error at any handoff point
T22
Concurrent event rows: two confirmed rows processed without collision
Two separate confirmed event rows added to the Google Sheets file within 2 minutes of each other, each with distinct event titles and dates
Two independent workflow instances run in parallel; each instance creates its own Zoom webinar and HubSpot sequence without mixing data between the two events
Execution log shows two distinct workflow instance IDs; Zoom sandbox shows two separate webinars; HubSpot sandbox shows two separate sequence enrollments with no cross-contamination

Edge case tests cover inputs and conditions outside the happy path. These scenarios reflect realistic failure modes identified during process discovery.

ID
Scenario
Input
Expected Output
Pass Criteria
E01
Duplicate event row submitted for the same event
A second Google Sheets row is added with the same event title and date as an already-confirmed row
Automation detects the duplicate, skips processing the second row, and logs a duplicate warning without creating a second Zoom webinar or HubSpot sequence enrollment
Execution log contains a duplicate detection entry; Zoom sandbox shows only one webinar for the event; HubSpot sandbox shows no duplicate sequence
E02
Event cancelled after workflow has started
Google Sheets row status updated from Confirmed to Cancelled after the Event Setup Agent has already created the Zoom webinar
Automation detects the status change, cancels the Zoom webinar via API, deactivates the HubSpot sequence, and logs the cancellation. Scheduled LinkedIn posts are removed if not yet published
Zoom API cancellation call returns 200; HubSpot sequence shows unenrolled status; LinkedIn scheduled posts removed or flagged for manual review; execution log records all cancellation actions
E03
Missing speaker name in the event brief
Google Sheets row confirmed but the speaker name cell is empty
AI copy generation proceeds using a placeholder token; coordinator approval request flags the missing speaker name as a required review item before approval is permitted
LinkedIn post drafts contain a clearly labelled placeholder for the speaker name; approval request message includes a warning about the missing field; approval cannot proceed without the field being filled
E04
Zoom API rate limit reached during bulk event creation
Six confirmed event rows submitted within a 10-minute window, exceeding the Zoom API rate limit for webinar creation
Automation queues the excess requests, applies exponential backoff, retries after the rate limit window resets, and logs the delay without dropping any events
All six Zoom webinars eventually created; execution log shows retry attempts with backoff intervals; no events lost; total queue cleared within 15 minutes
E05
HubSpot API unavailable for more than 5 minutes
Event Setup Agent attempts to activate the HubSpot email sequence; HubSpot API returns 503 for all retry attempts over a 5-minute window
Automation logs the failure, pauses the HubSpot step, and sends an alert to the FullSpec monitoring channel. The Zoom webinar creation step is not rolled back. The step retries automatically when HubSpot availability is restored
Execution log records 503 errors and retry attempts; alert delivered to the monitoring channel; HubSpot step retried and completed successfully once the service recovers; no duplicate sequence created
E06
Zoom host ends webinar early without formally ending the session
Zoom attendance report requested 60 minutes after the scheduled event end time; Zoom API returns an incomplete participant list because the session was not formally closed by the host
Post-Event Sync Agent detects an incomplete attendance report (participant count below expected threshold), logs a data quality warning, and flags the event row in Google Sheets for manual attendance verification before follow-up emails are sent
Google Sheets event row contains a manual review flag; follow-up emails are held pending manual confirmation; execution log records the incomplete data detection
E07
Coordinator does not respond to LinkedIn post approval request within 24 hours
Approval request sent to coordinator; no approve or revise action taken within 24 hours
Automation sends a single reminder notification after 12 hours of inactivity. If no response is received within 24 hours of the original request, the workflow pauses the LinkedIn scheduling step and escalates to the Marketing Manager via Slack
Reminder notification delivered at the 12-hour mark; escalation Slack message sent at the 24-hour mark with the coordinator's name, event title, and approval link; LinkedIn posts remain unscheduled until explicit approval is received
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 for all contacts involved in this run. Do not enrol real prospect or customer contacts in any HubSpot sequence during the test. After the run is complete, void the test event record in Google Sheets, cancel the Zoom webinar, unenrol all test contacts from HubSpot sequences, delete scheduled LinkedIn posts if not yet published, and remove any metrics written to the reporting sheet. Confirm all cleanup steps are logged before the process owner records their approval.

Phase 3 uses production credentials and a real upcoming internal test event. The FullSpec team operates the workflow while the process owner observes and verifies outputs at each stage. This phase confirms that all production API connections, permission scopes, and data flows behave identically to the sandbox results. The process owner's approval in T27 closes the QA cycle and authorises the automation for live operation.

ID
Scenario
Input
Expected Output
Pass Criteria
T23
Full production run: Google Sheets trigger to Zoom and HubSpot sequence activation
A real test event row added to the production Google Sheets event calendar with status = Confirmed, all required fields populated, and an internal test contact list ID
Zoom webinar created in the production account with the correct title, date, time, and host email. HubSpot email sequence activated for the internal test list with send dates calculated correctly from the event date
Zoom production account shows the webinar; registration link is a valid live URL. HubSpot production portal shows the sequence enrolled with correct send timestamps. Execution log shows no errors
T24
Production LinkedIn post drafts generated and routed for coordinator approval
Registration link and event brief from T23
Three LinkedIn post drafts generated and delivered to the coordinator for approval. Drafts contain the correct event title, speaker name, registration link, and are within character limits
Coordinator receives the approval request within 2 minutes. All three drafts are present. Character counts verified. Registration link in each draft matches the T23 Zoom URL
T25
LinkedIn posts scheduled and Slack notification delivered in production
Coordinator approves the drafts from T24
Three posts scheduled to the production LinkedIn Page at the correct intervals. Slack notification posted to the designated internal channel with the event name, date, and registration link
LinkedIn production Page shows three scheduled posts with correct timestamps. Slack message visible in the internal channel. All content matches the approved drafts and the event brief
T26
Post-event sync, follow-up emails, and metrics write-back in production
Test event completed; Zoom attendance data available; internal test contacts split between attended and no-show status
HubSpot production contact records updated with attendance tags. Attendee test contacts enrolled in the replay sequence; no-show test contacts enrolled in the re-invite sequence. Google Sheets reporting row updated with registration count, attendance rate, and email open rate
HubSpot production records show correct tags and sequence enrollments. No contact enrolled in both sequences. Google Sheets reporting row values match the Zoom and HubSpot production data. Execution log shows no errors across all Post-Event Sync Agent steps
T26b
Error log verification across the full production run
Complete execution log from T23 through T26
No unhandled exceptions, no orphaned workflow steps, and no missing data references in the production execution log. Any warnings present are documented and acknowledged
FullSpec team reviews the full execution log and confirms zero unhandled errors. All warnings are recorded with their resolution status. Log is saved to the project record before process owner review
T27
Process owner review and approval
Process owner reviews the outputs from T23 through T26b: the Zoom webinar, HubSpot sequences, LinkedIn scheduled posts, Slack notification, contact records, reporting sheet row, and the execution log summary provided by the FullSpec team
Process owner confirms that all outputs match expectations, that no production data was left in an unclean state after the test, and that the automation is approved for live operation
Process owner records explicit approval in the FullSpec project confirmation. Approval is timestamped and associated with this QA run. All test records have been voided or deleted as required by the pre-Phase 3 cleanup protocol. No separate signoff block is required; this case entry is the formal record of owner sign-off
Once T27 is recorded, the FullSpec team will update the project status to QA Complete and prepare the handover package, including the SOP Runbook and monitoring checklist, for the marketing coordinator. Questions about any test case or output can be directed to support@gofullspec.com.
Test and QA PlanPage 4 of 4

More documents for this process

Every document generated for Event & Webinar Promotion.

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