"""Palier 17 (0.21.0) — sélecteur de dépôt intelligent (Capture). - GET /api/repos : liste exhaustive des dépôts pour les sélecteurs (la palette reste plafonnée à 60), épinglés d'abord, archivés en dernier. - La page /capture branche le sélecteur sur le champ Dépôt (liste filtrée + complétion Tab par segment, repo-picker.js). """ def test_api_repos_lists_everything_ranked(client, fake_gitea): fake_gitea.starred.add("Projets/vieux") r = client.get("/api/repos") assert r.status_code == 200 repos = r.json()["repos"] names = [x["full_name"] for x in repos] # Exhaustif : actifs + inactifs + archivés du faux Gitea. assert names == ["Projets/vieux", "Projets/demo", "Projets/archive"] or set(names) == { "Projets/demo", "Projets/vieux", "Projets/archive", } # L'épinglé passe devant malgré son inactivité. assert names[0] == "Projets/vieux" by_name = {x["full_name"]: x for x in repos} assert by_name["Projets/vieux"]["starred"] is True assert by_name["Projets/demo"]["starred"] is False assert by_name["Projets/archive"]["archived"] is True def test_capture_page_wires_the_repo_picker(client): r = client.get("/capture") assert r.status_code == 200 assert 'id="capture-repo"' in r.text assert 'id="repo-listbox"' in r.text assert "repo-picker.js" in r.text # Le contrat du formulaire ne change pas. assert 'name="repo_full_name"' in r.text