Trường Số QA/07 Parent communication
Trường Số · QA test suite · Phase 1 · 10/09/2026

07 · Parent communication

Test cases for PRD 07. Every case names the fixture data it needs (see the dashboard fixtures table), numbered steps, and one observable expected result. Trace points to the user story or rule in the PRD.

Key facts, origin and limits
Cases
35
P0 / P1
5 / 19
Regression pack
11
PRD
07 Parent communication
Phase
P1

Drafted by an AI assistant in a single session on 10/09/2026 as part of the Trường Số QA suite, under the request quoted verbatim on the dashboard. A proposal for team review, not a sign-off.

Sources

  • The Trường Số PRD set (Draft v1, 10/09/2026): user stories, screen tables, business rules and permission matrices, plus the Cloud theme reference.

Limits

  • Phase 1 (authoring) only. Cases are executed in Phase 2 against the local build; results are recorded in testcases.json and runs/run-1/, and every result field is still not_run.
  • Cases inherit any open question or inconsistency in the PRDs they trace to.

1Summary

P0
5
P1
19
P2
11
P3
0
Typefunctionalui-uxedgenegativeregressionflowa11yperfsecurityi18n
Count19123010072

2Test cases

IDTitleTypePriorityPhasePreconditionsStepsExpected resultPRD traceData neededRun 1
TS-COM-001Zalo OA connection card and template registryfunctionalP0P1As U-OWNER on /settings/integrations (ZALO stub).
  1. Open the Zalo card; enter app id, secret, OA id, tokens; run Kiểm tra kết nối.
  2. Open the template registry.
Card shows Đã kết nối with OA name and avatar; registry lists attendance_absent, attendance_late, invoice_created, receipt, fee_reminder, schedule_change, credentials, welcome with Zalo template id, status chips (Đã duyệt / Chờ duyệt / Từ chối) and parameter list; schedule_change shows Chờ duyệt.COM-01Fixtures belowNot run
TS-COM-002Secrets masked after savesecurityP0P1Zalo connected.
  1. Reload the integrations page; call GET /integrations/zalo.
Secret and tokens displayed as "••••" + last 4 chars; API response contains no full secret.12 §3 secretsFixtures belowNot run
TS-COM-003Non-owner cannot see or edit Zalo integrationsecurityP1P1As U-BM-A and U-ACC.
  1. Open /settings/integrations.
Zalo card hidden for both; U-ACC sees SePay and e-invoice only; API 403 for POST /integrations/zalo.07 §9 integrations.zaloFixtures belowNot run
TS-COM-004Template gap: unapproved template falls back and settings shows the gapfunctionalP1P1schedule_change template Chờ duyệt.
  1. Move a C1 session (schedule change).
  2. Open /settings/notifications.
Message delivered via push/email fallback with log reason "Mẫu ZNS chưa duyệt"; settings page shows a warning row for schedule_change.07 §6 rule 3Fixtures belowNot run
TS-COM-005Transactional message per event, per guardian flagfunctionalP0P1S1 with G1 primary contact and G3 payer (different people).
  1. Save attendance with S1 absent.
  2. Record a payment on S1's invoice.
Absence message goes to G1 only; receipt goes to G3 only; each visible on the source record (sheet / payment) and in /communication tab Tin đã gửi.COM-02, 07 §6 rule 1Fixtures belowNot run
TS-COM-006Message status lifecycle and retriesfunctionalP1P1Stub set to fail twice then succeed.
  1. Trigger an absence message.
Status queued → failed (attempt 1) → failed (2) → sent (3) within 15 min stub time; attempts = 3 in the log.COM-02 retriesFixtures belowNot run
TS-COM-007Every message is written to the portal inbox regardless of channelfunctionalP1P2G2 (no Zalo consent).
  1. Trigger a fee reminder for S6.
Portal inbox for G2 has the message; external channel shows skipped/email as per consent.07 §3 portal inbox alwaysFixtures belowNot run
TS-COM-008Message log columns, filters and empty statefunctionalP1P1As U-ACAD-A on /communication tab Tin đã gửi.
  1. Read columns; apply filters date/type/channel/status/class; open on tenant EMPTY.
