
    Bh+                         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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mZ  G d de      Z  G d de      Z! G d de      Z"y)    )Mockpatch)apps)ContentType)ImproperlyConfigured)Http404)create_page)get_cms_config_appsget_cms_extension_apps)CMSCoreExtensions)PagePageContent)render_pagecontent)CMSTestCase)
CMSToolbar)setup_cms_apps)render_object_editrender_object_previewc                   :    e Zd Zd Zd Zd Z ed      d        Zy))ConfigureToolbarEnabledModelsUnitTestCasec                     t               }t               }t               }t               }t               }||f||fg}t        d|      }|j                  |       | j                  |j                  ||||i       y)zTest that a list of (model, render_func) elements gets
        correctly added to internal dict with model as a key
        and render_func as value.
        Tcms_enabledcms_toolbar_enabled_modelsN)r   r    configure_toolbar_enabled_modelsassertDictEqualtoolbar_enabled_models)self
extensionsmodel1model2render_func1render_func2config
cms_configs           U/home/dcms/DCMS/lib/python3.12/site-packages/cms/tests/test_toolbar_enabled_models.pytest_adds_to_mappingz>ConfigureToolbarEnabledModelsUnitTestCase.test_adds_to_mapping   s}    
 '(
vv<(6<*@AA
33J?--\6<8	
    c                     t               }t        dg       }	 |j                  |       y# t        $ r | j	                  d       Y yw xY w)zq
        If the toolbar enabled models setting is not present in the config, simply
        ignore this.
        T)r   specz:Raises exception when cms_toolbar_enabled_models undefinedN)r   r   configure_appAttributeErrorfailr   r   r%   s      r&   Atest_doesnt_raise_exception_when_toolbar_enabled_models_undefinedzkConfigureToolbarEnabledModelsUnitTestCase.test_doesnt_raise_exception_when_toolbar_enabled_models_undefined(   sJ    
 '(
d4
	T$$Z0 	TIIRS	Ts   + AAc                     t               }t        dt                     }| j                  t              5  |j	                  |       ddd       y# 1 sw Y   yxY w)z[
        If the toolbar enabled models setting isn't iterable, raise an exception.
        Tr   N)r   r   assertRaisesr   r   r.   s      r&   %test_raises_exception_if_not_iterablezOConfigureToolbarEnabledModelsUnitTestCase.test_raises_exception_if_not_iterable4   sT     '(
A
34 	D77
C	D 	D 	Ds   AAzcms.cms_config.logger.warningc                     t               }t               }t               }||f||fg}t        d|      }|j                  |       |j                  d| d       | j	                  |j
                  ||i       y)zh
        If a model is already added to the toolbar enabled models dict,
        log a warning.
        Tr   zModel z* already registered for frontend renderingN)r   r   r   assert_called_once_withr   r   )r   mocked_loggerr   modelrender_funcr$   r%   s          r&   0test_warning_if_registering_the_same_model_twicezZConfigureToolbarEnabledModelsUnitTestCase.test_warning_if_registering_the_same_model_twice>   s     '(
f+&(<=A
33J?--UGEF	
 	--K 	
r(   N)__name__
__module____qualname__r'   r/   r2   r   r8    r(   r&   r   r      s-    
&
TD *+
 ,
r(   r   c                       e Zd Zd Zd Zy)9ConfigureToolbarEnabledModelsRenderingIntegrationTestCasec                 T    t        j                          t        j                          y )N)r   cache_clearr
   )r   s    r&   setUpz?ConfigureToolbarEnabledModelsRenderingIntegrationTestCase.setUpX   s    
 	**,'')r(   c                     t                t        j                  d      }|j                  j                  }| j                  t        |j                                | j                  |t           t               y)zk
        Check that all toolbar enabled models settings are picked up
        from cms.cms_config.
        cmsN)
