Example #1
0
    def test_add_migration(self):
        """Testing MigrationList.add_migration"""
        migration1 = InitialMigration('0001_initial', 'tests')
        migration2 = AddFieldMigration('0002_add_field', 'tests')

        migration_list = MigrationList()
        migration_list.add_migration(migration1)
        migration_list.add_migration(migration2)

        self.assertEqual(
            migration_list._by_id,
            {
                ('tests', '0001_initial'): {
                    'app_label': 'tests',
                    'name': '0001_initial',
                    'migration': migration1,
                    'recorded_migration': None,
                },
                ('tests', '0002_add_field'): {
                    'app_label': 'tests',
                    'name': '0002_add_field',
                    'migration': migration2,
                    'recorded_migration': None,
                },
            })
        self.assertEqual(
            migration_list._by_app_label,
            {
                'tests': [
                    {
                        'app_label': 'tests',
                        'name': '0001_initial',
                        'migration': migration1,
                        'recorded_migration': None,
                    },
                    {
                        'app_label': 'tests',
                        'name': '0002_add_field',
                        'migration': migration2,
                        'recorded_migration': None,
                    },
                ],
            })
Example #2
0
    def test_run_checks_with_conflicts(self):
        """Testing MigrationExecutor.run_checks with conflicts"""
        connection = connections[DEFAULT_DB_ALIAS]

        custom_migrations = MigrationList()
        custom_migrations.add_migration(
            InitialMigration('0001_initial', 'tests'))
        custom_migrations.add_migration(
            InitialMigration('0002_also_initial', 'tests'))

        executor = MigrationExecutor(connection=connection,
                                     custom_migrations=custom_migrations)

        message = (
            "Conflicting migrations detected; multiple leaf nodes in the "
            "migration graph: (0001_initial, 0002_also_initial in tests).\n"
            "To fix them run 'python manage.py makemigrations --merge'"
        )

        with self.assertRaisesMessage(MigrationConflictsError, message):
            executor.run_checks()
Example #3
0
    def test_run_checks_with_bad_history(self):
        """Testing MigrationExecutor.run_checks with bad history"""
        connection = connections[DEFAULT_DB_ALIAS]

        applied_migrations = MigrationList()
        applied_migrations.add_migration_info(app_label='tests',
                                              name='0002_add_field')
        record_applied_migrations(connection=connection,
                                  migrations=applied_migrations)

        custom_migrations = MigrationList()
        custom_migrations.add_migration(
            InitialMigration('0001_initial', 'tests'))
        custom_migrations.add_migration(
            AddFieldMigration('0002_add_field', 'tests'))

        executor = MigrationExecutor(connection=connection,
                                     custom_migrations=custom_migrations)

        with self.assertRaises(MigrationHistoryError):
            executor.run_checks()
Example #4
0
    def test_apply_migrations(self):
        """Testing apply_migrations"""
        database_state = DatabaseState(db_name=DEFAULT_DB_ALIAS)
        register_models(database_state=database_state,
                        models=[('MigrationTestModel', MigrationTestModel)])

        app_migrations = [
            InitialMigration('0001_initial', 'tests'),
            AddFieldMigration('0002_add_field', 'tests'),
        ]

        targets = [
            ('tests', '0001_initial'),
            ('tests', '0002_add_field'),
        ]

        custom_migrations = MigrationList()
        custom_migrations.add_migration(app_migrations[0])
        custom_migrations.add_migration(app_migrations[1])

        connection = connections[DEFAULT_DB_ALIAS]
        executor = MigrationExecutor(connection,
                                     custom_migrations=custom_migrations)

        migrate_state = apply_migrations(
            executor=executor,
            targets=targets,
            plan=[
                (app_migrations[0], False),
                (app_migrations[1], False),
            ],
            pre_migrate_state=create_pre_migrate_state(executor))
        finalize_migrations(migrate_state)

        # Make sure this is in the database now.
        MigrationTestModel.objects.create(field1=123,
                                          field2='abc',
                                          field3=True)