summaryrefslogtreecommitdiff
path: root/tests/postgres_tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests/postgres_tests')
-rw-r--r--tests/postgres_tests/migrations/0001_setup_extensions.py3
-rw-r--r--tests/postgres_tests/migrations/0002_create_test_models.py18
-rw-r--r--tests/postgres_tests/models.py8
-rw-r--r--tests/postgres_tests/test_unaccent.py65
4 files changed, 93 insertions, 1 deletions
diff --git a/tests/postgres_tests/migrations/0001_setup_extensions.py b/tests/postgres_tests/migrations/0001_setup_extensions.py
index d4153b6556..0c43974954 100644
--- a/tests/postgres_tests/migrations/0001_setup_extensions.py
+++ b/tests/postgres_tests/migrations/0001_setup_extensions.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
-from django.contrib.postgres.operations import HStoreExtension
+from django.contrib.postgres.operations import HStoreExtension, UnaccentExtension
from django.db import migrations
@@ -12,4 +12,5 @@ class Migration(migrations.Migration):
operations = [
HStoreExtension(),
+ UnaccentExtension(),
]
diff --git a/tests/postgres_tests/migrations/0002_create_test_models.py b/tests/postgres_tests/migrations/0002_create_test_models.py
index 073e62b1d3..334bcaf0a6 100644
--- a/tests/postgres_tests/migrations/0002_create_test_models.py
+++ b/tests/postgres_tests/migrations/0002_create_test_models.py
@@ -73,4 +73,22 @@ class Migration(migrations.Migration):
},
bases=(models.Model,),
),
+ migrations.CreateModel(
+ name='CharFieldModel',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('field', models.CharField(max_length=16)),
+ ],
+ options=None,
+ bases=None,
+ ),
+ migrations.CreateModel(
+ name='TextFieldModel',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('field', models.TextField()),
+ ],
+ options=None,
+ bases=None,
+ ),
]
diff --git a/tests/postgres_tests/models.py b/tests/postgres_tests/models.py
index cadab474af..a119b12f04 100644
--- a/tests/postgres_tests/models.py
+++ b/tests/postgres_tests/models.py
@@ -24,3 +24,11 @@ class NestedIntegerArrayModel(models.Model):
class HStoreModel(models.Model):
field = HStoreField(blank=True, null=True)
+
+
+class CharFieldModel(models.Model):
+ field = models.CharField(max_length=16)
+
+
+class TextFieldModel(models.Model):
+ field = models.TextField()
diff --git a/tests/postgres_tests/test_unaccent.py b/tests/postgres_tests/test_unaccent.py
new file mode 100644
index 0000000000..47ccbda519
--- /dev/null
+++ b/tests/postgres_tests/test_unaccent.py
@@ -0,0 +1,65 @@
+# -*- 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