/tests/modeltests/invalid_models/tests.py
https://code.google.com/p/mango-py/ · Python · 50 lines · 32 code · 11 blank · 7 comment · 6 complexity · e764f1e5b63299821aa65411493063bc MD5 · raw file
- import copy
- from django.core.management.validation import get_validation_errors
- from django.db.models.loading import cache, load_app
- from cStringIO import StringIO
- import sys
- from django.utils import unittest
- class InvalidModelTestCase(unittest.TestCase):
- """Import an appliation with invalid models and test the exceptions."""
- def setUp(self):
- # Make sure sys.stdout is not a tty so that we get errors without
- # coloring attached (makes matching the results easier). We restore
- # sys.stderr afterwards.
- self.old_stdout = sys.stdout
- self.stdout = StringIO()
- sys.stdout = self.stdout
- # This test adds dummy applications to the app cache. These
- # need to be removed in order to prevent bad interactions
- # with the flush operation in other tests.
- self.old_app_models = copy.deepcopy(cache.app_models)
- self.old_app_store = copy.deepcopy(cache.app_store)
- def tearDown(self):
- cache.app_models = self.old_app_models
- cache.app_store = self.old_app_store
- cache._get_models_cache = {}
- sys.stdout = self.old_stdout
- def test_invalid_models(self):
- try:
- module = load_app("modeltests.invalid_models.invalid_models")
- except Exception, e:
- self.fail('Unable to load invalid model module')
- count = get_validation_errors(self.stdout, module)
- self.stdout.seek(0)
- error_log = self.stdout.read()
- actual = error_log.split('\n')
- expected = module.model_errors.split('\n')
- unexpected = [err for err in actual if err not in expected]
- missing = [err for err in expected if err not in actual]
- self.assertFalse(unexpected, "Unexpected Errors: " + '\n'.join(unexpected))
- self.assertFalse(missing, "Missing Errors: " + '\n'.join(missing))