Back to Brand Asset Management

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

Brand Asset Management Automation

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

This document defines the full quality assurance process for the Brand Asset Management automation, covering all three agents: Asset Intake and Classification, Approval Workflow, and Library Update and Archive. The FullSpec team runs Phases 1 and 2 entirely in sandbox environments before any production credential is touched. Phase 3 brings the process owner in to validate the end-to-end production run and record formal sign-off. No phase begins until the previous phase fully passes. Every test case is traceable to a specific agent, handoff, or edge condition, and every result is logged in the FullSpec confirmation record.

01Testing approach

Testing runs across three sequential phases: Unit, Integration, and End-to-end. No phase begins until every test case in the preceding phase carries a pass status. Phase 1 validates individual agent logic in isolation. Phase 2 validates agent handoffs and known edge conditions. Phase 3 validates the full production flow with real credentials and real assets, with the process owner present.

1
Phase 1: Unit Testing
Individual agent logic validated in isolation
Scope
Each agent tested independently: Asset Intake and Classification Agent, Approval Workflow Agent, Library Update and Archive Agent.
Environment
Sandbox only. No production credentials active. Test Google Drive staging folder, sandboxed Asana workspace, Slack test channel, and Brandfolder sandbox collection used exclusively.
Credential rule
Sandbox API keys only. Production tokens must not be present in any environment config during Phase 1.
Pass condition
All test cases T01 through T15 return expected outputs with no unhandled errors. Failure of any single case blocks progression to Phase 2.
Who runs it
FullSpec team. Process owner not required.
2
Phase 2: Integration and Edge Case Testing
Agent handoffs and failure scenarios validated
Scope
End-to-end agent handoffs across all three agents, plus isolated edge conditions: duplicate assets, missing metadata, unavailable tools, and human approval timeout.
Environment
Sandbox only. Integration endpoints use sandbox OAuth tokens for Google Drive, Asana, Slack, and Brandfolder. No production data is read or written.
Credential rule
Sandbox API keys only. OAuth tokens scoped to sandbox workspaces. Production credentials remain locked.
Pass condition
All integration test cases T16 through T22 and all edge cases E01 through E06 pass. Any failure halts progression to Phase 3 until resolved and re-tested.
Who runs it
FullSpec team. Process owner may observe but is not required.
3
Phase 3: End-to-End Production Test
Full live flow verified with production credentials
Scope
Complete production flow from Google Drive staging folder upload through Brandfolder library update and Slack notification, using real API credentials and a designated test asset.
Environment
Production. Live Google Drive, Asana, Slack workspace, and Brandfolder collection. Test asset and test Asana task must be voided after the run.
Credential rule
Production OAuth tokens active. All tokens stored in the automation platform's encrypted secrets manager. No credentials written in plain text in any workflow config.
Pass condition
All end-to-end cases T23 through T27 pass, including the process owner review case T27. Owner sign-off recorded in the FullSpec confirmation record.
Who runs it
FullSpec team executes. Process owner (Marketing Manager and Brand Lead) joins to observe the approval step and record sign-off at T27.
Test and QA PlanPage 1 of 4
FS-DOC-06Quality

02Phase 1 — unit test cases

Sandbox credentials only. Before running any Phase 1 test, confirm that all environment configs reference sandbox API keys and that no production token is present in the workflow secrets store. Using production credentials during unit testing risks writing corrupt records to the live Brandfolder library or sending Slack messages to real team channels.

Asset Intake and Classification Agent — Complexity: Moderate. Estimated build time: 14 hours.

