"""Driver rename — PATCH /drivers/{id}. Global/shared, like the Driver row.""" from __future__ import annotations import json def _create_driver(**overrides): from imptune.db.models import Driver fields = { "sha256": "a" * 64, "original_filename": "hp_m404_x64.zip", "size_bytes": 2048, "driver_desc": json.dumps(["HP LaserJet M404 PCL-6"]), "inf_filename": "hpm404.inf", "architecture": "amd64", } fields.update(overrides) return Driver.create(**fields) class TestDriverRename: def test_sets_display_name(self, client, tmp_data_dir): from imptune.db.models import Driver driver = _create_driver() response = client.patch( f"/drivers/{driver.id}", data={"display_name": "HP UPD PCL6 (étage 2)"} ) assert response.status_code == 200 assert Driver.get_by_id(driver.id).display_name == "HP UPD PCL6 (étage 2)" def test_renamed_driver_shows_both_names_in_the_list(self, client, tmp_data_dir): driver = _create_driver() response = client.patch( f"/drivers/{driver.id}", data={"display_name": "Accounting MFP"} ) assert "Accounting MFP" in response.text # The ZIP name stays visible as the sub-line — it is what is on disk. assert "hp_m404_x64.zip" in response.text def test_empty_value_clears_the_rename(self, client, tmp_data_dir): from imptune.db.models import Driver driver = _create_driver(display_name="Old label") client.patch(f"/drivers/{driver.id}", data={"display_name": " "}) assert Driver.get_by_id(driver.id).display_name is None def test_rename_is_visible_to_another_owner(self, client, tmp_data_dir): """Drivers are shared, so a rename is not scoped to the renamer.""" from fastapi.testclient import TestClient from imptune.main import app driver = _create_driver() client.patch(f"/drivers/{driver.id}", data={"display_name": "Shared label"}) with TestClient(app) as other: # fresh cookie jar → a different Owner page = other.get("/drivers") assert "Shared label" in page.text def test_404_for_unknown_driver(self, client, tmp_data_dir): response = client.patch("/drivers/99999", data={"display_name": "x"}) assert response.status_code == 404 def test_rejects_an_overlong_name(self, client, tmp_data_dir): from imptune.db.models import Driver driver = _create_driver() response = client.patch( f"/drivers/{driver.id}", data={"display_name": "x" * 121} ) assert response.status_code == 400 assert Driver.get_by_id(driver.id).display_name is None def test_missing_field_clears_rather_than_erroring(self, client, tmp_data_dir): from imptune.db.models import Driver driver = _create_driver(display_name="Old label") response = client.patch(f"/drivers/{driver.id}", data={}) assert response.status_code == 200 assert Driver.get_by_id(driver.id).display_name is None