Test Cases: Broadcast Management

⚠️ Corrected — read the Communications index first. Broadcasts live at /admin/broadcasts (composer is an inline form on the same page). Status flow is DRAFT → SENDING → SENT (or FAILED); edit only while DRAFT/SCHEDULED, delete only while DRAFT. Send is fire-and-forget, in-process via POST /api/broadcasts/:id/send — there is no test-send, no working scheduler (a scheduledAt never auto-fires), and no merge tags (raw-HTML body). Open/click analytics are not implemented. Follow the index over the steps below.

Module: Communications - Broadcasts

Backend Endpoints:

Frontend Page: frontend/pwa-app/src/pages/AdminBroadcastsPage.tsx

Prerequisites

Test Data

BroadcastSubjectSegmentStatus
BC-2024-001January NewsletterAll Active MembersSENT
BC-2024-002Event Reminder: Annual SummitSummit RegistrantsDRAFT
BC-2024-003Payment ReminderMembers with Overdue InvoicesSCHEDULED

Test Cases

TC-COMM-001: View All Broadcasts

StepActionExpected Result
1Login as ADMIN.Dashboard displayed.
2Navigate to Admin > Communications > Broadcasts.Broadcast list displayed.
3Verify all broadcasts listed.Draft, sent, and scheduled broadcasts visible.
4Verify columns.Subject, Segment, Status, Recipients, Sent Date.
5Verify status indicators.Draft (gray), Sent (green), Scheduled (blue).

TC-COMM-002: Create New Broadcast

StepActionExpected Result
1Click "Create Broadcast" button.Broadcast editor displayed.
2Enter subject: "February Newsletter".Subject entered.
3Select segment: "All Active Members".Segment selected.
4Compose body content with rich text.Content entered.
5Add personalization: "Dear {{firstName}}".Merge tag inserted.
6Click "Save Draft".API POST /api/broadcasts called.
7Verify success."Broadcast saved" message.
8Verify in list.New broadcast appears with DRAFT status.

TC-COMM-003: Edit Draft Broadcast

StepActionExpected Result
1Click on draft broadcast BC-2024-002.Editor opens with existing content.
2Update subject: "Reminder: Annual Engineers Summit".Subject modified.
3Update body content.Content modified.
4Save changes.API PUT /api/broadcasts/:id called.
5Verify changes saved.Updated content displayed.

TC-COMM-004: Cannot Edit Sent Broadcast

StepActionExpected Result
1Click on sent broadcast BC-2024-001.Broadcast view displayed.
2Look for edit option.Edit button disabled or not visible.
3Verify read-only mode.Content not editable.

TC-COMM-005: Preview Broadcast

StepActionExpected Result
1Open draft broadcast.Editor displayed.
2Click "Preview" button.Preview modal/panel opens.
3Verify content rendered.HTML formatted as email will appear.
4Verify merge tags replaced."Dear {{firstName}}" shows as "Dear [Sample Name]".
5Test desktop view.Desktop email preview.
6Test mobile view.Mobile-responsive preview.

TC-COMM-006: Send Test Email

StepActionExpected Result
1Open draft broadcast.Editor displayed.
2Click "Send Test".Dialog opens.
3Enter test email: admin's email.Email entered.
4Click send.Test email sent.
5Check inbox.Test email received with "[TEST]" prefix.
6Verify content.Content matches preview.

TC-COMM-007: Delete Draft Broadcast

StepActionExpected Result
1Select draft broadcast.-
2Click "Delete" button.Confirmation dialog displayed.
3Confirm deletion.API DELETE /api/broadcasts/:id called.
4Verify success."Broadcast deleted" message.
5Verify removed from list.Broadcast no longer visible.

TC-COMM-008: Cannot Delete Sent Broadcast

StepActionExpected Result
1Attempt to delete sent broadcast.Delete button disabled or warning.
2Via direct API.Status 400 Bad Request - "Cannot delete sent broadcast".

TC-COMM-009: Broadcast with Rich Text Formatting

StepActionExpected Result
1Create new broadcast.Editor displayed.
2Add bold text, italic, lists.Formatting applied.
3Add hyperlink.Link inserted.
4Add image (if supported).Image embedded.
5Preview.All formatting rendered correctly.
6Send test email.Formatting preserved in email.

TC-COMM-010: Broadcast with Merge Tags

StepActionExpected Result
1Create broadcast.-
2Insert merge tags: {{firstName}}, {{lastName}}, {{membershipType}}.Tags inserted.
3Preview.Tags show sample data.
4Send to actual segment.Recipients receive personalized content.

TC-COMM-011: Schedule Broadcast

StepActionExpected Result
1Create broadcast content.-
2Click "Schedule" instead of "Send Now".Scheduling options displayed.
3Set date/time: Tomorrow 9:00 AM.Schedule configured.
4Save scheduled broadcast.Status changes to SCHEDULED.
5Verify in list.Shows scheduled date/time.

TC-COMM-012: Cancel Scheduled Broadcast

StepActionExpected Result
1Open scheduled broadcast.Broadcast details displayed.
2Click "Cancel Schedule".Confirmation dialog.
3Confirm.Status changes back to DRAFT.
4Verify not sent at scheduled time.Broadcast remains unsent.

TC-COMM-013: View Broadcast Statistics (Sent)

StepActionExpected Result
1Open sent broadcast BC-2024-001.Broadcast details displayed.
2View statistics section.Analytics displayed.
3Verify metrics.Recipients, Delivered, Opened, Clicked (if tracked).
4Verify open rate.Percentage calculated correctly.

TC-COMM-014: Duplicate Broadcast

StepActionExpected Result
1Open existing broadcast.-
2Click "Duplicate" or "Copy".New draft created.
3Verify content copied.Same subject, body, segment.
4Verify status is DRAFT.New broadcast is editable.

TC-COMM-015: Broadcast Validation - Empty Fields

StepActionExpected Result
1Create broadcast.-
2Leave subject empty.-
3Attempt to save.Validation error: "Subject is required".
4Leave segment unselected.Validation error: "Segment is required".
5Leave body empty.Validation error: "Content is required".

API Test Cases

TC-COMM-API-001: GET /api/broadcasts

Expected Response: 200 OK

{

"broadcasts": [

{

"id": "BC-2024-001",

"subject": "January Newsletter",

"segment": { "id": "...", "name": "All Active Members" },

"status": "SENT",

"recipientCount": 150,

"sentAt": "timestamp",

"openRate": 65

}

]

}

TC-COMM-API-002: POST /api/broadcasts

Request:

{

"subject": "February Newsletter",

"segmentId": "seg_all_active",

"body": "<p>Dear {{firstName}},</p><p>Welcome to our February update...</p>",

"status": "DRAFT"

}

Expected Response: 201 Created

TC-COMM-API-003: GET /api/broadcasts/:id/preview

Expected Response: 200 OK

{

"subject": "February Newsletter",

"html": "<p>Dear John,</p><p>Welcome to our February update...</p>",

"recipientCount": 150,

"sampleRecipient": {

"firstName": "John",

"lastName": "Doe",

"email": "john@example.com"

}

}

TC-COMM-API-004: POST /api/broadcasts/:id/send

Request: POST /api/broadcasts/BC-2024-002/send

Expected Response: 200 OK

{

"success": true,

"recipientCount": 85,

"status": "SENT",

"sentAt": "timestamp"

}