~3 sessions a week: read the lesson (~15 min) + run and change its section of exam/demo.py (~25 min). Tick lessons off — progress is saved in this browser.
Why test, unit tests, test design. Lab: grade papers out of 200 and 300; write a failing and an erroring test; build the boundary table for every grade line.
Fixtures, test doubles, integration. Lab: add a builder method; run shared-fixture tests in both orders; stub a 404; make the fake store and SQLite disagree.
Contract tests, e2e and the pyramid, property-based testing. Lab: break the contract three ways; change the e2e count in the cost model; try new seeds and a new property.
Coverage and mutation, flaky tests, CI and TDD. Lab: add a question that kills a survivor; replay the 23:30 failure; TDD a new rule red → green → refactor.
Next: the CI/CD school runs these tests in real pipelines, the API school designs the contracts, and the School portal has the rest.