
    h1                     V    d dl mZ d dlmZ ddlmZmZmZmZ ddl	m
Z
  G d de
      Zy)	    )translation)TranslationDoesNotExist   )AnyLanguageModel
EmptyModelNotRequiredModelSimpleModel)AppTestCasec                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)ModelAttributeTestsz!
    Test model construction
    c                 ~   	 t               j                  }| j                  dt        |       d       | j                  t        t               dd      d       | j                  t        t               d             y# t        $ r6}| j                  |t               | j                  |t               Y d}~d}~ww xY w)z2
        Test the metaclass of the model.
        z8Expected exception from reading untranslated title, got .Ntr_titleFOO)r	   r   failrepr	ExceptionassertIsInstancer   AttributeErrorassertEqualgetattrassertFalsehasattr)selfvaluees      R/home/dcms/DCMS/lib/python3.12/site-packages/parler/tests/test_model_attributes.pytest_untranslated_getz)ModelAttributeTests.test_untranslated_get   s    	aM**E
 IIPQUV[Q\P]]^_` 	
EBEJ
;<  	5!!!%<=!!!^44	5s   A= =	B<,B77B<c                    t        j                  d      5  t        d      | j                  j	                         t        j
                                | j                  t        j
                         d       ddd       d_        d_        j                          t        j                  d      5  t        j                  j                  j                        | j                  t        fd	       j                  d       | j                  j                  d       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)
z@
        Test whether simple language assignments work.
        zca-frc   )idNSHAREDTRANS_CAenpkc                       j                   S Nr   xs   r   <lambda>z;ModelAttributeTests.test_default_language.<locals>.<lambda>0   s    qzz     )r   overrider	   r   get_current_languageget_languagesharedr   saveobjectsgetr&   assertRaisesr   set_current_languager   r+   s    @r   test_default_languagez)ModelAttributeTests.test_default_language   s    !!'* 	BA Q335{7O7O7QR[557A	B 
	 !!$' 	5##''144'0A57IJ ""7+QZZ4	5 	5	B 	B	5 	5s   A#D/5A1D;/D8;Ec                    t        j                  d      5  t        ddd      }| j                  |j	                         d       |j                          t        j                  j                  d      j                  |j                        }| j                  |j	                         d       | j                  |j                  d       | j                  |j                  d       ddd       y# 1 sw Y   yxY w)z6
        See how ``.language().get()`` works.
        frr"   TRANSnl)r1   r   _current_languager%   N)r   r.   r	   r   r/   r2   r3   languager4   r&   r1   r   )r   r+   x2s      r   test_get_languagez%ModelAttributeTests.test_get_language6   s     !!$' 
	3 8gQUVAQ335t<FFH$$--d3771447@BR446=RYY1R[['2
	3 
	3 
	3s   CC//C8c                     t        d      }| j                  |j                  d       t        dd      }| j                  |j                         d       | j                  |j                  d       y)zQ
        Test whether passing translated attributes to __init__() works.
        TRANS_TITLEr)   r<   )r   r=   N)r	   r   r   r/   )r   r+   ys      r   test_init_argsz"ModelAttributeTests.test_init_argsF   s[     /]3$G//148]3r-   c                     t         j                  j                  d      j                  d      }| j	                  |j                         d       | j	                  |j                  d       y )Nr<   rB   r)   )r	   r3   r>   creater   r/   r   )r   rC   s     r   test_create_argsz$ModelAttributeTests.test_create_argsQ   sS    ((.55}5M//148]3r-   c                    t               j                  d       d_        j                  d       d_        j                  d       d_        j                  d       d_        j                          | j	                  t        j                  j                  d	d
            g d       | j	                  t        j                               g d       | j                  j                  d             | j                  j                  d             | j                  j                  d             j                  d       d_        j                  d       d_        | j                  dj                                j                  dd
       | j                  j                  d             | j                  dfd       | j	                  t        j                               g d       y)zT
        Test the save_translations() function to store multiple languages.
        r$   TITLE_ENr:   TITLE_FResTITLE_ESr<   TITLE_NLr   T)flat)rI   rL   rJ   rM   )r$   rK   r:   r<   fi	TITLE_ES2	TITLE_NL2   it
initializer   c                  $     j                         S r(   )save_translationsr*   s   r   r,   z8ModelAttributeTests.test_save_multiple.<locals>.<lambda>|   s    )<)<)> r-   )r$   rK   r:   rS   r<   N)r	   r6   r   r2   r   sortedtranslationsvalues_listget_available_languages
assertTruehas_translationr   assertNumQueriesrW   r7   s    @r   test_save_multiplez&ModelAttributeTests.test_save_multipleV   s    M	t$
	t$
	t$
	t$
	 	1>>--jt-DE<	
 	 9 9 ;<>VW))$/0))$/0**401 	
t$ 
	t$ 
a!4!4!67 	
t5))$/0a!>? 9 9 ;<>\]r-   c                 "   t               }|j                  dd       |j                  dd       |j                  d       |j                  dd       |j                          | j                  t	        |j                               g d       y)	zQ
        Test whether a translated model without any fields still works.
        r$   TrT   r:   rK   r<   )r$   r:   r<   N)r   r6   r2   r   rX   r[   r7   s     r   test_empty_modelz$ModelAttributeTests.test_empty_model   sz     L	t5	t5	t$	t5	 9 9 ;<>PQr-   c                     t         j                  j                         }|j                  dd       |j                  dd       | j	                  t        |j                               ddg       y )Nr$   rI   r)   r:   rJ   )r	   r3   rF   create_translationr   rX   r[   r7   s     r   test_create_translationz+ModelAttributeTests.test_create_translation   s^    &&(	TJ7	TJ7 9 9 ;<tTlKr-   c                    t         j                  j                  d      }|j                  dd       |j                  dd       | j	                  t        |j                               ddg       |j                  d      }| j	                  |d       | j	                  t        |j                               dg       y )	Ni  r%   r$   rI   r)   r:   rJ   r   )r	   r3   rF   rc   r   rX   r[   delete_translation)r   r+   num_deleteds      r   test_delete_translationz+ModelAttributeTests.test_delete_translation   s    &&$&/	TJ7	TJ7 9 9 ;<tTlK**40a( 9 9 ;<tfEr-   c                     t         j                  j                         }|j                  dd       ddddf}| j	                  |j                         |       y )Nr$   rI   r)   rR   r   )ztestapp.SimpleModelTranslationztestapp.SimpleModel)r	   r3   rF   rc   r   delete)r   r+   expects      r   test_delete_returnz&ModelAttributeTests.test_delete_return   sO    &&(	TJ7RSTUV,r-   c                    t               }|j                  | j                         d|_        |j                  | j                         d|_        |j                          t        j                  | j                        5  t         j                  j                  |j                        }| j                  |j                  d       ddd       y# 1 sw Y   yxY w)zF
        Test whether the fallback language will be returned.
        TITLE_FALLBACKTITLE_XXr%   N)r	   r6   conf_fallbackr   other_lang1r2   r   r.   other_lang2r3   r4   r&   r   r7   s     r   test_fallback_languagez*ModelAttributeTests.test_fallback_language   s     M	t112%
	t//0
	!!$"2"23 	;##''144'0AQZZ)9:	; 	; 	;s   >ACCc                 x   t               }|j                  d       d|_        |j                  d       d|_        |j                          t	        j
                  d      5  t         j                  j                  |j                        }| j                  |j                  d       ddd       y# 1 sw Y   yxY w)zTest de-us falls back to dedezHallo-der$   zHello-enzde-chr%   N)
r	   r6   r   r2   r   r.   r3   r4   r&   r   r7   s     r   test_fallback_variantz)ModelAttributeTests.test_fallback_variant   s    M	t$
	t$
	!!'* 	5##''144'0AQZZ4	5 	5 	5s    AB00B9c                     t               }|j                  | j                         d|_        | j	                  |j                  d| j                        d       y)z
        Test whether the fallback language will be returned,
        even when the current language does not have a translation.
        rn   r   )language_codeN)r	   r6   rp   r   r   safe_translation_getterrq   r7   s     r   !test_fallback_language_no_currentz5ModelAttributeTests.test_fallback_language_no_current   sP    
 M	t112%
%%j@P@P%QSc	
r-   c                 6   t               j                  | j                         d_        j	                          t        j                  | j                        5  t         j                  j                  j                        | j                  t        fd       | j                  j                  d       | j                  dfd       | j                  j                         j                   | j                         ddd       y# 1 sw Y   yxY w)zw
        Test whether a failure in the fallback language can return any saved language (if configured for it).
        ro   r%   c                  (     j                  d      S NT)use_fallback_get_translated_modelr*   s   r   r,   z=ModelAttributeTests.test_any_fallback_model.<locals>.<lambda>       1H1HVZ1H1[ r-   r   c                  $     j                         S r(   _get_any_translated_modelr*   s   r   r,   z=ModelAttributeTests.test_any_fallback_model.<locals>.<lambda>       1668 r-   N)r   r6   rq   r   r2   r   r.   rr   r3   r4   r&   r5   r   r   r^   r   rx   r7   s    @r   test_any_fallback_modelz+ModelAttributeTests.test_any_fallback_model   s     	t//0
	!!$"2"23 	\ ((,,,5A')[ 

J !!8 Q88:HH$JZJZ[	\ 	\ 	\s   B)DDc                    t               j                  | j                         d_        j	                          t        j                  | j                        5  t         j                  j                  j                        | j                  t        fd       | j                  j                  dd      d       | j                  j                  dd      d       | j!                  dfd	       | j                  j#                         j$                  | j                         d d d        y # 1 sw Y   y xY w)
Nro   r%   c                  (     j                  d      S r}   r   r*   s   r   r,   z@ModelAttributeTests.test_any_fallback_function.<locals>.<lambda>   r   r-   r   DEFAULTTany_languager   c                  $     j                         S r(   r   r*   s   r   r,   z@ModelAttributeTests.test_any_fallback_function.<locals>.<lambda>   r   r-   )r	   r6   rq   r   r2   r   r.   rr   r3   r4   r&   r5   r   assertIsry   r   r^   r   rx   r7   s    @r   test_any_fallback_functionz.ModelAttributeTests.test_any_fallback_function   s   M	t//0
	!!$"2"23 	\##''144'0A')[ MM))*i@) ))*4)H* !!8 Q88:HH$JZJZ[	\ 	\ 	\s   CD88Ec                     t               | j                  dfd       | j                  t        j	                               g        y)zy
        Test whether master object is created without translation, in case that no translation attribute is set
        r   c                  $     j                         S r(   r2   r*   s   r   r,   zEModelAttributeTests.test_create_without_translation.<locals>.<lambda>	       r-   N)r   r^   r   rX   r[   r7   s    @r   test_create_without_translationz3ModelAttributeTests.test_create_without_translation  s<     a!12 9 9 ;<bAr-   c                     t               d_        | j                  dfd       | j                  t	        j                               | j                  g       y)z\
        Test whether translation model is created even attribute has default value
        DEFAULT_TRANS_TITLErR   c                  $     j                         S r(   r   r*   s   r   r,   zIModelAttributeTests.test_create_with_default_attributes.<locals>.<lambda>  r   r-   N)r   r   r^   r   rX   r[   rp   r7   s    @r   #test_create_with_default_attributesz7ModelAttributeTests.test_create_with_default_attributes  sL    
 *
a!12 9 9 ;<t?Q?Q>RSr-   c                     t               }|j                  | j                         d|_        |j                  | j                         |j                  dd       |j                          y)zZ
        Test whether the ``save_translations()`` method skips fallback languages
        ro   r   Tr   N)r	   r6   rq   r   rr   ry   r2   r7   s     r    test_save_ignore_fallback_markerz4ModelAttributeTests.test_save_ignore_fallback_marker  sV     M	t//0
	t//0	!!*4!@	r-   c                     t               }|j                  | j                         d|_        d|_        |j                          	 t         j                  j                  |j                         y# t        $ r | j                  d       Y yw xY w)zS
        tests that the translated model is returned also when the pk is 0
        r   EMPTY_PKr%   zzero pk is not supported!N)
r	   r6   rq   r&   r   r2   r3   r4   r   r   r7   s     r   test_model_with_zero_pkz+ModelAttributeTests.test_model_with_zero_pk$  sr     M	t//0
		3##qtt#,& 	3II12	3s   *A0 0BBc                 X   d}t         j                  j                  d      }|j                  j	                         }||_         |j                          	 t        |j                  j	                               }| j                  |       y# t        $ r | j                  d       Y /w xY w)z/Test converting TranslatedFieldsModel to stringxx	Somethingr)   z0Converting translation to string raises KeyErrorN)r	   r3   rF   rY   r4   rx   r2   strKeyErrorr   r   )r   missing_language_codeobjr   translation_as_strs        r   test_translatedfieldsmodel_strz2ModelAttributeTests.test_translatedfieldsmodel_str5  s     $!!((+(>
 &&**,$9!	J!$S%5%5%9%9%;!< 	+-BC  	JIIHI	Js   #B B)(B)c                     t         j                  j                  d      j                  d      \  }| j	                  |       | j                  j                         d       | j                  t        fd       y )Nr<   XYZ)r1   c                       j                   S r(   r)   )rC   s   r   r,   zDModelAttributeTests.test_get_or_create_no_defaults.<locals>.<lambda>N  s    1:: r-   )	r	   r3   r>   get_or_creater\   r   r/   r5   r   )r   createdrC   s     @r   test_get_or_create_no_defaultsz2ModelAttributeTests.test_get_or_create_no_defaultsJ  sb     ((11$7EEUES
7 //14813EFr-   c                    t         j                  j                  d      j                  dddi      \  }}| j	                  |       | j                  |j                         d       | j                  |j                  d       y )Nr<   XXXr   rB   )r1   defaults)r	   r3   r>   r   r\   r   r/   r   )r   rC   r   s      r   test_get_or_create_defaultsz/ModelAttributeTests.test_get_or_create_defaultsP  sr     ((11$7EEJ#> F 

7 	 //148]3r-   N)__name__
__module____qualname____doc__r   r8   r@   rD   rG   r_   ra   rd   rh   rl   rs   rv   rz   r   r   r   r   r   r   r   r   r    r-   r   r   r   	   s    = 503 	44
'^RRL
F-; 5 
\0\0B	T3"D*G4r-   r   N)django.utilsr   parler.modelsr   testapp.modelsr   r   r   r	   utilsr
   r   r   r-   r   <module>r      s"    $ 1 W W M4+ M4r-   