ID
Scenario
Input
Expected output
Pass criteria
T01
Happy path: standard asset upload
PNG file named 'YourCompany_Logo_Primary_v3.png' uploaded to sandbox staging folder by a known uploader.
Tag object returned: asset_type=logo, campaign=null, version=3, duplicate_flag=false. File metadata captured.
Tag object matches expected schema. No error logged. Downstream trigger fires within 30 seconds.
T02
Social template upload with campaign association
JPEG named 'SummerSale_SocialTemplate_Instagram_v1.jpg' uploaded to staging folder.
Tag object: asset_type=social_template, campaign=SummerSale, version=1, duplicate_flag=false.
All four tag fields populated correctly. Version defaults to 1 when no prior version found.
T03
Duplicate detection: exact name match
File named 'YourCompany_Logo_Primary_v3.png' uploaded when identical file already exists in sandbox library.
Tag object returned with duplicate_flag=true. Duplicate asset ID referenced in output.
Duplicate flag is true. Existing asset ID present in the tag object. No second Asana task created.
T04
Version increment: prior version present
File named 'YourCompany_Logo_Primary_v4.png' uploaded when v3 exists in sandbox library.
Tag object: version=4, duplicate_flag=false, superseded_asset_id references v3 record.
Version correctly reads 4. Superseded asset ID populated. Downstream archive step receives correct ID.
T05
Non-standard filename: no version number
File named 'logo_final_FINAL.png' uploaded with no version indicator in filename.
Tag object: version=1 (default), duplicate_flag=false, classification_confidence=low flag set.
Agent does not throw an unhandled error. Confidence flag is present. Downstream task includes low-confidence warning in description.
T06
Unsupported file type uploaded to staging folder
A .psd file uploaded to staging folder.
Agent logs an unsupported_format error, skips downstream steps, and posts an error notification to the configured Slack error channel.
No Asana task created. Error log entry written with filename and error code. Slack error channel receives message within 60 seconds.
T07
Google Drive API unavailable at trigger time
Simulate Drive API timeout by revoking sandbox token mid-trigger.
Agent catches the exception, logs a drive_read_error, and retries up to three times with exponential backoff.
Three retry attempts logged. After third failure, error written to log with timestamp. No partial tag object output.

Approval Workflow Agent — Complexity: Moderate. Estimated build time: 12 hours.

ID
Scenario
Input
Expected output
Pass criteria
T08
Happy path: Asana task created and Slack prompt sent
Valid tag object from T01 passed as input. Brand lead email set to sandbox test address.
Asana task created with correct title, Drive link, asset type, and 48-hour due date. Slack DM sent to sandbox brand lead with approve/reject prompt.
Asana task ID returned. Task fields match expected values. Slack message delivered within 30 seconds of task creation.
T09
Approval recorded: happy path
Brand lead marks sandbox Asana task as approved.
Approval decision record written. Downstream Library Update Agent trigger fires. No reminder sent.
Approval event captured within 60 seconds of task status change. Correct asset ID passed to Library Update Agent.
T10
Rejection recorded and routed to designer
Brand lead marks sandbox task as rejected with feedback note 'Wrong brand colour'.
Rejection decision written. New Asana task created and assigned to designer with feedback note attached. No Brandfolder upload triggered.
Designer task created within 60 seconds. Feedback text present in task description. Library Update Agent does not fire.
T11
24-hour reminder fires on no response
Sandbox task created. No status change applied for the configured reminder window (set to 2 minutes in sandbox for test purposes).
Reminder Slack DM sent to brand lead after window expires. Reminder logged in workflow run history.
Reminder fires exactly once after the window. Message text references the correct asset name and Asana task link.
T12
Asana API returns 429 rate limit error during task creation
Simulate Asana API rate limit response on task creation call.
Agent retries after the Retry-After header interval. Task created on retry. Error logged.
Task created successfully on retry. Rate limit event logged with status code and retry timestamp.
T13
Slack API unavailable when sending approval prompt
Simulate Slack API timeout after Asana task creation succeeds.
Agent logs a slack_send_error. Asana task remains active. Retry attempted after 60 seconds.
Asana task not rolled back. Slack error logged with asset ID. Retry attempt recorded. Process owner alerted via fallback log entry.

Library Update and Archive Agent — Complexity: Moderate. Estimated build time: 12 hours.

ID
Scenario
Input
Expected output
Pass criteria
T14
Happy path: approved asset uploaded to Brandfolder
Approval decision record with asset_id, tag object, and Drive file URL. Brandfolder sandbox collection pre-configured.
Asset uploaded to correct Brandfolder collection. Permissions set to team-read. Description written from tag object. Google Sheets register row appended.
Brandfolder asset ID returned. Collection, permissions, and description fields match expected values. Sheets row present with correct version, date, and link.
T15
Superseded version archived in Google Drive
Approval decision includes superseded_asset_id pointing to v3 Drive file. Archive folder path configured in sandbox.
v3 file moved to sandbox archive folder. Brandfolder record for v3 marked as archived/superseded. Active search results no longer include v3.
Drive file found in archive folder within 60 seconds. Brandfolder v3 record status field reads 'archived'. Active collection search returns only the new version.
Test and QA PlanPage 2 of 4
FS-DOC-06Quality

03Phase 2 — integration and edge case tests

Integration tests verify that the three agents communicate correctly across handoff boundaries, and that data passed between agents remains schema-valid at each step. All tests run in sandbox. IDs continue the T sequence from Phase 1.

