
    T@9if                        d dl Z d dlZd dlZd dl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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"  ed       G d de             Z#d Z$d Z%d Z&y)    N)BytesIO)skipIf)callpatch)Image)
LogCapture)settings)
management)ImproperlyConfigured)TestCaseoverride_settings)reverse)timezone)gettext_lazy)CaptchaStorezcaptcha.tests.urls)ROOT_URLCONFc                      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 ed      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$ e%d#e&jN                  vd$      d%        Z( e%d#e&jN                  vd$      d&        Z) e%d#e&jN                  vd$      d'        Z* e%d#e&jN                  vd$      d(        Z+y))*CaptchaCasec                    i | _         t        j                  | _        t        j                  | _        g d}t        j                  j                  d      r8dt        _        dt        _        |j                  d       |j                  d       |D ]s  } t        j                  |             \  }}t        j                  j                  ||      \  | j                   |j                  dd      d	   j                  d
d      <   }u  t        j                                 \  }}t        j                  j                  ||      \  | j                   d<   }| j                   d   | _        y )N)captcha.helpers.math_challengez%captcha.helpers.random_char_challengez!captcha.helpers.unicode_challengez/usr/share/dict/wordsz;-,.zcaptcha.helpers.word_challengez4captcha.helpers.huge_words_and_punctuation_challenge	challengeresponse.   
_challenge_storedefault_store)storesr	   CAPTCHA_WORDS_DICTIONARY)_CaptchaCase__current_settings_dictionaryCAPTCHA_PUNCTUATION*_CaptchaCase__current_settings_punctuationospathexistsappend_callable_from_stringr   objectsget_or_creatersplitreplaceget_challenger   )selftested_helpershelperr   r   _s         J/var/www/apihucms/venv/lib/python3.12/site-packages/captcha/tests/tests.pysetUpzCaptchaCase.setUp   sG   -5-N-N*.6.J.J+

 77>>120GH-+1H(!!"BC!!F % 	F"H("@"@"H"JIx $$22#h 3 FMM#q1"5==lHUV		 7h4468	8*6*>*>*L*L( +M +
'O$a "[[9    c                 X    | j                   t        _        | j                  t        _        y N)r"   r	   r!   r$   r#   r/   s    r3   tearDownzCaptchaCase.tearDown:   s    ,0,N,N)'+'J'J$r5   c                 b     | j                   |j                  j                  |      g|i | y r7   )assertFormErrorcontextget)r/   r   	form_nameargskwargss        r3   _assertFormErrorzCaptchaCase._assertFormError>   s-    X--11)<NtNvNr5   c                     t        j                  dt        |j                              d   }t        j
                  j                  |      j                  }||fS )Nvalue="([0-9a-f]+)"r   hashkey)refindallstrcontentr   r*   r=   r   r/   rhash_r   s       r3   __extract_hash_and_responsez'CaptchaCase.__extract_hash_and_responseA   sI    

13qyy>B1E''++E+:CChr5   c           	      ~   | j                   j                         D cg c]  }|j                   c}D ]  }| j                  j	                  t        dt        |                  }| j                  |j                  d       | j                  |j                  d             | j                  |d   d        y c c}w )Ncaptcha-imagekeyr@      content-type	image/png)r    valuesrE   clientr=   r   dictassertEqualstatus_code
assertTrue
has_headerr/   storerQ   r   s       r3   
test_imagezCaptchaCase.test_imageF   s    /3{{/A/A/CDeEMMD 	DC{{wtPS}'UVHX1137OOH//?@Xn5{C		DDs   B:c           	      @   t         j                  sy | j                  j                  d      j                  | j                  j                  d      j                  | j
                  j                  fD ]  }| j                  j                  t        dt        |                  }| j                  |j                  d       | j                  |j                  j                  dkD         | j                  |j                  d             | j                  |d   d        y )	N
