mirror of
				https://github.com/django/django.git
				synced 2025-10-30 17:16:10 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			66 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # -*- 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
 |