def test_with_bad_app(self):
        """Testing RenameField with application not in signature"""
        mutation = RenameField('TestModel', 'char_field1', 'char_field2')

        message = (
            'Cannot rename the field "char_field1" on model '
            '"badapp.TestModel". The application could not be found in the '
            'signature.')

        with self.assertRaisesMessage(SimulationFailure, message):
            mutation.run_simulation(app_label='badapp',
                                    project_sig=ProjectSignature(),
                                    database_state=None)
    def test_with_bad_app(self):
        """Testing RenameField with application not in signature"""
        mutation = RenameField('TestModel', 'char_field1', 'char_field2')

        message = (
            'Cannot rename the field "char_field1" on model '
            '"badapp.TestModel". The application could not be found in the '
            'signature.'
        )

        with self.assertRaisesMessage(SimulationFailure, message):
            mutation.run_simulation(app_label='badapp',
                                    project_sig=ProjectSignature(),
                                    database_state=None)
    def test_with_bad_model(self):
        """Testing RenameField with model not in signature"""
        mutation = RenameField('TestModel', 'char_field1', 'char_field2')

        project_sig = ProjectSignature()
        project_sig.add_app_sig(AppSignature(app_id='tests'))

        message = ('Cannot rename the field "char_field1" on model '
                   '"tests.TestModel". The model could not be found in the '
                   'signature.')

        with self.assertRaisesMessage(SimulationFailure, message):
            mutation.run_simulation(app_label='tests',
                                    project_sig=project_sig,
                                    database_state=None)
    def test_add_rename_field_with_db_column(self):
        """Testing pre-processing AddField + RenameField with
        RenameField.db_column
        """
        class DestModel(models.Model):
            my_id = models.AutoField(primary_key=True)
            char_field = models.CharField(max_length=20)
            renamed_field = models.CharField(max_length=50,
                                             null=True,
                                             db_column='added_field')

        self.perform_evolution_tests(DestModel, [
            AddField('TestModel',
                     'added_field',
                     models.CharField,
                     max_length=50,
                     null=True),
            RenameField('TestModel',
                        'added_field',
                        'renamed_field',
                        db_column='added_field'),
        ], ("In model tests.TestModel:\n"
            "    Field 'renamed_field' has been added"), [
                "AddField('TestModel', 'renamed_field', models.CharField,"
                " max_length=50, null=True, db_column='added_field')",
            ], 'add_rename_field_with_db_column')
Exemplo n.º 5
0
    def test_rename_with_foreign_key(self):
        """Testing RenameField with ForeignKey"""
        class DestModel(models.Model):
            char_field = models.CharField(max_length=20)
            int_field = models.IntegerField()
            int_field_named = models.IntegerField(
                db_column='custom_db_col_name')
            int_field_named_indexed = models.IntegerField(
                db_column='custom_db_col_name_indexed', db_index=True)
            renamed_field = models.ForeignKey(RenameAnchor1)
            m2m_field = models.ManyToManyField(RenameAnchor2)
            m2m_field_named = models.ManyToManyField(
                RenameAnchor3, db_table='non-default_db_table')

        self.perform_evolution_tests(DestModel, [
            RenameField('TestModel', 'fk_field', 'renamed_field'),
        ], ("In model tests.TestModel:\n"
            "    Field 'renamed_field' has been added\n"
            "    Field 'fk_field' has been deleted"), [
                "AddField('TestModel', 'renamed_field', models.ForeignKey,"
                " initial=<<USER VALUE REQUIRED>>,"
                " related_model='tests.RenameAnchor1')",
                "DeleteField('TestModel', 'fk_field')",
            ],
                                     perform_mutations=False)
    def test_rename_in_custom_table_name(self):
        """Testing RenameField with custom table name"""
        class DestModel(BaseTestModel):
            renamed_field = models.IntegerField()
            alt_value = models.CharField(max_length=20)

            class Meta(BaseTestModel.Meta):
                db_table = 'custom_rename_table_name'

        def create_test_data(db_name):
            CustomRenameTableModel.objects.create(value=1, alt_value='test')

        self.set_base_model(CustomRenameTableModel,
                            name='CustomRenameTableModel')

        self.perform_evolution_tests(DestModel, [
            RenameField('CustomRenameTableModel', 'value', 'renamed_field'),
        ], ("In model tests.CustomRenameTableModel:\n"
            "    Field 'renamed_field' has been added\n"
            "    Field 'value' has been deleted"), [
                "AddField('CustomRenameTableModel', 'renamed_field',"
                " models.IntegerField, initial=<<USER VALUE REQUIRED>>)",
                "DeleteField('CustomRenameTableModel', 'value')",
            ],
                                     'RenameColumnCustomTableModel',
                                     model_name='CustomRenameTableModel',
                                     create_test_data_func=create_test_data)
