Przeglądaj źródła

Added tests for NaturalOrderByManager

Jeremy Stretch 7 lat temu
rodzic
commit
048e843c39
1 zmienionych plików z 192 dodań i 0 usunięć
  1. 192 0
      netbox/utilities/tests/test_managers.py

+ 192 - 0
netbox/utilities/tests/test_managers.py

@@ -0,0 +1,192 @@
+from __future__ import unicode_literals
+
+from django.test import TestCase
+
+from dcim.models import Site
+
+
+class NaturalOrderByManagerTest(TestCase):
+    """
+    Ensure consistent natural ordering given myriad sample data. We use dcim.Site as our guinea pig because it's simple.
+    """
+
+    def setUp(self):
+        return
+
+    def evaluate_ordering(self, names):
+
+        # Create the Sites
+        Site.objects.bulk_create(
+            Site(name=name, slug=name.lower()) for name in names
+        )
+
+        # Validate forward ordering
+        self.assertEqual(
+            names,
+            list(Site.objects.values_list('name', flat=True))
+        )
+
+        # Validate reverse ordering
+        self.assertEqual(
+            list(reversed(names)),
+            list(Site.objects.reverse().values_list('name', flat=True))
+        )
+
+    def test_leading_digits(self):
+
+        self.evaluate_ordering([
+            '1Alpha',
+            '1Bravo',
+            '1Charlie',
+            '9Alpha',
+            '9Bravo',
+            '9Charlie',
+            '10Alpha',
+            '10Bravo',
+            '10Charlie',
+            '99Alpha',
+            '99Bravo',
+            '99Charlie',
+            '100Alpha',
+            '100Bravo',
+            '100Charlie',
+            '999Alpha',
+            '999Bravo',
+            '999Charlie',
+        ])
+
+    def test_trailing_digits(self):
+
+        self.evaluate_ordering([
+            'Alpha1',
+            'Alpha9',
+            'Alpha10',
+            'Alpha99',
+            'Alpha100',
+            'Alpha999',
+            'Bravo1',
+            'Bravo9',
+            'Bravo10',
+            'Bravo99',
+            'Bravo100',
+            'Bravo999',
+            'Charlie1',
+            'Charlie9',
+            'Charlie10',
+            'Charlie99',
+            'Charlie100',
+            'Charlie999',
+        ])
+
+    def test_leading_and_trailing_digits(self):
+
+        self.evaluate_ordering([
+            '1Alpha1',
+            '1Alpha9',
+            '1Alpha10',
+            '1Alpha99',
+            '1Alpha100',
+            '1Alpha999',
+            '1Bravo1',
+            '1Bravo9',
+            '1Bravo10',
+            '1Bravo99',
+            '1Bravo100',
+            '1Bravo999',
+            '1Charlie1',
+            '1Charlie9',
+            '1Charlie10',
+            '1Charlie99',
+            '1Charlie100',
+            '1Charlie999',
+            '9Alpha1',
+            '9Alpha9',
+            '9Alpha10',
+            '9Alpha99',
+            '9Alpha100',
+            '9Alpha999',
+            '9Bravo1',
+            '9Bravo9',
+            '9Bravo10',
+            '9Bravo99',
+            '9Bravo100',
+            '9Bravo999',
+            '9Charlie1',
+            '9Charlie9',
+            '9Charlie10',
+            '9Charlie99',
+            '9Charlie100',
+            '9Charlie999',
+            '10Alpha1',
+            '10Alpha9',
+            '10Alpha10',
+            '10Alpha99',
+            '10Alpha100',
+            '10Alpha999',
+            '10Bravo1',
+            '10Bravo9',
+            '10Bravo10',
+            '10Bravo99',
+            '10Bravo100',
+            '10Bravo999',
+            '10Charlie1',
+            '10Charlie9',
+            '10Charlie10',
+            '10Charlie99',
+            '10Charlie100',
+            '10Charlie999',
+            '99Alpha1',
+            '99Alpha9',
+            '99Alpha10',
+            '99Alpha99',
+            '99Alpha100',
+            '99Alpha999',
+            '99Bravo1',
+            '99Bravo9',
+            '99Bravo10',
+            '99Bravo99',
+            '99Bravo100',
+            '99Bravo999',
+            '99Charlie1',
+            '99Charlie9',
+            '99Charlie10',
+            '99Charlie99',
+            '99Charlie100',
+            '99Charlie999',
+            '100Alpha1',
+            '100Alpha9',
+            '100Alpha10',
+            '100Alpha99',
+            '100Alpha100',
+            '100Alpha999',
+            '100Bravo1',
+            '100Bravo9',
+            '100Bravo10',
+            '100Bravo99',
+            '100Bravo100',
+            '100Bravo999',
+            '100Charlie1',
+            '100Charlie9',
+            '100Charlie10',
+            '100Charlie99',
+            '100Charlie100',
+            '100Charlie999',
+            '999Alpha1',
+            '999Alpha9',
+            '999Alpha10',
+            '999Alpha99',
+            '999Alpha100',
+            '999Alpha999',
+            '999Bravo1',
+            '999Bravo9',
+            '999Bravo10',
+            '999Bravo99',
+            '999Bravo100',
+            '999Bravo999',
+            '999Charlie1',
+            '999Charlie9',
+            '999Charlie10',
+            '999Charlie99',
+            '999Charlie100',
+            '999Charlie999',
+        ])