§
    E×jí+  ã                   óª   — d dl Z d dlZ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Z G d„ dej        ¦  «        Zedk    r ej        ¦   «          dS dS )é    N)ÚPath)Ú	urlencodec                   óV   — 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S )ÚApplicationTestsc                 ó2  — t          j        ¦   «         | _        t          j        | _        t          | j        j        ¦  «        dz  t          _        t          j        | _	        t          | j        j        ¦  «        dz  t          _        t          j
                             ¦   «          t          j                             ¦   «          t          j        ¦   «          t          j        ¦   «         5 }|                     d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nz
db.sqlite3ÚimageszpINSERT INTO products (id,name,description,unit,stock) VALUES (1,'Hirschragout','500 g vakuumiert','Packungen',3))ÚtempfileÚTemporaryDirectoryÚtempÚappÚDBÚpreviousr   ÚnameÚUPLOADSÚprevious_uploadsÚSESSIONSÚclearÚATTEMPTSÚ
initializeÚconnectÚexecute©ÚselfÚdbs     ú,H:\dev\projekt_wildfleisch\tests\test_app.pyÚsetUpzApplicationTests.setUp   s*  € ÝÔ/Ñ1Ô1ˆŒ	ÝœˆŒÝ�d”i”nÑ%Ô%¨Ñ4�ŒÝ #¤ˆÔÝ˜4œ9œ>Ñ*Ô*¨XÑ5�ŒÝŒ×ÒÑÔÐÝŒ×ÒÑÔÐÝŒÑÔÐÝŒ[‰]Œ]ð 	K˜bØ�JŠJð  Jñ  Kô  Kð  Kð	Kð 	Kð 	Kñ 	Kô 	Kð 	Kð 	Kð 	Kð 	Kð 	Kð 	Kð 	Køøøð 	Kð 	Kð 	Kð 	Kð 	Kð 	Ks   Ã)DÄDÄDc                 ó|   — | j         t          _        | j        t          _        | j                             ¦   «          d S ©N)r   r   r   r   r   r   Úcleanup©r   s    r   ÚtearDownzApplicationTests.tearDown   s/   € Ø”�ŒØÔ+�ŒØŒ	×ÒÑÔÐÐÐó    c                 ó¶   — t          j        ¦   «         5 }|                     d¦  «                             ¦   «         d         cd d d ¦  «         S # 1 swxY w Y   d S )Nz%SELECT stock FROM products WHERE id=1r   )r   r   r   Úfetchoner   s     r   ÚstockzApplicationTests.stock   s¤   € ÝŒ[‰]Œ]ð 	U˜bØ—:’:ÐEÑFÔF×OÒOÑQÔQÐRSÔTð	Uð 	Uð 	Uð 	Uñ 	Uô 	Uð 	Uð 	Uð 	Uð 	Uð 	Uð 	Uøøøð 	Uð 	Uð 	Uð 	Uð 	Uð 	Us   ”-AÁAÁAc                 óÆ  — |                       t          ¦  «        5  t          j        dddddœ¦  «         d d d ¦  «         n# 1 swxY w Y   |                      |                      ¦   «         d¦  «         t          j        ¦   «         5 }|                      |                     d¦  «                             ¦   «         d         d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )	NÚAnnaúanna@example.testé   é   )r*   éc   é   ú!SELECT count(*) FROM reservationsr   )	ÚassertRaisesÚ
ValueErrorr   ÚreserveÚassertEqualr%   r   r   r$   r   s     r   Ú1test_reservation_transaction_rolls_back_all_itemszBApplicationTests.test_reservation_transaction_rolls_back_all_items"   sk  € Ø×Ò�zÑ*Ô*ð 	Dð 	DÝŒK˜Ð 3¸À°]°]ÑCÔCÐCð	Dð 	Dð 	Dñ 	Dô 	Dð 	Dð 	Dð 	Dð 	Dð 	Dð 	Døøøð 	Dð 	Dð 	Dð 	Dà×Ò˜Ÿš™œ qÑ)Ô)Ð)ÝŒ[‰]Œ]ð 	_˜bØ×Ò˜RŸZšZÐ(KÑLÔL×UÒUÑWÔWÐXYÔZÐ\]Ñ^Ô^Ð^ð	_ð 	_ð 	_ñ 	_ô 	_ð 	_ð 	_ð 	_ð 	_ð 	_ð 	_ð 	_øøøð 	_ð 	_ð 	_ð 	_ð 	_ð 	_s$   ›AÁAÁAÂACÃCÃCc                 óT  — d„ }t           j                             d¬¦  «        5 }|                      t	          |                     |t          d¦  «        ¦  «        ¦  «        d¦  «         d d d ¦  «         n# 1 swxY w Y   |                      |                      ¦   «         d¦  «         d S )Nc                 óZ   — 	 t          j        ddddi¦  «         dS # t          $ r Y dS w xY w)Nr'   r(   r*   r)   TF)r   r0   r/   )Ú_s    r   ÚattemptzMApplicationTests.test_concurrent_reservations_never_oversell.<locals>.attempt*   sG   € ðÝ”˜FÐ$7¸!¸Q¸Ñ@Ô@Ð@Ø�tøÝð ð ð Ø�u�uðøøøs   ‚ œ
*©*r)   )Úmax_workersr*   )Ú
concurrentÚfuturesÚThreadPoolExecutorr1   ÚsumÚmapÚranger%   )r   r6   Úpools      r   Ú+test_concurrent_reservations_never_oversellz<ApplicationTests.test_concurrent_reservations_never_oversell)   så   € ð	ð 	ð 	õ Ô×2Ò2¸qÐ2ÑAÔAð 	BÀTØ×Ò�S §¢¨'µ5¸±8´8Ñ!<Ô!<Ñ=Ô=¸qÑAÔAÐAð	Bð 	Bð 	Bñ 	Bô 	Bð 	Bð 	Bð 	Bð 	Bð 	Bð 	Bøøøð 	Bð 	Bð 	Bð 	Bà×Ò˜Ÿš™œ qÑ)Ô)Ð)Ð)Ð)s   ¤AA5Á5A9Á<A9c                 ój  — t          j        ddddi¦  «         t          j        dd¦  «         t          j        dd¦  «         |                      |                      ¦   «         d¦  «         |                      t          ¦  «        5  t          j        dd¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr'   r(   r*   r)   Ú	storniertr,   Úoffen)r   r0   Úchange_statusr1   r%   r.   r/   r    s    r   Ú)test_cancellation_returns_stock_only_oncez:ApplicationTests.test_cancellation_returns_stock_only_once4   sê   € ÝŒ�FÐ/°!°Q°Ñ8Ô8Ð8ÝÔ˜!˜[Ñ)Ô)Ð)ÝÔ˜!˜[Ñ)Ô)Ð)Ø×Ò˜Ÿš™œ qÑ)Ô)Ð)Ø×Ò�zÑ*Ô*ð 	*ð 	*ÝÔ˜a Ñ)Ô)Ð)ð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*ð 	*ð 	*s   ÂB(Â(B,Â/B,c                 óh  — t          j        ddddi¦  «         t          j        dd¦  «         t          j        dd¦  «         |                      t          ¦  «        5  t          j        dd¦  «         d d d ¦  «         n# 1 swxY w Y   |                      |                      ¦   «         d¦  «         d S )Nr'   r(   r*   õ
   bestÃ¤tigtÚabgeholtrA   r)   )r   r0   rC   r.   r/   r1   r%   r    s    r   Ú#test_collected_stock_stays_deductedz4ApplicationTests.test_collected_stock_stays_deducted<   sá   € ÝŒ�FÐ/°!°Q°Ñ8Ô8Ð8ÝÔ˜!˜\Ñ*Ô*Ð*ÝÔ˜!˜ZÑ(Ô(Ð(Ø×Ò�zÑ*Ô*ð 	.ð 	.ÝÔ˜a Ñ-Ô-Ð-ð	.ð 	.ð 	.ñ 	.ô 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.øøøð 	.ð 	.ð 	.ð 	.à×Ò˜Ÿš™œ qÑ)Ô)Ð)Ð)Ð)s   ÁA?Á?BÂBc                 ó   — |                       t          ¦  «        5  t          j        d¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        d¦  «         t          j        ¦   «         5 }|                     d¦  «                             ¦   «         }d d d ¦  «         n# 1 swxY w Y   |                      |d         d¦  «         |                      |d         t          j	        d|d         ¦  «        ¦  «         d S )NÚshortúTest-only-password!zSELECT * FROM adminÚhashÚsalt)
