
    mj                    n    d dl mZ d dlmZ d dlmZmZ d dlZd dlm	Z
 ddZdd	ZdddZd Zd Zd ZdS )    )annotations)BytesIO)ZipFileZipInfoN)postfinance_documentsreturnstrc                 J   g d} t          d          D ]}|                     d|dz   dd            |                     ddg           t          dd	          D ]}|                     d|dz   dd            |                     d
           d                    |           S )N)z$Portfolio  Stand 27/07/2026 09:14:30u   Offene Aufträge 0z$EUR  1.0000  100.00  x  x  100.00  xz$USD  1.0000  100.00  x  x  100.00  xz&Gesamt CHF  200.00  2'200.00  2'400.00zUProdukt  Anzahl  Einstandskurs  Einstandswert  Differenz  Kurs  x  Wert CHF  Anteil %Aktien   zSynthetic Asset    02dz%  1  50  50  -  100 CHF  x  100  4.17z+Zwischensumme Aktien in CHF  0  0  1'100.00ETFs   z)Zwischensumme ETFs in CHF  0  0  1'100.00
)rangeappendextendjoin)linesindexs     (tests/unit/test_postfinance_documents.pyoverview_textr      s      E r ^ ^\	\\\\]]]]	LL?HIIIr2 ^ ^\	\\\\]]]]	LL<===99U    c                     dS )Nu   Transaktionsbeleg
Börsentransaktion: Kauf
Unsere Referenz: 100
Kontonummer: 123456
Ausführungsdatum: 01.07.2026
Valutadatum: 03.07.2026
Synthetic Asset 01 ISIN: CH0000000000
Anzahl  Preis  Betrag
1  50  CHF  50
Total CHF 50
 r   r   r   
trade_textr      s    
 
r   !20260701_Borsenabrechnung_100.pdf
   %PDF-tradenamerawbytesc                    t                      }t          |d          5 }|                    | |           d d d            n# 1 swxY w Y   |                                S )Nw)r   r   writestrgetvalue)r    r!   outputarchives       r   	zip_bytesr)   ,   s    YYF			 $s###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $??s   AA	Ac                   |                      t          dd            t          j        t                      d          }t	          |j                  dk    sJ t	          |j                  dk    r|j        d         j        dk    sJ t	          |j        j	                  dk    rt	          |j        j
                  dk    sJ |j        j        |j        j        |j        j        z   k    sJ |j        j        dk    sJ d S )	N	_pdf_textc                N    | dk    rt                      dfnt                      dfS )Nr   r      )r   r   r!   s    r   <lambda>zHtest_synthetic_zip_pdf_bundle_is_parsed_and_reconciled.<locals>.<lambda>4   s,    cUbNbNb*,,9J9Jivixixz{h| r      %PDF-overviewr   r   buyr      )setattrparserparse_postfinance_bundler)   len	documentsevents
event_typesnapshot	positionscashtotal_value_chfsecurities_total_chfcash_total_chfopen_orders)monkeypatchresults     r   6test_synthetic_zip_pdf_bundle_is_parsed_and_reconciledrC   3   s    -|-|}}},Y[[:JKKFv  A%%%%v}""v}Q'7'Be'K'K'KKv())R//C8L4M4MQR4R4R4RR?*fo.RU[UdUs.sssss?&!++++++r   c                d   |                      t          dd            t          j        t          d          5  t          j        t          d          d           d d d            n# 1 swxY w Y   t                      }t          |d          5 }t          d          }d	|_
        |                    |d
           d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        |                                d           d d d            d S # 1 swxY w Y   d S )Nr+   c                "    t                      dfS )Nr   r   _raws    r   r/   zBtest_zip_path_traversal_and_symlink_are_rejected.<locals>.<lambda>>       =??A:N r   unsafematchz../escape.pdfr0   r$   zlink.pdfl     C s	   %PDF-link)r3   r4   pytestraises
ValueErrorr5   r)   r   r   r   external_attrr%   r&   )rA   r'   r(   infos       r   0test_zip_path_traversal_and_symlink_are_rejectedrR   =   s   -N-NOOO	z	2	2	2 V V'	/(B(BDTUUUV V V V V V V V V V V V V V VYYF			 -z"",|,,,- - - - - - - - - - - - - - - 
z	2	2	2 M M'(9(9;KLLLM M M M M M M M M M M M M M M M M Ms5   #A((A,/A,-C

CC0(D%%D),D)c                   |                      t          dd            t          j        t          d          5  t          j        t          d          d           d d d            n# 1 swxY w Y   |                      t          dd            t          j        t          d          5  t          j        t                      d           d d d            d S # 1 swxY w Y   d S )	Nr+   c                "    t                      dfS )Nr-   rF   rG   s    r   r/   zKtest_preview_parser_rejects_incomplete_or_non_pdf_sources.<locals>.<lambda>K   rI   r   zunsupported entryrK   znote.txtr0   c                2    | dk    rt                      dfndS )Nr   r   )z 27/07/2026 09:14:30
no positionsr   )r   r.   s    r   r/   zKtest_preview_parser_rejects_incomplete_or_non_pdf_sources.<locals>.<lambda>N   s$    cUbNbNb*,,9J9J  iQ r   zcomplete snapshot)r3   r4   rM   rN   rO   r5   r)   )rA   s    r   9test_preview_parser_rejects_incomplete_or_non_pdf_sourcesrV   J   s   -N-NOOO	z)<	=	=	= Q Q'	*(=(=?OPPPQ Q Q Q Q Q Q Q Q Q Q Q Q Q Q  .Q  .Q  R  R  R	z)<	=	=	= G G'	5EFFFG G G G G G G G G G G G G G G G G Gs#   #A((A,/A,+"CC!C)r   r	   )r   r   )r    r	   r!   r"   r   r"   )
__future__r   ior   zipfiler   r   rM   jarvis_finance.importsr   r4   r   r   r)   rC   rR   rV   r   r   r   <module>r[      s    " " " " " "       $ $ $ $ $ $ $ $  B B B B B B   &       , , ,
M 
M 
MG G G G Gr   