summaryrefslogtreecommitdiff
path: root/tests/migrations
diff options
context:
space:
mode:
Diffstat (limited to 'tests/migrations')
-rw-r--r--tests/migrations/test_autodetector.py5
-rw-r--r--tests/migrations/test_commands.py30
-rw-r--r--tests/migrations/test_migrations_conflict/0001_initial.py27
-rw-r--r--tests/migrations/test_migrations_conflict/0002_conflicting_second.py17
-rw-r--r--tests/migrations/test_migrations_conflict/0002_second.py24
-rw-r--r--tests/migrations/test_migrations_conflict/__init__.py0
6 files changed, 100 insertions, 3 deletions
diff --git a/tests/migrations/test_autodetector.py b/tests/migrations/test_autodetector.py
index a3db6e1e45..42e18c69cc 100644
--- a/tests/migrations/test_autodetector.py
+++ b/tests/migrations/test_autodetector.py
@@ -1,6 +1,7 @@
# encoding: utf8
from django.test import TestCase
-from django.db.migrations.autodetector import MigrationAutodetector, MigrationQuestioner
+from django.db.migrations.autodetector import MigrationAutodetector
+from django.db.migrations.questioner import MigrationQuestioner
from django.db.migrations.state import ProjectState, ModelState
from django.db.migrations.graph import MigrationGraph
from django.db import models
@@ -63,7 +64,7 @@ class AutodetectorTests(TestCase):
# Use project state to make a new migration change set
before = self.make_project_state([])
after = self.make_project_state([self.author_empty, self.other_pony, self.other_stable, self.third_thing])
- autodetector = MigrationAutodetector(before, after, MigrationQuestioner({"ask_initial": True}))
+ autodetector = MigrationAutodetector(before, after, MigrationQuestioner(defaults={"ask_initial": True}))
changes = autodetector._detect_changes()
# Run through arrange_for_graph
graph = MigrationGraph()
diff --git a/tests/migrations/test_commands.py b/tests/migrations/test_commands.py
index dbed522dd5..48fb68b03d 100644
--- a/tests/migrations/test_commands.py
+++ b/tests/migrations/test_commands.py
@@ -6,7 +6,7 @@ import copy
import os
import shutil
-from django.core.management import call_command
+from django.core.management import call_command, CommandError
from django.db.models.loading import cache
from django.test.utils import override_settings
from django.utils import six
@@ -72,6 +72,34 @@ class MigrateTests(MigrationTestBase):
# Cleanup by unmigrating everything
call_command("migrate", "migrations", "zero", verbosity=0)
+ @override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations_conflict"})
+ def test_migrate_conflict_exit(self):
+ """
+ Makes sure that migrate exits if it detects a conflict.
+ """
+ with self.assertRaises(CommandError):
+ call_command("migrate", "migrations")
+
+ @override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations_conflict"})
+ def test_makemigrations_conflict_exit(self):
+ """
+ Makes sure that makemigrations exits if it detects a conflict.
+ """
+ with self.assertRaises(CommandError):
+ call_command("makemigrations")
+
+ @override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations_conflict"})
+ def test_makemigrations_merge_basic(self):
+ """
+ Makes sure that makemigrations doesn't error if you ask for
+ merge mode with a conflict present. Doesn't test writing of the merge
+ file, as that requires temp directories.
+ """
+ try:
+ call_command("makemigrations", merge=True, verbosity=0)
+ except CommandError:
+ self.fail("Makemigrations errored in merge mode with conflicts")
+
@override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations"})
def test_sqlmigrate(self):
"""
diff --git a/tests/migrations/test_migrations_conflict/0001_initial.py b/tests/migrations/test_migrations_conflict/0001_initial.py
new file mode 100644
index 0000000000..344bebdfe3
--- /dev/null
+++ b/tests/migrations/test_migrations_conflict/0001_initial.py
@@ -0,0 +1,27 @@
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ operations = [
+
+ migrations.CreateModel(
+ "Author",
+ [
+ ("id", models.AutoField(primary_key=True)),
+ ("name", models.CharField(max_length=255)),
+ ("slug", models.SlugField(null=True)),
+ ("age", models.IntegerField(default=0)),
+ ("silly_field", models.BooleanField(default=False)),
+ ],
+ ),
+
+ migrations.CreateModel(
+ "Tribble",
+ [
+ ("id", models.AutoField(primary_key=True)),
+ ("fluffy", models.BooleanField(default=True)),
+ ],
+ )
+
+ ]
diff --git a/tests/migrations/test_migrations_conflict/0002_conflicting_second.py b/tests/migrations/test_migrations_conflict/0002_conflicting_second.py
new file mode 100644
index 0000000000..15ea1f063a
--- /dev/null
+++ b/tests/migrations/test_migrations_conflict/0002_conflicting_second.py
@@ -0,0 +1,17 @@
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [("migrations", "0001_initial")]
+
+ operations = [
+
+ migrations.CreateModel(
+ "Something",
+ [
+ ("id", models.AutoField(primary_key=True)),
+ ],
+ )
+
+ ]
diff --git a/tests/migrations/test_migrations_conflict/0002_second.py b/tests/migrations/test_migrations_conflict/0002_second.py
new file mode 100644
index 0000000000..ace9a83347
--- /dev/null
+++ b/tests/migrations/test_migrations_conflict/0002_second.py
@@ -0,0 +1,24 @@
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [("migrations", "0001_initial")]
+
+ operations = [
+
+ migrations.DeleteModel("Tribble"),
+
+ migrations.RemoveField("Author", "silly_field"),
+
+ migrations.AddField("Author", "rating", models.IntegerField(default=0)),
+
+ migrations.CreateModel(
+ "Book",
+ [
+ ("id", models.AutoField(primary_key=True)),
+ ("author", models.ForeignKey("migrations.Author", null=True)),
+ ],
+ )
+
+ ]
diff --git a/tests/migrations/test_migrations_conflict/__init__.py b/tests/migrations/test_migrations_conflict/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/migrations/test_migrations_conflict/__init__.py