Commit 38a8cf1c authored by Andrew Godwin's avatar Andrew Godwin
Browse files

Fix state tests a little

parent 7d041b93
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -14,6 +14,9 @@ class ProjectState(object):
        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 @@ class ProjectState(object):
        "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 @@ class ModelState(object):
        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 @@ class ModelState(object):
        # Then, make a Model object
        return type(
            self.name,
            tuple(bases),
            tuple(self.bases),
            body,
        )
+30 −1
Original line number Diff line number Diff line
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 @@ class StateTests(TestCase):
        """
        Tests making a ProjectState from an AppCache
        """

        new_app_cache = BaseAppCache()

        class Author(models.Model):
@@ -41,3 +42,31 @@ class StateTests(TestCase):
        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)