r.   r/   r   Úset_passwordr   r   r$   ÚassertNotEqualr1   Úpassword_hash)r   r   Úrows      r   Ú3test_password_is_salted_and_minimum_length_enforcedzDApplicationTests.test_password_is_salted_and_minimum_length_enforcedD   sX  € Ø×Ò�zÑ*Ô*ð 	&ð 	&ÝÔ˜WÑ%Ô%Ð%ð	&ð 	&ð 	&ñ 	&ô 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&øøøð 	&ð 	&ð 	&ð 	&åÔÐ.Ñ/Ô/Ð/ÝŒ[‰]Œ]ð 	?˜bØ—*’*Ð2Ñ3Ô3×<Ò<Ñ>Ô>ˆCð	?ð 	?ð 	?ñ 	?ô 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?øøøð 	?ð 	?ð 	?ð 	?à×Ò˜C œKÐ)>Ñ?Ô?Ð?Ø×Ò˜˜Vœ¥cÔ&7Ð8MÈsÐSYÌ{Ñ&[Ô&[Ñ\Ô\Ð\Ð\Ð\s!   ›<¼A ÁA Á.(B"Â"B&Â)B&c                 ó´  — t          j        d¦  «         dd„}	  |dd¦  «        \  }}}|                      |d¦  «         t          j        d|¦  «        d         }|                      d	|¦  «         |                       |d
dd|i|¦  «        d         d¦  «         |                       |d
ddddœ|¦  «        d         d¦  «          |d
d|ddœ|¦  «        \  }}}|                      |d¦  «         |                      ||¦  «          |dd|¬¦  «        \  }}}|                      d|¦  «         |                      d |dd|¬¦  «        d         ¦  «          |dd¦  «        \  }}}t          j        d|¦  «        d         }	|                       |d
d|	ddddœ|¦  «        d         d¦  «          |dd|¬¦  «        d         }
|                      d|
¦  «         |                      d|
¦  «         |                      |                      ¦   «         d¦  «         t           j	         
                    ¦   «          d S # t           j	         
                    ¦   «          w xY w)NrK   Ú c           	      ób  ‡— |rt          |¦  «        nd }|pd                     ¦   «         }| › d|› d|› dt          |¦  «        › d�                     ¦   «         |z   Š G ˆfd„d¦  «        } |¦   «         }t          j        |dt          ¦   «         ¦  «         |j                             ¦   «                              ¦   «          	                    d	d
