Commit 36e90d1f authored by Claude Paroz's avatar Claude Paroz
Browse files

Stopped special-casing postgres-specific tests

Refs #23879.
parent 6b6d13bf
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -12,6 +12,8 @@ class CreateExtension(Operation):
        pass

    def database_forwards(self, app_label, schema_editor, from_state, to_state):
        if schema_editor.connection.vendor != 'postgresql':
            return
        schema_editor.execute("CREATE EXTENSION IF NOT EXISTS %s" % self.name)

    def database_backwards(self, app_label, schema_editor, from_state, to_state):
+9 −0
Original line number Diff line number Diff line
import unittest

from django.db import connection
from django.test import TestCase


@unittest.skipUnless(connection.vendor == 'postgresql', "PostgreSQL specific tests")
class PostgresSQLTestCase(TestCase):
    pass
+31 −0
Original line number Diff line number Diff line
"""
Indirection layer for PostgreSQL-specific fields, so the tests don't fail when
run with a backend other than PostgreSQL.
"""
from django.db import models

try:
    from django.contrib.postgres.fields import (
        ArrayField, BigIntegerRangeField, DateRangeField, DateTimeRangeField,
        FloatRangeField, HStoreField, IntegerRangeField,
    )
except ImportError:
    class DummyArrayField(models.Field):
        def __init__(self, base_field, size=None, **kwargs):
            super(DummyArrayField, self).__init__(**kwargs)

        def deconstruct(self):
            name, path, args, kwargs = super(DummyArrayField, self).deconstruct()
            kwargs.update({
                'base_field': '',
                'size': 1,
            })
            return name, path, args, kwargs

    ArrayField = DummyArrayField
    BigIntegerRangeField = models.Field
    DateRangeField = models.Field
    DateTimeRangeField = models.Field
    FloatRangeField = models.Field
    HStoreField = models.Field
    IntegerRangeField = models.Field
+9 −3
Original line number Diff line number Diff line
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import migrations

try:
    from django.contrib.postgres.operations import (
        HStoreExtension, UnaccentExtension,
    )
from django.db import migrations
except ImportError:
    from django.test import mock
    HStoreExtension = mock.Mock()
    UnaccentExtension = mock.Mock()


class Migration(migrations.Migration):
+33 −21
Original line number Diff line number Diff line
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

import django.contrib.postgres.fields
import django.contrib.postgres.fields.hstore
from django.db import migrations, models

from ..fields import *  # NOQA


class Migration(migrations.Migration):

@@ -17,9 +17,10 @@ class Migration(migrations.Migration):
            name='CharArrayModel',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('field', django.contrib.postgres.fields.ArrayField(models.CharField(max_length=10), size=None)),
                ('field', ArrayField(models.CharField(max_length=10), size=None)),
            ],
            options={
                'required_db_vendor': 'postgresql',
            },
            bases=(models.Model,),
        ),
@@ -27,11 +28,12 @@ class Migration(migrations.Migration):
            name='DateTimeArrayModel',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('datetimes', django.contrib.postgres.fields.ArrayField(models.DateTimeField(), size=None)),
                ('dates', django.contrib.postgres.fields.ArrayField(models.DateField(), size=None)),
                ('times', django.contrib.postgres.fields.ArrayField(models.TimeField(), size=None)),
                ('datetimes', ArrayField(models.DateTimeField(), size=None)),
                ('dates', ArrayField(models.DateField(), size=None)),
                ('times', ArrayField(models.TimeField(), size=None)),
            ],
            options={
                'required_db_vendor': 'postgresql',
            },
            bases=(models.Model,),
        ),
@@ -39,9 +41,10 @@ class Migration(migrations.Migration):
            name='HStoreModel',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('field', django.contrib.postgres.fields.hstore.HStoreField(blank=True, null=True)),
                ('field', HStoreField(blank=True, null=True)),
            ],
            options={
                'required_db_vendor': 'postgresql',
            },
            bases=(models.Model,),
        ),
@@ -49,11 +52,12 @@ class Migration(migrations.Migration):
            name='OtherTypesArrayModel',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('ips', django.contrib.postgres.fields.ArrayField(models.GenericIPAddressField(), size=None)),
                ('uuids', django.contrib.postgres.fields.ArrayField(models.UUIDField(), size=None)),
                ('decimals', django.contrib.postgres.fields.ArrayField(models.DecimalField(max_digits=5, decimal_places=2), size=None)),
                ('ips', ArrayField(models.GenericIPAddressField(), size=None)),
                ('uuids', ArrayField(models.UUIDField(), size=None)),
                ('decimals', ArrayField(models.DecimalField(max_digits=5, decimal_places=2), size=None)),
            ],
            options={
                'required_db_vendor': 'postgresql',
            },
            bases=(models.Model,),
        ),
@@ -61,9 +65,10 @@ class Migration(migrations.Migration):
            name='IntegerArrayModel',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('field', django.contrib.postgres.fields.ArrayField(models.IntegerField(), size=None)),
                ('field', ArrayField(models.IntegerField(), size=None)),
            ],
            options={
                'required_db_vendor': 'postgresql',
            },
            bases=(models.Model,),
        ),
@@ -71,9 +76,10 @@ class Migration(migrations.Migration):
            name='NestedIntegerArrayModel',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('field', django.contrib.postgres.fields.ArrayField(django.contrib.postgres.fields.ArrayField(models.IntegerField(), size=None), size=None)),
                ('field', ArrayField(ArrayField(models.IntegerField(), size=None), size=None)),
            ],
            options={
                'required_db_vendor': 'postgresql',
            },
            bases=(models.Model,),
        ),
@@ -81,9 +87,10 @@ class Migration(migrations.Migration):
            name='NullableIntegerArrayModel',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('field', django.contrib.postgres.fields.ArrayField(models.IntegerField(), size=None, null=True, blank=True)),
                ('field', ArrayField(models.IntegerField(), size=None, null=True, blank=True)),
            ],
            options={
                'required_db_vendor': 'postgresql',
            },
            bases=(models.Model,),
        ),
@@ -130,20 +137,25 @@ class Migration(migrations.Migration):
            name='RangesModel',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('ints', django.contrib.postgres.fields.IntegerRangeField(null=True, blank=True)),
                ('bigints', django.contrib.postgres.fields.BigIntegerRangeField(null=True, blank=True)),
                ('floats', django.contrib.postgres.fields.FloatRangeField(null=True, blank=True)),
                ('timestamps', django.contrib.postgres.fields.DateTimeRangeField(null=True, blank=True)),
                ('dates', django.contrib.postgres.fields.DateRangeField(null=True, blank=True)),
                ('ints', IntegerRangeField(null=True, blank=True)),
                ('bigints', BigIntegerRangeField(null=True, blank=True)),
                ('floats', FloatRangeField(null=True, blank=True)),
                ('timestamps', DateTimeRangeField(null=True, blank=True)),
                ('dates', DateRangeField(null=True, blank=True)),
            ],
            options={
                'required_db_vendor': 'postgresql',
            },
            bases=(models.Model,),
        ),
    ]

    def apply(self, project_state, schema_editor, collect_sql=False):
        try:
            PG_VERSION = schema_editor.connection.pg_version
        except AttributeError:
            pass  # We are probably not on PostgreSQL
        else:
            if PG_VERSION >= 90200:
                self.operations = self.operations + self.pg_92_operations
        return super(Migration, self).apply(project_state, schema_editor, collect_sql)
Loading