ID
Scenario
Handoff tested
Expected output
Pass criteria
T16
Full handoff: Intake Agent to Approval Workflow Agent
Intake Agent completes classification and passes tag object to Approval Workflow Agent.
Approval Workflow Agent receives the tag object with all required fields: asset_type, campaign, version, duplicate_flag. Asana task description populated from tag fields.
No field missing in received payload. Asana task description reflects tag object values exactly. Latency between agents under 10 seconds.
T17
Full handoff: Approval Workflow Agent to Library Update Agent (approval path)
Brand lead approves sandbox task. Approval event triggers Library Update Agent.
Library Update Agent receives asset_id, tag object, Drive URL, and approval timestamp. Upload and archive steps execute.
All four fields present in received payload. Both Brandfolder upload and Drive archive steps complete without error. Sheets row written.
T18
Rejection path handoff: Approval Workflow Agent to designer Asana task
Brand lead rejects sandbox task with feedback. Rejection event fires.
Designer Asana task created with feedback note. Library Update Agent does not receive a trigger. Workflow halts at rejection branch.
Library Update Agent run log shows no execution. Designer task contains feedback text. Workflow state correctly reflects 'pending revision'.
T19
Re-upload after rejection: full cycle repeat
Designer revises and re-uploads to staging folder after rejection. Intake Agent re-runs.
New tag object generated with same asset_type, incremented version. New Asana task created. New Slack prompt sent to brand lead.
Version number increments correctly from prior rejected version. No orphaned Asana tasks from the rejected cycle remain open.
T20
Slack alert posted after Library Update Agent completes
Library Update Agent completes Brandfolder upload and Sheets update. Slack notification step fires.
Standardised Slack message posted to sandbox brand-assets channel with asset name, type, version, and Brandfolder deep link.
Message appears in sandbox channel within 30 seconds of agent completion. All four message fields present and correct.
T21
Brandfolder API throttle during upload
Simulate Brandfolder API 429 response during asset upload in Library Update Agent.
Agent retries upload after Retry-After interval (default 5 seconds). Upload succeeds on retry. Event logged.
Upload completes on first or second retry. 429 event recorded in run log with timestamp and retry count.
T22
Google Sheets register update failure after successful Brandfolder upload
Simulate Sheets API write error after Brandfolder upload confirms success.
Agent logs a sheets_write_error. Brandfolder record retained. Error alert sent to Slack error channel. Manual register update flagged to process owner.
Brandfolder asset not rolled back. Error log entry written. Slack error channel receives alert with asset name and missing register row detail.

Edge case tests target conditions outside the happy path that are most likely to occur in production, based on the known pain points in the manual process.

ID
Scenario
Input
Expected output
Pass criteria
E01
Exact duplicate uploaded by different uploader
File byte-for-byte identical to an existing sandbox library asset, uploaded by a different user account.
Intake Agent sets duplicate_flag=true. Uploader notified via Slack with a link to the existing asset. No Asana task created.
Duplicate correctly identified regardless of uploader. Notification sent to uploader only. No downstream steps fire.
E02
File uploaded with completely missing metadata and non-descriptive name
File named 'untitled.png' with no EXIF or Drive metadata.
Intake Agent assigns classification_confidence=low, sets asset_type=unknown, version=1. Asana task created with low-confidence warning in description.
Agent does not error out. Low-confidence flag present. Asana task description explicitly states that manual classification review is required.
E03
Asana unavailable at task creation time (503 response)
Simulate Asana returning a 503 during task creation call.
Agent retries three times with exponential backoff (5s, 15s, 45s). If all retries fail, error logged and Slack error channel alerted. Workflow paused.
Three retry attempts logged with timestamps. After final failure, workflow state set to 'paused'. Slack error message references the asset ID and instructs manual task creation.
E04
Brand lead does not respond within 48 hours (extended timeout)
Sandbox task created. Reminder fires at 24 hours (simulated). No response at 48-hour mark.
Escalation Slack message sent to Marketing Manager (configured escalation contact) at 48 hours. Task remains open. A second escalation is not sent automatically.
Escalation message sent to correct contact. Task not auto-closed or auto-approved. Escalation event logged with timestamp.
E05
Brandfolder collection for the inferred asset type does not exist
Intake Agent classifies asset as asset_type=brand_guideline_pdf but no matching collection is configured in Brandfolder sandbox.
Library Update Agent logs a collection_not_found error. Asset not uploaded. Error alert sent to Slack error channel with asset name and missing collection name.
No partial upload to an incorrect collection. Error log entry written. Slack alert received. Asset remains in staging folder pending manual resolution.
E06
Superseded version file missing from Google Drive at archive time
Library Update Agent attempts to move superseded v3 file to archive folder, but file has been manually deleted or moved from Drive.
Agent logs a source_file_not_found warning. Archive step skipped. Brandfolder record for v3 still marked as superseded. Warning posted to Slack error channel.
Workflow does not fail entirely. New version upload and Sheets update complete. Warning logged with the missing file ID. Slack error channel receives warning within 60 seconds.
Test and QA PlanPage 3 of 4
FS-DOC-06Quality

