@@ -842,10 +842,10 @@ def test_database_constraint(self):
842
842
843
843
@skipUnlessDBFeature ("supports_partial_indexes" )
844
844
def test_database_constraint_with_condition (self ):
845
- UniqueConstraintConditionProduct .objects .create (name = "p1" )
846
- UniqueConstraintConditionProduct .objects .create (name = "p2" )
845
+ UniqueConstraintConditionProduct .objects .create (name = "p1" , color = "blue" )
846
+ UniqueConstraintConditionProduct .objects .create (name = "p2" , color = "blue" )
847
847
with self .assertRaises (IntegrityError ):
848
- UniqueConstraintConditionProduct .objects .create (name = "p1" )
848
+ UniqueConstraintConditionProduct .objects .create (name = "p1" , color = "blue" )
849
849
850
850
def test_model_validation (self ):
851
851
msg = "Unique constraint product with this Name and Color already exists."
@@ -861,13 +861,14 @@ def test_model_validation_with_condition(self):
861
861
Model.validate_constraints().
862
862
"""
863
863
obj1 = UniqueConstraintConditionProduct .objects .create (name = "p1" , color = "red" )
864
- obj2 = UniqueConstraintConditionProduct .objects .create (name = "p2" )
864
+ obj2 = UniqueConstraintConditionProduct .objects .create (name = "p2" , color = "blue" )
865
865
UniqueConstraintConditionProduct (
866
866
name = obj1 .name , color = "blue"
867
867
).validate_constraints ()
868
868
msg = "Constraint “name_without_color_uniq” is violated."
869
869
with self .assertRaisesMessage (ValidationError , msg ):
870
- UniqueConstraintConditionProduct (name = obj2 .name ).validate_constraints ()
870
+ p = UniqueConstraintConditionProduct (name = obj2 .name , color = "blue" )
871
+ p .validate_constraints ()
871
872
872
873
def test_model_validation_constraint_no_code_error (self ):
873
874
class ValidateNoCodeErrorConstraint (UniqueConstraint ):
@@ -938,13 +939,13 @@ def test_validate_fields_unattached(self):
938
939
939
940
@skipUnlessDBFeature ("supports_partial_indexes" )
940
941
def test_validate_condition (self ):
941
- p1 = UniqueConstraintConditionProduct .objects .create (name = "p1" )
942
+ p1 = UniqueConstraintConditionProduct .objects .create (name = "p1" , color = "blue" )
942
943
constraint = UniqueConstraintConditionProduct ._meta .constraints [0 ]
943
944
msg = "Constraint “name_without_color_uniq” is violated."
944
945
with self .assertRaisesMessage (ValidationError , msg ):
945
946
constraint .validate (
946
947
UniqueConstraintConditionProduct ,
947
- UniqueConstraintConditionProduct (name = p1 .name , color = None ),
948
+ UniqueConstraintConditionProduct (name = p1 .name , color = "blue" ),
948
949
)
949
950
# Values not matching condition are ignored.
950
951
constraint .validate (
@@ -962,19 +963,19 @@ def test_validate_condition(self):
962
963
963
964
@skipUnlessDBFeature ("supports_partial_indexes" )
964
965
def test_validate_condition_custom_error (self ):
965
- p1 = UniqueConstraintConditionProduct .objects .create (name = "p1" )
966
+ p1 = UniqueConstraintConditionProduct .objects .create (name = "p1" , color = "blue" )
966
967
constraint = models .UniqueConstraint (
967
968
fields = ["name" ],
968
969
name = "name_without_color_uniq" ,
969
- condition = models .Q (color__isnull = True ),
970
+ condition = models .Q (color = "blue" ),
970
971
violation_error_code = "custom_code" ,
971
972
violation_error_message = "Custom message" ,
972
973
)
973
974
msg = "Custom message"
974
975
with self .assertRaisesMessage (ValidationError , msg ) as cm :
975
976
constraint .validate (
976
977
UniqueConstraintConditionProduct ,
977
- UniqueConstraintConditionProduct (name = p1 .name , color = None ),
978
+ UniqueConstraintConditionProduct (name = p1 .name , color = "blue" ),
978
979
)
979
980
self .assertEqual (cm .exception .code , "custom_code" )
980
981
@@ -1026,9 +1027,13 @@ def test_validate_expression_condition(self):
1026
1027
constraint = models .UniqueConstraint (
1027
1028
Lower ("name" ),
1028
1029
name = "name_lower_without_color_uniq" ,
1029
- condition = models .Q (color__isnull = True ),
1030
+ condition = models .Q (color = "blue" ),
1031
+ )
1032
+ p2 = UniqueConstraintProduct .objects .create (name = "p2" , color = "blue" )
1033
+ non_unique_product = UniqueConstraintProduct (
1034
+ name = p2 .name .upper (),
1035
+ color = p2 .color ,
1030
1036
)
1031
- non_unique_product = UniqueConstraintProduct (name = self .p2 .name .upper ())
1032
1037
msg = "Constraint “name_lower_without_color_uniq” is violated."
1033
1038
with self .assertRaisesMessage (ValidationError , msg ):
1034
1039
constraint .validate (UniqueConstraintProduct , non_unique_product )
0 commit comments