From 63e946f0ad81a9f338ae02618a4da88e1af32bea Mon Sep 17 00:00:00 2001 From: furyhawk Date: Mon, 11 May 2026 14:57:24 +0800 Subject: [PATCH] refactor: Improve code formatting and organization in test files and migration scripts --- ...26051101_create_iot_tables_f1e2d3c4b5a6.py | 4 ++- app/tests/test_api/test_deps.py | 14 +++++++-- app/tests/test_api/test_iot.py | 31 +++++++++++++------ .../test_environment/test_environment.py | 2 -- pyproject.toml | 1 + requirements-dev.txt | 1 + 6 files changed, 37 insertions(+), 16 deletions(-) diff --git a/alembic/versions/2026051101_create_iot_tables_f1e2d3c4b5a6.py b/alembic/versions/2026051101_create_iot_tables_f1e2d3c4b5a6.py index 3402e0a..359be65 100644 --- a/alembic/versions/2026051101_create_iot_tables_f1e2d3c4b5a6.py +++ b/alembic/versions/2026051101_create_iot_tables_f1e2d3c4b5a6.py @@ -56,7 +56,9 @@ def upgrade() -> None: server_default=sa.text("now()"), nullable=False, ), - sa.ForeignKeyConstraint(["device_id"], ["iot_device.device_id"], ondelete="CASCADE"), + sa.ForeignKeyConstraint( + ["device_id"], ["iot_device.device_id"], ondelete="CASCADE" + ), sa.PrimaryKeyConstraint("id"), ) # ### end Alembic commands ### diff --git a/app/tests/test_api/test_deps.py b/app/tests/test_api/test_deps.py index ae4dbd7..ee880ff 100644 --- a/app/tests/test_api/test_deps.py +++ b/app/tests/test_api/test_deps.py @@ -14,12 +14,20 @@ class FakeSession: @pytest.mark.asyncio -async def test_get_current_user_raises_when_user_removed(monkeypatch: pytest.MonkeyPatch) -> None: +async def test_get_current_user_raises_when_user_removed( + monkeypatch: pytest.MonkeyPatch, +) -> None: # make verify_jwt_token return an object with .sub - monkeypatch.setattr(deps, "verify_jwt_token", lambda token: types.SimpleNamespace(sub="non-existent")) + monkeypatch.setattr( + deps, + "verify_jwt_token", + lambda token: types.SimpleNamespace(sub="non-existent"), + ) with pytest.raises(HTTPException) as excinfo: - await deps.get_current_user(token="ignored", session=cast(AsyncSession, FakeSession())) + await deps.get_current_user( + token="ignored", session=cast(AsyncSession, FakeSession()) + ) assert excinfo.value.status_code == status.HTTP_401_UNAUTHORIZED assert excinfo.value.detail == api_messages.JWT_ERROR_USER_REMOVED diff --git a/app/tests/test_api/test_iot.py b/app/tests/test_api/test_iot.py index 5416b1e..e6e9f5b 100644 --- a/app/tests/test_api/test_iot.py +++ b/app/tests/test_api/test_iot.py @@ -9,10 +9,15 @@ from app.models import IoTReading @pytest.mark.asyncio(loop_scope="session") -async def test_log_iot_readings_single_device(client: AsyncClient, session: AsyncSession) -> None: +async def test_log_iot_readings_single_device( + client: AsyncClient, session: AsyncSession +) -> None: payload = { "devices": [ - {"device_id": "dev-1", "readings": [{"sensor_type": "temperature", "value": "25.5"}]} + { + "device_id": "dev-1", + "readings": [{"sensor_type": "temperature", "value": "25.5"}], + } ] } @@ -22,16 +27,22 @@ async def test_log_iot_readings_single_device(client: AsyncClient, session: Asyn @pytest.mark.asyncio(loop_scope="session") -async def test_log_iot_readings_persists_multiple(client: AsyncClient, session: AsyncSession) -> None: +async def test_log_iot_readings_persists_multiple( + client: AsyncClient, session: AsyncSession +) -> None: payload = { "devices": [ - {"device_id": "dev-2", "readings": [ - {"sensor_type": "temperature", "value": "21.0"}, - {"sensor_type": "humidity", "value": "60%"} - ]}, - {"device_id": "dev-3", "readings": [ - {"sensor_type": "pressure", "value": "1001"} - ]}, + { + "device_id": "dev-2", + "readings": [ + {"sensor_type": "temperature", "value": "21.0"}, + {"sensor_type": "humidity", "value": "60%"}, + ], + }, + { + "device_id": "dev-3", + "readings": [{"sensor_type": "pressure", "value": "1001"}], + }, ] } diff --git a/app/tests/test_environment/test_environment.py b/app/tests/test_environment/test_environment.py index 2890b0a..abc5a30 100644 --- a/app/tests/test_environment/test_environment.py +++ b/app/tests/test_environment/test_environment.py @@ -168,7 +168,6 @@ async def test_search_pressure_with_date_range( assert isinstance(response.json(), list) - @pytest.mark.asyncio(loop_scope="session") async def test_create_new_humidity(client: AsyncClient) -> None: response = await client.post( @@ -248,4 +247,3 @@ async def test_search_humidity_with_date_range( ) assert response.status_code == status.HTTP_200_OK assert isinstance(response.json(), list) - diff --git a/pyproject.toml b/pyproject.toml index c59c4ba..d996bc3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,6 +29,7 @@ dev = [ "pytest-cov>=7.0.0,<8", "pytest-xdist>=3.8.0,<4", "ruff>=0.14.14,<1", + "isort>=5.12.0,<6", "uvicorn[standard]>=0.40.0,<1", ] diff --git a/requirements-dev.txt b/requirements-dev.txt index bffd734..1516bcd 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -11,6 +11,7 @@ pytest-xdist ruff mypy pre-commit +isort # HTTP client for tests httpx