
    j=%                     ^   d Z ddlZddlmc mZ ddlZddlm	Z	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  ej.                         d	        Z ej.                         d
        Z	 	 ddZd Z G d d      Z G d d      Z G d d      Z	 	 	 ddZ G d d      Z G d d      Z y)u|   
Manual transaction entry tests — Story 3.3.
Tests cover: form render, create, dedup warning, force-save, and validation.
    N)date	timedelta)Decimal)Account)Category)Transaction)dbc                     t        ddd      }t        j                  j                  |       t        j                  j	                          |S )NzChase CheckingcheckingT)nametype	is_active)r   _dbsessionaddcommit)r	   as     I/var/www/html/financials/tests/test_blueprints/test_transaction_create.pyacctr      s6    %J$GAKKOOAKKH    c                     t        ddd      }t        j                  j                  |       t        j                  j	                          |S )N	GroceriesT)r   	is_systemr   )r   r   r   r   r   )r	   cs     r   catr      s5    kTTBAKKOOAKKHr   c                 :    | j                  d|||||||dd      S )N/transactions/creater   merchantamountcategory_id
account_idnotes
force_saveFdatafollow_redirectspost)clientacct_idcat_iddate_strr   r    r#   r$   s           r   post_txnr.   "   s:    ;;- 5    r   c                     t        t        t        |            j                  t        d                  }t        j                  | |z   |z   j                               j                         S )Nz0.01)strr   quantizehashlibsha256encode	hexdigest)r   r    r-   amts       r   
dedup_hashr7   /   sN    
gc&k"++GFO<
=C>>8c>H4<<>?IIKKr   c                       e Zd Zd Zy)TestTransactionsListc                    |j                  d      }|j                  }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )	N/transactions/   ==z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)sresponsepy0py2py5assert %(py7)spy7
getstatus_code
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation)	selfr*   r	   r@   @py_assert1@py_assert4@py_assert3@py_format6@py_format8s	            r   test_list_returns_200z*TestTransactionsList.test_list_returns_2007   s    ::./##*s*#s****#s******x***x***#***s*******r   N)__name__
__module____qualname__rX    r   r   r9   r9   6   s    +r   r9   c                       e Zd Zd Zd Zy)TestCreateFormRenderc                    |j                  d      }|j                  }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            d x}x}}y )	Nr   r<   r=   r?   r@   rA   rE   rF   rG   )rR   r*   r	   r   r   r@   rS   rT   rU   rV   rW   s              r   test_create_get_returns_200z0TestCreateFormRender.test_create_get_returns_200?   s    ::45##*s*#s****#s******x***x***#***s*******r   c                    |j                  d      }g }d}|j                  }|j                  }	 |	       }
||
v }|}|sd}|j                  }||v }|}|st        j                  d|fd||
f      t        j
                  |      dt        j                         v st        j                  |      rt        j
                  |      ndt        j
                  |      t        j
                  |	      t        j
                  |
      dz  }dd	|iz  }|j                  |       |st        j                  dfd
f      t        j
                  |      dt        j                         v st        j                  |      rt        j
                  |      ndt        j
                  |      dz  }dd|iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            d x}x}x}x}x}x}	x}
x}x}}g }d}|j                  }|j                  }	 |	       }
||
v }|}|sd}|j                  }||v }|}|st        j                  d|fd||
f      t        j
                  |      dt        j                         v st        j                  |      rt        j
                  |      ndt        j
                  |      t        j
                  |	      t        j
                  |
      dz  }dd	|iz  }|j                  |       |st        j                  d|fd
||f      t        j
                  |      dt        j                         v st        j                  |      rt        j
                  |      ndt        j
                  |      dz  }dd|iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            d x}x}x}x}x}x}	x}
x}x}}g }d}|j                  }|j                  }	 |	       }
||
v }|}|sd}|j                  }||v }|}|st        j                  d|fd||
f      t        j
                  |      dt        j                         v st        j                  |      rt        j
                  |      ndt        j
                  |      t        j
                  |	      t        j
                  |
      dz  }dd	|iz  }|j                  |       |st        j                  d|fd
||f      t        j
                  |      dt        j                         v st        j                  |      rt        j
                  |      ndt        j
                  |      dz  }dd|iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            d x}x}x}x}x}x}	x}
