1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- # -*- coding: utf-8 -*-
- from __future__ import unicode_literals
- import unittest
- from django.db import connection
- from django.test import TestCase, modify_settings
- from .models import CharFieldModel, TextFieldModel
- @unittest.skipUnless(connection.vendor == 'postgresql', 'PostgreSQL required')
- @modify_settings(INSTALLED_APPS={'append': 'django.contrib.postgres'})
- class UnaccentTest(TestCase):
- Model = CharFieldModel
- def setUp(self):
- self.Model.objects.bulk_create([
- self.Model(field="àéÖ"),
- self.Model(field="aeO"),
- self.Model(field="aeo"),
- ])
- def test_unaccent(self):
- self.assertQuerysetEqual(
- self.Model.objects.filter(field__unaccent="aeO"),
- ["àéÖ", "aeO"],
- transform=lambda instance: instance.field,
- ordered=False
- )
- def test_unaccent_chained(self):
- """
- Check that unaccent can be used chained with a lookup (which should be
- the case since unaccent implements the Transform API)
- """
- self.assertQuerysetEqual(
- self.Model.objects.filter(field__unaccent__iexact="aeO"),
- ["àéÖ", "aeO", "aeo"],
- transform=lambda instance: instance.field,
- ordered=False
- )
- self.assertQuerysetEqual(
- self.Model.objects.filter(field__unaccent__endswith="éÖ"),
- ["àéÖ", "aeO"],
- transform=lambda instance: instance.field,
- ordered=False
- )
- def test_unaccent_accentuated_needle(self):
- self.assertQuerysetEqual(
- self.Model.objects.filter(field__unaccent="aéÖ"),
- ["àéÖ", "aeO"],
- transform=lambda instance: instance.field,
- ordered=False
- )
- class UnaccentTextFieldTest(UnaccentTest):
- """
- TextField should have the exact same behavior as CharField
- regarding unaccent lookups.
- """
- Model = TextFieldModel
|