Columns Thời gian, Loại chip, Học viên · Phụ huynh links, Kênh, Trạng thái chips Đã gửi/Đã nhận (green) · Thất bại (red) · Bỏ qua: lý do (grey) · Chờ (yellow), Nội dung preview, Thao tác Gửi lại · Xem; filters work; empty text exactly "Chưa có tin nào được gửi."07 §5 message logFixtures belowNot run
TS-COM-009Resend a failed messagefunctionalP1P1A failed message.
  1. Click Gửi lại.
POST /messages/{id}/resend; new attempt logged; status updates.07 §8 resendFixtures belowNot run
TS-COM-010KPI tiles on Sổ liên lạcfunctionalP2P1/communication.
  1. Read tiles.
Sent today, failed today, unreachable guardians, ZNS spend this month (VND) with cost from the log.07 §5 KPI tilesFixtures belowNot run
TS-COM-011Rendered content stored and personal data masked in logssecurityP1P1A sent message.
  1. Open the message; inspect server logs (stub log).
Rendered body visible in the message log; application logs contain masked phone (e.g. 0901***567) and no full name.07 §6 rule 9, 12 §10Fixtures belowNot run
TS-COM-012Placeholder with missing data renders cleanlyedgeP2P1Session without a room.
  1. Trigger schedule_change for it.
Body has no dangling "tại phòng " text; uses the fallback wording with branch.07 §11 placeholder missingFixtures belowNot run
TS-COM-013Quiet hours hold non-urgent messagesfunctionalP1P1Clock 22:00.
  1. Create an invoice (invoice_created).
Message status Chờ with scheduled 07:00; sent after the clock passes 07:00.07 §3 quiet hoursFixtures belowNot run
TS-COM-014ZNS monthly cap pauses ZNS and falls backfunctionalP2P1Cap set to 1,000 VND; spend already 900.
  1. Trigger two absence messages.
First ZNS sent; second falls back to push/email with reason "Vượt hạn mức ZNS"; settings shows the cap reached.07 §6 rule 4Fixtures belowNot run
TS-COM-015Consent revoked mid-month stops ZNSfunctionalP1P1G1 revokes Zalo consent (staff action on the guardian card).
  1. Trigger an absence message.
ZNS skipped with reason; portal inbox continues; guardian card shows "Chỉ liên hệ qua điện thoại".07 §11 revokeFixtures belowNot run
TS-COM-016Teacher class note to parents via OA/push onlyfunctionalP1P1As U-TEACH after saving SES-TODAY.
  1. Write "Hôm nay học Unit 3" and choose Gửi phụ huynh.
POST /messages/send type custom to guardians of present and absent students with each student's status line; channel OA or push, never ZNS; log rows visible; teacher cannot choose a ZNS template.COM-04Fixtures belowNot run
TS-COM-017Teacher cannot send to other classessecurityP1P1As U-TEACH.
  1. POST /messages/send with student_ids from C2.
403 or the C2 students are rejected in the response.07 §9 communication.view_log own classesFixtures belowNot run
TS-COM-018Announcement composer with audience preview and unreachable listfunctionalP1P2As U-ACAD-A.
  1. Compose title, body with {ten_hoc_vien}, attach 1 PDF, audience class C1, guardian flag primary contact, channels OA + push + email, send now.
Preview shows counts per channel and lists unreachable guardians (G2); the message renders with the student name substituted; after send, delivered/read counts update; announcement appears in the class page and the portal.COM-03Fixtures belowNot run
TS-COM-019Announcement validationnegativeP2P2Composer.
  1. Title 121 chars; body 2,001 chars; 6 attachments; 11 MB file; audience with zero reachable.
Each rejected inline; the last shows a warning with the unreachable list and blocks send.07 §5 composerFixtures belowNot run
TS-COM-020Bulk announcement over 500 recipients requires announce_bulksecurityP2P2As U-ACAD-A; audience whole branch (> 500).
  1. Send.
403 / "Cần quyền gửi hàng loạt"; U-OWNER succeeds.07 §6 rule 5Fixtures belowNot run
TS-COM-021Scheduled announcement resolves audience at send timeedgeP2P2Schedule for +10 min; then enroll S3 into C1.
  1. Wait for send.
S3's guardian receives it.07 §11Fixtures belowNot run
TS-COM-022Progress report batch: draft, comment, publish, PDFfunctionalP1P2As U-ACAD-A; C1; period last month.
  1. Create batch; as U-TEACH fill comments in the list view; as admin publish.
