summaryrefslogtreecommitdiff
path: root/tests/expressions_window
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2021-11-23 00:39:04 -0500
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2021-11-23 07:58:44 +0100
commitaec71aaa5b029640ce066fe5dc34f7a0050d50b2 (patch)
tree0edbf978e36f61b66fa9b9d1135673d6a0c2ba19 /tests/expressions_window
parente06dc4571ea9fd5723c8029959b95808be9f8812 (diff)
downloaddjango-aec71aaa5b029640ce066fe5dc34f7a0050d50b2.tar.gz
Fixed #33304 -- Allowed passing string expressions to Window(order_by).
Diffstat (limited to 'tests/expressions_window')
-rw-r--r--tests/expressions_window/tests.py12
1 files changed, 8 insertions, 4 deletions
diff --git a/tests/expressions_window/tests.py b/tests/expressions_window/tests.py
index 8b1b4a8a3f..5bd31b8191 100644
--- a/tests/expressions_window/tests.py
+++ b/tests/expressions_window/tests.py
@@ -51,6 +51,7 @@ class WindowFunctionTests(TestCase):
tests = [
ExtractYear(F('hire_date')).asc(),
F('hire_date__year').asc(),
+ 'hire_date__year',
]
for order_by in tests:
with self.subTest(order_by=order_by):
@@ -473,7 +474,7 @@ class WindowFunctionTests(TestCase):
"""
qs = Employee.objects.annotate(ntile=Window(
expression=Ntile(num_buckets=4),
- order_by=F('salary').desc(),
+ order_by='-salary',
)).order_by('ntile', '-salary', 'name')
self.assertQuerysetEqual(qs, [
('Miller', 'Management', 100000, 1),
@@ -875,7 +876,7 @@ class NonQueryWindowTests(SimpleTestCase):
)
self.assertEqual(
repr(Window(expression=Avg('salary'), order_by=F('department').asc())),
- '<Window: Avg(F(salary)) OVER (ORDER BY OrderBy(F(department), descending=False))>'
+ '<Window: Avg(F(salary)) OVER (OrderByList(OrderBy(F(department), descending=False)))>'
)
def test_window_frame_repr(self):
@@ -942,9 +943,12 @@ class NonQueryWindowTests(SimpleTestCase):
qs.filter(equal=True)
def test_invalid_order_by(self):
- msg = 'order_by must be either an Expression or a sequence of expressions'
+ msg = (
+ 'Window.order_by must be either a string reference to a field, an '
+ 'expression, or a list or tuple of them.'
+ )
with self.assertRaisesMessage(ValueError, msg):
- Window(expression=Sum('power'), order_by='-horse')
+ Window(expression=Sum('power'), order_by={'-horse'})
def test_invalid_source_expression(self):
msg = "Expression 'Upper' isn't compatible with OVER clauses."