mirror of
				https://github.com/django/django.git
				synced 2025-10-30 00:56:09 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			41 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from unittest import skipUnless
 | |
| 
 | |
| from django.db import connection
 | |
| from django.db.models import Value
 | |
| from django.db.models.functions import NullIf
 | |
| from django.test import TestCase
 | |
| 
 | |
| from ..models import Author
 | |
| 
 | |
| 
 | |
| class NullIfTests(TestCase):
 | |
| 
 | |
|     @classmethod
 | |
|     def setUpTestData(cls):
 | |
|         Author.objects.create(name='John Smith', alias='smithj')
 | |
|         Author.objects.create(name='Rhonda', alias='Rhonda')
 | |
| 
 | |
|     def test_basic(self):
 | |
|         authors = Author.objects.annotate(nullif=NullIf('alias', 'name')).values_list('nullif')
 | |
|         self.assertSequenceEqual(
 | |
|             authors, [
 | |
|                 ('smithj',),
 | |
|                 ('' if connection.features.interprets_empty_strings_as_nulls else None,)
 | |
|             ]
 | |
|         )
 | |
| 
 | |
|     def test_null_argument(self):
 | |
|         authors = Author.objects.annotate(nullif=NullIf('name', Value(None))).values_list('nullif')
 | |
|         self.assertSequenceEqual(authors, [('John Smith',), ('Rhonda',)])
 | |
| 
 | |
|     def test_too_few_args(self):
 | |
|         msg = "'NullIf' takes exactly 2 arguments (1 given)"
 | |
|         with self.assertRaisesMessage(TypeError, msg):
 | |
|             NullIf('name')
 | |
| 
 | |
|     @skipUnless(connection.vendor == 'oracle', 'Oracle specific test for NULL-literal')
 | |
|     def test_null_literal(self):
 | |
|         msg = 'Oracle does not allow Value(None) for expression1.'
 | |
|         with self.assertRaisesMessage(ValueError, msg):
 | |
|             list(Author.objects.annotate(nullif=NullIf(Value(None), 'name')).values_list('nullif'))
 |