Exemplo n.º 7
0
    def test_rename_m2m_db_column_ignored(self):
        """Testing RenameField with renaming ManyToManyField db_column is
        ignored
        """
        class DestModel(models.Model):
            char_field = models.CharField(max_length=20)
            int_field = models.IntegerField()
            int_field_named = models.IntegerField(
                db_column='custom_db_col_name')
            int_field_named_indexed = models.IntegerField(
                db_column='custom_db_col_name_indexed', db_index=True)
            fk_field = models.ForeignKey(RenameAnchor1)
            renamed_field = models.ManyToManyField(RenameAnchor2)
            m2m_field_named = models.ManyToManyField(
                RenameAnchor3, db_table='non-default_db_table')

        self.perform_evolution_tests(
            DestModel, [
                RenameField('TestModel',
                            'm2m_field',
                            'renamed_field',
                            db_column='ignored_db-column'),
            ], ("In model tests.TestModel:\n"
                "    Field 'renamed_field' has been added\n"
                "    Field 'm2m_field' has been deleted"), [
                    "AddField('TestModel', 'renamed_field',"
                    " models.ManyToManyField,"
                    " related_model='tests.RenameAnchor2')",
                    "DeleteField('TestModel', 'm2m_field')",
                ], 'RenameManyToManyTableWithColumnNameModel')
Exemplo n.º 8
0
    def test_rename_with_custom_table_non_m2m_ignored(self):
        """Testing RenameField with custom table name for non-ManyToManyField
        is ignored
        """
        class DestModel(models.Model):
            char_field = models.CharField(max_length=20)
            renamed_field = models.IntegerField()
            int_field_named = models.IntegerField(
                db_column='custom_db_col_name')
            int_field_named_indexed = models.IntegerField(
                db_column='custom_db_col_name_indexed', db_index=True)
            fk_field = models.ForeignKey(RenameAnchor1)
            m2m_field = models.ManyToManyField(RenameAnchor2)
            m2m_field_named = models.ManyToManyField(
                RenameAnchor3, db_table='non-default_db_table')

        self.perform_evolution_tests(DestModel, [
            RenameField('TestModel',
                        'int_field',
                        'renamed_field',
                        db_table='ignored_db-table'),
        ], ("In model tests.TestModel:\n"
            "    Field 'renamed_field' has been added\n"
            "    Field 'int_field' has been deleted"), [
                "AddField('TestModel', 'renamed_field', models.IntegerField,"
                " initial=<<USER VALUE REQUIRED>>)",
                "DeleteField('TestModel', 'int_field')",
            ], 'RenameColumnWithTableNameModel')
    def test_rename_with_primary_key(self):
        """Testing RenameField with primary key"""
        class DestModel(models.Model):
            my_pk_id = models.AutoField(primary_key=True)
            char_field = models.CharField(max_length=20)
            int_field = models.IntegerField()
            int_field_named = models.IntegerField(
                db_column='custom_db_col_name')
            int_field_named_indexed = models.IntegerField(
                db_column='custom_db_col_name_indexed', db_index=True)
            fk_field = models.ForeignKey(RenameAnchor1,
                                         on_delete=models.CASCADE)
            m2m_field = models.ManyToManyField(RenameAnchor2)
            m2m_field_named = models.ManyToManyField(
                RenameAnchor3, db_table='non-default_db_table')

        self.perform_evolution_tests(DestModel, [
            RenameField('TestModel', 'id', 'my_pk_id'),
        ], ("In model tests.TestModel:\n"
            "    Field 'my_pk_id' has been added\n"
            "    Field 'id' has been deleted"), [
                "AddField('TestModel', 'my_pk_id', models.AutoField,"
                " initial=<<USER VALUE REQUIRED>>, primary_key=True)",
                "DeleteField('TestModel', 'id')",
            ], 'RenamePrimaryKeyColumnModel')