x}x}}y )Nr   s   merchants   Merchantin)z`%(py3)s in %(py11)s
{%(py11)s = %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s.data
}.lower
}()
}r@   )py3rD   rF   py9py11z%(py13)spy13)z0%(py16)s in %(py20)s
{%(py20)s = %(py18)s.data
})py16py18py20z%(py22)spy22   zassert %(py25)spy25s   amounts   Amounts   dates   Date)rH   r&   lowerrJ   rK   rO   rL   rM   rN   append_format_booloprP   rQ   )rR   r*   r	   r   r   r@   rS   @py_assert2@py_assert6@py_assert8@py_assert10rT   @py_assert0@py_assert15@py_assert19@py_assert17@py_format12@py_format14@py_format21@py_format23@py_format24@py_format26s                         r   test_form_has_required_fieldsz2TestCreateFormRender.test_form_has_required_fieldsC   sk   ::45S{ShmmSm11S13S{33S{ShmmS{m7SSSSS{3SSS{SSSSSShSSShSSSmSSS1SSS3SSSSSSS{mSSS{SSSSSShSSShSSSmSSSSSSSSSSSSSSSOyOHMMOM//O/1Oy11OYO(--OY-5OOOOOy1OOOyOOOOOOHOOOHOOOMOOO/OOO1OOOOOOOY-OOOYOOOOOO(OOO(OOO-OOOOOOOOOOOOOOOKwK(--K---K-/Kw//K7KhmmK7m3KKKKKw/KKKwKKKKKK(KKK(KKK-KKK-KKK/KKKKKKK7mKKK7KKKKKKhKKKhKKKmKKKKKKKKKKKKKKKr   N)rY   rZ   r[   r`   r   r\   r   r   r^   r^   >   s    +Lr   r^   c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestCreateTransactionc                 |   t        ||j                  |j                        }|j                  }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            d x}x}}t        j                  j                  d	      j                         }d }||u}|st        j                  d
|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}}y )N.  r=   r?   r@   rA   rE   rF   ALDImerchant_normalizedis notz%(py0)s is not %(py3)stxnrB   rd   assert %(py5)srD   )r.   idrI   rJ   rK   rL   rM   rN   rO   rP   rQ   r   query	filter_byfirst)rR   r*   r	   r   r   r@   rS   rT   rU   rV   rW   r   rq   @py_format4s                 r   #test_valid_post_creates_transactionz9TestCreateTransaction.test_valid_post_creates_transactionM   s   FDGGSVV4##*s*#s****#s******x***x***#***s*******))f)EKKMs$s$ss$r   c                    t        ||j                  |j                  ddd       t        j                  j	                  d      j                         }d }||u}|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      d	z  }d
d|iz  }	t        t        j                  |	            d x}}|j                  }d}
||
k(  }|st        j                  d|fd||
f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |
      dz  }	dd|	iz  }t        t        j                  |            d x}x}}
|j                  }d}t!        |      }||k(  }|s
t        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dt        j                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}}|j"                  }|j                  }||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j$                  }|j                  }||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j&                  }d}
||
u }|st        j                  d|fd||
f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |
      dz  }	dd|	iz  }t        t        j                  |            d x}x}}
