# End-To-End Smoke Standard This checklist defines the repeatable smoke path for the core awards workflow. It complements the build checks in `docs/workflow.md` and should be used after changes to nominations, categories, candidates, voting, winners, permissions, or public landing-page workflow. ## Scope Core workflow: ```text Nomination -> Admin preparation -> Candidate -> Voting -> Winner preparation -> Winner/archive ``` Public nomination is grouped by main category (`Category.GroupName`). Voting and winners stay on concrete subcategory `Category` rows. ## Automated Local Smoke Run this against a local backend. If an admin session token is available, the script also checks admin endpoints. ```bash scripts/smoke-local.sh ADMIN_SESSION_TOKEN= scripts/smoke-local.sh ``` Expected local defaults: - Backend: `http://127.0.0.1:5084` - Frontend: `http://127.0.0.1:5173` - Database: PostgreSQL on `localhost:5433` The script checks: - `/api/health` - `/api/health/database` - `/api/public/overview` - current-season category structure - legacy parent labels are not exposed by the public category endpoint - optional admin season/team endpoints when `ADMIN_SESSION_TOKEN` is set ## Manual Browser Smoke Use the local frontend with backend running as a pair. ### Public Nomination - Open the public landing page. - Start nomination. - Confirm only main categories are selectable. - Submit 1, 2, and 3 links in one main category. - Confirm duplicate links in the same main category are blocked. - Confirm empty categories can be skipped. - Confirm Twitch links get tracker status when possible. - Confirm non-Twitch links are accepted and need manual tier choice. ### Admin Review And Candidate Preparation - Open `/admin/nominations`. - Confirm nominations are grouped by main category and streamer identity. - Confirm the tracker tier suggestion is visible when available. - Promote a Twitch nomination using the suggested tier. - Promote a non-Twitch nomination with manual tier override. - Confirm candidate `NominationTally` reflects grouped nominations. - Confirm candidate clip metadata requires a link when winner clip is mandatory. ### Voting - Open the public voting modal. - Confirm categories show as main category with subcategories. - Switch category and subcategory without the modal jumping or resizing. - Vote in at least one subcategory. - Save vote again and confirm this is treated as vote editing. - Confirm missing-vote warning appears before completion when applicable. ### Admin Voting Workspace - Open `/admin/voting`. - Confirm the page appears only for roles with `voting`, `analytics`, or `winners` effective access. - Confirm the tree groups by main category, with subcategories as children. - Confirm leaderboard order defaults to most votes first. - Confirm vote count, candidate count, open reviews, clip status, readiness, ties or close races, and soft "few nominators" warnings are visible. - Use quick links to candidates, nominations/review, and winners. ### Winners And Archive - Open `/admin/winners`. - Confirm it focuses on final winner assignment and landing-page release readiness. - Set or clear a winner in a subcategory. - Confirm `max. 1x winner` identity guard is visible/enforced. - Confirm missing winner clip blocks or warns according to workflow settings. - Confirm publishing is blocked while winners, reviews, or blocking workflow rules are incomplete. - Publish the year and confirm current winners appear on the landing page while the previous landing-page winner year moves into the archive list. - Confirm current landing-page winners are not listed as an archive year at the same time. - Open the public archive modal and confirm winner clip/video embeds render. ### Permissions - Open `/admin/team`. - Confirm permission catalog includes current admin pages: Dashboard, Jahre, Nominierungen, Kategorien, Kandidaten, Clips, Landingpage, Risiko, Audit-Log, Analytics, Voting, Gewinner, Einstellungen, Team. - Confirm roles with `analytics` or `winners` still get effective `voting` access for navigation and route guards. - Confirm write actions still fail for read-only organization-team access. ### Responsive Checks Check public voting, admin voting, admin winners, and admin categories at: - `360px` - `390px` - `768px` - desktop In the browser console: ```js document.documentElement.scrollWidth <= window.innerWidth ``` The expression must be `true` unless a deliberate horizontal data table is in a contained scroll area. ## Cleanup Temporary local nominations, candidates, votes, clips, and winners may be created for smoke validation. Remove test artifacts before finishing if they would pollute future manual checks.