Exemplo n.º 10
0
    def test_rename_rename_field(self):
        """Testing pre-processing RenameField + RenameField"""
        class DestModel(models.Model):
            my_id = models.AutoField(primary_key=True)
            renamed_field = models.CharField(max_length=20)

        self.perform_evolution_tests(DestModel, [
            RenameField('TestModel', 'char_field', 'foo_field'),
            RenameField('TestModel', 'foo_field', 'renamed_field'),
        ], ("In model tests.TestModel:\n"
            "    Field 'renamed_field' has been added\n"
            "    Field 'char_field' has been deleted"), [
                "AddField('TestModel', 'renamed_field', models.CharField,"
                " initial=<<USER VALUE REQUIRED>>, max_length=20)",
                "DeleteField('TestModel', 'char_field')",
            ], 'rename_rename_field')
Exemplo n.º 11
0
    def test_rename_custom_column_name_to_new_custom_name(self):
        """Testing RenameField with custom column name to a new custom column
        name
        """
        class DestModel(models.Model):
            char_field = models.CharField(max_length=20)
            int_field = models.IntegerField()
            renamed_field = models.IntegerField(
                db_column='non-default_column_name')
            int_field_named_indexed = models.IntegerField(
                db_column='custom_db_col_name_indexed', db_index=True)
            fk_field = models.ForeignKey(RenameAnchor1)
            m2m_field = models.ManyToManyField(RenameAnchor2)
            m2m_field_named = models.ManyToManyField(
                RenameAnchor3, db_table='non-default_db_table')

        self.perform_evolution_tests(
            DestModel, [
                RenameField('TestModel',
                            'int_field_named',
                            'renamed_field',
                            db_column='non-default_column_name'),
            ], ("In model tests.TestModel:\n"
                "    Field 'renamed_field' has been added\n"
                "    Field 'int_field_named' has been deleted"),
            [
                "AddField('TestModel', 'renamed_field', models.IntegerField,"
                " initial=<<USER VALUE REQUIRED>>,"
                " db_column='non-default_column_name')",
                "DeleteField('TestModel', 'int_field_named')",
            ], 'RenameNonDefaultColumnNameToNonDefaultNameModel')
