Agent utilisateur pour Gitea, messages d'erreur exploitables
This commit is contained in:
1 parent
c411f2933d
commit
8559aca4d7
11 files changed
+338
-25
No files matched your search
@@ -90,6 +90,24 @@ if (erreurs.length === 0) {
|
||||
}
|
||||
}
|
||||
|
||||
// Les notifications doivent s'afficher, avec leur type.
|
||||
try {
|
||||
window.eval("notifier('essai de reussite', 'succes'); notifier('essai d erreur', 'erreur');");
|
||||
const zone = document.getElementById('notifications');
|
||||
if (!zone || zone.children.length !== 2) {
|
||||
erreurs.push('les notifications ne s\'affichent pas');
|
||||
} else {
|
||||
const types = [...zone.children].map((n) => n.className);
|
||||
if (!types.some((c) => c.includes('succes')) || !types.some((c) => c.includes('erreur'))) {
|
||||
erreurs.push('les notifications ne portent pas leur type : ' + types.join(', '));
|
||||
}
|
||||
const fermeture = zone.firstElementChild.querySelector('.notif-fermer');
|
||||
if (!fermeture) erreurs.push('une notification n\'est pas refermable');
|
||||
}
|
||||
} catch (erreur) {
|
||||
erreurs.push('notifications : ' + erreur.message);
|
||||
}
|
||||
|
||||
// Et les boutons de la barre d'outils ne doivent pas lever d'exception.
|
||||
for (const identifiant of ['btn-pack', 'btn-generer', 'btn-vider']) {
|
||||
const bouton = document.getElementById(identifiant);
|
||||
|
||||
@@ -460,3 +460,63 @@ def test_les_deux_routes_de_sante(app):
|
||||
assert reference.status_code == 200
|
||||
assert ancienne.status_code == 200
|
||||
assert reference.get_json()["statut"] == ancienne.get_json()["statut"] == "ok"
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"yaml_partiel, attendu",
|
||||
[
|
||||
("id: app-essai\nname: Essai\ncategory: application\n", "modele d'hote"),
|
||||
("id: app-essai\ncategory: application\nhost_template: {name: X}\n", "nom lisible"),
|
||||
(
|
||||
"id: app-essai\nname: Essai\ncategory: application\nhost_template: {name: X}\n",
|
||||
"au moins une sonde",
|
||||
),
|
||||
],
|
||||
)
|
||||
def test_messages_de_soumission_explicites(yaml_partiel, attendu):
|
||||
"""Un contributeur doit lire ce qui manque, pas le nom d'une cle Python."""
|
||||
from enclume.routes_donnees import valider_pack
|
||||
|
||||
_, problemes = valider_pack(yaml_partiel)
|
||||
assert any(attendu in probleme for probleme in problemes), problemes
|
||||
|
||||
|
||||
def test_les_ressources_statiques_portent_la_version(app):
|
||||
"""Sans version dans l'URL, un visiteur garde l'ancien script apres mise a jour."""
|
||||
import re
|
||||
|
||||
html = app.test_client().get("/editeur").data.decode()
|
||||
scripts = re.findall(r'src="(/static/[^"]+)"', html)
|
||||
assert scripts
|
||||
assert all("v=" in script for script in scripts), scripts
|
||||
|
||||
|
||||
def test_appel_gitea_porte_un_agent_utilisateur(monkeypatch):
|
||||
"""Sans agent explicite, urllib s'annonce comme Python-urllib, souvent filtre."""
|
||||
import urllib.request
|
||||
|
||||
import enclume.gitea as gitea
|
||||
|
||||
monkeypatch.setattr(gitea.Config, "GITEA_URL", "https://gitea.example")
|
||||
monkeypatch.setattr(gitea.Config, "GITEA_TOKEN", "jeton")
|
||||
vues = {}
|
||||
|
||||
class FausseReponse:
|
||||
def read(self):
|
||||
return b"{}"
|
||||
|
||||
def __enter__(self):
|
||||
return self
|
||||
|
||||
def __exit__(self, *args):
|
||||
return False
|
||||
|
||||
def faux_urlopen(requete, **_options):
|
||||
vues["entetes"] = dict(requete.header_items())
|
||||
return FausseReponse()
|
||||
|
||||
monkeypatch.setattr(urllib.request, "urlopen", faux_urlopen)
|
||||
gitea._appel("GET", "/repos/essai/essai")
|
||||
|
||||
agent = vues["entetes"].get("User-agent", "")
|
||||
assert agent.startswith("Enclume/"), vues["entetes"]
|
||||
Reference in new issue
Block a user