From 40894f29675b02be9597c3af358ed490d2b96651 Mon Sep 17 00:00:00 2001 From: Simon Charette Date: Sun, 30 Aug 2020 22:18:55 -0400 Subject: [PATCH] Refs #30446 -- Added tests for resolving output_field of CombinedExpression. --- tests/expressions/tests.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/tests/expressions/tests.py b/tests/expressions/tests.py index c15204ce33..42b6b828f4 100644 --- a/tests/expressions/tests.py +++ b/tests/expressions/tests.py @@ -15,7 +15,9 @@ from django.db.models import ( Min, Model, OrderBy, OuterRef, Q, StdDev, Subquery, Sum, TimeField, UUIDField, Value, Variance, When, ) -from django.db.models.expressions import Col, Combinable, Random, RawSQL, Ref +from django.db.models.expressions import ( + Col, Combinable, CombinedExpression, Random, RawSQL, Ref, +) from django.db.models.functions import ( Coalesce, Concat, Left, Length, Lower, Substr, Upper, ) @@ -1888,6 +1890,26 @@ class CombinableTests(SimpleTestCase): object() | Combinable() +class CombinedExpressionTests(SimpleTestCase): + def test_resolve_output_field(self): + tests = [ + (IntegerField, DecimalField, DecimalField), + (DecimalField, IntegerField, DecimalField), + (IntegerField, FloatField, FloatField), + (FloatField, IntegerField, FloatField), + ] + connectors = [Combinable.ADD, Combinable.SUB, Combinable.MUL, Combinable.DIV] + for lhs, rhs, combined in tests: + for connector in connectors: + with self.subTest(lhs=lhs, connector=connector, rhs=rhs, combined=combined): + expr = CombinedExpression( + Expression(lhs()), + connector, + Expression(rhs()), + ) + self.assertIsInstance(expr.output_field, combined) + + class ExpressionWrapperTests(SimpleTestCase): def test_empty_group_by(self): expr = ExpressionWrapper(Value(3), output_field=IntegerField())