math_storezcaptcha-audiorP   rR   rS   i   rT   z	audio/wav)r	   CAPTCHA_FLITE_PATHr    r=   rE   r   rW   r   rX   rY   rZ   r[   ranged_filesizer\   )r/   rQ   r   s      r3   
test_audiozCaptchaCase.test_audioM   s    **KKOOL)11KKOOL)11&&
 		DC
 {{wtPS}'UVHX1137OOH0055<=OOH//?@Xn5{C		Dr5   c           	         t         j                  }dt         _        | j                  j                         D cg c]  }|j                   c}D ]  }| j
                  j                  t        dt        |                  }| j                  |j                  d       | j                  |j                  d             | j                  |d   t         j                  rdnd        |t         _        y c c}w )	NTrO   rP   rR   rS   rT   z
image/avifz	image/gif)r	   CAPTCHA_ANIMATEDr    rV   rE   rW   r=   r   rX   rY   rZ   r[   r\   CAPTCHA_ANIMATED_USE_AVIFr/   _settingr^   rQ   r   s        r3   test_animationzCaptchaCase.test_animation[   s    ,,$(!/3{{/A/A/CDeEMMD 	C{{wtPS}'UVHX1137OOH//?@( ( B B		 %-! Es   C2c           	         t         j                  }dt         _        | j                  j                         D cg c]  }|j                   c}D ]  }| j
                  j                  t        dt        |                  }| j                  |j                  d       | j                  |j                  d             | j                  |d   d        |t         _        y c c}w )Nz#f00rO   rP   rR   rS   rT   rU   r	   CAPTCHA_BACKGROUND_COLORr    rV   rE   rW   r=   r   rX   rY   rZ   r[   r\   ri   s        r3   test_background_colorz!CaptchaCase.test_background_colorh   s    44,2)/3{{/A/A/CDeEMMD 	DC{{wtPS}'UVHX1137OOH//?@Xn5{C		D
 -5) E   C c           	         | j                   j                  t        d            }| j                  |j                  d       | j                  |      \  }}| j                   j                  t        d      t        ||dd            }| j                  |j                  d       | j                  t        |j                        j                  d      dkD         | j                   j                  t        d      t        ||dd            }| j                  |j                  d       | j                  t        |j                        j                  d      dkD         y )Ncaptcha-testrS   xxxasasd@asdasd.com	captcha_0	captcha_1subjectsenderForm validatedr   rW   r=   r   rY   rZ   '_CaptchaCase__extract_hash_and_responsepostrX   r[   rH   rI   findassertFalserJ   s       r3   test_form_submitzCaptchaCase.test_form_submitr   s   KKOOGN34,::1=xKKN#")	
 	,AII++,<=ABKKN#")	
 	,QYY,,-=>BCr5   c           	         | j                   j                  t        d            }| j                  |j                  d       | j                  |      \  }}| j                   j                  t        d      t        ||dd            }| j                  |j                  d       | j                  t        |j                        j                  d      dkD         | j                   j                  t        d      t        ||dd            }| j                  |j                  d       | j                  t        |j                        j                  d      dkD         y )Ncaptcha-test-model-formrS   rs   rt   ru   rz   r   r{   rJ   s       r3   test_modelformzCaptchaCase.test_modelform   s   KKOOG$=>?,::1=xKK-.")	
 	,AII++,<=ABKK-.")	
 	,QYY,,-=>BCr5   c           
      0   dD ]  }| j                   j                  t        |            }| j                  |j                  d       | j                   j                  t        |      t        dddd            }| j                  |dd	t        d
              y )Nrr   r   rS   abcwrong responsers   rt   ru   formcaptchaInvalid CAPTCHA	rW   r=   r   rY   rZ   r}   rX   rA   r   )r/   urlnamerK   s      r3   test_wrong_submitzCaptchaCase.test_wrong_submit   s    B 	YG 01AQ]]C0   #.!-	A !!!VYEV8WX	Yr5   c           	      h   t        j                         t        j                  d      z
  | j                  _        | j                  j                          | j                  j                  }| j                  j                  t        d      t        || j                  j                  dd            }| j                  |j                  d       | j                  dt!        |j"                        v        	 t$        j&                  j)                  |	       | j+                          y # t,        $ r Y y w xY w)