r   r   get_app_configcms_extensionr   assertInr   keysassertEqualr   )r   appr   s      r&   5test_adds_all_toolbar_enabled_models_settings_to_dictzoConfigureToolbarEnabledModelsRenderingIntegrationTestCase.test_adds_all_toolbar_enabled_models_settings_to_dict`   s[    
 	!!%(!$!2!2!I!Ik#9#>#>#@A/<>PQr(   N)r9   r:   r;   rA   rJ   r<   r(   r&   r>   r>   V   s    *	Rr(   r>   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)ToolbarEnabledModelsTestCasec                     | j                  d      }t        |      |_        t        j                  j                  t              }t        ddd      }t        ||j                  |j                        }| j                  |j                  d       y)zoTest that attempting to use render_object_preview with
        unsupported model returns 400 response.
        /homenav_playground.htmlen  N)get_requestr   toolbarr   objectsget_for_modelr   r	   r   pkrH   status_coder   requestctypepageresponses        r&   !test_render_preview_not_supportedz>ToolbarEnabledModelsTestCase.test_render_preview_not_supportedn   sq     ""3'$W-##11$76#8$?(%((DGGD--s3r(   c                     | j                  d      }t        |      |_        t        j                  j                  t              }t        ddd      }t        ||j                  |j                        }| j                  |j                  d       y)zlTest that attempting to use render_object_edit with
        unsupported model returns 400 response.
        rN   rO   rP   rQ   rR   N)rS   r   rT   r   rU   rV   r   r	   r   rW   rH   rX   rY   s        r&   test_render_edit_not_supportedz;ToolbarEnabledModelsTestCase.test_render_edit_not_supportedy   sq     ""3'$W-##11$76#8$?%guxxA--s3r(   c                    | j                  d      }t        |      |_        t        j                  j                  t              }t        ddd      }t               }t        |i}t        j                  d      j                  }t        j                  |d|      5  t        ||j                  |j                        }ddd       | j!                  j"                  d       y# 1 sw Y   &xY w)	z}Test that attempting to use render_object_edit with
        a model that doesn't have placeholder field returns 400.
        rN   rO   rP   rQ   rC   r   NrR   )rS   r   rT   r   rU   rV   r   r	   r   r   rD   rE   r   objectr   rW   rH   rX   )r   rZ   r[   r\   r7   mocked_models	extensionr]   s           r&   #test_render_edit_not_editable_modelz@ToolbarEnabledModelsTestCase.test_render_edit_not_editable_model   s     ""3'$W-##11$76#8$?f{+''.<<	\\)%=}M 	F)'588TWWEH	F 	--s3		F 	Fs   "C!!C*c                 B   | j                  d      }t        |      |_        t        j                  j                  t              }t        ddd      }| j                  t              5  t        ||j                  |j                  dz          ddd       y# 1 sw Y   yxY w)zbTest that render_object_object returns 404 when provided
        object id doesn't exist.
        rN   rO   rP   rQ   d   N)rS   r   rT   r   rU   rV   r   r	   r1   r   r   rW   )r   rZ   r[   r\   s       r&   $test_render_preview_object_not_foundzAToolbarEnabledModelsTestCase.test_render_preview_object_not_found   s     ""3'$W-##11$76#8$?w' 	D!'588TWWs]C	D 	D 	Ds   '%BBc                 
   | j                  d      }t        |      |_        t        j                  j                         }| j                  t              5  t        ||j                  dz   d       ddd       y# 1 sw Y   yxY w)zhTest that render_object_object returns 404 when provided
        content type id doesn't exist.
        rN   rg      N)
rS   r   rT   r   rU   lastr1   r   r   rW   )r   rZ   r[   s      r&   #test_render_preview_ctype_not_foundz@ToolbarEnabledModelsTestCase.test_render_preview_ctype_not_found   sk     ""3'$W-##((*w' 	>!'588c>1=	> 	> 	>s   A99Bc                    | j                  d      }t        |      |_        t        j                  j                  t              }t        ddd      }t               }t        |i}t        j                  d      j                  }t        j                  |d|      5  t        ||j                  |j                         ddd       |j!                  ||       y# 1 sw Y   xY w)zoTest that render_object_preview uses render_func associated
        with provided model in CMS config.
        rN   rO   rP   rQ   rC   r   N)rS   r   rT   r   rU   rV   r   r	   r   r   rD   rE   r   rb   r   rW   r4   )r   rZ   r[   r\   r7   rc   rd   s          r&   $test_render_preview_uses_render_funczAToolbarEnabledModelsTestCase.test_render_preview_uses_render_func   s     ""3'$W-##11$76#8$?f{+''.<<	\\)%=}M 	>!'588TWW=	>++GT:	> 	>s   "CC N)	r9   r:   r;   r^   r`   re   rh   rl   rn   r<   r(   r&   rL   rL   l   s!    	4	44"	D>;r(   rL   N)#unittest.mockr   r   django.appsr   "django.contrib.contenttypes.modelsr   django.core.exceptionsr   django.httpr   cms.apir	   cms.app_registrationr
   r   cms.cms_configr   
cms.modelsr   r   cms.page_renderingr   cms.test_utils.testcasesr   cms.toolbar.toolbarr   cms.utils.setupr   	cms.viewsr   r   r   r>   rL   r<   r(   r&   <module>r}      sZ    %  : 7   L , ( 1 0 * * ?@
 @
FR R,K;; K;r(   