"""Suppression d'un objet de scène en AJAX (voir routes/scenes/ scene_object_delete.py, deleteSceneObject() dans static/js/scenes/ scene-editor.js) : même principe que l'ajout (test_scene_object_add_ajax.py) — une réponse JSON quand l'appelant envoie X-Requested-With: fetch, pour ne plus "vider" l'éditeur de collision/quêtes le temps d'un remplacement de
par pjax.js (qui interceptait la soumission du formulaire de suppression classique).""" import screens def _create_jeu2d_game(client, tmp_game_slug_cleanup, name="pytest_delete_ajax"): 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 _add_ajax(client, slug, screen_id, **data): return client.post( f"/game/{slug}/screens/{screen_id}/scene-objects/add", data=data, headers={"X-Requested-With": "fetch"}, ).get_json() def test_ajax_delete_returns_json_and_removes_the_object(client, tmp_game_slug_cleanup): slug, screen_id = _create_jeu2d_game(client, tmp_game_slug_cleanup) obj_id = _add_ajax(client, slug, screen_id, kind="personnage")["id"] resp = client.post( f"/game/{slug}/scene-objects/{obj_id}/delete", headers={"X-Requested-With": "fetch"}, ) assert resp.status_code == 200 assert resp.get_json() == {"ok": True, "id": obj_id} assert screens.get_scene_object(slug, obj_id) is None def test_ajax_delete_404s_for_missing_object(client, tmp_game_slug_cleanup): slug, screen_id = _create_jeu2d_game(client, tmp_game_slug_cleanup) resp = client.post( f"/game/{slug}/scene-objects/999999/delete", headers={"X-Requested-With": "fetch"}, ) assert resp.status_code == 404 assert resp.get_json() == {"ok": False} def test_non_ajax_delete_still_redirects(client, tmp_game_slug_cleanup): slug, screen_id = _create_jeu2d_game(client, tmp_game_slug_cleanup) obj_id = _add_ajax(client, slug, screen_id, kind="personnage")["id"] resp = client.post(f"/game/{slug}/scene-objects/{obj_id}/delete", follow_redirects=False) assert resp.status_code == 302 assert screens.get_scene_object(slug, obj_id) is None