N   )minutesrr   rs   rt   ru   rS   rz   rD   )r   nowdatetime	timedeltar   
expirationsaverE   rW   r}   r   rX   r   rY   rZ   r   rH   rI   r   r*   r=   fail	Exception)r/   rL   rK   s      r3   test_deleted_expiredz CaptchaCase.test_deleted_expired   s    (09K9KTU9V(V%!""**KKN#,,55)	
 	,)S^;<	  $$U$3IIK 		s   40D% %	D10D1c                    | j                   j                  t        d            }| j                  |j                  d       | j                   j                  t        d      t        dd            }| j                  |ddd       | j                   j                  t        d      t        dd	            }| j                  |ddt        d
             y )Nz!captcha-test-custom-error-messagerS   r   r   )rv   rw   r   r   zTEST CUSTOM ERROR MESSAGE zThis field is required.r   r/   rK   s     r3   test_custom_error_messagez%CaptchaCase.test_custom_error_message   s    KKOOG$GHI,KK785,<=
 	a4OPKK785B/
 	vy,/H"I	
r5   c                     t         j                  j                  dd       	 t         j                  j                  dd       y # t        $ r | j	                          Y y w xY w)Nrs   r   )r   r*   creater   r   r8   s    r3   test_repeated_challengez#CaptchaCase.test_repeated_challenge   sQ    ##ee#D	  ''%%'H 	IIK	s   !A A! A!*captcha.tests.tests.random_color_challengec                 &   d|_         t        j                  }dt        _        dt        _         t        j                                \  }}t
        j                  j                  ||      \  }}| j                  j                  t        dt        |j                                    }|j                  dk(  sJ g }t        |      D ]   \  }	}
|j                  t!        |	|             " |j#                  |d	
       d t        _        |t        _        y )N#ffffffr   z)captcha.tests.tests.random_char_challenger   rO   rP   rR   rS   T)	any_order)return_valuer	   CAPTCHA_CHALLENGE_FUNCTCAPTCHA_LETTER_COLOR_FUNCTr.   r   r*   r+   rW   r=   r   rX   rE   rZ   	enumerater(   r   assert_has_calls)r/   color_challenge_func_mock_current_captcha_challenge_funcr   r   r   r2   	_response_callsindexchars              r3   test_custom_letters_colorz%CaptchaCase.test_custom_letters_color   s    1:!.*2*J*J' 9 	+ ,W(6h4468	8 ((66( 7 
	 KKOOODV^^,DE
	 $$+++$Y/ 	2KE4MM$ui01	2!226T2J.2++J(r5   c           
      <   t         j                  }dD ]<  }dt         _        | j                  j                  t	        |            }| j                  j                  t	        |            }| j                  |j                  d       | j                  |j                  d       t        j                  dt        |j                              r-t        j                  dt        |j                              d   }n| j                          t        j                  dt        |j                              r-t        j                  dt        |j                              d   }n| j                          	 t        j                  j                        }t        j                  j                        }| j                  j                   j                   k7         | j                  |j"                  |j"                  k(         | j                  k7         | j                  j%                  t	        |      t'        ||j"                  dd	            }| j                  |j                  d       | j                  t        |j                        j)                  d
      dkD         	 t        j                  j                  |      }| j                  j%                  t	        |      t'        ||j"                  dd	            }| j                  |j                  d       | j                  t        |j                        j)                  d
      dkD         ? |t         _        y # t        $ r | j                          Y w xY w# t        $ r | j                          Y w xY w)Nr   zcaptcha.tests.trivial_challengerS   rC   r   rD   rs   rt   ru   rz   )r	   r   rW   r=   r   rY   rZ   rF   rG   rH   rI   r   r   r*   r   r[   pkr   r}   rX   r~   )	r/   (_CaptchaCase__current_challange_functionr   r1r2hash_1hash_2store_1store_2s	            r3   #test_repeated_challenge_form_submitz/CaptchaCase.test_repeated_challenge_form_submit  s   '/'G'G$B 5	HG/PH,!12B!12BR^^S1R^^S1zz0#bjj/B$:C

