0
0
mirror of https://github.com/django/django.git synced 2024-12-01 15:42:04 +01:00
django/tests/db_functions/comparison/test_nullif.py
Mads Jensen 4b9d72210f Refs #28643 -- Added NullIf database function.
Thanks Nick Pope, Mariusz Felisiak, and Tim Graham for reviews.
2019-01-10 12:10:12 -05:00

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'))