Full-stack flight price scanner built on fast-flights v3 (SOCS cookie bypass): Backend (FastAPI + SQLite): - REST API with rate limiting, Pydantic v2 validation, paginated responses - Scan pipeline: resolves airports, queries every day in the window, saves individual flights + aggregate route stats to SQLite - Background async scan processor with real-time progress tracking - Airport search endpoint backed by OpenFlights dataset - Daily scan window (all dates, not monthly samples) Frontend (React 19 + TypeScript + Tailwind CSS v4): - Dashboard with live scan status and recent scans - Create scan form: country mode or specific airports (searchable dropdown) - Scan detail page with expandable route rows showing individual flights (date, airline, departure, arrival, price) loaded on demand - AirportSearch component with debounced live search and multi-select Database: - scans → routes → flights schema with FK cascade and auto-update triggers - Migrations for schema evolution (relaxed country constraint) Tests: - 74 tests: unit + integration, isolated per-test SQLite DB - Confirmed flight fixtures in tests/confirmed_flights.json (50 real flights, BDS→FMM Ryanair + BDS→DUS Eurowings, scraped Feb 2026) - Integration tests parametrized from confirmed routes Docker: - Multi-stage builds, Compose orchestration, Nginx reverse proxy Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
70 lines
1.2 KiB
INI
70 lines
1.2 KiB
INI
[run]
|
|
# Coverage configuration for Flight Radar Web App
|
|
|
|
# Source directories
|
|
source = .
|
|
|
|
# Omit these files from coverage
|
|
omit =
|
|
*/tests/*
|
|
*/test_*.py
|
|
*/__pycache__/*
|
|
*/venv/*
|
|
*/env/*
|
|
*/.venv/*
|
|
*/site-packages/*
|
|
*/dist-packages/*
|
|
*/airports.py
|
|
*/cache.py
|
|
*/cache_admin.py
|
|
*/date_resolver.py
|
|
*/formatter.py
|
|
*/main.py
|
|
*/progress.py
|
|
*/searcher_*.py
|
|
setup.py
|
|
|
|
# Include only api_server.py and database files
|
|
include =
|
|
api_server.py
|
|
database/*.py
|
|
|
|
[report]
|
|
# Reporting options
|
|
|
|
# Precision for coverage percentage
|
|
precision = 2
|
|
|
|
# Show missing lines
|
|
show_missing = True
|
|
|
|
# Skip empty files
|
|
skip_empty = True
|
|
|
|
# Skip covered files
|
|
skip_covered = False
|
|
|
|
# Exclude lines from coverage
|
|
exclude_lines =
|
|
# Standard pragma
|
|
pragma: no cover
|
|
|
|
# Don't complain about missing debug code
|
|
def __repr__
|
|
|
|
# Don't complain if tests don't hit defensive assertion code
|
|
raise AssertionError
|
|
raise NotImplementedError
|
|
|
|
# Don't complain if non-runnable code isn't run
|
|
if __name__ == .__main__.:
|
|
if TYPE_CHECKING:
|
|
|
|
# Don't complain about abstract methods
|
|
@abstractmethod
|
|
|
|
[html]
|
|
# HTML report options
|
|
directory = htmlcov
|
|
title = Flight Radar Web App - Test Coverage Report
|