parts/django/tests/modeltests/validation/test_unique.py
changeset 307 c6bca38c1cbf
equal deleted inserted replaced
306:5ff1fc726848 307:c6bca38c1cbf
       
     1 import unittest
       
     2 import datetime
       
     3 from django.conf import settings
       
     4 from django.db import connection
       
     5 from models import CustomPKModel, UniqueTogetherModel, UniqueFieldsModel, UniqueForDateModel, ModelToValidate
       
     6 
       
     7 
       
     8 class GetUniqueCheckTests(unittest.TestCase):
       
     9     def test_unique_fields_get_collected(self):
       
    10         m = UniqueFieldsModel()
       
    11         self.assertEqual(
       
    12             ([(UniqueFieldsModel, ('id',)),
       
    13               (UniqueFieldsModel, ('unique_charfield',)),
       
    14               (UniqueFieldsModel, ('unique_integerfield',))],
       
    15              []),
       
    16             m._get_unique_checks()
       
    17         )
       
    18 
       
    19     def test_unique_together_gets_picked_up_and_converted_to_tuple(self):
       
    20         m = UniqueTogetherModel()
       
    21         self.assertEqual(
       
    22             ([(UniqueTogetherModel, ('ifield', 'cfield',)),
       
    23               (UniqueTogetherModel, ('ifield', 'efield')),
       
    24               (UniqueTogetherModel, ('id',)), ],
       
    25              []),
       
    26             m._get_unique_checks()
       
    27         )
       
    28 
       
    29     def test_primary_key_is_considered_unique(self):
       
    30         m = CustomPKModel()
       
    31         self.assertEqual(([(CustomPKModel, ('my_pk_field',))], []), m._get_unique_checks())
       
    32 
       
    33     def test_unique_for_date_gets_picked_up(self):
       
    34         m = UniqueForDateModel()
       
    35         self.assertEqual((
       
    36             [(UniqueForDateModel, ('id',))],
       
    37             [(UniqueForDateModel, 'date', 'count', 'start_date'),
       
    38              (UniqueForDateModel, 'year', 'count', 'end_date'),
       
    39              (UniqueForDateModel, 'month', 'order', 'end_date')]
       
    40             ), m._get_unique_checks()
       
    41         )
       
    42 
       
    43     def test_unique_for_date_exclusion(self):
       
    44         m = UniqueForDateModel()
       
    45         self.assertEqual((
       
    46             [(UniqueForDateModel, ('id',))],
       
    47             [(UniqueForDateModel, 'year', 'count', 'end_date'),
       
    48              (UniqueForDateModel, 'month', 'order', 'end_date')]
       
    49             ), m._get_unique_checks(exclude='start_date')
       
    50         )
       
    51 
       
    52 class PerformUniqueChecksTest(unittest.TestCase):
       
    53     def setUp(self):
       
    54         # Set debug to True to gain access to connection.queries.
       
    55         self._old_debug, settings.DEBUG = settings.DEBUG, True
       
    56         super(PerformUniqueChecksTest, self).setUp()
       
    57 
       
    58     def tearDown(self):
       
    59         # Restore old debug value.
       
    60         settings.DEBUG = self._old_debug
       
    61         super(PerformUniqueChecksTest, self).tearDown()
       
    62 
       
    63     def test_primary_key_unique_check_not_performed_when_adding_and_pk_not_specified(self):
       
    64         # Regression test for #12560
       
    65         query_count = len(connection.queries)
       
    66         mtv = ModelToValidate(number=10, name='Some Name')
       
    67         setattr(mtv, '_adding', True)
       
    68         mtv.full_clean()
       
    69         self.assertEqual(query_count, len(connection.queries))
       
    70 
       
    71     def test_primary_key_unique_check_performed_when_adding_and_pk_specified(self):
       
    72         # Regression test for #12560
       
    73         query_count = len(connection.queries)
       
    74         mtv = ModelToValidate(number=10, name='Some Name', id=123)
       
    75         setattr(mtv, '_adding', True)
       
    76         mtv.full_clean()
       
    77         self.assertEqual(query_count + 1, len(connection.queries))
       
    78 
       
    79     def test_primary_key_unique_check_not_performed_when_not_adding(self):
       
    80         # Regression test for #12132
       
    81         query_count= len(connection.queries)
       
    82         mtv = ModelToValidate(number=10, name='Some Name')
       
    83         mtv.full_clean()
       
    84         self.assertEqual(query_count, len(connection.queries))
       
    85