Intègre un chat IA capable de manipuler la scène via les mêmes fonctions que l'éditeur manuel (objets, variables, déclencheurs, images générées), avec conversations multiples par écran façon Claude. Corrige au passage le rafraîchissement pjax hors-ordre, l'onglet IA/déclencheurs vide après sélection d'un objet, la comparaison de booléens dans les conditions, et le blocage du glisser-déposer hors du cadre caméra après un redimensionnement de fond par l'IA. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
46 lines
1.9 KiB
Python
46 lines
1.9 KiB
Python
"""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
|