mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import copy
 | |
| import sys
 | |
| 
 | |
| from django.core.management.validation import get_validation_errors
 | |
| from django.db.models.loading import cache, load_app
 | |
| 
 | |
| from django.utils import unittest
 | |
| from django.utils.six import StringIO
 | |
| 
 | |
| 
 | |
| 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:
 | |
|             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))
 |