debian-django-reversion/tests/test_app/tests/test_commands.py

214 lines
7.8 KiB
Python

import unittest
from datetime import timedelta
from django.core.management import CommandError
from django.utils import timezone
import reversion
from test_app.models import TestModel
from test_app.tests.base import TestBase, TestModelMixin
try:
import psycopg2
except ImportError:
psycopg2 = None
try:
import MySQLdb
except ImportError:
MySQLdb = None
class CreateInitialRevisionsTest(TestModelMixin, TestBase):
def testCreateInitialRevisions(self):
obj = TestModel.objects.create()
self.callCommand("createinitialrevisions")
self.assertSingleRevision((obj,), comment="Initial version.")
def testCreateInitialRevisionsAlreadyCreated(self):
obj = TestModel.objects.create()
self.callCommand("createinitialrevisions")
self.callCommand("createinitialrevisions")
self.assertSingleRevision((obj,), comment="Initial version.")
class CreateInitialRevisionsAppLabelTest(TestModelMixin, TestBase):
def testCreateInitialRevisionsAppLabel(self):
obj = TestModel.objects.create()
self.callCommand("createinitialrevisions", "test_app")
self.assertSingleRevision((obj,), comment="Initial version.")
def testCreateInitialRevisionsAppLabelMissing(self):
with self.assertRaises(CommandError):
self.callCommand("createinitialrevisions", "boom")
def testCreateInitialRevisionsModel(self):
obj = TestModel.objects.create()
self.callCommand("createinitialrevisions", "test_app.TestModel")
self.assertSingleRevision((obj,), comment="Initial version.")
def testCreateInitialRevisionsModelMissing(self):
with self.assertRaises(CommandError):
self.callCommand("createinitialrevisions", "test_app.boom")
def testCreateInitialRevisionsModelMissingApp(self):
with self.assertRaises(CommandError):
self.callCommand("createinitialrevisions", "boom.boom")
def testCreateInitialRevisionsModelNotRegistered(self):
TestModel.objects.create()
self.callCommand("createinitialrevisions", "auth.User")
self.assertNoRevision()
class CreateInitialRevisionsDbTest(TestModelMixin, TestBase):
@unittest.skipIf(not psycopg2, "psycopg2 not installed")
def testCreateInitialRevisionsDb(self):
obj = TestModel.objects.create()
self.callCommand("createinitialrevisions", using="postgres")
self.assertNoRevision()
self.assertSingleRevision((obj,), comment="Initial version.", using="postgres")
@unittest.skipIf(not MySQLdb, "MySQLdb not installed")
def testCreateInitialRevisionsDbMySql(self):
obj = TestModel.objects.create()
self.callCommand("createinitialrevisions", using="mysql")
self.assertNoRevision()
self.assertSingleRevision((obj,), comment="Initial version.", using="mysql")
class CreateInitialRevisionsModelDbTest(TestModelMixin, TestBase):
@unittest.skipIf(not psycopg2, "psycopg2 not installed")
def testCreateInitialRevisionsModelDb(self):
obj = TestModel.objects.db_manager("postgres").create()
self.callCommand("createinitialrevisions", model_db="postgres")
self.assertSingleRevision((obj,), comment="Initial version.", model_db="postgres")
class CreateInitialRevisionsCommentTest(TestModelMixin, TestBase):
def testCreateInitialRevisionsComment(self):
obj = TestModel.objects.create()
self.callCommand("createinitialrevisions", comment="comment v1")
self.assertSingleRevision((obj,), comment="comment v1")
class DeleteRevisionsTest(TestModelMixin, TestBase):
def testDeleteRevisions(self):
with reversion.create_revision():
TestModel.objects.create()
self.callCommand("deleterevisions")
self.assertNoRevision()
class DeleteRevisionsAppLabelTest(TestModelMixin, TestBase):
def testDeleteRevisionsAppLabel(self):
with reversion.create_revision():
TestModel.objects.create()
self.callCommand("deleterevisions", "test_app")
self.assertNoRevision()
def testDeleteRevisionsAppLabelMissing(self):
with self.assertRaises(CommandError):
self.callCommand("deleterevisions", "boom")
def testDeleteRevisionsModel(self):
with reversion.create_revision():
TestModel.objects.create()
self.callCommand("deleterevisions", "test_app.TestModel")
self.assertNoRevision()
def testDeleteRevisionsModelMissing(self):
with self.assertRaises(CommandError):
self.callCommand("deleterevisions", "test_app.boom")
def testDeleteRevisionsModelMissingApp(self):
with self.assertRaises(CommandError):
self.callCommand("deleterevisions", "boom.boom")
def testDeleteRevisionsModelNotRegistered(self):
with reversion.create_revision():
obj = TestModel.objects.create()
self.callCommand("deleterevisions", "auth.User")
self.assertSingleRevision((obj,))
class DeleteRevisionsDbTest(TestModelMixin, TestBase):
@unittest.skipIf(not psycopg2, "psycopg2 not installed")
def testDeleteRevisionsDb(self):
with reversion.create_revision(using="postgres"):
TestModel.objects.create()
self.callCommand("deleterevisions", using="postgres")
self.assertNoRevision(using="postgres")
@unittest.skipIf(not MySQLdb, "MySQLdb not installed")
def testDeleteRevisionsDbMySql(self):
with reversion.create_revision(using="mysql"):
TestModel.objects.create()
self.callCommand("deleterevisions", using="mysql")
self.assertNoRevision(using="mysql")
@unittest.skipIf(not psycopg2, "psycopg2 not installed")
def testDeleteRevisionsDbNoMatch(self):
with reversion.create_revision():
obj = TestModel.objects.create()
self.callCommand("deleterevisions", using="postgres")
self.assertSingleRevision((obj,))
class DeleteRevisionsModelDbTest(TestModelMixin, TestBase):
@unittest.skipIf(not psycopg2, "psycopg2 not installed")
def testDeleteRevisionsModelDb(self):
with reversion.create_revision():
TestModel.objects.db_manager("postgres").create()
self.callCommand("deleterevisions", model_db="postgres")
self.assertNoRevision(using="postgres")
class DeleteRevisionsDaysTest(TestModelMixin, TestBase):
def testDeleteRevisionsDays(self):
date_created = timezone.now() - timedelta(days=20)
with reversion.create_revision():
TestModel.objects.create()
reversion.set_date_created(date_created)
self.callCommand("deleterevisions", days=19)
self.assertNoRevision()
def testDeleteRevisionsDaysNoMatch(self):
date_created = timezone.now() - timedelta(days=20)
with reversion.create_revision():
obj = TestModel.objects.create()
reversion.set_date_created(date_created)
self.callCommand("deleterevisions", days=21)
self.assertSingleRevision((obj,), date_created=date_created)
class DeleteRevisionsKeepTest(TestModelMixin, TestBase):
def testDeleteRevisionsKeep(self):
with reversion.create_revision():
obj_1 = TestModel.objects.create()
reversion.set_comment("obj_1 v1")
with reversion.create_revision():
obj_1.save()
reversion.set_comment("obj_1 v2")
with reversion.create_revision():
obj_2 = TestModel.objects.create()
reversion.set_comment("obj_2 v1")
with reversion.create_revision():
obj_2.save()
reversion.set_comment("obj_2 v2")
with reversion.create_revision():
obj_3 = TestModel.objects.create()
self.callCommand("deleterevisions", keep=1)
self.assertSingleRevision((obj_1,), comment="obj_1 v2")
self.assertSingleRevision((obj_2,), comment="obj_2 v2")
self.assertSingleRevision((obj_3,))