from django.db.models.functions import Lag, Lead, NthValue, Ntile from django.test import SimpleTestCase class ValidationTests(SimpleTestCase): def test_nth_negative_nth_value(self): msg = "NthValue requires a positive integer as for nth" with self.assertRaisesMessage(ValueError, msg): NthValue(expression="salary", nth=-1) def test_nth_null_expression(self): msg = "NthValue requires a non-null source expression" with self.assertRaisesMessage(ValueError, msg): NthValue(expression=None) def test_lag_negative_offset(self): msg = "Lag requires a positive integer for the offset" with self.assertRaisesMessage(ValueError, msg): Lag(expression="salary", offset=-1) def test_lead_negative_offset(self): msg = "Lead requires a positive integer for the offset" with self.assertRaisesMessage(ValueError, msg): Lead(expression="salary", offset=-1) def test_null_source_lead(self): msg = "Lead requires a non-null source expression" with self.assertRaisesMessage(ValueError, msg): Lead(expression=None) def test_null_source_lag(self): msg = "Lag requires a non-null source expression" with self.assertRaisesMessage(ValueError, msg): Lag(expression=None) def test_negative_num_buckets_ntile(self): msg = "num_buckets must be greater than 0" with self.assertRaisesMessage(ValueError, msg): Ntile(num_buckets=-1)