One draft per student with attendance rate, assignments, accuracy, study time, balance; teacher comments saved inline; publish sends report_published message with portal link and PDF; published reports immutable (edit creates version 2).COM-05Fixtures belowNot run
TS-COM-023Publish without teacher comment blocked unless overridenegativeP2P2A draft with empty comment.
  1. Publish.
Blocked "Thiếu nhận xét giáo viên" with an admin override option that is audited.07 §6 rule 7Fixtures belowNot run
TS-COM-024Parent OTP login and children switcherfunctionalP0P2G1 phone; portal at /parent/login (390 px).
  1. Enter 0901234567; enter the stub OTP.
Lands on /parent with child chips Nguyễn An and Nguyễn Bình (both branches); tabs Lịch học, Điểm danh, Học phí, Kết quả, Thông báo, Hồ sơ; session persists 30 days (cookie expiry).COM-06Fixtures belowNot run
TS-COM-025Portal login error states and rate limitsnegativeP1P2Unknown phone; known phone.
  1. Enter 0999999999.
  2. Request OTP 11 times in an hour for G1.
  3. Enter a wrong code 5 times.
Text "Số điện thoại chưa được đăng ký với trung tâm. Vui lòng liên hệ ..." ; 11th OTP request refused (10/hour); after 5 wrong attempts the code is invalid and a new one is required; resend cooldown 60 s visible.07 §5 login, 12 §3 rate limitsFixtures belowNot run
TS-COM-026Portal invoice with QR and post-payment updateflowP1P2G1; INV-1 unpaid.
  1. Open /parent/tuition → INV-1; note the QR and code.
  2. POST the SePay stub with the code.
Lines, total, due date, QR with payment code shown; after the webhook the status becomes Đã thanh toán and a receipt PDF link appears.COM-07Fixtures belowNot run
TS-COM-027Portal excuse and make-up requestsfunctionalP1P2G1.
  1. Submit Xin phép nghỉ for the next C1 session; submit Đăng ký học bù for an excused absence.
Two parent_request rows (excuse, makeup) open; staff sees them under Điểm danh → Yêu cầu and the today plan; G1 gets confirmation.COM-08Fixtures belowNot run
TS-COM-028Portal consent management and correction requestfunctionalP1P2G1 /parent/profile.
  1. Toggle Zalo consent off; submit a birthday correction request.
Consent record revoked_at set with channel portal; a task for academic admin created; the birthday itself unchanged until staff edits it (audited).COM-09, 12 §4Fixtures belowNot run
TS-COM-029Portal shows only linked childrensecurityP0P2G1.
  1. GET /v3/parent/learner/<S7>/schedule.
404.12 §3 parents see only linked learnersFixtures belowNot run
TS-COM-030Portal works inside Zalo in-app browser UAui-uxP2P2Playwright with Zalo UA string, 390 px.
  1. Open /parent from a message link.
Renders with bottom tab bar, 16 px base font, no sidebar; no horizontal scroll.07 §5 designFixtures belowNot run
TS-COM-031Portal session revocation by staffsecurityP2P2G1 logged in.
  1. Staff revokes the portal session from the guardian card.
Next portal request redirects to login.07 §6 rule 8Fixtures belowNot run
TS-COM-032Templates page and test sendfunctionalP1P1As U-OWNER /settings/templates.
  1. Open attendance_absent; verify placeholder chips; click Gửi thử to my phone.
Chips {ten_hoc_vien}, {lop}, {ngay}, {gio}, {so_tien}, {ma_thanh_toan}, {link}; test send logs a message to the owner's phone via the stub.07 §5 templatesFixtures belowNot run
TS-COM-033Notification policy table per typefunctionalP1P1/settings/notifications.
  1. Read the matrix; untick email for receipt; save; record a payment.
Rows per message type × channels checkboxes with quiet-hours toggle; receipt no longer attempts email.07 §7 notification_policyFixtures belowNot run
TS-COM-034Communication pages in en localei18nP2P1en.
  1. Open /communication and the composer.
Tabs Announcements · Sent messages · Progress reports · Parent requests · Templates; status chips translated.12 §8Fixtures belowNot run
TS-COM-035Message copy uses the formal registeri18nP2P1Default templates.
  1. Read the vi bodies of all default templates.
Address "Quý phụ huynh", "học viên", "giáo viên"; no "bạn", "bé" as the address form, no emoji.12 §8 formal registerFixtures belowNot run

Trường Số (truongso.net) · FLYER internal