
    Bh                        d dl Zd dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ ej0                  j3                  dd      Zej0                  j3                  ej6                  dde      Zej0                  j3                  ej6                  dd      Zej0                  j3                  ej6                  dde      ej0                  j3                  ej6                  dddez        dZ G d de      Zy)    N)SourceFileLoader)settings)ImproperlyConfigured)TemplateDoesNotExistloader)override_settings)	force_str)gettext_lazy)	constants)CMSTestCase)get_cms_setting	inner_dircustom_templatesproject	templatesz%s_2)      c                       e Zd Zd Z ee      d        Z ee      d        Z ee      d        Z	 ee
      d        Zd Zd Zy	)
TemplatesConfigc                 `   t         j                  D cg c]  }|d   	 }}t        d      D cg c]  }|d   	 }}t        d      r|j                  t        j
                         | j                  t        |      d       | j                  t        |      t        |             yc c}w c c}w )zC
        Tests that the plain CMS_TEMPLATES works as usual
        r   	TEMPLATESTEMPLATE_INHERITANCE   N)	r   CMS_TEMPLATESr   appendr   TEMPLATE_INHERITANCE_MAGICassertEquallenset)selftemplateoriginal_filesfiless       H/home/dcms/DCMS/lib/python3.12/site-packages/cms/tests/test_templates.pytest_templateszTemplatesConfig.test_templates   s     7?6L6LM((1+MM-<[-IJ!JJ12!!)"F"FGUQ'US%89 NJs
   B&B+)CMS_TEMPLATES_DIRc           	      B   t         j                  j                  t        j                  d      }d}	 t        d|      j                         }|r|j                  j                         D cg c]  }t        t        |d                }}|j                  j                         D cg c]7  }t         j                  j                  t        |d   j                               9 }}t!        d      }| j#                  t%        |      d	       |D cg c]  }t        |d          }}|D cg c]  }|d   	 }	}t!        d
      rB|j'                  t        t        d                   |j'                  t(        j*                         | j#                  t-        |      t-        |             | j#                  t-        |	      t-        |             yy# t        $ r t        d|        Y t        $ r}t        d|        Y d}~d}~ww xY wc c}w c c}w c c}w c c}w )z
        Test that using CMS_TEMPLATES_DIR both template list and template labels are extracted from the new directory
        z__init__.pyNmodzfile not found at zAn error occurred: r   r   r      r   z,Inherit the template of the nearest ancestor)ospathjoinr   r&   r   load_moduleFileNotFoundErrorprint	Exceptionr   itemsr	   _PATH_PREFIXstripr   r   r   r   r   r   r   )
r    config_pathr(   er!   original_labelsr"   r   labelsr#   s
             r$   test_custom_templatesz%TemplatesConfig.test_custom_templates$   s   
 ggll8#=#=}M	-"5+6BBDC
 ILI\I\I^_Xy8A;8_O_]`]j]j]p]p]rsQYbggll;8I8I8KLsNs'4IS^Q/=FGi,GFG1:;XXa[;E;56&&y3a1b'cd%%i&J&JKS[#o*>?SZ^)<= 	 ! 	6&{m45 	-'s+,,	- `s H;s5   G +H'<HH*HH
)H
1HH
c                     t        d      }|D ]Z  }|d   t        j                  k7  st        j                  |d         }| j                  |j                  j                  |d          \ yN
        Checking that templates can be loaded by the template loader
        r   r   N)r   r   r   r   get_templater   r!   name)r    r   r!   tpls       r$   test_custom_templates_loadingz-TemplatesConfig.test_custom_templates_loading>   sc    
 $K0	! 	AH{iBBB))(1+6  !2!2HQK@	A    c           	         t        d      }|D ]I  }|d   t        j                  k7  s| j                  |d   j	                  dt
        d   z        dk\         K | j                  d      5  t        d      }|D ]I  }|d   t        j                  k7  s| j                  |d   j	                  dt
        d   z        dk\         K 	 ddd       y# 1 sw Y   yxY w)	r<   r   r   z%s/r   r   )SITE_IDN)r   r   r   
assertTruefind	SITE_PATHr   r    r   r!   s      r$   test_multisitezTemplatesConfig.test_multisiteI   s    
 $K0	! 	NH{iBBB 0 011E F" LM	N ]]1]% 	R'4I% RA;)"F"FFOOHQK$4$4UYq\5I$Jb$PQR	R 	R 	Rs   ,'C2CCc                     t        d      }|D ]O  }|d   t        j                  k7  s| j                  t              5  t        j                  |d          ddd       Q y# 1 sw Y   \xY wr;   )r   r   r   assertRaisesr   r   r=   rH   s      r$   test_custom_templates_bad_dirz-TemplatesConfig.test_custom_templates_bad_dirX   sj    
 $K0	! 	5H{iBBB&&';< 5''45 5	55 5s   A!!A*	c                 t    dg ddgidg}t        |      5  ddlm}  |        ddd       y# 1 sw Y   yxY w)	za
        Test that django CMS accepts template engines that inherit from DjangoTemplates
        z>cms.test_utils.project.template_backends.CustomDjangoTemplatescontext_processors*django.template.context_processors.requestBACKENDDIRSOPTIONSr   r   validate_settingsN)r   cms.utils.setuprV   )r    custom_templates_settingsrV   s      r$   +test_accepts_custom_django_template_backendz;TemplatesConfig.test_accepts_custom_django_template_backendc   sO     \(+W*X%
! )BC 	 9	  	  	 s   .7c                    dg ddgidg}t        |      5  ddlm} | j                  t              5 } |        ddd       | j                  d	t        j                        d
       ddd       y# 1 sw Y   8xY w# 1 sw Y   yxY w)zg
        Test that django CMS rejects template engines that don't inherit from DjangoTemplates
        z;cms.test_utils.project.template_backends.NonDjangoTemplatesrN   rO   rP   rT   r   rU   Nz/django.template.backends.django.DjangoTemplatesz*Should reject non-Django template backends)r   rW   rV   rK   r   assertInstr	exception)r    non_django_templates_settingsrV   contexts       r$   (test_rejects_non_django_template_backendz8TemplatesConfig.test_rejects_non_django_template_backendv   s     Y(+W*X)
% )FG 
	9""#78 $G!#$ MMAG%%&<
	 
	$ $
	 
	s!   A>A2.A>2A;	7A>>BN)__name__
__module____qualname__r%   r   	GOOD_PATHr9   r@   rG   rI   BAD_PATHrL   rY   r`    rA   r$   r   r      sy    	: 3> 4>2 3A 4A 3R 4R 25 35 &rA   r   ) os.pathr*   importlib.machineryr   django.confr   django.core.exceptionsr   django.templater   r   django.test.utilsr   django.utils.encodingr	   django.utils.translationr
   r2   cmsr   cms.test_utils.testcasesr   cms.utils.confr   r+   r,   r3   PROJECT_PATHrd   re   rG   r   rf   rA   r$   <module>rs      s     0   7 8 / + 6  0 *ggll;(:;GGLL..	;T	77<<--y:LM	ww||H))9k;O	ww||H))9k6KCWX	vk vrA   