[FIX] test vpn : un nom d'organisation tierce, remplacé par un inventé

La règle des conventions est explicite : l'exemple qui illustre un
interdit s'invente, et un test fige sa valeur pour toujours. Le nom d'une
organisation tierce servait de profil et de passerelle dans quatorze
occurrences, choisi parce qu'il était parlant — exactement le réflexe que
la règle combat.

Le remplaçant est inventé et vérifié absent du reste du dépôt. Ce que le
test éprouve ne change pas : un profil sans route reste accepté et
signalé.

--- EN ---

The conventions are explicit: an example illustrating a prohibition is
invented, and a test freezes its value forever. A third-party
organisation's name served as profile and gateway in fourteen places,
picked because it spoke — exactly the reflex the rule fights.

The replacement is invented and verified absent from the rest of the
repository. What the test proves does not change: a profile without
routes is still accepted and flagged.

Assisted-by: Claude Opus 5
This commit is contained in:
Mathieu Benoit 2026-09-10 00:46:07 -04:00
parent b19bbe2f9b
commit a49d8178a2

View file

@ -372,9 +372,9 @@ class OnlyWhatTheSiteGaveYou(MenuBase):
def test_a_profile_without_routes_is_accepted_and_flagged(self):
names = list(DRIVERS)
answers = [
"novipro",
"cortalis",
DRIVER_LETTERS[names.index("l2tp_ipsec")],
"vpn.novipro.example", # la passerelle
"vpn.cortalis.example", # la passerelle
"user", # l'utilisateur PPP
"", # réseaux : le site n'en a pas donné
"", # tout le trafic ? non
@ -385,7 +385,7 @@ class OnlyWhatTheSiteGaveYou(MenuBase):
with self.answering(*answers):
with redirect_stdout(buffer):
self.todo._vpn_edit_profile()
saved = profiles.load("novipro")
saved = profiles.load("cortalis")
self.assertIsNotNone(saved, "profil refusé alors qu'il est utilisable")
self.assertEqual(saved["routes"], [])
self.assertFalse(saved["default_route"])
@ -401,7 +401,7 @@ class OnlyWhatTheSiteGaveYou(MenuBase):
profile = profiles.validate(
{
"name": "novipro",
"name": "cortalis",
"driver": "l2tp_ipsec",
"server": "127.0.0.1",
"ppp_user": "user",
@ -427,7 +427,7 @@ class OnlyWhatTheSiteGaveYou(MenuBase):
profile = profiles.validate(
{
"name": "novipro",
"name": "cortalis",
"driver": "l2tp_ipsec",
"server": "127.0.0.1",
"ppp_user": "user",
@ -489,9 +489,9 @@ class SecretsOnlyWhenThereAreSome(MenuBase):
"""
profiles.save(
{
"name": "novipro",
"name": "cortalis",
"driver": "l2tp_ipsec",
"server": "vpn.novipro.example",
"server": "vpn.cortalis.example",
"ppp_user": "user",
}
)
@ -505,7 +505,7 @@ class SecretsOnlyWhenThereAreSome(MenuBase):
return "secret"
with patch.object(
self.todo, "_vpn_select_profile", return_value="novipro"
self.todo, "_vpn_select_profile", return_value="cortalis"
):
with self.answering(coffre, "o"):
with patch("getpass.getpass", masked):
@ -522,9 +522,9 @@ class SecretsOnlyWhenThereAreSome(MenuBase):
"""
profiles.save(
{
"name": "novipro",
"name": "cortalis",
"driver": "l2tp_ipsec",
"server": "vpn.novipro.example",
"server": "vpn.cortalis.example",
"ppp_user": "user",
}
)
@ -540,7 +540,7 @@ class SecretsOnlyWhenThereAreSome(MenuBase):
buffer = io.StringIO()
with patch.object(
self.todo, "_vpn_select_profile", return_value="novipro"
self.todo, "_vpn_select_profile", return_value="cortalis"
):
with self.answering(coffre, "o"):
with patch("getpass.getpass", masked):
@ -558,9 +558,9 @@ class SecretsOnlyWhenThereAreSome(MenuBase):
def test_a_field_already_set_says_so(self):
profiles.save(
{
"name": "novipro",
"name": "cortalis",
"driver": "l2tp_ipsec",
"server": "vpn.novipro.example",
"server": "vpn.cortalis.example",
"ppp_user": "user",
}
)
@ -574,7 +574,7 @@ class SecretsOnlyWhenThereAreSome(MenuBase):
return "valeur"
with patch.object(
self.todo, "_vpn_select_profile", return_value="novipro"
self.todo, "_vpn_select_profile", return_value="cortalis"
):
with self.answering(coffre, "o"):
with patch("getpass.getpass", masked):