¦  «        \  }}	t          | 	                    ¦   «         d
         ¦  «        }
t          d„ | 	                    d¦  «        D ¦   «         d¦  «        }|
|	|fS )NrT   ú ú$ HTTP/1.0
Host: localhost
Cookie: ú
Content-Length: z5
Content-Type: application/x-www-form-urlencoded

c                   ó&   •— e Zd Zd„ Zˆ fd„Zd„ ZdS )úkApplicationTests.test_http_auth_csrf_rotation_reservation_and_escaping.<locals>.request.<locals>.Connectionc                 ó6   — t          j        ¦   «         | _        d S r   ©ÚioÚBytesIOÚoutputr    s    r   Ú__init__ztApplicationTests.test_http_auth_csrf_rotation_reservation_and_escaping.<locals>.request.<locals>.Connection.__init__T   ó   € Ý"$¤*¡,¤,�D”K�K�Kr"   c                 ó,   •— t          j        ‰¦  «        S r   ©r]   r^   ©r   ÚargsÚraws     €r   ÚmakefileztApplicationTests.test_http_auth_csrf_rotation_reservation_and_escaping.<locals>.request.<locals>.Connection.makefileV   ó   ø€ Ýœ: c™?œ?Ð*r"   c                 ó:   — | j                              |¦  «         d S r   ©r_   Úwrite©r   Údatas     r   ÚsendallzsApplicationTests.test_http_auth_csrf_rotation_reservation_and_escaping.<locals>.request.<locals>.Connection.sendallX   ó   € Ø”K×%Ò% dÑ+Ô+Ð+Ð+Ð+r"   N©Ú__name__Ú
__module__Ú__qualname__r`   rg   rn   ©rf   s   €r   Ú
ConnectionrZ   S   óL   ø€ € € € € ð/ð /ð /ð+ð +ð +ð +ð +ð,ð ,ð ,ð ,ð ,r"   ru   ©z	127.0.0.1iÒ  ú

r*   c              3   óx   K  — | ]5}|                      d ¦  «        ¯|                     dd¦  «        d         V — Œ6dS ©zSet-Cookie:z: r*   N©Ú
startswithÚsplit©Ú.0Úlines     r   ú	<genexpr>zjApplicationTests.test_http_auth_csrf_rotation_reservation_and_escaping.<locals>.request.<locals>.<genexpr>^   sJ   è è € Ð!|Ð!|¸DÐ]a×]lÒ]lÐmzÑ]{Ô]{Ð!| $§*¢*¨T°!Ñ"4Ô"4°QÔ"7Ð!|Ð!|Ð!|Ð!|Ð!|Ð!|r"   ú
)r   ÚencodeÚlenr   ÚHandlerÚobjectr_   ÚgetvalueÚdecoder}   ÚintÚnext)ÚmethodÚpathÚfieldsÚcookieÚbodyÚpayloadru   Ú
connectionÚheadersÚpageÚstatusÚcookie_headerrf   s               @r   ÚrequestzWApplicationTests.test_http_auth_csrf_rotation_reservation_and_escaping.<locals>.requestO   s‰  ø€ Ø(.Ð8•9˜VÑ$Ô$Ð$°DˆDØ�z˜r×)Ò)Ñ+Ô+ˆGØð  sð  s˜tð  sð  sÈVð  sð  sÕilÐmtÑiuÔiuð  sð  sð  s÷  {ò  {ñ  }ô  }ð  @Gñ  GˆCð,ð ,ð ,ð ,ð ,ð ,ð ,ñ ,ô ,ð ,ð $˜™œˆJÝŒK˜
Ð$7½¹¼ÑBÔBÐBØ&Ô-×6Ò6Ñ8Ô8×?Ò?ÑAÔA×GÒGÈ
ÐTUÑVÔV‰MˆG�TÝ˜Ÿš™œ¨Ô+Ñ,Ô,ˆFÝ Ð!|Ð!|ÀGÇMÂMÐRXÑDYÔDYÐ!|Ñ!|Ô!|ð  Añ  Bô  BˆMØ˜4 Ð.Ð.r"   ÚGETú/éÈ   zname="csrf" value="([^"]+)"r*   zSameSite=StrictÚPOSTú/productÚcsrfr   i“  ú/loginÚwrong©rœ   Úpasswordé/  ú/admin©rŽ   zBestand pflegenz/reservez<script>alert(1)</script>za@example.testÚ1)rœ   r   ÚcontactÚq_1z&lt;script&gt;z<script>r)   )NrT   )r   rN   r1   ÚreÚsearchÚassertInrO   ÚassertNotInr%   r   r   )r   r–   r”   r“   rŽ   rœ   r5   Úadmin_cookieÚpublic_cookieÚpublic_csrfÚ
admin_pages              r   Ú5test_http_auth_csrf_rotation_reservation_and_escapingzFApplicationTests.test_http_auth_csrf_rotation_reservation_and_escapingM   sÐ  € ÝÔÐ.Ñ/Ô/Ð/ð	/ð 	/ð 	/ð 	/ð"	!Ø#* 7¨5°#Ñ#6Ô#6Ñ ˆF�D˜&Ø×Ò˜V SÑ)Ô)Ð)Ý”9Ð:¸DÑAÔAÀ!ÔDˆDØ�MŠMÐ+¨VÑ4Ô4Ð4Ø×Ò˜W˜W V¨J¸À¸ÈÑOÔOÐPQÔRÐSVÑWÔWÐWØ×Ò˜W˜W V¨H¸gÐQfÐ6gÐ6gÐhnÑoÔoÐpqÔrÐsvÑwÔwÐwØ&- g¨f°XÀdÐVkÐ>lÐ>lÐmsÑ&tÔ&tÑ#ˆF�A�|Ø×Ò˜V CÑ(Ô(Ð(Ø×Ò ¨Ñ5Ô5Ð5Ø%˜g e¨H¸LÐIÑIÔI‰OˆF�D˜!Ø�MŠMÐ+¨DÑ1Ô1Ð1Ø×ÒÐ.¨w¨w°u¸XÈVÐ/TÑ/TÔ/TÐUVÔ/WÑXÔXÐXØ*1¨'°%¸Ñ*<Ô*<Ñ'ˆF�D˜-Ýœ)Ð$AÀ$ÑGÔGÈÔJˆKØ×Ò˜W˜W V¨J¸{ÐRmð  yIð  PSð  8Tð  8Tð  Ubñ  cô  cð  deô  fð  gjñ  kô  kð  kØ ˜  x°|ÐDÑDÔDÀQÔGˆJØ�MŠMÐ*¨:Ñ6Ô6Ð6Ø×Ò˜Z¨
Ñ3Ô3Ð3Ø×Ò˜TŸZšZ™\œ\¨!Ñ,Ô,Ð,åŒL×ÒÑ Ô Ð Ð Ð ø�CŒL×ÒÑ Ô Ð Ð øøøs   šG=H7 È7 Ic                 ó  — ddiddiddii fD ]J}|                       t          ¦  «        5  t          j        dd|¦  «         d d d ¦  «         n# 1 swxY w Y   ŒK|                      |                      ¦   «         d¦  «         d S )Nr*   éÿÿÿÿé   r   r'   r(   r,   )r.   r/   r   r0   r1   r%   )r   Ú
quantitiess     r   Ú+test_invalid_quantities_do_not_change_stockz<ApplicationTests.test_invalid_quantities_do_not_change_stockw   sÜ   € Ø˜b˜6 1 Q %¨¨1¨¨bÐ1ð 	Cð 	CˆJØ×"Ò"¥:Ñ.Ô.ð Cð CÝ”˜FÐ#6°zÑBÔBÐBðCð Cð Cñ Cô Cð Cð Cð Cð Cð Cð Cøøøð Cð Cð Cð Cøà×Ò˜Ÿš™œ aÑ(Ô(Ð(Ð(Ð(s   ©AÁA	ÁA	c                 ó”  — t           j        D ]I}|                      t          j        t           j        |z                       ¦   «         ¦  «        d¦  «         ŒJ|                      t          j        d¦  «        ¦  «         |                      t          j        d¦  «        ¦  «         |                      t          ¦  «        5  t          j
        d dd¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        d¦  «        }t          j
        d d|¦  «        \  }}|                      |                     d¦  «        ¦  «         |                      t           j        |z                       ¦   «         |¦  «         t          j
        |dd ¦  «        \  }}|                      |d¦  «         t          j        |¦  «         |                      t           j        |z                       ¦   «         ¦  «         t          j        d	¦  «         d-d„}	  |dd¦  «        \  }}}	t)          j        d|¦  «        d                              ¦   «         }
 |ddt/          |
d	dœ¦  «                             ¦   «         |	¦  «        \  }}} |dd|¬¦  «        \  }}}t)          j        d|¦  «        d                              ¦   «         }d}d|› d|› d|› d|› d|› d|› d|› d|› d |› d!�                     ¦   «         |z   d|› d"�                     ¦   «         z   } |dd#||d$|› �¦  «        \  }}}|                      |d%¦  «          |dd&¦  «        \  }}}|                      |d'¦  «         |                      ||¦  «          |dd¦  «        \  }}}|                      d(|¦  «          |dd)¦  «        \  }}}|                      |d*¦  «          |dd+¦  «        \  }}}|                      |d'¦  «         |                      |                     d,¦  «        ¦  «         t           j                             ¦   «          d S # t           j                             ¦   «          w xY w).NÚjpgzbeispiel:../app.pyz../../app.pyÚkeeps   <html>not an image</html>ú`iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==z.pngzbeispiel:ruecken.jpgrK   r"   rT   ú!application/x-www-form-urlencodedc           
      ó  ‡— | › d|› d|› dt          |¦  «        › d|› d�
                     ¦   «         |z   Š G ˆfd„d¦  «        } |¦   «         }t          j        |dt	          ¦   «         ¦  «         |j                             ¦   «                              d	d
