test_utils.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. """Tests unitaires pour jobs/utils.py (fonctions sans sudo)."""
  2. from unittest.mock import patch
  3. class TestUniqueArchiveName:
  4. def test_sans_collision(self):
  5. from jobs.utils import unique_archive_name
  6. with patch("jobs.utils.sudo_exists", return_value=False):
  7. result = unique_archive_name("instance_app_20260511", "/backups")
  8. assert result == "instance_app_20260511"
  9. def test_une_collision(self):
  10. from jobs.utils import unique_archive_name
  11. calls = {"n": 0}
  12. def exists(path):
  13. calls["n"] += 1
  14. return calls["n"] == 1 # première vérification → collision, ensuite libre
  15. with patch("jobs.utils.sudo_exists", side_effect=exists):
  16. result = unique_archive_name("instance_app_20260511", "/backups")
  17. assert result == "instance_app_20260511_2"
  18. def test_trois_collisions(self):
  19. from jobs.utils import unique_archive_name
  20. calls = {"n": 0}
  21. def exists(path):
  22. calls["n"] += 1
  23. return calls["n"] <= 3 # base, _2, _3 occupés ; _4 libre
  24. with patch("jobs.utils.sudo_exists", side_effect=exists):
  25. result = unique_archive_name("instance_app_20260511", "/backups")
  26. assert result == "instance_app_20260511_4"
  27. def test_chemin_correct_transmis(self):
  28. from jobs.utils import unique_archive_name
  29. seen_paths = []
  30. def exists(path):
  31. seen_paths.append(path)
  32. return False
  33. with patch("jobs.utils.sudo_exists", side_effect=exists):
  34. unique_archive_name("myarchive", "/var/backups")
  35. assert seen_paths == ["/var/backups/myarchive.tar"]