OLQO		zz0#bjj/B$:C

OLQO		&..2262B&..2262B OOGJJ'**45OOG,,0@0@@AOOFf,-!! $%..!-	B R^^S1OOC

O001ABQFG&..2262B !! $%..!-	B R^^S1OOC

O001ABQFGk5	Hl ,H(G  		*  		s%   /A M" M?M<;M<?NNc                     | j                   j                  t        d            }| j                  |      \  }}| j	                  |d       y )Ntest_custom_generator111111)rW   r=   r   r|   rY   rJ   s       r3   r   z!CaptchaCase.test_custom_generatorB  s>    KKOOG$;<=::1=x8,r5   c                 0   | j                   j                  t        d      d      }	 t        j                  t        |j                  d            }| j                  d|v        | j                  d|v        y # t        $ r | j                          Y y w xY w)Nzcaptcha-refreshXMLHttpRequest)HTTP_X_REQUESTED_WITHascii)encoding	image_url	audio_url)
rW   r=   r   jsonloadsrH   rI   r[   r   r   )r/   rK   new_datas      r3   test_refresh_viewzCaptchaCase.test_refresh_viewG  s}    KKOO%&>N  
	zz#aii'"BCHOOK834OOK834 	IIK	s   AA9 9BBc           	         | j                   j                         D cg c]  }|j                   c}D ]  }| j                  j	                  t        dt        |                  }| j                  |j                  d             | j                  |d   j                                | j                  t        |d                 y c c}w )NrO   rP   rR   zcontent-length)r    rV   rE   rW   r=   r   rX   r[   r\   isdigitintr]   s       r3   test_content_lengthzCaptchaCase.test_content_lengthR  s    /3{{/A/A/CDeEMMD 	=C{{wtPS}'UVHOOH//0@ABOOH%56>>@AOOC)9 :;<		=Ds   Cc           	         t         j                  }dt         _        | j                  j                  t	        d            }| j                  |j                  d       | j                  j                  t	        d      t        dddd            }| j                  |d	d
