Back to Compliance & Certification 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

Compliance & Certification Tracking

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

This document defines the structured quality assurance process for the Compliance and Certification Tracking automation. It covers every test case across three sequential phases: unit testing of individual agents, integration and edge-case testing of agent handoffs and failure modes, and a final end-to-end production run signed off by the process owner. The FullSpec team runs Phases 1 and 2 entirely in sandbox environments; the process owner joins Phase 3 to confirm the live system behaves correctly before go-live is confirmed.

01Testing approach

Testing proceeds through three phases in strict sequence. No phase begins until the previous phase has fully passed, meaning every test case in that phase carries a recorded pass result with no open failures or deferred items. Any failure discovered during a phase resets that phase; the FullSpec team resolves the defect, re-runs the full phase, and only then advances.

1
Phase 1: Unit Testing
Each agent tested in isolation against controlled inputs
Scope
Individual agent logic: Compliance Monitoring Agent, Escalation Agent, and Renewal Processing Agent tested independently with mocked data inputs.
Environment
Sandbox only. No production Google Sheets, Gmail accounts, Slack workspaces, Notion databases, or Xero organisations are touched.
Credential rule
All credentials must be sandbox or test-account credentials. No production API keys, OAuth tokens, or service accounts may be active during Phase 1.
Pass condition
All cases T01 through T15 record a pass result with output matching the expected values defined in the Phase 1 table. Zero open failures.
Who runs it
FullSpec team only.
2
Phase 2: Integration and Edge-Case Testing
Agent handoffs and failure-mode scenarios validated end to end in sandbox
Scope
Cross-agent data handoffs, tool-to-tool writes, and all defined edge cases including duplicates, missing fields, unavailable tools, and human timeout scenarios.
Environment
Sandbox only. A representative clone of the Google Sheets register schema is used with synthetic data matching the agreed fixed column layout.
Credential rule
Sandbox credentials continue. Where a tool does not support a dedicated sandbox (e.g. Slack), a private test workspace or test channel is used and isolated from any production workspace.
Pass condition
All cases T16 through T22 and edge cases E01 through E08 record a pass result. All error-handling paths produce the correct fallback behaviour with no data written to unintended targets.
Who runs it
FullSpec team only.
3
Phase 3: End-to-End Production Test
Full live-environment run with process owner present
Scope
A complete production run from daily trigger through document filing and weekly report dispatch, using a controlled test record inserted into the live register and voided afterwards.
Environment
Production systems: live Google Sheets register, live Gmail, live Slack workspace (compliance channel), live Notion database, and live Xero organisation. A clearly labelled TEST record is used throughout.
Credential rule
Production credentials active. All OAuth tokens and API keys must be those approved for the live environment. No sandbox tokens may be present.
Pass condition
All cases T23 through T27 record a pass result. The process owner confirms each output is correct and the FullSpec team records that confirmation in the FullSpec platform.
Who runs it
FullSpec team executes; process owner (Operations Manager) observes and validates all outputs. Process owner provides final approval on case T27.
Test and QA PlanPage 1 of 4
FS-DOC-06Quality

02Phase 1 — unit test cases

All Phase 1 tests run against sandbox credentials only. No production API keys, Gmail accounts, Slack workspaces, Notion databases, or Xero organisations may be connected during this phase. If a production credential is detected in the environment, halt testing, rotate the credential, and restart Phase 1 from T01.

Compliance Monitoring Agent — daily scan, tier classification, reminder dispatch via Gmail and Slack.

ID
Scenario
Input
Expected Output
Pass Criteria
T01
Happy path: item in 30-day window
Register row with expiry date 28 days from today, status = Active, owner email present
Tier-1 reminder email sent via Gmail sandbox; Slack alert posted to test channel naming the item and owner
Gmail sandbox send log confirms delivery; Slack test channel shows message within 60 seconds of trigger
T02
Happy path: item in 60-day window
Register row with expiry date 55 days from today, status = Active, owner email present
Tier-2 reminder email sent; Slack alert posted with 60-day urgency copy
Email subject line contains '60-day' tier label; Slack message urgency label matches
T03
Happy path: item in 90-day window
Register row with expiry date 85 days from today, status = Active, owner email present
Tier-3 reminder email sent; Slack alert posted with 90-day urgency copy
Email and Slack message both reference correct item name and expiry date from the register row
T04
Item already renewed: status = Renewed
Register row with expiry date 20 days from today, status = Renewed
No email sent; no Slack alert posted; row skipped in run log
Gmail send log shows zero outbound messages for this row; run log entry = 'Skipped: status Renewed'
T05
Item outside all threshold windows
Register row with expiry date 120 days from today, status = Active
No action taken; row not flagged in run output
Run output contains no reference to this row's item name
T06
Missing owner email in register
Register row with expiry date 25 days from today, owner email field = blank
Email skipped; error logged in run output with item name and row reference; Slack alert still sent to compliance channel flagging missing owner
Run log contains error entry 'Owner email missing: [item name], row [N]'; Slack alert present; no failed send attempt to empty address
T07
Malformed expiry date in register
Register row where expiry date column contains free text ('TBC') rather than a date value
Row skipped; error logged; no email or Slack message sent for this item
Run log entry = 'Parse error: invalid date format, row [N]'; no outbound messages triggered

