55 lines
2.0 KiB
Python
55 lines
2.0 KiB
Python
|
# encoding: utf8
|
||
|
from django.test import TransactionTestCase
|
||
|
from django.db.migrations.autodetector import MigrationAutodetector
|
||
|
from django.db.migrations.state import ProjectState, ModelState
|
||
|
from django.db import models
|
||
|
|
||
|
|
||
|
class AutodetectorTests(TransactionTestCase):
|
||
|
"""
|
||
|
Tests the migration autodetector.
|
||
|
"""
|
||
|
|
||
|
author_empty = ModelState("testapp", "Author", [("id", models.AutoField(primary_key=True))])
|
||
|
|
||
|
def make_project_state(self, model_states):
|
||
|
"Shortcut to make ProjectStates from lists of predefined models"
|
||
|
project_state = ProjectState()
|
||
|
for model_state in model_states:
|
||
|
project_state.add_model_state(model_state)
|
||
|
return project_state
|
||
|
|
||
|
def test_new_model(self):
|
||
|
"Tests autodetection of new models"
|
||
|
# Make state
|
||
|
before = self.make_project_state([])
|
||
|
after = self.make_project_state([self.author_empty])
|
||
|
autodetector = MigrationAutodetector(before, after)
|
||
|
changes = autodetector.changes()
|
||
|
# Right number of migrations?
|
||
|
self.assertEqual(len(changes), 1)
|
||
|
# Right number of actions?
|
||
|
migration = changes.pop()
|
||
|
self.assertEqual(len(migration.operations), 1)
|
||
|
# Right action?
|
||
|
action = migration.operations[0]
|
||
|
self.assertEqual(action.__class__.__name__, "CreateModel")
|
||
|
self.assertEqual(action.name, "Author")
|
||
|
|
||
|
def test_old_model(self):
|
||
|
"Tests deletion of old models"
|
||
|
# Make state
|
||
|
before = self.make_project_state([self.author_empty])
|
||
|
after = self.make_project_state([])
|
||
|
autodetector = MigrationAutodetector(before, after)
|
||
|
changes = autodetector.changes()
|
||
|
# Right number of migrations?
|
||
|
self.assertEqual(len(changes), 1)
|
||
|
# Right number of actions?
|
||
|
migration = changes.pop()
|
||
|
self.assertEqual(len(migration.operations), 1)
|
||
|
# Right action?
|
||
|
action = migration.operations[0]
|
||
|
self.assertEqual(action.__class__.__name__, "DeleteModel")
|
||
|
self.assertEqual(action.name, "Author")
|