t        d             dt         _        | j                  j                  t	        d            }| j                  |j                  d       | j                  j                  t	        d      t        dddd            }| j                  |d	d
t        d             | j                  j                  t	        d            }| j                  |j                  d       | j                  j                  t	        d      t        dddd            }| j                  t        |j                        j                  d      dkD         |t         _        y )NFrr   rS   r   r   rs   rt   ru   r   r   r   Tpassedrz   r   )r	   CAPTCHA_TEST_MODErW   r=   r   rY   rZ   r}   rX   rA   r   r[   rH   rI   r~   )r/   '_CaptchaCase__current_test_mode_settingrK   s      r3   test_test_mode_issue15z"CaptchaCase.test_test_mode_issue15Y  s   &.&@&@#%*"KKOOGN34,KKN#*)	
 	aLAR4ST%)"KKOOGN34,KKN#*)	
 	aLAR4STKKOOGN34,KKN#")	
 	AII++,<=AB%@"r5   c                 ,    dd l }|j                          y )Nr   )r   get_version)r/   r   s     r3   test_get_versionzCaptchaCase.test_get_version  s    r5   c           	      `   | j                   j                  t        d            }| j                  |j                  d       | j                  |      \  }}| j                   j                  t        d      t        dd            }| j                  |j                  d       | j                  t        |j                        j                  d      dkD         | j                   j                  t        d            }| j                  |j                  d       | j                  |      \  }}| j                   j                  t        d      t        ||dd            }| j                  |j                  d       | j                  t        |j                        j                  d      dkD         y )	Nzcaptcha-test-non-requiredrS   rs   rt   )rx   ry   rz   r   ru   )rW   r=   r   rY   rZ   r|   r}   rX   r[   rH   rI   r~   rJ   s       r3   test_missing_valuezCaptchaCase.test_missing_value  sU   KKOOG$?@A,::1=x KK/0'9:
 	,AII++,<=AB KKOOG$?@A,::1=xKK/0")	
 	,AII++,<=ABr5   c                     | j                   j                  t        d            }d}t        j                  dk\  rd}| j                  ||d       y )Nrr   z<input type="text" name="captcha_1" autocomplete="off" spellcheck="false" autocorrect="off" autocapitalize="off" id="id_captcha_1" required />r   r   T)html)rW   r=   r   djangoVERSIONassertContains)r/   rK   captcha_inputs      r3   test_autocomplete_offz!CaptchaCase.test_autocomplete_off  sS    KKOOGN34A 	
 >>V#  	A}48r5   c                 x   | j                   j                  t        d            }|j                  d   d   j                  j
                  j                  }t        j                  dk\  r*| j                  d| dt        |j                               y | j                  d| dt        |j                               y )Nrr   r   r   r   z-<input type="hidden" name="captcha_0" value="z2" id="id_captcha_0" autocomplete="off" required />)rW   r=   r   r<   fieldwidget_keyr   r   assertInHTMLrH   rI   )r/   rK   rQ   s      r3   -test_issue201_autocomplete_off_on_hiddeninputz9CaptchaCase.test_issue201_autocomplete_off_on_hiddeninput  s    KKOOGN34 ii	*0077<< >>V#CC5 I" " AII CC5 IG G AIIr5   c           	         t         j                  }dt         _        | j                  j                         D cg c]  }|j                   c}D ]  }| j
                  j                  t        dt        |                  }| j                  |j                  d       | j                  |j                  d             | j                  |d   d        |t         _        y c c}w )NtransparentrO   rP   rR   rS   rT   rU   rm   r/   r   r^   rQ   r   s        r3   test_transparent_backgroundz'CaptchaCase.test_transparent_background  s    &.&G&G#,9)/3{{/A/A/CDeEMMD 	DC{{wtPS}'UVHX1137OOH//?@Xn5{C		D -H) Erp   c           	         | j                   j                         D cg c]  }|j                   c}D ]  }| j                  j	                  t        dt        |                  }| j                  |j                  d       t        j                  j                  |      j                          | j                  j	                  t        dt        |                  }| j                  |j                  d        y c c}w )NrO   rP   rR   rS   rD   i  )r    rV   rE   rW   r=   r   rX   rY   rZ   r   r*   filterdeleter]   s       r3    test_expired_captcha_returns_410z,CaptchaCase.test_expired_captcha_returns_410  s    /3{{/A/A/CDeEMMD 	8C{{wtPS}'UVHX1137  '''4;;={{wtPS}'UVHX1137	8Ds   C?c                 |   | j                   j                  t        d            }| j                  dt	        |j
                        v        | j                  dt	        |j
                        v        | j                  dt	        |j
                        v        | j                  dt	        |j
                        v        y )Nzcaptcha-test-id-prefixz2<label for="form1_id_captcha1_1">Captcha1:</label>zid="form1_id_captcha1_1"z2<label for="form2_id_captcha2_1">Captcha2:</label>zid="form2_id_captcha2_1")rW   r=   r   r[   rH   rI   r   s     r3   test_id_prefixzCaptchaCase.test_id_prefix  s    KKOOG$<=>@C		NR	
 	2c!))nDE@C		NR	
 	2c!))nDEr5   c           	      N   t         j                  }| j                  j                         D cg c]  }|j                   c}D ]  }dt         _        | j
                  j                  t        dt        |                  }| j                  |j                  d       | j                  |j                  d             | j                  |d   d       | j                  t        j                  t        |j                               j"                  d        |t         _        y c c}w )N)   a   rO   rP   rR   rS   rT   rU   )r	   CAPTCHA_IMAGE_SIZEr    rV   rE   rW   r=   r   rX   rY   rZ   r[   r\   r   openr   rI   rd   r   s        r3   test_image_sizezCaptchaCase.test_image_size  s    &.&A&A#/3{{/A/A/CDeEMMD 	TC*3H'{{wtPS}'UVHX1137OOH//?@Xn5{CUZZ0@0@(ABGGS	T 'B# Es   D"c           	         t         j                  j                  t         j                  j                  t              ddd      }t
        j                  }|t
        _        | j                  j                         D cg c]  }|j                   c}D ]c  }| j                  j                  t        dt        |                  }| j                  |j                  d       | j                  |d   d	       e |||gt
        _        | j                  j                         D cg c]  }|j                   c}D ]c  }| j                  j                  t        dt        |                  }| j                  |j                  d       | j                  |d   d	       e d