Exemplo n.º 12
0
    def test_rename_m2m_custom_table_name_to_default(self):
        """Testing RenameField with renaming ManyToManyField custom table
        name to default name
        """
        class DestModel(models.Model):
            char_field = models.CharField(max_length=20)
            int_field = models.IntegerField()
            int_field_named = models.IntegerField(
                db_column='custom_db_col_name')
            int_field_named_indexed = models.IntegerField(
                db_column='custom_db_col_name_indexed', db_index=True)
            fk_field = models.ForeignKey(RenameAnchor1)
            m2m_field = models.ManyToManyField(RenameAnchor2)
            renamed_field = models.ManyToManyField(RenameAnchor3)

        self.perform_evolution_tests(DestModel, [
            RenameField('TestModel', 'm2m_field_named', 'renamed_field'),
        ], ("In model tests.TestModel:\n"
            "    Field 'renamed_field' has been added\n"
            "    Field 'm2m_field_named' has been deleted"), [
                "AddField('TestModel', 'renamed_field',"
                " models.ManyToManyField,"
                " related_model='tests.RenameAnchor3')",
                "DeleteField('TestModel', 'm2m_field_named')",
            ], 'RenameNonDefaultManyToManyTableModel')
    def test_with_bad_model(self):
        """Testing RenameField with model not in signature"""
        mutation = RenameField('TestModel', 'char_field1', 'char_field2')

        project_sig = ProjectSignature()
        project_sig.add_app_sig(AppSignature(app_id='tests'))

        message = (
            'Cannot rename the field "char_field1" on model '
            '"tests.TestModel". The model could not be found in the '
            'signature.'
        )

        with self.assertRaisesMessage(SimulationFailure, message):
            mutation.run_simulation(app_label='tests',
                                    project_sig=project_sig,
                                    database_state=None)
Exemplo n.º 14
0
    def test_rename_change_rename_change_field(self):
        """Testing pre-processing RenameField + ChangeField + RenameField +
        ChangeField
        """
        class DestModel(models.Model):
            my_id = models.AutoField(primary_key=True)
            renamed_field = models.CharField(max_length=50, null=True)

        self.perform_evolution_tests(DestModel, [
            RenameField('TestModel', 'char_field', 'foo_field'),
            ChangeField('TestModel', 'foo_field', max_length=30, null=True),
            RenameField('TestModel', 'foo_field', 'renamed_field'),
            ChangeField('TestModel', 'renamed_field', max_length=50),
        ], ("In model tests.TestModel:\n"
            "    Field 'renamed_field' has been added\n"
            "    Field 'char_field' has been deleted"), [
                "AddField('TestModel', 'renamed_field', models.CharField,"
                " max_length=50, null=True)",
                "DeleteField('TestModel', 'char_field')",
            ], 'rename_change_rename_change_field')
Exemplo n.º 15
0
    def test_rename_delete_field(self):
        """Testing pre-processing RenameField + DeleteField"""
        class DestModel(models.Model):
            my_id = models.AutoField(primary_key=True)

        self.perform_evolution_tests(DestModel, [
            RenameField('TestModel', 'char_field', 'renamed_field'),
            DeleteField('TestModel', 'renamed_field'),
        ], ("In model tests.TestModel:\n"
            "    Field 'char_field' has been deleted"), [
                "DeleteField('TestModel', 'char_field')",
            ], 'delete_char_field')
Exemplo n.º 16
0
    def test_add_rename_field_rename_model(self):
        """Testing pre-processing AddField + RenameField + RenameModel"""
        class RenamedReffedPreprocModel(models.Model):
            value = models.IntegerField()

            class Meta:
                db_table = 'tests_reffedpreprocmodel'

        class DestModel(models.Model):
            my_id = models.AutoField(primary_key=True)
            char_field = models.CharField(max_length=20)
            renamed_field = models.ForeignKey(RenamedReffedPreprocModel,
                                              null=True)

        self.set_base_model(self.default_base_model,
                            extra_models=[('ReffedPreprocModel',
                                           ReffedPreprocModel)])

        # Prepare the renamed model in the end signature.
        end, end_sig = self.make_end_signatures(DestModel, 'TestModel')
        end_tests_sig = end_sig['tests']
        end_tests_sig['RenamedReffedPreprocModel'] = \
            end_tests_sig.pop('ReffedPreprocModel')

        fields_sig = end_tests_sig['TestModel']['fields']
        fields_sig['renamed_field']['related_model'] = \
            'tests.RenamedReffedPreprocModel'

        self.perform_evolution_tests(DestModel, [
            AddField('TestModel',
                     'added_field',
                     models.ForeignKey,
                     null=True,
                     related_model='tests.ReffedPreprocModel'),
            RenameField('TestModel', 'added_field', 'renamed_field'),
            RenameModel('ReffedPreprocModel',
                        'RenamedReffedPreprocModel',
                        db_table='tests_reffedpreprocmodel'),
        ], ("The model tests.ReffedPreprocModel has been deleted\n"
            "In model tests.TestModel:\n"
            "    Field 'renamed_field' has been added"), [
                "AddField('TestModel', 'renamed_field', models.ForeignKey,"
                " null=True, related_model='tests.RenamedReffedPreprocModel')",
                "DeleteModel('ReffedPreprocModel')",
            ],
                                     'add_rename_field_rename_model',
                                     end=end,
                                     end_sig=end_sig)
