summaryrefslogtreecommitdiff
path: root/tests/migrations/test_optimizer.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/migrations/test_optimizer.py')
-rw-r--r--tests/migrations/test_optimizer.py178
1 files changed, 178 insertions, 0 deletions
diff --git a/tests/migrations/test_optimizer.py b/tests/migrations/test_optimizer.py
index 6485009eb4..2992f9cad7 100644
--- a/tests/migrations/test_optimizer.py
+++ b/tests/migrations/test_optimizer.py
@@ -1152,3 +1152,181 @@ class OptimizerTests(SimpleTestCase):
),
]
)
+
+ def test_create_model_add_index(self):
+ self.assertOptimizesTo(
+ [
+ migrations.CreateModel(
+ name="Pony",
+ fields=[
+ ("weight", models.IntegerField()),
+ ("age", models.IntegerField()),
+ ],
+ options={
+ "indexes": [models.Index(fields=["age"], name="idx_pony_age")],
+ },
+ ),
+ migrations.AddIndex(
+ "Pony",
+ models.Index(fields=["weight"], name="idx_pony_weight"),
+ ),
+ ],
+ [
+ migrations.CreateModel(
+ name="Pony",
+ fields=[
+ ("weight", models.IntegerField()),
+ ("age", models.IntegerField()),
+ ],
+ options={
+ "indexes": [
+ models.Index(fields=["age"], name="idx_pony_age"),
+ models.Index(fields=["weight"], name="idx_pony_weight"),
+ ],
+ },
+ ),
+ ],
+ )
+
+ def test_create_model_remove_index(self):
+ self.assertOptimizesTo(
+ [
+ migrations.CreateModel(
+ name="Pony",
+ fields=[
+ ("weight", models.IntegerField()),
+ ("age", models.IntegerField()),
+ ],
+ options={
+ "indexes": [
+ models.Index(fields=["age"], name="idx_pony_age"),
+ models.Index(fields=["weight"], name="idx_pony_weight"),
+ ],
+ },
+ ),
+ migrations.RemoveIndex("Pony", "idx_pony_age"),
+ ],
+ [
+ migrations.CreateModel(
+ name="Pony",
+ fields=[
+ ("weight", models.IntegerField()),
+ ("age", models.IntegerField()),
+ ],
+ options={
+ "indexes": [
+ models.Index(fields=["weight"], name="idx_pony_weight"),
+ ],
+ },
+ ),
+ ],
+ )
+
+ def test_create_model_remove_index_together_rename_index(self):
+ self.assertOptimizesTo(
+ [
+ migrations.CreateModel(
+ name="Pony",
+ fields=[
+ ("weight", models.IntegerField()),
+ ("age", models.IntegerField()),
+ ],
+ options={
+ "index_together": [("age", "weight")],
+ },
+ ),
+ migrations.RenameIndex(
+ "Pony", new_name="idx_pony_age_weight", old_fields=("age", "weight")
+ ),
+ ],
+ [
+ migrations.CreateModel(
+ name="Pony",
+ fields=[
+ ("weight", models.IntegerField()),
+ ("age", models.IntegerField()),
+ ],
+ options={
+ "indexes": [
+ models.Index(
+ fields=["age", "weight"], name="idx_pony_age_weight"
+ ),
+ ],
+ },
+ ),
+ ],
+ )
+
+ def test_create_model_index_together_rename_index(self):
+ self.assertOptimizesTo(
+ [
+ migrations.CreateModel(
+ name="Pony",
+ fields=[
+ ("weight", models.IntegerField()),
+ ("age", models.IntegerField()),
+ ("height", models.IntegerField()),
+ ("rank", models.IntegerField()),
+ ],
+ options={
+ "index_together": [("age", "weight"), ("height", "rank")],
+ },
+ ),
+ migrations.RenameIndex(
+ "Pony", new_name="idx_pony_age_weight", old_fields=("age", "weight")
+ ),
+ ],
+ [
+ migrations.CreateModel(
+ name="Pony",
+ fields=[
+ ("weight", models.IntegerField()),
+ ("age", models.IntegerField()),
+ ("height", models.IntegerField()),
+ ("rank", models.IntegerField()),
+ ],
+ options={
+ "index_together": {("height", "rank")},
+ "indexes": [
+ models.Index(
+ fields=["age", "weight"], name="idx_pony_age_weight"
+ ),
+ ],
+ },
+ ),
+ ],
+ )
+
+ def test_create_model_rename_index_no_old_fields(self):
+ self.assertOptimizesTo(
+ [
+ migrations.CreateModel(
+ name="Pony",
+ fields=[
+ ("weight", models.IntegerField()),
+ ("age", models.IntegerField()),
+ ],
+ options={
+ "indexes": [models.Index(fields=["age"], name="idx_pony_age")],
+ },
+ ),
+ migrations.RenameIndex(
+ "Pony", new_name="idx_pony_age_new", old_name="idx_pony_age"
+ ),
+ ],
+ [
+ migrations.CreateModel(
+ name="Pony",
+ fields=[
+ ("weight", models.IntegerField()),
+ ("age", models.IntegerField()),
+ ],
+ options={
+ "indexes": [models.Index(fields=["age"], name="idx_pony_age")],
+ },
+ ),
+ migrations.RenameIndex(
+ "Pony", new_name="idx_pony_age_new", old_name="idx_pony_age"
+ ),
+ ],
+ )