¦  «        \  }}|                     ¦   «         }	t          |	                     ¦   «         d
         ¦  «        }
t          d„ |	                     d¦  «        D ¦   «         d¦  «        }|
||fS )NrV   rW   rX   z
Content-Type: rx   c                   ó&   •— e Zd Zd„ Zˆ fd„Zd„ ZdS )úbApplicationTests.test_upload_example_and_reject_foreign_files.<locals>.request.<locals>.Connectionc                 ó6   — t          j        ¦   «         | _        d S r   r\   r    s    r   r`   zkApplicationTests.test_upload_example_and_reject_foreign_files.<locals>.request.<locals>.Connection.__init__�   ra   r"   c                 ó,   •— t          j        ‰¦  «        S r   rc   rd   s     €r   rg   zkApplicationTests.test_upload_example_and_reject_foreign_files.<locals>.request.<locals>.Connection.makefile’   rh   r"   c                 ó:   — | j                              |¦  «         d S r   rj   rl   s     r   rn   zjApplicationTests.test_upload_example_and_reject_foreign_files.<locals>.request.<locals>.Connection.sendall”   ro   r"   Nrp   rt   s   €r   ru   r¼   �   rv   r"   ru   rw   s   

r*   c              3   óx   K  — | ]5}|                      d ¦  «        ¯|                     dd¦  «        d         V — Œ6dS rz   r{   r~   s     r   r�   zaApplicationTests.test_upload_example_and_reject_foreign_files.<locals>.request.<locals>.<genexpr>›   sJ   è è € Ð!yÐ!y¸DÐZ^×ZiÒZiÐjwÑZxÔZxÐ!y $§*¢*¨T°!Ñ"4Ô"4°QÔ"7Ð!yÐ!yÐ!yÐ!yÐ!yÐ!yr"   r‚   rT   )r„   rƒ   r   r…   r†   r_   r‡   r}   rˆ   r‰   rŠ   )r‹   rŒ   r�   rŽ   Úcontent_typeru   r‘   r’   r“   Útextr”   r•   rf   s               @r   r–   zNApplicationTests.test_upload_example_and_reject_foreign_files.<locals>.request�   sf  ø€ Øð  ]ð  ]˜tð  ]ð  ]ÈVð  ]ð  ]ÕilÐmqÑirÔirð  ]ð  ]ð  GSð  ]ð  ]ð  ]÷  eò  eñ  gô  gð  jnñ  nˆCð,ð ,ð ,ð ,ð ,ð ,ð ,ñ ,ô ,ð ,ð $˜™œˆJÝŒK˜
Ð$7½¹¼ÑBÔBÐBØ&Ô-×6Ò6Ñ8Ô8×>Ò>¸{ÈAÑNÔN‰MˆG�TØ—>’>Ñ#Ô#ˆDÝ˜Ÿš™œ aœÑ)Ô)ˆFÝ Ð!yÐ!yÀDÇJÂJÈvÑDVÔDVÐ!yÑ!yÔ!yÐ{}Ñ~Ô~ˆMØ˜4 Ð.Ð.r"   r—   r˜   s   name="csrf" value="([^"]+)"r*   rš   r�   rŸ   r¢   r£   z----wildtestz--z1
Content-Disposition: form-data; name="csrf"

z
--z4
Content-Disposition: form-data; name="id"

1
--zA
Content-Disposition: form-data; name="name"

Hirschragout
--zL
Content-Disposition: form-data; name="description"

500 g vakuumiert
--z>
Content-Disposition: form-data; name="unit"

Packungen
--z7
Content-Disposition: form-data; name="stock"

3
--zA
Content-Disposition: form-data; name="image_choice"

keep
--z`
Content-Disposition: form-data; name="image"; filename="ware.png"
Content-Type: image/png

