"""Poser un objet de scène depuis "Mes assets" (voir plan Phase 1, §2) — routes/scenes/scene_object_add.py::asset_id, isolation stricte par propriétaire comme le reste de "Mes assets" (tests/test_user_assets.py).""" import re import auth import screens def _create_jeu2d_game(client, tmp_game_slug_cleanup, name="pytest_scene_object_asset"): resp = client.post("/games/new", data={"name": name}, follow_redirects=False) slug = tmp_game_slug_cleanup(resp.headers["Location"].rstrip("/").split("/")[-1]) screen_id = screens.create_screen(slug, "Scène 1", kind="jeu_2d") return slug, screen_id def test_scene_object_add_with_asset_id_poses_the_owners_image(client, tmp_game_slug_cleanup): slug, screen_id = _create_jeu2d_game(client, tmp_game_slug_cleanup) with client.session_transaction() as sess: user_id = sess["user_id"] asset_id = auth.create_user_asset(user_id, "abc123.png", original_name="photo.png") resp = client.post( f"/game/{slug}/screens/{screen_id}/scene-objects/add", data={"kind": "decor", "asset_id": str(asset_id)}, headers={"X-Requested-With": "fetch"}, ) assert resp.status_code == 200 body = resp.get_json() obj = screens.get_scene_object(slug, body["id"]) assert obj["attributes"]["src"] == f"/assets/{user_id}/abc123.png" def test_scene_object_add_with_asset_id_403s_for_another_accounts_asset(client, user_client, tmp_game_slug_cleanup): slug, screen_id = _create_jeu2d_game(client, tmp_game_slug_cleanup) with user_client.session_transaction() as sess: other_user_id = sess["user_id"] asset_id = auth.create_user_asset(other_user_id, "not_mine.png") resp = client.post( f"/game/{slug}/screens/{screen_id}/scene-objects/add", data={"kind": "decor", "asset_id": str(asset_id)}, headers={"X-Requested-With": "fetch"}, ) assert resp.status_code == 403