Retire l'export exécutable (.exe) et la partie publique en ligne (/jouer)
Build and deploy / test-python (push) Successful in 7m5s
Build and deploy / test-js (push) Successful in 58s
Build and deploy / build-and-push (push) Skipped
Build and deploy / deploy (push) Skipped

Décision produit : seul l'export Web/SCORM (LMS) est pertinent — l'export
exécutable Windows autonome (publish/build_package.py, bouton "Publier")
et la partie publique par joueur (/jouer/<slug>, routes/public_play/,
"Publier en ligne") sont jugés redondants et retirés.

Conserve le mécanisme d'état "par joueur" (db/global_vars,
db/rows, per_player) : infrastructure générique déjà utilisée par
Score/Progression et testée indépendamment de toute route publique
(voir tests/test_player_state.py), aucune raison de la retirer.

_STATIC_ITEMS/_copy_characters (copie sélective des sprites CraftPix
réellement utilisés) migrent de build_package.py vers
build_scorm_package.py, seul appelant restant.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
william
2026-09-02 10:59:28 +02:00
co-authored by Claude Sonnet 5
parent 82d00b3800
commit e82eb7ce88
37 changed files with 115 additions and 1106 deletions
+12 -37
View File
@@ -7,8 +7,6 @@ import json
import db
import screens
from conftest import flask_app
def test_get_score_defaults_before_any_write(game):
assert db.get_score(game) == {"player_id": db.PLAYER_SHARED, "score": 0, "status": "non_commence"}
@@ -104,43 +102,20 @@ def test_game_scoring_view_route_reads_player_score(client, game):
}
def test_two_anonymous_players_get_independent_scores(client, game):
"""Bout en bout via HTTP, même patron que
test_public_play.py::test_two_anonymous_players_get_independent_variable_state
— le score est TOUJOURS par joueur (voir db/scoring/), jamais partagé."""
screen_id = screens.create_screen(game, "Accueil")
node_id = client.post(
f"/game/{game}/screens/{screen_id}/flow/nodes/add",
data=json.dumps({"node_type": "action", "action_type": "modifier_score", "data_operation": "incrementer", "data_value": "10"}),
content_type="application/json",
).get_json()["id"]
status_node_id = client.post(
f"/game/{game}/screens/{screen_id}/flow/nodes/add",
data=json.dumps({"node_type": "action", "action_type": "definir_statut_partie", "data_value": "reussi"}),
content_type="application/json",
).get_json()["id"]
client.post(f"/game/{game}/toggle-public-played", data={"value": "1"})
def test_two_players_get_independent_scores(game):
"""Le score est TOUJOURS par joueur (voir db/scoring/), jamais partagé
— même garantie que db/global_vars (voir tests/test_player_state.py),
vérifiée ici directement au niveau db/ (routes publiques retirées)."""
db.set_score_value(game, 10, player_id="alice")
db.set_status(game, "reussi", player_id="alice")
db.set_score_value(game, 20, player_id="bob")
alice = flask_app.test_client()
alice_landing = alice.get(f"/jouer/{game}")
resp = alice.post(f"/jouer/{game}/flow/nodes/{node_id}/run-score")
assert resp.get_json()["ok"] is True
alice.post(f"/jouer/{game}/flow/nodes/{status_node_id}/run-status")
bob = flask_app.test_client()
bob_landing = bob.get(f"/jouer/{game}")
bob.post(f"/jouer/{game}/flow/nodes/{node_id}/run-score")
bob.post(f"/jouer/{game}/flow/nodes/{node_id}/run-score")
alice_player_id = alice_landing.headers["Set-Cookie"].split("forge_player_id=", 1)[1].split(";", 1)[0]
bob_player_id = bob_landing.headers["Set-Cookie"].split("forge_player_id=", 1)[1].split(";", 1)[0]
assert db.get_score(game, alice_player_id) == {
"player_id": alice_player_id, "score": 10, "status": "reussi",
"updated_at": db.get_score(game, alice_player_id)["updated_at"],
assert db.get_score(game, "alice") == {
"player_id": "alice", "score": 10, "status": "reussi",
"updated_at": db.get_score(game, "alice")["updated_at"],
}
assert db.get_score(game, bob_player_id)["score"] == 20
assert db.get_score(game, bob_player_id)["status"] == "non_commence"
assert db.get_score(game, "bob")["score"] == 20
assert db.get_score(game, "bob")["status"] == "non_commence"
assert db.get_score(game)["score"] == 0 # aperçu créateur (PLAYER_SHARED) inchangé