z--
r›   zmultipart/form-data; boundary=r¡   z/bild/1r™   s   /bild/1z/beispiel/../app.pyi”  z/beispiel/schulter.jpgs   ÿØÿ)r"   rT   r¹   )r   ÚEXAMPLESr1   Ú
image_kindÚEXAMPLES_DIRÚ
read_bytesÚassertIsNoneÚ
image_pathr.   r/   Ústore_imageÚbase64Ú	b64decodeÚ
assertTrueÚendswithr   Údrop_uploadÚassertFalseÚexistsrN   r§   r¨   rˆ   r   rƒ   r©   r|   r   r   )r   r   ÚpngÚkeyÚoldÚexampler5   r–   r“   rŽ   rœ   r«   r®   Ú
admin_csrfÚboundaryr�   r”   ÚimageÚexample_images                      r   Ú,test_upload_example_and_reject_foreign_filesz=ApplicationTests.test_upload_example_and_reject_foreign_files}   sW  € Ý”Lð 	\ð 	\ˆDØ×Ò�Sœ^­SÔ-=ÀÑ-D×,PÒ,PÑ,RÔ,RÑSÔSÐUZÑ[Ô[Ð[Ð[Ø×Ò�#œ.Ð)=Ñ>Ô>Ñ?Ô?Ð?Ø×Ò�#œ.¨Ñ8Ô8Ñ9Ô9Ð9Ø×Ò�zÑ*Ô*ð 	Hð 	HÝŒO˜D &Ð*FÑGÔGÐGð	Hð 	Hð 	Hñ 	Hô 	Hð 	Hð 	Hð 	Hð 	Hð 	Hð 	Høøøð 	Hð 	Hð 	Hð 	HåÔð   Bñ  Cô  CˆÝ”? 4¨°Ñ5Ô5‰ˆˆSØ�Š˜Ÿš VÑ,Ô,Ñ-Ô-Ð-Ø×Ò�#œ+¨Ñ+×7Ò7Ñ9Ô9¸3Ñ?Ô?Ð?Ý”_ SÐ*@À$ÑGÔG‰
ˆ�Ø×Ò˜Ð"8Ñ9Ô9Ð9ÝŒ˜ÑÔÐØ×Ò�#œ+¨Ñ+×3Ò3Ñ5Ô5Ñ6Ô6Ð6ÝÔÐ.Ñ/Ô/Ð/ð	/ð 	/ð 	/ð 	/ð 	!Ø%˜g e¨SÑ1Ô1‰OˆAˆt�VÝ”9Ð<¸dÑCÔCÀAÔF×MÒMÑOÔOˆDØ!( ¨°½9ÈdÐ`uÐEvÐEvÑ;wÔ;w×;~Ò;~ñ  <Aô  <Að  CIñ  "Jô  "JÑˆAˆq�,Ø&˜w u¨h¸|ÐLÑLÔLÑˆAˆz˜1ÝœÐ#BÀJÑOÔOÐPQÔR×YÒYÑ[Ô[ˆJØ%ˆHðL˜ð Lð LÐZdð Lð LØ!ðLð Là!ðLð Lð "ðLð Lð "ð	Lð Lð
 "ðLð Lð "ðLð Lð "ðLð Lð L÷ NTò  NTñ  NVô  NVð  Y\ñ\ð _xð  hpð  _xð  _xð  _x÷  _ò  _ñ  _Aô  _AñAˆDð #˜7 6¨:°t¸\ÐKvÐltÐKvÐKvÑwÔw‰LˆF�A�qØ×Ò˜V SÑ)Ô)Ð)Ø&˜w u¨iÑ8Ô8ÑˆF�E˜1Ø×Ò˜V SÑ)Ô)Ð)Ø×Ò˜U CÑ(Ô(Ð(Ø%˜g e¨SÑ1Ô1‰OˆF�D˜!Ø�MŠM˜* dÑ+Ô+Ð+Ø"˜7 5Ð*?Ñ@Ô@‰LˆF�A�qØ×Ò˜V SÑ)Ô)Ð)Ø'. w¨uÐ6NÑ'OÔ'OÑ$ˆF�M 1Ø×Ò˜V SÑ)Ô)Ð)Ø�OŠO˜M×4Ò4°_ÑEÔEÑFÔFÐFåŒL×ÒÑ Ô Ð Ð Ð ø�CŒL×ÒÑ Ô Ð Ð øøøs   Â?C"Ã"C&Ã)C&ÈH P' Ð' Qc                 ón  — t          j        ddddi¦  «         |                      t          ¦  «        5  t          j        d¦  «         d d d ¦  «         n# 1 swxY w Y   |                      |                      ¦   «         d¦  «         t          j        d¦  «         |                      |                      ¦   «         d¦  «         t          j        ¦   «         5 }|                      | 	                    d¦  «         
                    ¦   «         d         d¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        ddddi¦  «         t          j        dd¦  «         t          j        d¦  «         |                      |                      ¦   «         d¦  «         t          j        ddddi¦  «         t          j        dd	¦  «         t          j        d¦  «         |                      |                      ¦   «         d¦  «         t          j        d d
t          j        d¦  «        ¦  «        \  }}t          j        ¦   «         5 }| 	                    d|f¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        t          j        d¦  «        ¦  «         |                      t           j        |z                       ¦   «         ¦  «         t          j        ¦   «         5 }|                      | 	                    d¦  «         
                    ¦   «         d         d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr'   r(   r*   r)   r,   r-   r   rF   rG   r·   r¸   z&UPDATE products SET image=? WHERE id=1zSELECT count(*) FROM products)r   r0   r.   r/   Údelete_productr1   r%   Údelete_reservationr   r   r$   rC   rÉ   rÊ   rË   rÎ   rÏ   r   rÐ   )r   r   r×   r5   s       r   Ú#test_delete_product_and_reservationz4ApplicationTests.test_delete_product_and_reservation»   sì  € ÝŒ�FÐ/°!°Q°Ñ8Ô8Ð8Ø×Ò�zÑ*Ô*ð 	"ð 	"ÝÔ˜qÑ!Ô!Ð!ð	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"à×Ò˜Ÿš™œ qÑ)Ô)Ð)ÝÔ˜qÑ!Ô!Ð!Ø×Ò˜Ÿš™œ qÑ)Ô)Ð)ÝŒ[‰]Œ]ð 	_˜bØ×Ò˜RŸZšZÐ(KÑLÔL×UÒUÑWÔWÐXYÔZÐ\]Ñ^Ô^Ð^ð	_ð 	_ð 	_ñ 	_ô 	_ð 	_ð 	_ð 	_ð 	_ð 	_ð 	_øøøð 	_ð 	_ð 	_ð 	_åŒ�FÐ/°!°Q°Ñ8Ô8Ð8ÝÔ˜!˜\Ñ*Ô*Ð*ÝÔ˜qÑ!Ô!Ð!Ø×Ò˜Ÿš™œ qÑ)Ô)Ð)ÝŒ�FÐ/°!°Q°Ñ8Ô8Ð8ÝÔ˜!˜ZÑ(Ô(Ð(ÝÔ˜qÑ!Ô!Ð!Ø×Ò˜Ÿš™œ qÑ)Ô)Ð)Ý”? 4¨µÔ1Að  Ceñ  2fô  2fñ  gô  g‰ˆˆqÝŒ[‰]Œ]ð 	K˜bØ�JŠJÐ?À%ÀÑJÔJÐJð	Kð 	Kð 	Kñ 	Kô 	Kð 	Kð 	Kð 	Kð 	Kð 	Kð 	Køøøð 	Kð 	Kð 	Kð 	KåŒ�Ô*¨1Ñ-Ô-Ñ.Ô.Ð.Ø×Ò�#œ+¨Ñ-×5Ò5Ñ7Ô7Ñ8Ô8Ð8ÝŒ[‰]Œ]ð 	[˜bØ×Ò˜RŸZšZÐ(GÑHÔH×QÒQÑSÔSÐTUÔVÐXYÑZÔZÐZð	[ð 	[ð 	[ñ 	[ô 	[ð 	[ð 	[ð 	[ð 	[ð 	[ð 	[ð 	[øøøð 	[ð 	[ð 	[ð 	[ð 	[ð 	[sI   ³AÁAÁAÃAD$Ä$D(Ä+D(È?I#É#I'É*I'ËAL*Ì*L.Ì1L.N)rq   rr   rs   r   r!   r%   r2   r?   rD   rH   rR   r¯   r´   rÙ   rÝ   © r"   r   r   r      sÛ   € € € € € ð
Kð 
Kð 
Kðð ð ð
Uð Uð Uð_ð _ð _ð	*ð 	*ð 	*ð*ð *ð *ð*ð *ð *ð]ð ]ð ]ð(!ð (!ð (!ðT)ð )ð )ð<!ð <!ð <!ð|[ð [ð [ð [ð [r"   r   Ú__main__)rÊ   Úconcurrent.futuresr8   r]   r§   r	   ÚunittestÚpathlibr   Úurllib.parser   r   ÚTestCaser   rq   ÚmainrÞ   r"   r   ú<module>ræ      sÏ   ðØ €€€Ø Ð Ð Ð Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø 
€
€
€
ðF[ð F[ð F[ð F[ð F[�xÔ(ñ F[ô F[ð F[ðR ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr"   