1. from unittest import skipUnless
    
  2. 
    
  3. import django.utils.version
    
  4. from django import get_version
    
  5. from django.test import SimpleTestCase
    
  6. from django.utils.version import (
    
  7.     get_complete_version,
    
  8.     get_git_changeset,
    
  9.     get_version_tuple,
    
  10. )
    
  11. 
    
  12. 
    
  13. class VersionTests(SimpleTestCase):
    
  14.     def test_development(self):
    
  15.         get_git_changeset.cache_clear()
    
  16.         ver_tuple = (1, 4, 0, "alpha", 0)
    
  17.         # This will return a different result when it's run within or outside
    
  18.         # of a git clone: 1.4.devYYYYMMDDHHMMSS or 1.4.
    
  19.         ver_string = get_version(ver_tuple)
    
  20.         self.assertRegex(ver_string, r"1\.4(\.dev[0-9]+)?")
    
  21. 
    
  22.     @skipUnless(
    
  23.         hasattr(django.utils.version, "__file__"),
    
  24.         "test_development() checks the same when __file__ is already missing, "
    
  25.         "e.g. in a frozen environments",
    
  26.     )
    
  27.     def test_development_no_file(self):
    
  28.         get_git_changeset.cache_clear()
    
  29.         version_file = django.utils.version.__file__
    
  30.         try:
    
  31.             del django.utils.version.__file__
    
  32.             self.test_development()
    
  33.         finally:
    
  34.             django.utils.version.__file__ = version_file
    
  35. 
    
  36.     def test_releases(self):
    
  37.         tuples_to_strings = (
    
  38.             ((1, 4, 0, "alpha", 1), "1.4a1"),
    
  39.             ((1, 4, 0, "beta", 1), "1.4b1"),
    
  40.             ((1, 4, 0, "rc", 1), "1.4rc1"),
    
  41.             ((1, 4, 0, "final", 0), "1.4"),
    
  42.             ((1, 4, 1, "rc", 2), "1.4.1rc2"),
    
  43.             ((1, 4, 1, "final", 0), "1.4.1"),
    
  44.         )
    
  45.         for ver_tuple, ver_string in tuples_to_strings:
    
  46.             self.assertEqual(get_version(ver_tuple), ver_string)
    
  47. 
    
  48.     def test_get_version_tuple(self):
    
  49.         self.assertEqual(get_version_tuple("1.2.3"), (1, 2, 3))
    
  50.         self.assertEqual(get_version_tuple("1.2.3b2"), (1, 2, 3))
    
  51.         self.assertEqual(get_version_tuple("1.2.3b2.dev0"), (1, 2, 3))
    
  52. 
    
  53.     def test_get_version_invalid_version(self):
    
  54.         tests = [
    
  55.             # Invalid length.
    
  56.             (3, 2, 0, "alpha", 1, "20210315111111"),
    
  57.             # Invalid development status.
    
  58.             (3, 2, 0, "gamma", 1, "20210315111111"),
    
  59.         ]
    
  60.         for version in tests:
    
  61.             with self.subTest(version=version), self.assertRaises(AssertionError):
    
  62.                 get_complete_version(version)