Testing ======= The project uses Django's built-in test runner. Tests live alongside each app at ``app/richy//tests.py``. Run the full test suite ----------------------- .. code-block:: bash $ docker exec -it richy ./manage.py test Run a single app's tests ------------------------ .. code-block:: bash $ docker exec -it richy ./manage.py test richy.transactions Run a single test case ---------------------- .. code-block:: bash $ docker exec -it richy ./manage.py test \ richy.transactions.tests.TransactionsTestCase.test_get_pile_stats Useful flags ------------ * ``--keepdb`` -- reuse the test database between runs (much faster for iterating). * ``--failfast`` -- stop on the first failure. * ``-v 2`` -- verbose output. Example: .. code-block:: bash $ docker exec -it richy ./manage.py test --keepdb --failfast richy.shares Time-sensitive tests -------------------- The dev requirements include `freezegun `_ so date-dependent code paths (price history, dividend calculations, "today" comparisons) can be tested deterministically. Test fixtures and data ---------------------- Each app's ``fixtures/`` directory contains seed data used by tests that need pre-populated rows (e.g., exchanges, the site tree, celery beat schedule). The ``transactions`` app additionally ships a ``test_data/`` directory with realistic fixtures for performance and dividend calculations.