Exemplo n.º 17
0
    def test_add_rename_delete(self):
        """Testing pre-processing AddField + RenameField + DeleteField"""
        class DestModel(models.Model):
            my_id = models.AutoField(primary_key=True)
            char_field = models.CharField(max_length=20)

        self.perform_evolution_tests(DestModel, [
            AddField('TestModel',
                     'added_field',
                     models.CharField,
                     initial='foo',
                     max_length=20),
            RenameField('TestModel', 'added_field', 'renamed_field'),
            DeleteField('TestModel', 'renamed_field'),
        ],
                                     '', [],
                                     'noop',
                                     expect_noop=True)
Exemplo n.º 18
0
    def test_add_delete_add_rename_field(self):
        """Testing pre-processing AddField + DeleteField + AddField +
        RenameField
        """
        class DestModel(models.Model):
            my_id = models.AutoField(primary_key=True)
            char_field = models.CharField(max_length=20)
            renamed_field = models.IntegerField()

        self.perform_evolution_tests(DestModel, [
            AddField('TestModel',
                     'added_field',
                     models.CharField,
                     initial='',
                     max_length=20),
            DeleteField('TestModel', 'added_field'),
            AddField(
                'TestModel', 'added_field', models.IntegerField, initial=42),
            RenameField('TestModel', 'added_field', 'renamed_field'),
        ], ("In model tests.TestModel:\n"
            "    Field 'renamed_field' has been added"), [
                "AddField('TestModel', 'renamed_field', models.IntegerField,"
                " initial=<<USER VALUE REQUIRED>>)",
            ], 'add_delete_add_rename_field')
Exemplo n.º 19
0
    def test_rename_add_field(self):
        """Testing pre-processing RenameField + AddField"""
        class DestModel(models.Model):
            my_id = models.AutoField(primary_key=True)
            renamed_field = models.CharField(max_length=20)
            char_field = models.CharField(max_length=50, null=True)

        self.perform_evolution_tests(DestModel, [
            RenameField('TestModel', 'char_field', 'renamed_field'),
            AddField('TestModel',
                     'char_field',
                     models.CharField,
                     max_length=50,
                     null=True),
        ], ("In model tests.TestModel:\n"
            "    Field 'renamed_field' has been added\n"
            "    In field 'char_field':\n"
            "        Property 'max_length' has changed\n"
            "        Property 'null' has changed"), [
                "AddField('TestModel', 'renamed_field', models.CharField,"
                " initial=<<USER VALUE REQUIRED>>, max_length=20)",
                "ChangeField('TestModel', 'char_field', initial=None,"
                " max_length=50, null=True)",
            ], 'rename_add_field')
Exemplo n.º 20
0
    def test_add_rename_change_field(self):
        """Testing pre-processing AddField + RenameField + ChangeField"""
        class DestModel(models.Model):
            my_id = models.AutoField(primary_key=True)
            char_field = models.CharField(max_length=20)
            renamed_field = models.CharField(max_length=50, null=True)

        self.perform_evolution_tests(DestModel, [
            AddField('TestModel',
                     'added_field',
                     models.CharField,
                     initial='foo',
                     max_length=20),
            RenameField('TestModel', 'added_field', 'renamed_field'),
            ChangeField('TestModel',
                        'renamed_field',
                        null=True,
                        initial='bar',
                        max_length=50),
        ], ("In model tests.TestModel:\n"
            "    Field 'renamed_field' has been added"), [
                "AddField('TestModel', 'renamed_field', models.CharField,"
                " max_length=50, null=True)",
            ], 'add_rename_change_field')
