Courses QA — Comprehensive Walkthrough (Internal)
Jira: DLOW-194
What this is: The single comprehensive internal QA walkthrough for the Certificate / Course / Section admin batch. It combines:
- All steps from DLOW-193 (baseline workflow coverage)
- Plus additions from UAT guides specs 015–023 on
main - Plus corrections where DLOW-193 conflicted with shipped UAT guides (credentials, RBAC)
Use this document only for QA — you do not need to run DLOW-193 separately.
Not business UAT — internal QA before release.
Also see:
- DLOW-192 — Courses QA - Internal (technical AC + workflow traces)
- Admin Spec
Before you start
Start here: https://lsuoce-development.fly.dev/
- Click Log In on the homepage.
- Seed demo data if needed: QA Seed Tools → CCS-01 UAT — Legal Research & Writing → Seed now
- Open the catalog admin dashboard: https://lsuoce-development.fly.dev/dashboard/catalog/
Log in as:
| Who | Password | Use for | |
|---|---|---|---|
| Admin (most bootstrap steps) | admin@lsu.edu | password12! | Django admin fallback, superuser checks |
| Program Manager (primary CE user) | pm_catalog@example.com | password12! | Catalog workspace, course forms, preview |
| Enrollment Admin | enrollment.admin@lsu.edu | password12! | RBAC denial tests only — expect 403 |
Demo anchor: PLG-LRW-201 — Legal Research & Writing under Paralegal Studies Certificate.
First visit tip: Site may be asleep. If you see a 502, wait 15 seconds and reload.
Primary bookmark: Catalog admin dashboard
Fallback (data-model / seed checks):
Costing unit dropdown may error on preview — use certificate name search (e.g. "Paralegal").
General Notes & Uploads
Test in this order
| Step | What | Build ticket | UAT guide |
|---|---|---|---|
| 1 | Foundation — data model | DLOW-171 | 015 |
| 2a | Section lifecycle | DLOW-172 | 016 |
| 2b | Shared workspace | DLOW-173 | 017 |
| 2c | Create / duplicate course | DLOW-174 | 018 |
| 2d | Cancelled lifecycle (NEW) | DLOW-191 | 022 spec |
| 3 | Internal preview | DLOW-187 | 019 |
| 4a | Defaults & inheritance | DLOW-175 | 020 |
| 4b | Drop / transfer windows | DLOW-190 | 023 |
| 4c | Pricing & fees | DLOW-176 | 021 |
Progress:
Part 1 — Foundation (CCS-01)
Task: DLOW-171
In plain English: Before staff can build certificates and courses, the system needs the basic records — costing units, certificates, courses, sections — wired together correctly. A course must belong to a costing unit. Certificates stand on their own (not tucked under a course).
Workflow area: Admin setup and costing-unit context (spec §3–§4.1)
Walkthrough 1.1 — Costing units exist
- Sign in and open the catalog admin dashboard: https://lsuoce-development.fly.dev/dashboard/catalog/
- Navigate to Costing units in the dashboard (or use Django admin → Costing units if dashboard list unavailable).
- You should see a list. Paralegal (PL) or similar is fine.
Walkthrough 1.2 — Certificates are standalone
- In the catalog dashboard, navigate to Certificates (or Certificates admin).
- Open an existing certificate or add a new one.
- You should see a costing unit field. Saving should not require picking a parent course first.
Walkthrough 1.3 — Courses need a costing unit
- In the catalog dashboard, navigate to Courses and create a new course (or Add course in admin).
- Try to save without choosing a costing unit.
- The system should stop you (validation error). Then pick a costing unit, fill required fields, and save — that should work.
Walkthrough 1.4 — Sections and fees link to courses
- In the catalog dashboard, open a course that already exists (prefer PLG-LRW-201 if seeded).
- Add a section linked to that course (via the dashboard or inline).
- Add a fee component on the course.
- After save, both should still show and point at the right course.
Walkthrough 1.5 — Academic fields on courses and sections
- Open PLG-LRW-201 in Django admin.
- Confirm Credit type, Contact hours, CEU override, Grading basis on the course.
- Open a linked section — Periodicity type, optional enrollment dates, section-level academic overrides.
Walkthrough 1.6 — Dual periodicity on one course
- On PLG-LRW-201, scroll to Sections inline.
- Confirm two rows: cohort/term (Fall 2026) and rolling/open enrollment.
Walkthrough 1.7 — Certificate requirement versioning
- Open Certificate requirement versions.
- Each row points at a Certificate with a Version number — new versions add rows.
Edge cases: empty CEU (not zero); cohort/term section without cohort link still saves.
Part 1 complete: · Issues? File on DLOW-171
Part 2a — Section lifecycle (CCS-02)
Task: DLOW-172 · Needs Part 1 first
In plain English: Sections move through Draft → Ready → Active → Inactive. Staff shouldn't be able to jump to nonsense states. Once Inactive, a section shouldn't reopen through normal admin — but copying it to start a new section should still work.
Workflow area: Section lifecycle (spec §5.5)
- In the catalog dashboard, navigate to Sections (or open a section from within a course).
- Open a section (create one if needed).
- Find the status field — you should see Draft, Ready, Active, Inactive (or clear equivalents).
- Try moving Draft → Ready → Active. Each save should stick after reload.
- Move one section to Inactive. Try to reopen it the normal way — it should be blocked.
- From that Inactive section, try duplicate / copy to new section — that should still be allowed.
If dashboard transition UI is unavailable, verify lifecycle via DLOW-172 / dev pytest — admin dropdown may bypass guards.
Confirm PLG-LRW-201 sections use new lifecycle vocabulary (not legacy closed/canceled). Edge cases: Active outside enrollment window; Ready but hidden; OQ-2 Inactive terminal.
Part 2a complete: · Issues? File on DLOW-172
Part 2c — Create and duplicate a course (CCS-04)
Task: DLOW-174 · Needs Part 1 first
In plain English: Staff create a course under a costing unit, optionally duplicate an old one, save as draft or mark ready, and see validation before moving on.
Workflow area: Course creation flow (spec §4.2 → §4.5)
Log in as: pm_catalog@example.com
- In the catalog dashboard, navigate to Courses and create a new course. Pick a costing unit (e.g. Paralegal).
- Fill title, description, modality, internal notes, application-required — save.
- Confirm the course appears on the list under the right costing unit.
- Pick a course that has section dates on an old section. Duplicate it (prefer PLG-LRW-201).
- New course should copy course settings but not copy old section start/end dates.
- Save a course as draft, then later mark ready for section creation — both should stick; ready should suggest a next step.
- Leave a required field blank and open review/summary — you should see what's wrong and what to fix.
Walkthrough 2c.8 — Academic metadata and live CEU preview
- Set contact hours / CEU fields on course form.
- Confirm live CEU preview updates (if shown).
Walkthrough 2c.9 — Editorial content
- Fill description / editorial fields — save and reload.
Walkthrough 2c.10 — Duplicate with unique course code
- Duplicate PLG-LRW-201 keeping same course code → save fails.
- Unique code (e.g.
PLG-LRW-201-COPY-QA) → save succeeds.
Walkthrough 2c.11 — Mark ready → section placeholder
- Mark course ready → Create section link → placeholder page (CCS-07 future).
Part 2c complete: · Issues? File on DLOW-174
Part 2d — Cancelled lifecycle (CCS-02a)
Task: DLOW-191 · Needs Part 2a
Source: 022 spec
In plain English: Cancelled is a fifth state — distinct from Inactive. Cancelled = called off; Inactive = archived after delivery. Both terminal; both copyable.
- Confirm Cancelled as lifecycle option (admin bootstrap or dev demo).
- Transition section to Cancelled from Draft, Ready, or Active.
- Attempt reopen from Cancelled → blocked.
- Copy from Cancelled → new Draft section.
- Completion date: default last meeting + 10 business days; staff override persists.
- Regression: Inactive retains enrollments; copy-from-Inactive still works.
Part 2d complete: · Issues? File on DLOW-191
Part 3 — Internal preview page (CCS-04a)
Task: DLOW-187 · Needs Parts 1 and 2c
In plain English: QA gets an internal-only preview that shows courses (and later certs/sections) including drafts — with a badge for lifecycle state. Not the public website; login required.
Workflow area: Internal preview (spec §8)
Log in as: pm_catalog@example.com
Find the preview URL on the build (linked from workspace Preview (internal)). Must require login.
- While signed out, open the preview URL — you should not see content (redirect to login or 403).
- Sign in and open preview — you should see courses from Part 2c.
- Each course should show a state badge matching what you set in admin.
- Draft courses should still appear (preview is not the public site).
- When sections/certs exist later, reload — they should show up too.
Walkthrough 3.5 — Section preview and inheritance
- From PLG-LRW-201 section list, open Preview (internal) on a section.
- Inherited values match course defaults where configured.
Walkthrough 3.6 — Certificate preview
- From certificate list, Preview (internal) on Paralegal Studies Certificate.
- Confirm name, costing unit, requirement version (e.g. v1).
Walkthrough 3.7 — Enrollment Admin denied on preview
- As enrollment.admin@lsu.edu, open preview URL.
Walkthrough 3.8 — QA UAT shortcut bar (optional)
If visible, confirm shortcut bar — optional, not blocking.
Part 3 complete: · Issues? File on DLOW-187
Part 4a — Course defaults & inheritance (CCS-05)
Task: DLOW-175 · Needs Part 2c
In plain English: When setting up a course, staff choose defaults (modality, notes for section builders) and decide what carries down to new sections. Section builders should be able to override those defaults later.
Workflow area: Inheritance rules (spec §4.3)
Log in as: pm_catalog@example.com
- Edit a course and set default modality and notes for section creators — save and reload to confirm they stick.
- On the same form, find controls showing what inherits to new sections (modality, fees, refund rules).
- Create or edit a section from that course — inherited values should pre-fill but stay editable.
- Check the preview page — inherited values should match what you set on the course.
Walkthrough 4a.5 — Inheritance panel on create
- Create course — locate Section defaults & inheritance panel on form.
Walkthrough 4a.6 — Core field validation gates inheritance
- Leave required CCS-04 field empty — inheritance cannot save until core fields valid.
Walkthrough 4a.7 — Tighten inheritance rule toggles
- Set inherit/editable matrix (modality, fees, refund policy) — save, reload.
Walkthrough 4a.8 — Duplicate copies inheritance
- Duplicate course with custom inheritance — new course copies settings.
Part 4a complete: · Issues? File on DLOW-175
Part 4b — Drop and transfer windows (CCS-05a)
Task: DLOW-190 · Needs Part 4a
In plain English: Courses can set how many days learners have to self-drop or self-transfer. For Paralegal, both should default to 0 — meaning staff must handle drops/transfers, not learners.
Workflow area: Inheritance rules — drop/transfer (spec §4.3)
Log in as: pm_catalog@example.com
- On a Paralegal course, find public drop-request window and public transfer-request window.
- On a new Paralegal course, both should default to 0.
- Save non-zero values on a test course — they should persist (you won't test learner self-service UI in this batch).
- Create a section from a course with windows set — section should inherit those values.
Walkthrough 4b.5 — Review summary staff-only policy
- With windows at 0, open review/summary — text explains staff-only drop/transfer policy.
Walkthrough 4b.6 — Open drop only, transfer staff-only
- Set drop window open, transfer at 0 — save persists.
Walkthrough 4b.7 — Non-Paralegal explicit windows
- On non-Paralegal course (e.g. PCE certificate), set non-zero windows — save persists.
Walkthrough 4b.8 — Duplicate copies windows
- Duplicate priced/windowed course — windows copy forward.
Walkthrough 4b.9 — Preview shows window policy
- Preview (internal) reflects window policy text.
Part 4b complete: · Issues? File on DLOW-190
Part 4c — Pricing and fee components (CCS-06)
Task: DLOW-176 · Needs Part 2c
In plain English: Staff attach the fee breakdown to a course — base price, line items, GL codes for finance — so checkout and reporting stay aligned.
Workflow area: Pricing & fees (spec §4.4)
Log in as: pm_catalog@example.com
- Open a course and set base price (or price structure) — save.
- Add fee components (label, amount, GL code, refundable yes/no) — save.
- Confirm each component shows its GL code clearly on the form.
- Open section create for that course — fee-related defaults should carry down; overriding shouldn't silently drop GL info.
Walkthrough 4c.5 — Base price on review summary
- Set base price — confirm visible on review/summary.
Walkthrough 4c.6 — Fee reconciliation blocks mismatch
- Add fee lines that do not sum to base price — save blocked with clear message.
Walkthrough 4c.7 — Remove fee component row
- Delete a fee line — save reconciled total.
Walkthrough 4c.8 — Duplicate carries fee template
- Duplicate PLG-LRW-201 (or priced course) — fee template copies.
Walkthrough 4c.9 — Preview shows pricing
- Preview (internal) shows fee/pricing display.
Part 4c complete: · Issues? File on DLOW-176
When something fails
- Note what you did, what you expected, and what happened instead (screenshot helps).
- File a bug on the matching build ticket (DLOW-171, 172, etc.).
- If it might be a policy question rather than a broken button, say so — some rules are still being confirmed (OQ-2, OQ-4, OQ-5, OQ-6).
Crosswalk — NEW items → source
| Walkthrough | Source |
|---|---|
| Demo anchor, RBAC | Gap scan vs DLOW-193 |
| 1.5–1.7 | 015 uat-guide |
| 2a correction + PLG-LRW-201 | 016 uat-guide |
| 2b.8–2b.10 | 017 uat-guide |
| 2c.8–2c.11 | 018 uat-guide |
| Part 2d | 022 spec |
| 3.5–3.8 | 019 uat-guide |
| 4a.5–4a.8 | 020 uat-guide |
| 4b.5–4b.9 | 023 uat-guide |
| 4c.5–4c.9 | 021 uat-guide |
Sign-off
| Tester name | |
|---|---|
| Date | |
| Environment | lsuoce-development.fly.dev |
| All 9 parts passed? | [ ] Yes [ ] No — see linked bugs |
| Technical companion reviewed? | [ ] DLOW-192 |
| Supersedes separate DLOW-193 run? | [ ] Yes — this is the comprehensive single task |