Escalation Agent — five-business-day timeout detection, escalation email and direct Slack message to owner and manager.

ID
Scenario
Input
Expected Output
Pass Criteria
T08
Happy path: no status update after 5 business days
Register row flagged as reminded 5 business days ago, renewal_status = Pending, manager email present
Escalation email sent to owner and manager via Gmail sandbox; direct Slack message sent to both users; timestamp written to register row
Gmail sandbox log shows two outbound emails (owner + manager); Slack DM log confirms both messages; register row escalation_timestamp field populated with correct date-time
T09
Status updated before 5-day timeout: no escalation
Register row flagged as reminded 3 business days ago, renewal_status updated to In Progress
No escalation email sent; no Slack DM sent; escalation_timestamp field remains blank
Gmail sandbox log shows zero new outbound escalation emails; Slack DM log clear; register row unchanged
T10
Manager email missing from register
Register row at 5-day timeout, owner email present, manager email field = blank
Owner escalation email sent; manager email skipped with error logged; Slack DM sent to owner only; error written to run log
Gmail log shows one outbound escalation email (owner only); run log entry = 'Manager email missing: [item name]'; Slack DM to owner confirmed
T11
Escalation fires twice for same item: duplicate guard
Register row already carrying a populated escalation_timestamp, still at Pending status
No second escalation sent; agent detects existing timestamp and skips
Gmail sandbox log shows no new outbound message for this row; run log entry = 'Escalation already sent: [item name], skipping'

Renewal Processing Agent — register update, Notion document filing, Xero invoice routing.

ID
Scenario
Input
Expected Output
Pass Criteria
T12
Happy path: owner marks renewal complete with document upload
Trigger event: renewal_status set to Complete, document file attached (PDF, under 10 MB), new expiry date provided
Register row updated with new expiry date and certificate reference; document filed in Notion sandbox with standardised name; Xero sandbox invoice entry created if invoice flag = true
Google Sheets sandbox row shows updated expiry date and doc_link matching Notion page URL; Notion sandbox page created under correct parent with agreed naming convention; Xero sandbox shows draft bill entry
T13
Renewal complete, no invoice attached
Trigger event: renewal_status = Complete, document attached, invoice_flag = false
Register updated; document filed in Notion; no Xero entry created
Xero sandbox log shows zero new entries; all other outputs match T12 pass criteria
T14
Document upload fails: file type unsupported
Trigger event: renewal_status = Complete, file attached as .HEIC image
Document not filed; error logged; register not updated to Complete; Slack alert sent to compliance channel requesting resubmission in supported format
Notion sandbox shows no new page for this item; register status remains as previous value; Slack alert present; run log entry = 'Unsupported file type: .HEIC, [item name]'
T15
Notion API unavailable during filing attempt
Trigger event: renewal complete with valid document; Notion API returns 503 on first two attempts
Agent retries up to three times with exponential backoff; on third failure, error logged and Slack alert sent to FullSpec monitoring channel; register not marked complete
Run log shows three Notion API attempts with timestamps; Slack monitoring channel alert present; register status not updated to Complete
Test and QA PlanPage 2 of 4
FS-DOC-06Quality

03Phase 2 — integration and edge case tests

Integration tests validate that data flows correctly across agent boundaries and that each tool write produces the expected downstream state. IDs continue from T16.

