
    %j                         d Z ddlZddlmc mZ ddlZddlm	Z	 ddl
mZ ddlmZ ddZ G d d      Z G d	 d
      Z G d d      Z G d d      Z G d d      Zy)u   
Account setup tests — Story 3.1.

Tests cover: list, create, edit, delete, and delete-with-transactions guard.
All tests use the db fixture to set up in-memory tables.
    N)Account)Transaction)dbc                     t        | ||d      }t        j                  j                  |       t        j                  j	                          |S )NT)nametypeinstitution_name	is_active)r   _dbsessionaddcommit)r   type_institutionaccts       ?/var/www/html/financials/tests/test_blueprints/test_accounts.pymake_accountr      s8    5;RVWDKKOODKKK    c                       e Zd Zd Zd Zy)TestSettingsIndexc                    |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
/settings/   ==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	selfclientr   r   @py_assert1@py_assert4@py_assert3@py_format6@py_format8s	            r   test_settings_index_returns_200z1TestSettingsIndex.test_settings_index_returns_200   s    ::l+##*s*#s****#s******x***x***#***s*******r   c                    |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 )	Nr   s   /settings/accountsinz,%(py1)s in %(py5)s
{%(py5)s = %(py3)s.data
}r   py1py3r!   r"   r#   
r%   datar'   r(   r,   r)   r*   r+   r-   r.   	r0   r1   r   r   @py_assert0r3   @py_assert2r5   r6   s	            r   %test_settings_index_links_to_accountsz7TestSettingsIndex.test_settings_index_links_to_accounts   s    ::l+$55$5555$555$5555555555555555555r   N)__name__
__module____qualname__r7   rD    r   r   r   r      s    +6r   r   c                   $    e Zd Zd Zd Zd Zd Zy)TestAccountsListc                    |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/settings/accountsr   r   r   r   r   r"   r#   r$   r/   s	            r   test_accounts_page_returns_200z/TestAccountsList.test_accounts_page_returns_200%   s    ::23##*s*#s****#s******x***x***#***s*******r   c                    |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 )	NrL   s   Add Accountr9   r;   r   r<   r"   r#   r?   rA   s	            r   !test_accounts_page_shows_add_formz2TestAccountsList.test_accounts_page_shows_add_form)   s~    ::23..~....~...~...................r   c                 ^   t        ddd       |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}}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 )NChase CheckingcheckingChase)r   r   r   rL   s   Chase Checkingr9   r;   r   r<   r"   r#   s   Chaser   r%   r@   r'   r(   r,   r)   r*   r+   r-   r.   rA   s	            r   *test_accounts_page_lists_existing_accountsz;TestAccountsList.test_accounts_page_lists_existing_accounts-   s    **'R::23 1HMM1 M1111 M111 111111H111H111M1111111(8==(x=((((x=(((x((((((8(((8(((=(((((((r   c                    t        dd       |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 )Nz
My Savingssavingsr   r   rL   s
   My Savingsr9   r;   r   r<   r"   r#   rT   rA   s	            r   test_accounts_page_shows_typez.TestAccountsList.test_accounts_page_shows_type3   s    ,i8::23--}----}---}-------------------r   N)rE   rF   rG   rM   rO   rU   rY   rH   r   r   rJ   rJ   $   s    +/).r   rJ   c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestCreateAccountc                    |j                  dd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      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}||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}||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 )NrL   rQ   rR   rS   r   r   r	   Fr@   follow_redirects.  r   r   r   r   r"   r#   r   is notz%(py0)s is not %(py3)sr   r   r>   assert %(py5)sr!   z,%(py2)s
{%(py2)s = %(py0)s.type
} == %(py5)s)z8%(py2)s
{%(py2)s = %(py0)s.institution_name
} == %(py5)sTis)z1%(py2)s
{%(py2)s = %(py0)s.is_active
} is %(py5)s)postr&   r'   r(   r)   r*   r+   r,   r-   r.   r   query	filter_byfirstr   r	   r
   r0   r1   r   r   r2   r3   r4   r5   r6   r   rC   @py_format4s               r   test_valid_post_creates_accountz1TestCreateAccount.test_valid_post_creates_account<   se   ;;3$ ';
 "	  #
 ##*s*#s****#s******x***x***#***s*******}}&&,<&=CCEt4t4tt4yy&J&yJ&&&&yJ&&&&&&t&&&t&&&y&&&J&&&&&&&$$//$////$//////t///t///$//////////~~%%~%%%%~%%%%%%t%%%t%%%~%%%%%%%%%%r   c                    |j                  d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}}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 )NrL   SavingsrW   r   r   Fr^   r`   r   r   r   r   r"   r#   Locationr9   z%(py1)s in %(py4)sr=   py4assert %(py6)spy6)rj   r&   r'   r(   r)   r*   r+   r,   r-   r.   headers)r0   r1   r   r   r2   r3   r4   r5   r6   rB   rC   @py_format5@py_format7s                r   !test_valid_post_redirects_to_listz3TestCreateAccount.test_valid_post_redirects_to_listI   s    ;;3;
 "  # ##*s*#s****#s******x***x***#***s*******#Cx'7'7