04Phase 3 — end-to-end production test

Important before running Phase 3: Use the designated internal test address and a clearly labelled test asset (for example, 'QA_TEST_DO_NOT_USE_v1.png') for all production runs. The brand lead must use a real Asana approval action during this test, so coordinate timing in advance. Immediately after T27 is confirmed, void the test record: delete the test asset from Brandfolder, remove the test row from the Google Sheets register, and move the test file to the Drive archive folder manually. Failure to void the test record will leave a spurious entry in the live asset library.

Phase 3 uses production credentials and the live tool instances. The FullSpec team executes each step and logs outcomes in the FullSpec confirmation record. The process owner (Marketing Manager and Brand Lead) joins for T26 and T27. IDs continue the T sequence from Phase 2.

ID
Scenario
Action taken
Expected outcome
Pass criteria
T23
Production trigger: test asset uploaded to live staging folder
FullSpec uploads 'QA_TEST_DO_NOT_USE_v1.png' to the production Google Drive staging folder using a designated test uploader account.
Intake and Classification Agent fires within 30 seconds. Tag object generated: asset_type=logo, campaign=null, version=1, duplicate_flag=false.
Agent run visible in automation platform logs. Tag object schema-valid. All four fields populated. No error entries in run log.
T24
Production Asana task creation and Slack approval prompt
Tag object from T23 passes to Approval Workflow Agent. Asana task created in live workspace. Slack DM sent to Brand Lead's live account.
Asana task appears in Brand Lead's task list with correct title, Drive link, and 48-hour due date. Slack DM received by Brand Lead.
Brand Lead confirms receipt of Slack DM. Asana task fields verified by FullSpec against expected values. Task creation timestamp logged.
T25
Production approval decision recorded
Brand Lead marks the live Asana task as approved.
Approval event captured. Library Update and Archive Agent triggered. Approval timestamp written to run log.
Library Update Agent execution begins within 60 seconds of task status change. Approval timestamp present in run log. No reminder message sent.
T26
Production Brandfolder upload, archive, and Sheets update
Library Update and Archive Agent completes upload, sets permissions, writes description, archives prior version (none exists for test asset so archive step is skipped gracefully), and appends Sheets register row.
Test asset visible in correct Brandfolder collection with team-read permissions and description populated from tag object. Sheets register contains new row with asset name, version 1, approval date, and Brandfolder link. Slack brand-assets channel receives standardised notification.
Brandfolder asset record verified by FullSpec and Marketing Manager. Sheets row present and accurate. Slack notification received in brand-assets channel with correct asset name, type, version, and deep link.
T27
Error log verification and process owner review and approval
FullSpec presents the full Phase 3 run log to the Marketing Manager and Brand Lead. Process owner reviews all six steps (T23 through T26 plus this case), confirms expected behaviour at each stage, and records approval in the FullSpec confirmation record.
Run log contains no unhandled errors across all Phase 3 cases. Process owner confirms the automation behaved as specified. Sign-off recorded in the FullSpec confirmation record. Test asset voided from production systems.
Zero unhandled errors in production run log. Marketing Manager and Brand Lead both confirm approval in the FullSpec confirmation record. Test asset removed from Brandfolder, Sheets register row deleted, and test file moved to Drive archive folder. Phase 3 marked complete.
Once T27 is recorded as passed and the FullSpec confirmation record is countersigned by the process owner, the automation is cleared for full production go-live on all new asset uploads. Any outstanding issue from any phase must be resolved and the relevant test case re-run before go-live is approved. Contact the FullSpec team at support@gofullspec.com for any test environment queries or to reschedule the Phase 3 session.
Test and QA PlanPage 4 of 4

More documents for this process

Every document generated for Brand Asset Management.

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