ID
Scenario
Agents / Tools Involved
Expected Output
Pass Criteria
T16
Full monitoring-to-escalation handoff: item not acknowledged
Compliance Monitoring Agent → Google Sheets → Escalation Agent
Monitoring agent writes reminder_sent_timestamp to register row; escalation agent reads that timestamp, calculates 5-business-day offset, and triggers escalation correctly at expiry
Timestamp written by monitoring agent is readable by escalation agent without format conversion errors; escalation fires within 1 minute of the 5-day threshold being crossed in sandbox time simulation
T17
Full monitoring-to-renewal handoff: item acknowledged and completed
Compliance Monitoring Agent → Google Sheets → Renewal Processing Agent
Monitoring agent sends reminder; owner updates status to Complete; renewal agent triggers on status change and completes register update, Notion filing, and Xero routing
Each agent reads its triggering condition from the shared register row without manual intervention; all three tool writes (Sheets, Notion, Xero) confirmed in sandbox logs within one run cycle
T18
Gmail to Slack coordination: reminder email and channel alert sent in same run
Compliance Monitoring Agent → Gmail → Slack
Both Gmail send and Slack post complete in the same scheduled run; neither blocks the other; Slack message references the same item name and expiry date as the email
Gmail sandbox log and Slack test channel both show entries with matching item name and expiry date; timestamp difference between email send and Slack post is under 30 seconds
T19
Notion filing to Google Sheets link-back: register row updated with Notion page URL
Renewal Processing Agent → Notion → Google Sheets
Renewal agent creates Notion page, captures the returned page URL, and writes it to the doc_link column in the register row
Google Sheets sandbox row doc_link cell contains a valid Notion page URL that resolves to the correct page in Notion sandbox
T20
Xero invoice routing: draft bill appears in correct Xero account
Renewal Processing Agent → Xero
Agent creates a draft Accounts Payable bill in Xero sandbox with the correct supplier name, amount (from invoice attachment metadata), and due date
Xero sandbox AP bill matches supplier name and amount extracted from the test invoice; bill status = Draft; no duplicate bill created on re-run
T21
Weekly compliance report generation and distribution
Renewal Processing Agent (reporting function) → Google Sheets → Gmail
Report compiled from current register state and sent via Gmail to the operations manager sandbox address on the scheduled weekly trigger
Gmail sandbox inbox for test ops manager address receives report email; report lists all sandbox register items with correct status values; generation-to-send time under 2 minutes
T22
Concurrent items: multiple items across different urgency tiers processed in one run
Compliance Monitoring Agent → Gmail → Slack (multiple rows)
Agent processes all flagged rows in a single run; each owner receives the correct tier email; Slack channel receives one consolidated alert listing all items rather than separate messages
Gmail sandbox log shows one outbound email per unique owner-tier combination; Slack test channel shows a single consolidated message listing all items; no rows skipped due to processing order

Edge-case tests cover scenarios involving bad data, missing inputs, unavailable tools, and human timeout conditions. These use the E-series ID sequence.

ID
Scenario
Condition
Expected Behaviour
Pass Criteria
E01
Duplicate register rows: same item name, same expiry date, two rows
Two rows in the sandbox register share identical item_name and expiry_date values
Agent detects duplicate via composite key check (item_name + owner + expiry_date); processes only the first matching row; logs a warning for the duplicate; does not send two sets of emails
Gmail sandbox log shows one outbound email for the item; run log contains 'Duplicate detected: [item name], row [N] skipped'
E02
Missing expiry date column entirely for a row
Register row exists with item_name and owner populated but expiry_date cell is empty
Row skipped by monitoring agent; error written to run log; no email or Slack message triggered for this item
Run log entry = 'Missing expiry date: [item name], row [N]'; no outbound messages for this item
E03
Owner name present but email address not resolvable
Owner column contains a display name with no corresponding email record in the register or lookup table
Email step skipped for this item; Slack alert still sent to compliance channel flagging the unresolvable owner by name; error logged
Gmail sandbox log shows no send attempt for this item; Slack test channel shows alert with owner name flagged as 'email not found'; run log error entry present
E04
Gmail API rate limit hit during bulk reminder batch
Sandbox Gmail API configured to return 429 after 20 sends; register contains 25 items due in the current window
Agent pauses on 429 response, waits the retry-after interval (60 seconds), resumes sending; all 25 emails eventually sent within the same run or flagged for retry in next scheduled run
Gmail sandbox log confirms 25 total sends across the run; no items permanently skipped due to rate limit; run log documents the pause and retry
E05
Slack workspace unavailable: webhook returns 500
Slack webhook endpoint returns HTTP 500 during a monitoring agent run
Agent logs Slack failure; Gmail reminder still sent successfully; error written to run log; no retry storm (max two retries with backoff)
Gmail sandbox log confirms email sent; Slack test channel shows no message; run log shows two Slack retry attempts then 'Slack alert failed: [item name]'
E06
Notion API token expired during document filing
Notion API returns 401 Unauthorized during renewal processing
Agent halts Notion filing step; does not mark register row as Complete; logs credential error to run log; sends alert to FullSpec monitoring Slack channel
Notion sandbox shows no new page; register row status unchanged; FullSpec monitoring channel alert present with error code 401 and item reference
E07
Human timeout: owner never responds to escalation within further 5 business days
Escalation email sent and logged; 5 additional business days pass with no status update
No second automated escalation fires (duplicate guard prevents re-escalation); item remains on the pending escalation report; weekly compliance report flags item as 'Escalation sent, no response'
Gmail sandbox log shows no third outbound message for this item; weekly report email contains this item with status label 'Escalation sent, no response'; run log confirms duplicate guard triggered
E08
Xero invoice amount not parseable from attachment
Invoice PDF attached at renewal completion has no machine-readable amount field (scanned image, no text layer)
Renewal Processing Agent creates a Xero draft bill with amount = $0.00 and a flag note 'Amount requires manual entry'; does not block register update or Notion filing
Xero sandbox bill amount = $0.00 with flag note present; Google Sheets register and Notion filing both complete normally; run log entry = 'Xero amount parse failed: manual entry required, [item name]'
Test and QA PlanPage 3 of 4
FS-DOC-06Quality