y ) N
2026-05-15zWhole Foodsz55.00r-   r   r    r   r   r   r   r   r   rD   r=   )z,%(py2)s
{%(py2)s = %(py0)s.date
} == %(py5)srA   rE   rF   )zL%(py2)s
{%(py2)s = %(py0)s.amount
} == %(py8)s
{%(py8)s = %(py4)s(%(py6)s)
}r   )rB   rC   py4py6py8zassert %(py10)spy10)zJ%(py2)s
{%(py2)s = %(py0)s.account_id
} == %(py6)s
{%(py6)s = %(py4)s.id
}r   rB   rC   r   r   assert %(py8)sr   )zK%(py2)s
{%(py2)s = %(py0)s.category_id
} == %(py6)s
{%(py6)s = %(py4)s.id
}r   Tis)z1%(py2)s
{%(py2)s = %(py0)s.is_manual
} is %(py5)s)r.   r   r   r   r   r   rJ   rK   rL   rM   rN   rO   rP   rQ   r   r    r   r"   r!   	is_manual)rR   r*   r	   r   r   r   rq   rS   r   rV   rT   rU   rW   @py_assert5@py_assert7@py_format9@py_format11@py_format7s                     r   test_saves_correct_fieldsz/TestCreateTransaction.test_saves_correct_fieldsS   s7   #&&<'	9))m)LRRTs$s$ss$xx'<'x<''''x<''''''s'''s'''x'''<'''''''zz-W-WW--z-----z-------s---s---z------W---W---W-----------~~((~((((~((((((s(((s(((~((((((((((((((((((((#&&(&((((&((((((s(((s(((((((((#(((#(((&(((((((}}$$}$$$$}$$$$$$s$$$s$$$}$$$$$$$$$$r   c                    t        ||j                  d       t        j                  j	                  d      j                         }|j                  }|j                  }||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd	|iz  }	t        t        j                  |	            d x}x}}y )
NTargetr   r   r=   )z]%(py2)s
{%(py2)s = %(py0)s.merchant_raw
} == %(py6)s
{%(py6)s = %(py4)s.merchant_normalized
}r   r   r   r   )r.   r   r   r   r   r   merchant_rawr   rJ   rK   rL   rM   rN   rO   rP   rQ   )
rR   r*   r	   r   r   rS   r   rU   r   r   s
             r   ,test_merchant_raw_equals_merchant_normalizedzBTestCreateTransaction.test_merchant_raw_equals_merchant_normalized^   s    84))h)GMMO:3#:#::#:::::#:::::::s:::s:::::::::3:::3:::#::::::::r   c                    t        ||j                  ddd       t        j                  j	                  d      j                         }t        ddd      }|j                  }||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      d	t        j                         v st        j                  |      rt        j                  |      nd	d
z  }dd|iz  }	t        t        j                  |	            d x}}y )Nr   r   29.99r   r   r=   )z2%(py2)s
{%(py2)s = %(py0)s.dedup_hash
} == %(py4)sr   expected)rB   rC   r   assert %(py6)sr   )r.   r   r   r   r   r   r7   rJ   rK   rL   rM   rN   rO   rP   rQ   )
rR   r*   r	   r   r   r   rS   rU   @py_format5r   s
             r   test_dedup_hash_storedz,TestCreateTransaction.test_dedup_hash_storedc   s    < 	2))f)EKKMfg|<~~)~))))~))))))s)))s)))~))))))))))))))))r   c                 B   t        ||j                        }d}|j                  d   }||v }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}y )Nr;   Locationrb   )z%(py1)s in %(py4)s)py1r   r   r   )r.   r   headersrJ   rK   rO   rP   rQ   )
rR   r*   r	   r   r@   ru   rU   rq   r   r   s
             r   test_redirects_to_listz,TestCreateTransaction.test_redirects_to_listj   sm    FDGG,?8#3#3J#??#?????#???????#????????r   c                    t        ||j                  d      }d}|j                  }||v }|st        j                  d|fd||f      t        j
                  |      dt        j                         v st        j                  |      rt        j
                  |      ndt        j
                  |      dz  }dd	|iz  }	t        t        j                  |	            d x}x}}y )
NT)r'   s   Transaction addedrb   )z,%(py1)s in %(py5)s
{%(py5)s = %(py3)s.data
}r@   )r   rd   rD   rE   rF   )r.   r   r&   rJ   rK   rO   rL   rM   rN   rP   rQ   )
rR   r*   r	   r   r@   ru   rT   rq   rV   rW   s
             r   test_flashes_successz*TestCreateTransaction.test_flashes_successn   s    FDGGdC#4x}}4#}4444#}444#444444x444x444}4444444r   c                    t        ||j                  d       t        j                  j	                  d      j                         }|j                  }d }||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }d	d
|iz  }	t        t        j                  |	            d x}x}}y )Nr   )r,   r   r   r   )z3%(py2)s
{%(py2)s = %(py0)s.category_id
} is %(py5)sr   rA   rE   rF   )r.   r   r   r   r   r   r!   rJ   rK   rL   rM   rN   rO   rP   rQ   
rR   r*   r	   r   r   rS   rT   rU   rV   rW   s
             r   $test_category_optional_saved_as_nullz:TestCreateTransaction.test_category_optional_saved_as_nullr   s    +))f)EKKM&$&$&&&&$&&&&&&s&&&s&&&&&&$&&&&&&&r   c                     t        ||j                  d       t        j                  j	                  d      j                         }|j                  }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }d	d
