mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	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)
 |