04Phase 3 — end-to-end production test

Important before running Phase 3: insert a clearly labelled TEST record into the live compliance register with a synthetic item name (e.g. 'TEST-CERT-QA-001') and a controlled expiry date. Use an internal test email address for the owner field so that no real staff member receives reminder or escalation emails during the test run. After all Phase 3 cases pass, void the TEST record by setting its status to 'Voided - QA Test' and removing it from active monitoring filters. Do not delete the row; retain it for audit trail purposes.

Phase 3 tests execute against live production systems with all production credentials active. The FullSpec team walks the process owner through each case. The process owner observes outputs in real time and confirms pass or fail. The final approval is recorded in the FullSpec platform as the official go-live confirmation.

ID
Scenario
Production Action
Expected Output
Pass Criteria
Validated By
T23
Full reminder cycle: live daily scan triggers on TEST record
TEST record inserted with expiry date 28 days from today; daily trigger fires at 07:00
Tier-1 reminder email arrives in the internal test inbox via live Gmail; Slack alert appears in live compliance channel naming TEST-CERT-QA-001
Internal test inbox receives email within 5 minutes of 07:00 trigger; Slack compliance channel shows alert; Google Sheets register reminder_sent_timestamp populated
FullSpec team
T24
Escalation path: 5-business-day timeout simulated on TEST record
Reminder_sent_timestamp in TEST record set to 5 business days ago; renewal_status = Pending; escalation agent triggered manually
Escalation email sent to internal test inbox and manager test address; Slack DM sent to both test users; escalation_timestamp written to register row
Both test inboxes receive escalation email; Slack DM log confirms two messages; register escalation_timestamp populated with current date-time
FullSpec team
T25
Renewal processing: TEST record marked complete with document
renewal_status set to Complete on TEST record; a sample PDF certificate attached; invoice_flag = true with a sample $150 invoice
Live Google Sheets register row updated with new expiry date and certificate reference; document filed in live Notion database under correct parent with standardised name; Xero draft bill created for $150
Ops manager confirms Sheets row updated correctly; Notion database shows new page with correct name and parent; Xero shows draft AP bill for $150 against the correct supplier
FullSpec team + Process Owner
T26
Error log verification: confirm all run logs are accessible and complete
FullSpec team opens the automation platform run history for all three agents across the Phase 3 test run
Each agent shows a complete run log with input values, output values, timestamps, and any error entries; logs are exportable
Process owner confirms they can access the run log view; all three agent logs show the Phase 3 TEST record entries with correct data; no unresolved errors present
FullSpec team + Process Owner
T27
Process owner review and final go-live approval
Process owner reviews all Phase 3 outputs: email content, Slack alerts, Sheets register state, Notion filing, Xero bill, and run logs
Process owner confirms all outputs are correct, legible, and match the agreed process design; provides explicit approval for go-live
Process owner states approval verbally and in the FullSpec platform confirmation prompt. Approval is recorded by the FullSpec team in the project record. This recorded confirmation serves as the official go-live sign-off. No separate signature block is required.
Process Owner
Once T27 approval is recorded in the FullSpec platform, the FullSpec team will void the TEST record in the live register (status = 'Voided - QA Test'), confirm the automation is running on its live schedule, and send a go-live summary to the process owner at their registered email. For any post-launch issues, contact the FullSpec team at support@gofullspec.com.
Test and QA PlanPage 4 of 4

More documents for this process

Every document generated for Compliance & Certification 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