|iz  }	t        t        j                  |	            d x}x}}y )NzWeekly shop)r#   r   r   r=   )z-%(py2)s
{%(py2)s = %(py0)s.notes
} == %(py5)sr   rA   rE   rF   )r.   r   r   r   r   r   r#   rJ   rK   rL   rM   rN   rO   rP   rQ   r   s
             r   test_notes_savedz&TestCreateTransaction.test_notes_savedw   s    6))f)EKKMyy)M)yM))))yM))))))s)))s)))y)))M)))))))r   N)rY   rZ   r[   r   r   r   r   r   r   r   r   r\   r   r   r   r   L   s+    	%;
*@5'
*r   r   c	                 :    | j                  d|||||||d|      S )Nr   r   r%   r(   )	r*   r+   r,   r-   r   r    r#   r$   r'   s	            r   r.   r.   ~   s<     ;;- 5 )  * *r   c                   $    e Zd Zd Zd Zd Zd Zy)TestValidationc           	          |j                  dddd|j                  dd      }|j                  }d}||k(  }|st        j                  d	|fd
||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}t        j                  }|j                  } |       }
d}|
|k(  }|st        j                  d	|fd|
|f      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      t        j                  |
      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}
x}}y )Nr   r    r   r   r   r   r    r"   r!   r&   r<   r=   r?   r@   rA   rE   rF   z_%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.query
}.count
}()
} == %(py9)sr   rB   rC   r   r   re   assert %(py11)srf   r)   r   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   r   r   countrR   r*   r	   r   r@   rS   rT   rU   rV   rW   r   rs   r   @py_format10ry   s                  r   $test_missing_merchant_rerenders_formz3TestValidation.test_missing_merchant_rerenders_form   s@   ;;5 bG''!=
;  ##*s*#s****#s******x***x***#***s*******  - &&-&(-A-(A----(A------{---{--- ---&---(---A--------r   c           	          |j                  dddd|j                  dd      }|j                  }d}||k(  }|st        j                  d	|fd
||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}t        j                  }|j                  } |       }
d}|
|k(  }|st        j                  d	|fd|
|f      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      t        j                  |
      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}
x}}y )Nr   r   r   r   r   r   r   r<   r=   r?   r@   rA   rE   rF   r   r   r   r   rf   r   r   s                  r   "test_missing_amount_rerenders_formz1TestValidation.test_missing_amount_rerenders_form   s@   ;;5 f''!=
;  ##*s*#s****#s******x***x***#***s*******  - &&-&(-A-(A----(A------{---{--- ---&---(---A--------r   c           	          |j                  dddd|j                  dd      }|j                  }d}||k(  }|st        j                  d	|fd
||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}t        j                  }|j                  } |       }
d}|
|k(  }|st        j                  d	|fd|
|f      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      t        j                  |
      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}
x}}y )Nr   r   r   abcr   r   r   r<   r=   r?   r@   rA   rE   rF   r   r   r   r   rf   r   r   s                  r   "test_invalid_amount_rerenders_formz1TestValidation.test_invalid_amount_rerenders_form   s@   ;;5 f''!=
;  ##*s*#s****#s******x***x***#***s*******  - &&-&(-A-(A----(A------{---{--- ---&---(---A--------r   c           	          |j                  dddd|j                  dd      }|j                  }d}||k(  }|st        j                  d	|fd
||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}t        j                  }|j                  } |       }
d}|
|k(  }|st        j                  d	|fd|
|f      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      t        j                  |
      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}
x}}y )Nr   r   r   z-5.00r   r   r   r<   r=   r?   r@   rA   rE   rF   r   r   r   r   rf   r   r   s                  r   #test_negative_amount_rerenders_formz2TestValidation.test_negative_amount_rerenders_form   s@   ;;5 f''!=
;  ##*s*#s****#s******x***x***#***s*******  - &&-&(-A-(A----(A------{---{--- ---&---(---A--------r   N)rY   rZ   r[   r   r   r   r   r\   r   r   r   r      s    ....r   r   c                   6    e Zd Z	 	 ddZd Zd Zd Zd Zd Zy)	TestDuplicateDetectionc                     t        |||      }t        ||t        |      |d|      }t        j                  j                  |       t        j                  j                          |S )NT)r   r   r    r"   r   r7   )r7   r   r   r   r   r   r   )rR   r+   r   r    r-   hr   s          r   _seed_existingz%TestDuplicateDetection._seed_existing   sT    x2x6?wq

 	
r   c                 
   | j                  |j                         t        ||j                  ddd      }|j                  }d}||k(  }|st	        j
                  d|fd||f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      d	z  }d