t
        _        | j                  j                         D cg c]  }|j                   c}D ]C  }	 | j                  j                  t        dt        |                  }| j!                          E |t
        _        y c c}w c c}w c c}w # t"        $ r Y lw xY w)Nz..fontszVera.ttfrO   rP   rR   rS   rT   rU   F)r%   r&   joindirname__file__r	   CAPTCHA_FONT_PATHr    rV   rE   rW   r=   r   rX   rY   rZ   r   r   )r/   verar   r^   rQ   r   s         r3   test_multiple_fontszCaptchaCase.test_multiple_fonts  s   ww||BGGOOH5tWjQ&.&@&@#%)"/3{{/A/A/CDeEMMD 	DC{{wtPS}'UVHX1137Xn5{C	D
 '+D$%7"/3{{/A/A/CDeEMMD 	DC{{wtPS}'UVHX1137Xn5{C	D
 &+"/3{{/A/A/CDeEMMD 	C;;??ODSMB 			 &A"+ E E E ( s%   ;H,!H1H6A H;;	IIc                    t         j                  }dt         _        d} t        j                  |             \  }}t         j                  |vr0 t        j                  |             \  }}t         j                  |vr0| j                  |t	        t        |j                  t         j                  d      d d                    |t         _        y )N~r   *r   )r	   CAPTCHA_MATH_CHALLENGE_OPERATORr)   rY   rH   evalr-   )r/   r   r1   r   r   s        r3   test_math_challengezCaptchaCase.test_math_challenge  s    &.&N&N#3601Dh<<VDF	866iG"H("@"@"H"JIx 66iG 	%%h&N&NPST		
 4O0r5   c                    t         j                  }t         j                  }t         j                  }dt         _        dt         _        dt         _        t        j
                  j                         j                          d}t	        j                  |       | j                  t        j
                  j                         |       t        j
                  j                  dd      }t	        j                         }| j                  ||       | j                  t        j
                  j                         |       |t         _        |t         _        |t         _        y )NTr   Z   
   )countrE   )flat)r	   CAPTCHA_GET_FROM_POOLCAPTCHA_GET_FROM_POOL_TIMEOUTCAPTCHA_TIMEOUTr   r*   allr   create_poolrY   r  values_listpickassertIn)r/   0_CaptchaCase__current_test_get_from_pool_setting8_CaptchaCase__current_test_get_from_pool_timeout_setting*_CaptchaCase__current_test_timeout_setting	POOL_SIZEpoolrandom_picks          r3   test_get_from_poolzCaptchaCase.test_get_from_pool.  s   /7/M/M,22 	5 *2)A)A&)-&12.#%   "))+	  y1--335yA##//	/E"'')k4(--335yA)M&8 	. $B r5   c                     t         j                  j                         j                          d}t	        j
                  d|d       | j                  t         j                  j                         |       y )Nr  captcha_create_poolr   )	pool_size	verbosity)r   r*   r
  r   r
   call_commandrY   r  )r/   r  s     r3   test_captcha_create_poolz$CaptchaCase.test_captcha_create_poolF  sU      "))+	 5VWX--335yAr5   c                    t         j                  }dt         _        t        j                  j	                         j                          t               5 }t        j                          d d d        j                  d       | j                  t        j                  j                         d       |t         _        y # 1 sw Y   TxY w)NT)zcaptcha.modelsERRORz,Couldn't get a captcha from pool, generatingr   )r	   r  r   r*   r
  r   r   r  checkrY   r  )r/   r  logs      r3   test_empty_pool_fallbackz$CaptchaCase.test_empty_pool_fallbackL  s    /7/M/M,)-&  "))+\ 	 S	 		W	
 	--335q9)M&	  	 s   B::Crest_frameworkzOnly run if DRF is installedc                     | j                   j                  t        d      t        | j                  j
                  | j                  j                              }| j                  |j                  d       y )Ncaptcha-test-serializercaptcha_codecaptcha_hashkeyrS   	rW   r}   r   rX   r   r   rE   rY   rZ   r   s     r3   test_serializerzCaptchaCase.test_serializerX  s]    
 KK-.!//88 $ 2 2 : :
 	,r5   c                     | j                   j                  t        d      t        dd            }| j	                  |j
                  d       | j	                  t        j                  |j                        ddi       y )Nr#  rs   
