"""Palier 24 (0.35.0, issue #26): jalons en écriture — créer, modifier (titre/échéance), fermer, depuis Kanbante.""" from tests.conftest import csrf_from def test_milestone_create_via_api(client, fake_gitea): token = csrf_from(client) r = client.post( "/api/repos/Projets/demo/milestones", data={ "title": "Version 2.0", "description": "Le gros morceau", "due_on": "2027-01-31", "csrf_token": token, }, ) assert r.status_code == 201 payload = r.json() assert payload["ok"] is True assert payload["milestone"]["title"] == "Version 2.0" assert payload["milestone"]["due_on"] == "2027-01-31T12:00:00Z" titles = [ m["title"] for m in fake_gitea._milestones["Projets/demo"] ] assert "Version 2.0" in titles def test_milestone_create_rejects_bad_date(client, fake_gitea): token = csrf_from(client) avant = len(fake_gitea._milestones["Projets/demo"]) r = client.post( "/api/repos/Projets/demo/milestones", data={ "title": "Jalon invalide", "due_on": "31/01/2027", "csrf_token": token, }, ) assert r.status_code == 400 # Rien d'écrit côté forge. assert len(fake_gitea._milestones["Projets/demo"]) == avant def test_milestone_update_title_and_clear_due(client, fake_gitea): token = csrf_from(client) r = client.post( "/api/repos/Projets/demo/milestones/1/update", data={"title": "Sprint 1 — prolongé", "due_on": "", "csrf_token": token}, ) assert r.status_code == 200 sprint = fake_gitea._milestones["Projets/demo"][0] assert sprint["title"] == "Sprint 1 — prolongé" assert sprint["due_on"] is None # échéance retirée def test_milestone_close(client, fake_gitea): token = csrf_from(client) r = client.post( "/api/repos/Projets/demo/milestones/1/close", data={"csrf_token": token}, ) assert r.status_code == 200 assert fake_gitea._milestones["Projets/demo"][0]["state"] == "closed" # La page Projet ne liste plus le jalon fermé parmi les ouverts. page = client.get("/project/Projets/demo") assert "Version" in page.text # la page répond toujours assert 'data-action="/api/repos/Projets/demo/milestones"' in page.text def test_project_page_has_milestone_management(client): page = client.get("/project/Projets/demo") assert page.status_code == 200 assert "Nouveau jalon" in page.text assert "Modifier / fermer" in page.text assert 'name="due_on"' in page.text assert "/static/js/project.js?v=" in page.text