"""Position/déplacement d'objet de scène — Phase 5 du plan d'extension du moteur, porté sur jeu_2d (voir OBJECT_ACTION_PROPERTIES, game_engine/scenes/ flow_palette.py) depuis l'éditeur document d'origine (retiré). Comme le reste du graphe de logique côté client, le comportement RÉEL (déplacement CSS effectif, chevauchement de rectangles via getBoundingClientRect) n'est pas testable sans navigateur (voir play_js_bundle() — on vérifie que la logique existe dans le JS livré et que les nœuds persistent leurs champs, pas qu'ils s'exécutent). Le nœud de condition de collision entre deux objets de scène (cond_element_a/cond_element_b) est déjà couvert par test_scene_edit_view.py::test_flow_node_collision_condition_targets_scene_objects.""" from typing import Any from conftest import play_js_bundle # type: ignore[import-not-found] # resolu par pytest, pas mypy from flask.testing import FlaskClient import game_engine from tests.conftest import not_none def _create_screen_and_object(slug: str) -> Any: screen_id = game_engine.create_screen(slug, "Accueil", kind="jeu_2d") obj_id = game_engine.add_scene_object(slug, screen_id) return screen_id, obj_id def test_position_action_node_persists_absolute_property(game: str) -> None: screen_id, obj_id = _create_screen_and_object(game) node_id = game_engine.add_flow_node( game, screen_id, node_type="action", action_type="modifier_objet_scene", target_object_id=obj_id, element_property="pos_x", element_value="42", ) node = not_none(game_engine.get_flow_node(game, node_id)) assert node["element_property"] == "pos_x" assert node["element_value"] == "42" assert node["target_object_id"] == obj_id def test_position_action_node_persists_relative_property(game: str) -> None: screen_id, obj_id = _create_screen_and_object(game) node_id = game_engine.add_flow_node( game, screen_id, node_type="action", action_type="modifier_objet_scene", target_object_id=obj_id, element_property="pos_y_relatif", element_value="-5", ) node = not_none(game_engine.get_flow_node(game, node_id)) assert node["element_property"] == "pos_y_relatif" assert node["element_value"] == "-5" def test_play_page_exposes_position_and_collision_runtime(client: FlaskClient, game: str) -> None: js = play_js_bundle() assert "pos_x" in js assert "pos_y" in js assert "elementsOverlap" in js assert "getBoundingClientRect" in js assert "'collision'" in js