'CC#'CCCCC#'CCCC#CCC'CCCCCCCCr   c                    |j                  dddd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 )NrL   CashrR   rs   Tr^   s   Account addedr9   r;   r   r<   r"   r#   )
rj   r@   r'   r(   r,   r)   r*   r+   r-   r.   rA   s	            r   test_valid_post_flashes_successz1TestCreateAccount.test_valid_post_flashes_successQ   s    ;;3;
 !  "  08==0=0000=00000000080008000=0000000r   c                    |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 )NrL    rR   rs   )r@   r   r   r   r   r   r"   r#   r   )z_%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.query
}.count
}()
} == %(py9)sr   )r   r    rw   ry   py9zassert %(py11)spy11)rj   r&   r'   r(   r)   r*   r+   r,   r-   r.   r   rk   count)r0   r1   r   r   r2   r3   r4   r5   r6   @py_assert5@py_assert8@py_assert7@py_format10@py_format12s                 r   test_missing_name_shows_errorz/TestCreateAccount.test_missing_name_shows_errorX   s2   ;;3;
;  ##*s*#s****#s******x***x***#***s*******}})}"")"$))$))))$))))))w)))w)))})))")))$)))))))))))r   c                    |j                  d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      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 }||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 )NrL   WalletrR   rs   Fr^   r`   r   r   r   r   r"   r#   ra   rb   rd   r   re   rf   r!   rh   )z8%(py2)s
{%(py2)s = %(py0)s.institution_name
} is %(py5)s)rj   r&   r'   r(   r)   r*   r+   r,   r-   r.   r   rk   rl   rm   r	   rn   s               r   test_institution_name_optionalz0TestCreateAccount.test_institution_name_optional`   s   ;;3;
 "  # ##*s*#s****#s******x***x***#***s*******}}&&H&5;;=t4t4tt4$$,,$,,,,$,,,,,,t,,,t,,,$,,,,,,,,,,r   N)rE   rF   rG   rp   r}   r   r   r   rH   r   r   r[   r[   ;   s    &D1*-r   r[   c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestEditAccountc                    t               }|j                  d|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/settings/accounts//editr   r   r   r   r   r"   r#   )r   r%   idr&   r'   r(   r)   r*   r+   r,   r-   r.   
r0   r1   r   r   r   r2   r3   r4   r5   r6   s
             r   test_edit_get_returns_200z)TestEditAccount.test_edit_get_returns_200n   s    ~:: 3DGG9EBC##*s*#s****#s******x***x***#***s*******r   c                    t        dd      }|j                  d|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 )NzMy BankrW   rX   r   r   s   My Bankr9   r;   r   r<   r"   r#   )r   r%   r   r@   r'   r(   r,   r)   r*   r+   r-   r.   
