mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			115 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from pathlib import Path
 | |
| from unittest import mock
 | |
| 
 | |
| from django.conf import settings
 | |
| from django.contrib.staticfiles.checks import check_finders
 | |
| from django.contrib.staticfiles.finders import BaseFinder, get_finder
 | |
| from django.core.checks import Error, Warning
 | |
| from django.test import override_settings
 | |
| 
 | |
| from .cases import CollectionTestCase
 | |
| from .settings import TEST_ROOT
 | |
| 
 | |
| 
 | |
| class FindersCheckTests(CollectionTestCase):
 | |
|     run_collectstatic_in_setUp = False
 | |
| 
 | |
|     def test_base_finder_check_not_implemented(self):
 | |
|         finder = BaseFinder()
 | |
|         msg = 'subclasses may provide a check() method to verify the finder is configured correctly.'
 | |
|         with self.assertRaisesMessage(NotImplementedError, msg):
 | |
|             finder.check()
 | |
| 
 | |
|     def test_check_finders(self):
 | |
|         """check_finders() concatenates all errors."""
 | |
|         error1 = Error('1')
 | |
|         error2 = Error('2')
 | |
|         error3 = Error('3')
 | |
| 
 | |
|         def get_finders():
 | |
|             class Finder1(BaseFinder):
 | |
|                 def check(self, **kwargs):
 | |
|                     return [error1]
 | |
| 
 | |
|             class Finder2(BaseFinder):
 | |
|                 def check(self, **kwargs):
 | |
|                     return []
 | |
| 
 | |
|             class Finder3(BaseFinder):
 | |
|                 def check(self, **kwargs):
 | |
|                     return [error2, error3]
 | |
| 
 | |
|             class Finder4(BaseFinder):
 | |
|                 pass
 | |
| 
 | |
|             return [Finder1(), Finder2(), Finder3(), Finder4()]
 | |
| 
 | |
|         with mock.patch('django.contrib.staticfiles.checks.get_finders', get_finders):
 | |
|             errors = check_finders(None)
 | |
|             self.assertEqual(errors, [error1, error2, error3])
 | |
| 
 | |
|     def test_no_errors_with_test_settings(self):
 | |
|         self.assertEqual(check_finders(None), [])
 | |
| 
 | |
|     @override_settings(STATICFILES_DIRS='a string')
 | |
|     def test_dirs_not_tuple_or_list(self):
 | |
|         self.assertEqual(check_finders(None), [
 | |
|             Error(
 | |
|                 'The STATICFILES_DIRS setting is not a tuple or list.',
 | |
|                 hint='Perhaps you forgot a trailing comma?',
 | |
|                 id='staticfiles.E001',
 | |
|             )
 | |
|         ])
 | |
| 
 | |
|     def test_dirs_contains_static_root(self):
 | |
|         with self.settings(STATICFILES_DIRS=[settings.STATIC_ROOT]):
 | |
|             self.assertEqual(check_finders(None), [
 | |
|                 Error(
 | |
|                     'The STATICFILES_DIRS setting should not contain the '
 | |
|                     'STATIC_ROOT setting.',
 | |
|                     id='staticfiles.E002',
 | |
|                 )
 | |
|             ])
 | |
| 
 | |
|     def test_dirs_contains_static_root_in_tuple(self):
 | |
|         with self.settings(STATICFILES_DIRS=[('prefix', settings.STATIC_ROOT)]):
 | |
|             self.assertEqual(check_finders(None), [
 | |
|                 Error(
 | |
|                     'The STATICFILES_DIRS setting should not contain the '
 | |
|                     'STATIC_ROOT setting.',
 | |
|                     id='staticfiles.E002',
 | |
|                 )
 | |
|             ])
 | |
| 
 | |
|     def test_prefix_contains_trailing_slash(self):
 | |
|         static_dir = Path(TEST_ROOT) / 'project' / 'documents'
 | |
|         with self.settings(STATICFILES_DIRS=[('prefix/', static_dir)]):
 | |
|             self.assertEqual(check_finders(None), [
 | |
|                 Error(
 | |
|                     "The prefix 'prefix/' in the STATICFILES_DIRS setting must "
 | |
|                     "not end with a slash.",
 | |
|                     id='staticfiles.E003',
 | |
|                 ),
 | |
|             ])
 | |
| 
 | |
|     def test_nonexistent_directories(self):
 | |
|         with self.settings(STATICFILES_DIRS=[
 | |
|             '/fake/path',
 | |
|             ('prefix', '/fake/prefixed/path'),
 | |
|         ]):
 | |
|             self.assertEqual(check_finders(None), [
 | |
|                 Warning(
 | |
|                     "The directory '/fake/path' in the STATICFILES_DIRS "
 | |
|                     "setting does not exist.",
 | |
|                     id='staticfiles.W004',
 | |
|                 ),
 | |
|                 Warning(
 | |
|                     "The directory '/fake/prefixed/path' in the "
 | |
|                     "STATICFILES_DIRS setting does not exist.",
 | |
|                     id='staticfiles.W004',
 | |
|                 ),
 | |
|             ])
 | |
|             # Nonexistent directories are skipped.
 | |
|             finder = get_finder('django.contrib.staticfiles.finders.FileSystemFinder')
 | |
|             self.assertEqual(list(finder.list(None)), [])
 |