Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fix state tests a little

  • Loading branch information...
commit 38a8cf1cdccb937297c7735aa73f6c02d468e7df 1 parent 7d041b9
Andrew Godwin andrewgodwin authored
Showing with 35 additions and 7 deletions.
  1. +5 −6 django/db/migrations/state.py
  2. +30 −1 tests/migrations/test_state.py
11 django/db/migrations/state.py
View
@@ -14,6 +14,9 @@ def __init__(self, models=None):
self.models = models or {}
self.app_cache = None
+ def add_model_state(self, model_state):
+ self.models[(model_state.app_label, model_state.name.lower())] = model_state
+
def clone(self):
"Returns an exact copy of this ProjectState"
return ProjectState(
@@ -24,7 +27,7 @@ def render(self):
"Turns the project state into actual models in a new AppCache"
if self.app_cache is None:
self.app_cache = BaseAppCache()
- for model in self.model.values:
+ for model in self.models.values():
model.render(self.app_cache)
return self.app_cache
@@ -90,10 +93,6 @@ def render(self, app_cache):
meta = type("Meta", tuple(), meta_contents)
# Then, work out our bases
# TODO: Use the actual bases
- if self.bases:
- raise NotImplementedError("Custom bases not quite done yet!")
- else:
- bases = [models.Model]
# Turn fields into a dict for the body, add other bits
body = dict(self.fields)
body['Meta'] = meta
@@ -101,6 +100,6 @@ def render(self, app_cache):
# Then, make a Model object
return type(
self.name,
- tuple(bases),
+ tuple(self.bases),
body,
)
31 tests/migrations/test_state.py
View
@@ -1,7 +1,7 @@
from django.test import TestCase
from django.db import models
from django.db.models.loading import BaseAppCache
-from django.db.migrations.state import ProjectState
+from django.db.migrations.state import ProjectState, ModelState
class StateTests(TestCase):
@@ -13,6 +13,7 @@ def test_create(self):
"""
Tests making a ProjectState from an AppCache
"""
+
new_app_cache = BaseAppCache()
class Author(models.Model):
@@ -41,3 +42,31 @@ class Meta:
self.assertEqual(author_state.fields[2][1].null, False)
self.assertEqual(author_state.fields[3][1].null, True)
self.assertEqual(author_state.bases, (models.Model, ))
+
+ self.assertEqual(book_state.app_label, "migrations")
+ self.assertEqual(book_state.name, "Book")
+ self.assertEqual([x for x, y in book_state.fields], ["id", "title", "author"])
+ self.assertEqual(book_state.fields[1][1].max_length, 1000)
+ self.assertEqual(book_state.fields[2][1].null, False)
+ self.assertEqual(book_state.bases, (models.Model, ))
+
+ def test_render(self):
+ """
+ Tests rendering a ProjectState into an AppCache.
+ """
+ project_state = ProjectState()
+ project_state.add_model_state(ModelState(
+ "migrations",
+ "Tag",
+ [
+ ("id", models.AutoField(primary_key=True)),
+ ("name", models.CharField(max_length=100)),
+ ("hidden", models.BooleanField()),
+ ],
+ {},
+ None,
+ ))
+
+ new_app_cache = project_state.render()
+ self.assertEqual(new_app_cache.get_model("migrations", "Tag")._meta.get_field_by_name("name")[0].max_length, 100)
+ self.assertEqual(new_app_cache.get_model("migrations", "Tag")._meta.get_field_by_name("hidden")[0].null, False)
Please sign in to comment.
Something went wrong with that request. Please try again.