r0   r1   r   r   r   rB   r3   rC   r5   r6   s
             r   test_edit_get_prefills_formz+TestEditAccount.test_edit_get_prefills_forms   s    )<:: 3DGG9EBC*X]]*z]****z]***z******X***X***]*******r   c                 V   t        d      }|j                  d|j                   dd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                  |       |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}||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Old Namera   r   r   zNew NamerW   zWells Fargor]   Fr^   r`   r   r   r   r   r"   r#   )z,%(py2)s
{%(py2)s = %(py0)s.name
} == %(py5)sr   rg   )r   rj   r   r&   r'   r(   r)   r*   r+   r,   r-   r.   r   r   refreshr   r   r   s
             r   test_edit_post_updates_accountz.TestEditAccount.test_edit_post_updates_accountx   s   ,;;!4TWWIUC -K
 "	  #
 ##*s*#s****#s******x***x***#***s*******D!yy&J&yJ&&&&yJ&&&&&&t&&&t&&&y&&&J&&&&&&&yy%I%yI%%%%yI%%%%%%t%%%t%%%y%%%I%%%%%%%r   c                    t               }|j                  d|j                   dddd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 )Nr   r   UpdatedrR   rs   Tr^   s   Account updatedr9   r;   r   r<   r"   r#   r   rj   r   r@   r'   r(   r,   r)   r*   r+   r-   r.   r   s
             r   test_edit_post_flashes_successz.TestEditAccount.test_edit_post_flashes_success   s    ~;;!4TWWIUCK
 !  " "2X]]2!]2222!]222!222222X222X222]2222222r   c                    |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 )	Nz/settings/accounts/9999/edit  r   r   r   r   r"   r#   r$   r/   s	            r   !test_edit_nonexistent_returns_404z1TestEditAccount.test_edit_nonexistent_returns_404   s    ::<=##*s*#s****#s******x***x***#***s*******r   N)rE   rF   rG   r   r   r   r   r   rH   r   r   r   r   m   s    +
+

&3+r   r   c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestDeleteAccountc           	         t               }|j                  }|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}}t        j                  }|j                  } ||      }d }||u }|st	        j
                  d|fd||f      dt        j                         v st	        j                  t              rt	        j                  t              ndt	        j                  |      t	        j                  |      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}x}x}}y )Nr   /deleteFr_   r`   r   r   r   r   r"   r#   rh   )ze%(py7)s
{%(py7)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.query
}.get
}(%(py5)s)
} is %(py10)sr   acct_id)r   r    rw   r!   r#   py10zassert %(py12)spy12)r   r   rj   r&   r'   r(   r)   r*   r+   r,   r-   r.   r   rk   r%   )r0   r1   r   r   r   r   r2   r3   r4   r5   r6   @py_assert6@py_assert9r   @py_format11@py_format13s                   r   (test_delete_no_transactions_hard_deletesz:TestDeleteAccount.test_delete_no_transactions_hard_deletes   se   ~'';;!4WIWE05  7##*s*#s****#s******x***x***#***s*******}}1}  1 )1T1)T1111)T111111w111w111}111 111111111111)111T11111111r   c                    t               }|j                  d|j                   d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 )Nr   r   Tr   s   Account deletedr9   r;   r   r<   r"   r#   r   r   s
             r   test_delete_flashes_successz-TestDeleteAccount.test_delete_flashes_success   s    ~;;!4TWWIWE04  6!2X]]2!]2222!]222!222222X222X222]2222222r   c                 l   t               }|j                  d|j                   dd      }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   r   Fr   rL   rt   r9   ru   rv   rx   ry   )	r   rj   r   rz   r'   r(   r,   r-   r.   )
r0   r1   r   r   r   rB   r4   rC   r{   r|   s
             r   test_delete_redirects_to_listz/TestDeleteAccount.test_delete_redirects_to_list   s    ~;;!4TWWIWE05  7#Cx'7'7
'CC#'CCCCC#'CCCC#CCC'CCCCCCCCr   c           
      6   ddl m} t               } |ddd      }t        j                  j                  |       t        j                  j                          t        ddd|j                  |j                  d	      }t        j                  j                  |       t        j                  j                          |j                  d
|j                   d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}
}	t&        j(                  }|j*                  }|j                  } ||      }d }||u}|s2t        j                  d|fd||f      dt        j                         v st        j                   t&              rt        j                  t&              ndt        j                  |      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}x}}y )Nr   )Category	GroceriesT)r   	is_systemr
   z
2026-05-01ALDIz29.99)datemerchant_normalizedamount
account_idcategory_id	is_manualr   r   r   s   Account in user9   r;   r   r<   r"   r#   rb   )z%(py9)s
{%(py9)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.query
}.get
}(%(py7)s
{%(py7)s = %(py5)s.id
})
} is not %(py12)sr   r   )r   r    rw   r!   r#   r   r   zassert %(py14)spy14)app.models.categoryr   r   r   r   r   r   r   r   rj   r@   r'   r(   r,   r)   r*   r+   r-   r.   r   rk   r%   )r0   r1   r   r   r   cattxnr   rB   r3   rC   r5   r6   r2   r4   r   r   @py_assert11@py_assert10r   @py_format15s                        r   0test_delete_account_with_transactions_is_blockedzBTestDeleteAccount.test_delete_account_with_transactions_is_blocked   s   0~K44H &ww
 	;;!4TWWIWE04  6 1HMM1 M1111 M111 111111H111H111M1111111}}5}  55 )55)5555)555555w555w555}555 555555555555555)55555555555r   c                    |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 )	Nz/settings/accounts/9999/deleter   r   r   r   r   r"   r#   )
rj   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   s	            r   #test_delete_nonexistent_returns_404z5TestDeleteAccount.test_delete_nonexistent_returns_404   s    ;;?@##*s*#s****#s******x***x***#***s*******r   N)rE   rF   rG   r   r   r   r   r   rH   r   r   r   r      s    23D6*+r   r   )z	Test BankrR   N)__doc__builtinsr)   _pytest.assertion.rewrite	assertionrewriter'   pytestapp.models.accountr   app.models.transactionr   app.extensionsr   r   r   r   rJ   r[   r   r   rH   r   r   <module>r      sU      & . $
6 6. ..-- --d!+ !+L,+ ,+r   