d|iz  }	t        t	        j                  |	            d x}x}}d}
|j                  }|j                  } |       }|
|v }|st	        j
                  d|fd|
|f      t	        j                  |
      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            d x}
x}x}x}}y )Nr   r   r   r   r<   r=   r?   r@   rA   rE   rF   s	   duplicaterb   )z^%(py1)s in %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.data
}.lower
}()
})r   rd   rD   rF   re   r   rf   )r   r   r.   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   r&   rn   )rR   r*   r	   r   r@   rS   rT   rU   rV   rW   ru   rr   rs   rq   r   ry   s                   r   "test_exact_duplicate_shows_warningz9TestDuplicateDetection.test_exact_duplicate_shows_warning   s=   DGG$FDGGl%+G=##*s*#s****#s******x***x***#***s*******4x}}4}224244|44444|4444|444444x444x444}4442444444444444r   c                    | j                  |j                         t        ||j                  ddd       t        j                  }|j
                  } |       }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      d	z  }	d
d|	iz  }
t        t        j                  |
            d x}x}x}x}}y )Nr   r   r   r   rl   r=   r   r   r   r   rf   )r   r   r.   r   r   r   rJ   rK   rL   rM   rN   rO   rP   rQ   )rR   r*   r	   r   rS   rU   r   rs   r   r   ry   s              r   "test_exact_duplicate_does_not_savez9TestDuplicateDetection.test_exact_duplicate_does_not_save   s    DGG$< 	2  - &&-&(-A-(A----(A------{---{--- ---&---(---A--------r   c                 &   | j                  |j                         t        ||j                  dddd      }|j                  }d}||k(  }|st	        j
                  d|fd||f      d	t        j                         v st	        j                  |      rt	        j                  |      nd	t	        j                  |      t	        j                  |      d
z  }dd|iz  }	t        t	        j                  |	            d x}x}}t        j                  }|j                  } |       }
d}|
|k(  }|st	        j
                  d|fd|
|f      dt        j                         v st	        j                  t              rt	        j                  t              ndt	        j                  |      t	        j                  |      t	        j                  |
      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            d x}x}x}
x}}y )Nr   r   r   1)r-   r   r    r$   r   r=   r?   r@   rA   rE   rF      r   r   r   r   rf   )r   r   r.   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   r   r   r   r   s                  r   (test_force_save_bypasses_duplicate_checkz?TestDuplicateDetection.test_force_save_bypasses_duplicate_check   sD   DGG$FDGGl%+GM##*s*#s****#s******x***x***#***s*******  - &&-&(-A-(A----(A------{---{--- ---&---(---A--------r   c                    | j                  |j                  d       t        ||j                  ddd      }|j                  }d}||k(  }|st	        j
                  d|fd	||f      d
t        j                         v st	        j                  |      rt	        j                  |      nd
t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            d x}x}}y )Nr   r   r   r   r   r   r   r=   r?   r@   rA   rE   rF   r   r   r.   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   
rR   r*   r	   r   r@   rS   rT   rU   rV   rW   s
             r   "test_different_merchant_no_warningz9TestDuplicateDetection.test_different_merchant_no_warning   s    DGGf5FDGGl%-g?##*s*#s****#s******x***x***#***s*******r   c                    | j                  |j                  d       t        ||j                  ddd      }|j                  }d}||k(  }|st	        j
                  d|fd	||f      d
t        j                         v st	        j                  |      rt	        j                  |      nd
t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            d x}x}}y )Nz
2026-05-01)r-   r   r   r   r   r   r=   r?   r@   rA   rE   rF   r   r   s
             r   $test_outside_3_day_window_no_warningz;TestDuplicateDetection.test_outside_3_day_window_no_warning   s    DGGl;FDGGl%+G=##*s*#s****#s******x***x***#***s*******r   N)r   r   r   )	rY   rZ   r[   r   r   r   r   r   r   r\   r   r   r   r      s&    >E ,
5..++r   r   )r   r   r   r   r   0)r   r   r   r   r   r   F)!__doc__builtinsrL   _pytest.assertion.rewrite	assertionrewriterJ   r2   datetimer   r   decimalr   pytestapp.models.accountr   app.models.categoryr   app.models.transactionr   app.extensionsr	   r   fixturer   r   r.   r7   r9   r^   r   r   r   r\   r   r   <module>r      s      $   & ( . $
     2>CF
L+ +	L 	L.* .*d 2>CF#* . .H++ ++r   