ID
Scenario
Input
Expected Output
Pass Criteria
T01
Happy path: crew available, single match
Jobber webhook payload with confirmed job; one crew member free in Google Calendar during the required window
Google Calendar event created with correct crew, job address, and time; Jobber record updated with assigned crew
Event ID returned; Jobber job record contains assigned crew name; no errors in execution log
T02
Happy path: multiple crew available, best match selected
Jobber webhook payload; two crew members free during the window, one geographically closer
Closest available crew member assigned; calendar event created; Jobber updated
Proximity rule applied correctly; assigned crew matches expected result; no duplicate events created
T03
Happy path: job with full context notes
Jobber payload with site address, scope notes, and customer contact populated
Calendar event description contains all job context fields: address, scope notes, customer contact
All context fields present in calendar event body; no truncation
T04
No crew available: all busy during window
Jobber payload; all crew members have conflicting Google Calendar events during the required window
Automation routes to human escalation; scheduler is notified of the unresolved conflict; no calendar event created
Escalation flag set; no calendar event written; execution log records the no-availability path
T05
Jobber webhook missing required field: job date
Webhook payload with job_date field absent or null
Automation halts; error logged with field name; no Calendar or Jobber write attempted
Error log contains 'job_date missing'; downstream steps not triggered; execution stops cleanly
T06
Jobber webhook missing required field: site address
Webhook payload with site_address field absent or null
Automation halts; error logged; no calendar event created
Error log contains 'site_address missing'; no partial records written
T07
Google Calendar API returns 500 error
Valid Jobber payload; Google Calendar API returns HTTP 500 on availability query
Automation retries up to 3 times with exponential backoff; if all retries fail, escalation path fires
Retry count visible in execution log; escalation triggered after third failure; no calendar event created
T08
Jobber API update returns 401 unauthorised
Crew assigned successfully; Jobber record update call returns 401
Error logged; calendar event retained; alert sent to FullSpec monitoring; no silent failure
Execution log contains 401 response; partial-success state recorded; alert visible in monitoring dashboard
ID
Scenario
Input
Expected Output
Pass Criteria
T09
Happy path: all three notifications dispatched
Confirmed assignment payload from Availability and Assignment Agent with crew name, job address, start time, customer email, and HubSpot deal ID
Slack message sent to assigned crew; Gmail confirmation sent to customer; HubSpot deal updated with scheduled date
Slack delivery receipt returned; Gmail message ID returned; HubSpot deal last_modified timestamp updated; no errors
T10
Slack message contains all required job fields
Assignment payload with job address, start time, customer name, and special instructions
Slack message body includes: job address, start time, customer name, and special instructions section
All four fields present in outbound Slack message body; no placeholder text remaining
T11
Gmail confirmation contains correct booking details
Assignment payload with booked date, arrival window, crew lead name, and contact number
Customer receives email with booked date, arrival window, crew lead name, and contact number
Gmail message body parsed and all four fields verified; email sent to correct recipient address
T12
HubSpot deal ID not found
Assignment payload with a deal_id that does not exist in the sandbox HubSpot account
HubSpot update skipped; error logged with deal_id value; Slack and Gmail steps still complete
Slack and Gmail confirmed sent; HubSpot error logged; overall execution continues without halting
T13
Slack API returns 429 rate limit error
Valid assignment payload; Slack API returns 429 on message send
Automation respects Retry-After header; retries after the specified delay; message sent on retry
Slack delivery confirmed on retry; Retry-After delay honoured; execution log shows retry event
T14
Gmail SMTP send failure
Valid assignment payload; Gmail API returns 503 service unavailable on send attempt
Automation retries up to 3 times; if all fail, error logged and escalation alert raised; HubSpot and Slack steps still complete
Retry attempts logged; escalation alert raised after third failure; HubSpot and Slack not blocked by Gmail failure