mirror of
https://github.com/django/django.git
synced 2024-12-01 15:42:04 +01:00
ea3beb4f5a
This prevented the default behavior of BaseExpression._resolve_output_field from error'ing out when such functions accepted both expressions from mixed types (e.g. SubStr(CharField, IntegerField, IntegerField)).
29 lines
1.1 KiB
Python
29 lines
1.1 KiB
Python
from django.db import connection
|
|
from django.db.models import Value
|
|
from django.db.models.functions import Length, Repeat
|
|
from django.test import TestCase
|
|
|
|
from ..models import Author
|
|
|
|
|
|
class RepeatTests(TestCase):
|
|
def test_basic(self):
|
|
Author.objects.create(name='John', alias='xyz')
|
|
none_value = '' if connection.features.interprets_empty_strings_as_nulls else None
|
|
tests = (
|
|
(Repeat('name', 0), ''),
|
|
(Repeat('name', 2), 'JohnJohn'),
|
|
(Repeat('name', Length('alias')), 'JohnJohnJohn'),
|
|
(Repeat(Value('x'), 3), 'xxx'),
|
|
(Repeat('name', None), none_value),
|
|
(Repeat('goes_by', 1), none_value),
|
|
)
|
|
for function, repeated_text in tests:
|
|
with self.subTest(function=function):
|
|
authors = Author.objects.annotate(repeated_text=function)
|
|
self.assertQuerysetEqual(authors, [repeated_text], lambda a: a.repeated_text, ordered=False)
|
|
|
|
def test_negative_number(self):
|
|
with self.assertRaisesMessage(ValueError, "'number' must be greater or equal to 0."):
|
|
Repeat('name', -1)
|