Exemplo n.º 21
0
from __future__ import unicode_literals

from django_evolution.mutations import AddField, RenameField
from django.db import models


MUTATIONS = [
    RenameField('FileDiff', 'diff', 'diff64', db_column='diff_base64'),
    RenameField('FileDiff', 'parent_diff', 'parent_diff64',
                db_column='parent_diff_base64'),
    AddField('FileDiff', 'diff_hash', models.ForeignKey, null=True,
             related_model='diffviewer.FileDiffData'),
    AddField('FileDiff', 'parent_diff_hash', models.ForeignKey, null=True,
             related_model='diffviewer.FileDiffData'),
]
Exemplo n.º 22
0
from django_evolution.mutations import AddField, RenameField

from djblets.util.fields import Base64Field
from djblets.util.dbevolution import FakeChangeFieldType

MUTATIONS = [
    FakeChangeFieldType('FileDiff', 'diff_base64', Base64Field),
    RenameField('FileDiff', 'diff_base64', 'diff', db_column='diff_base64'),
    AddField('FileDiff',
             'parent_diff',
             Base64Field,
             initial="",
             db_column='parent_diff_base64'),
]
Exemplo n.º 23
0
from __future__ import unicode_literals

from django_evolution.mutations import RenameField

MUTATIONS = [
    RenameField('Repository',
                'password',
                'encrypted_password',
                db_column='password'),
]
Exemplo n.º 24
0
from __future__ import unicode_literals

from django_evolution.mutations import AddField, RenameField, RenameModel
from django.db import models

MUTATIONS = [
    RenameModel('FileDiffData',
                'LegacyFileDiffData',
                db_table='diffviewer_filediffdata'),
    RenameField('FileDiff',
                'diff_hash',
                'legacy_diff_hash',
                db_column='diff_hash_id'),
    RenameField('FileDiff',
                'parent_diff_hash',
                'legacy_parent_diff_hash',
                db_column='parent_diff_hash_id'),
    AddField('FileDiff',
             'diff_hash',
             models.ForeignKey,
             null=True,
             db_column='raw_diff_hash_id',
             related_model='diffviewer.RawFileDiffData'),
    AddField('FileDiff',
             'parent_diff_hash',
             models.ForeignKey,
             null=True,
             db_column='raw_parent_diff_hash_id',
             related_model='diffviewer.RawFileDiffData'),
]
from __future__ import unicode_literals

from django_evolution.mutations import RenameField

MUTATIONS = [
    RenameField('ReviewRequest',
                'last_review_timestamp',
                'last_review_activity_timestamp',
                db_column='last_review_timestamp'),
]
Exemplo n.º 26
0
from django_evolution.mutations import AddField, RenameField
from django.db import models
from djblets.db.fields import JSONField


MUTATIONS = [
    AddField('WebHookTarget', 'encoding', models.CharField,
             initial='application/json', max_length=40),
    AddField('WebHookTarget', 'repositories', models.ManyToManyField,
             null=True, related_model='scmtools.Repository'),
    AddField('WebHookTarget', 'custom_content', models.TextField, null=True),
    AddField('WebHookTarget', 'use_custom_content', models.BooleanField,
             initial=False),
    AddField('WebHookTarget', 'apply_to', models.CharField, initial='A',
             max_length=1),
    AddField('WebHookTarget', 'extra_data', JSONField, initial='{}'),
    RenameField('WebHookTarget', 'handlers', 'events'),
]
Exemplo n.º 27
0
from django_evolution.mutations import RenameField

MUTATIONS = [
    RenameField('Profile', 'show_submitted', 'show_closed'),
]