From e776dd2db677d58dcb50aea20d3bb191537df25b Mon Sep 17 00:00:00 2001 From: Mariusz Felisiak Date: Tue, 25 Apr 2017 06:01:25 +0200 Subject: Fixed #28116 -- Used error code filtering in PostgreSQL test database creation. Thanks Claude Paroz and Tim Graham for reviews. --- tests/backends/test_creation.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'tests') diff --git a/tests/backends/test_creation.py b/tests/backends/test_creation.py index 2ecd03ce2d..90ea59086e 100644 --- a/tests/backends/test_creation.py +++ b/tests/backends/test_creation.py @@ -12,11 +12,18 @@ from django.db.backends.mysql.creation import \ DatabaseCreation as MySQLDatabaseCreation from django.db.backends.oracle.creation import \ DatabaseCreation as OracleDatabaseCreation -from django.db.backends.postgresql.creation import \ - DatabaseCreation as PostgreSQLDatabaseCreation from django.db.utils import DatabaseError from django.test import SimpleTestCase, TestCase +try: + import psycopg2 # NOQA +except ImportError: + pass +else: + from psycopg2 import errorcodes + from django.db.backends.postgresql.creation import \ + DatabaseCreation as PostgreSQLDatabaseCreation + class TestDbSignatureTests(SimpleTestCase): @@ -98,10 +105,14 @@ class PostgreSQLDatabaseCreationTests(SimpleTestCase): self.check_sql_table_creation_suffix(settings, '''WITH ENCODING 'UTF8' TEMPLATE "template0"''') def _execute_raise_database_already_exists(self, cursor, parameters, keepdb=False): - raise DatabaseError('database %s already exists' % parameters['dbname']) + error = DatabaseError('database %s already exists' % parameters['dbname']) + error.pgcode = errorcodes.DUPLICATE_DATABASE + raise DatabaseError() from error def _execute_raise_permission_denied(self, cursor, parameters, keepdb=False): - raise DatabaseError('permission denied to create database') + error = DatabaseError('permission denied to create database') + error.pgcode = errorcodes.INSUFFICIENT_PRIVILEGE + raise DatabaseError() from error def patch_test_db_creation(self, execute_create_test_db): return mock.patch.object(BaseDatabaseCreation, '_execute_create_test_db', execute_create_test_db) -- cgit v1.3