wrong hashr$    errorr   	rW   r}   r   rX   rY   rZ   r   r   rI   r   s     r3   test_wrong_serializerz!CaptchaCase.test_wrong_serializerf  sh    
 KK-." ,
 	,AII.:K0LMr5   c           	          | j                   j                  t        d      t        | j                  j
                  | j                  j                  dd            }| j                  |j                  d       y )Ncaptcha-test-model-serializerrs   rt   r%  r&  rx   ry   rS   r'  r   s     r3   test_model_serializerz!CaptchaCase.test_model_serializeru  sc    
 KK34!//88 $ 2 2 : :)	
 	,r5   c           	         | j                   j                  t        d      t        dddd            }| j	                  |j
                  d       | j	                  t        j                  |j                        ddi       y )	Nr0  rs   r*  rt   r1  r+  r,  r   r-  r   s     r3   test_wrong_model_serializerz'CaptchaCase.test_wrong_model_serializer  sn    
 KK34" ,)	
 	,AII.:K0LMr5   N),__name__
__module____qualname__r4   r9   rA   r|   r_   re   rk   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r   r   django_settingsINSTALLED_APPSr(  r.  r2  r4   r5   r3   r   r      s~   :>KO
DD-5D:D:Y0
$ 78K 9K68Ht-
	=+AZ
C<9 4	H8	F
BA8O*B0B
N  > >>&-	-  > >>&	N		N  > >>&
-	
-  > >>&N	Nr5   r   c                       y)N)trivialr<  r:  r:  r5   r3   trivial_challenger=    s    r5   c                      y)Nr   r:  )r   strings     r3   random_color_challenger@    s    r5   c                  P    d} | d t         j                   }|j                         |fS )Nabcdefghijklmnopqrstuvwxyz)r	   CAPTCHA_LENGTHupper)charsrets     r3   random_char_challengerG    s+    (E
)())
*C99;r5   )'r   r   r%   rF   ior   unittestr   unittest.mockr   r   PILr   testfixturesr   r   django.confr	   r8  django.corer
   django.core.exceptionsr   django.testr   r   django.urlsr   django.utilsr   django.utils.translationr   captcha.confcaptcha.modelsr   r   r=  r@  rG  r:  r5   r3   <module>rV     su      	 	   %  #  3 " 7 3  ! 1 ! '  45z	N( z	N 6z	Nz r5   