diff options
author | Simon Charette <charette.s@gmail.com> | 2020-02-27 00:34:37 -0500 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-02-27 09:20:30 +0100 |
commit | 16cacdcb3f7856df5454b648503374de150fa245 (patch) | |
tree | bea0824e3d16f8935ecf3a7bb799f189a875ee76 /tests | |
parent | 59ac25c93b228cd4ef34d4f36fbfbab3d9f6b4ad (diff) | |
download | django-16cacdcb3f7856df5454b648503374de150fa245.tar.gz |
[3.0.x] Fixed #31312 -- Properly ordered temporal subtraction params on MySQL.
Regression in 9bcbcd599abac91ea853b2fe10b784ba32df043e.
Thanks rick2ricks for the report.
Backport of 41ebe60728a15aa273f4d70de92f5246a89c3d4e from master
Diffstat (limited to 'tests')
-rw-r--r-- | tests/expressions/tests.py | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/tests/expressions/tests.py b/tests/expressions/tests.py index 005e9150e7..bcd2f93177 100644 --- a/tests/expressions/tests.py +++ b/tests/expressions/tests.py @@ -1221,13 +1221,13 @@ class FTimeDeltaTests(TestCase): # e0: started same day as assigned, zero duration end = stime + delta0 - e0 = Experiment.objects.create( + cls.e0 = Experiment.objects.create( name='e0', assigned=sday, start=stime, end=end, completed=end.date(), estimated_time=delta0, ) cls.deltas.append(delta0) - cls.delays.append(e0.start - datetime.datetime.combine(e0.assigned, midnight)) - cls.days_long.append(e0.completed - e0.assigned) + cls.delays.append(cls.e0.start - datetime.datetime.combine(cls.e0.assigned, midnight)) + cls.days_long.append(cls.e0.completed - cls.e0.assigned) # e1: started one day after assigned, tiny duration, data # set so that end time has no fractional seconds, which @@ -1435,6 +1435,23 @@ class FTimeDeltaTests(TestCase): self.assertTrue(queryset.exists()) @skipUnlessDBFeature('supports_temporal_subtraction') + def test_date_case_subtraction(self): + queryset = Experiment.objects.annotate( + date_case=Case( + When(Q(name='e0'), then=F('completed')), + output_field=DateField(), + ), + completed_value=Value( + self.e0.completed, + output_field=DateField(), + ), + difference=ExpressionWrapper( + F('date_case') - F('completed_value'), output_field=DurationField(), + ), + ).filter(difference=datetime.timedelta()) + self.assertEqual(queryset.get(), self.e0) + + @skipUnlessDBFeature('supports_temporal_subtraction') def test_time_subtraction(self): Time.objects.create(time=datetime.time(12, 30, 15, 2345)) queryset = Time.objects.annotate( |