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')
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)
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')
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')
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')
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')
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)
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')
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')
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)
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)
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')
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')
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')
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'), ]
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'), ]
from __future__ import unicode_literals from django_evolution.mutations import RenameField MUTATIONS = [ RenameField('Repository', 'password', 'encrypted_password', db_column='password'), ]
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'), ]
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'), ]
from django_evolution.mutations import RenameField MUTATIONS = [ RenameField('Profile', 'show_submitted', 'show_closed'), ]