
    -j>9                     N   d Z ddlZddlmc 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lmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddZd dZd!dZd"dZ G d d      Z G d d      Z G 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-   Bills & Debts Tracking — Stories 5.1–5.4.    N)Decimal)date	timedelta)db)Bill)Debt)Account)Category)Transactionc                     t        | dd      }t        j                  j                  |       t        j                  j	                          |S )NcheckingT)nametype	is_active)r	   _dbsessionaddcommit)r   accts     </var/www/html/financials/tests/test_blueprints/test_bills.py_make_accountr      s5    :>DKKOODKKK    c                     t        | dd      }t        j                  j                  |       t        j                  j	                          |S )NT)r   	is_systemr   )r
   r   r   r   r   )r   cats     r   _make_categoryr      s5    

=CKKOOCKKJr   c                 *   t        j                         }t        | t        |      |||j	                  t        |d            j                               }t        j                  j                  |       t        j                  j                          |S )N   )day)r   amountdue_dayr   due_date)r   todayr   r   replacemin	isoformatr   r   r   r   )r   r    r!   r   r#   bills         r   
_make_billr(      sl    JJLEv3w#34>>@D KKOODKKKr   c           
      6   t        j                         }t        | t        |      t        |      t        |      |t	        d      z   j                         d      }t        j                  j                  |       t        j                  j                          |S )N
   daysT)r   current_balanceinterest_ratemin_paymentr"   r   )
r   r#   r   r   r   r&   r   r   r   r   )r   balanceratemin_payr#   debts         r   
_make_debtr4   -   sq    JJLE(dmG$),,779D KKOODKKKr   c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestBillCreatec                    |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/bills/create   ==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_get_create_form_returns_200z/TestBillCreate.test_get_create_form_returns_200?   s    ::o.##*s*#s****#s******x***x***#***s*******r   c                    |j                  ddd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}||k(  }|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                  |      t        j                  |	      t        j                  |
      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}	x}
x}x}x}}y )Nr8   Netflixz15.9910y)r   r    r!   payeecategory_idr   Fdatafollow_redirects.  r:   r<   r=   r>   rB   rC   r      z%(py12)s
{%(py12)s = %(py10)s
{%(py10)s = %(py8)s
{%(py8)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.query
}.filter_by
}(name=%(py6)s)
}.count
}()
} == %(py15)sr   r?   r@   py4py6py8py10py12py15assert %(py17)spy17)postrF   rG   rH   rI   rJ   rK   rL   rM   rN   r   query	filter_bycount)rP   rQ   r   r=   rR   rS   rT   rU   rV   @py_assert5@py_assert7@py_assert9@py_assert11@py_assert14@py_assert13@py_format16@py_format18s                    r   test_valid_post_creates_billz+TestBillCreate.test_valid_post_creates_billC   s   ;;6
 "  # ##*s*#s****#s******x***x***#***s*******zz@z##@@#3@399@9;@q@;q@@@@;q@@@@@@t@@@t@@@z@@@#@@@@@@3@@@9@@@;@@@q@@@@@@@@r   c           	      D   |j                  dddddddd	      }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 )Nr8   Gymz40.005r[   r\   r   r    r!   r^   r   Tr_      addedinz^%(py1)s in %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.data
}.lower
}()
}r=   py1py3rA   rC   py9assert %(py11)spy11ro   r`   lowerrG   rH   rL   rI   rJ   rK   rM   rN   rP   rQ   r   r=   @py_assert0rS   @py_assert6@py_assert8@py_assert2@py_format10@py_format12s              r   test_valid_post_flashes_successz.TestBillCreate.test_valid_post_flashes_successO   s    ;;6
 !  " 08==0=..0.00x00000x0000x00000080008000=000.000000000000r   c           	      j   |j                  dddd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}||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 )Nr8   Phonez80.0010r[   r\   r   r`   rc   is notz%(py0)s is not %(py3)sr'   r?   r   assert %(py5)srA   Tis)z1%(py2)s
{%(py2)s = %(py0)s.is_active
} is %(py5)sr>   rB   rC   )ro   r   rp   rq   firstrG   rH   rI   rJ   rK   rL   rM   rN   r   )rP   rQ   r   r'   r   rR   @py_format4rU   rS   rT   rV   s              r   test_bill_is_active_by_defaultz-TestBillCreate.test_bill_is_active_by_defaultY   s   O+
 	 zz###1779t4t4tt4~~%%~%%%%~%%%%%%t%%%t%%%~%%%%%%%%%%r   c           	          |j                  dddddd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 )Nr8   Rentz1200.00rZ   r[   r\   r   r   rc   r   )z4%(py2)s
{%(py2)s = %(py0)s.due_date
} is not %(py5)sr'   r>   rB   rC   )ro   r   rp   rq   r   r"   rG   rH   rI   rJ   rK   rL   rM   rN   )	rP   rQ   r   r'   rR   rS   rT   rU   rV   s	            r    test_due_date_computed_on_createz/TestBillCreate.test_due_date_computed_on_createe   s    O+
 	 zz###0668}}(D(}D((((}D((((((t(((t(((}(((D(((((((r   c                    |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}}y )Nr8    50.00r~   r[   )r   r    r!   r^   r   r9   r:   r<   r=   r>   rB   rC   
ro   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   s	            r   test_missing_name_rerendersz*TestBillCreate.test_missing_name_rerendersp   s    ;;	6
;  ##*s*#s****#s******x***x***#***s*******r   c           	      ^   |j                  ddddd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 )Nr8   Testabcr~   r[   r\   r   Tr_   r   r:   z_%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.query
}.count
}()
} == %(py9)sr   r?   r@   rg   rh   r   r   r   ro   r   rp   rr   rG   rH   rI   rJ   rK   rL   rM   rN   rP   rQ   r   r=   rR   rT   rs   r   rt   r   r   s              r   test_invalid_amount_rejectedz+TestBillCreate.test_invalid_amount_rejectedy   s    ;;6
 !  " zz&z&!&Q&!Q&&&&!Q&&&&&&t&&&t&&&z&&&&&&!&&&Q&&&&&&&&r   c           	      ^   |j                  ddddd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 )Nr8   r   r   99r[   r\   r   Tr_   r   r:   r   r   r   r   r   r   r   s              r   test_invalid_due_day_rejectedz,TestBillCreate.test_invalid_due_day_rejected   s    ;;6
 !  " zz&z&!&Q&!Q&&&&!Q&&&&&&t&&&t&&&z&&&&&&!&&&Q&&&&&&&&r   N)__name__
__module____qualname__rW   r{   r   r   r   r   r   r    r   r   r6   r6   >   s+    +
A1
&	)+''r   r6   c                   $    e Zd Zd Zd Zd Zd Zy)TestBillEditc           	      t   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                  |      t	        j                  |      t	        j                  |      t	        j                  |      dz  }
dd	|
iz  }t        t	        j                  |            d x}x}x}x}x}	}y )
N/bills//editr9   r:   zk%(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get
}(%(py4)s)
}.status_code
} == %(py11)srQ   r?   r@   rg   rh   ri   r   assert %(py13)spy13)r(   rE   idrF   rG   rH   rI   rJ   rK   rL   rM   rN   )rP   rQ   r   r'   rR   rT   rs   rt   @py_assert10ru   r   @py_format14s               r   test_get_edit_returns_200z&TestBillEdit.test_get_edit_returns_200   s    |zzFGDGG9E2Fz23F3??F3F?3FFFF?3FFFFFFvFFFvFFFzFFF2FFF3FFF?FFF3FFFFFFFFr   c           	      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                  |      t        j                  |      t        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            d x}x}x}x}x}}y )	Nz/bills/9999/edit  r:   r   rQ   r   r   r   rD   rP   rQ   r   rR   rT   rs   rt   r   ru   r   r   s              r   !test_edit_nonexistent_returns_404z.TestBillEdit.test_edit_nonexistent_returns_404   s    zz@,@z,-@-99@S@9S@@@@9S@@@@@@v@@@v@@@z@@@,@@@-@@@9@@@S@@@@@@@@r   c           	         t               }|j                  d|j                   ddddddd	       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}	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}	}
y )Nr   r   zUpdated Bill75.0020r[   r\   r   r   r:   z,%(py2)s
{%(py2)s = %(py0)s.name
} == %(py5)sr'   r>   rB   rC   zL%(py2)s
{%(py2)s = %(py0)s.amount
} == %(py8)s
{%(py8)s = %(py4)s(%(py6)s)
}r   r?   r@   rg   rh   ri   assert %(py10)srj   )r(   ro   r   r   r   refreshr   rG   rH   rI   rJ   rK   rL   rM   rN   r    r   )rP   rQ   r   r'   rR   rS   rT   rU   rV   rs   rt   @py_format9@py_format11s                r   test_valid_edit_updates_billz)TestBillEdit.test_valid_edit_updates_bill   s_   |gdggYe,"4
 	 	D!yy*N*yN****yN******t***t***y***N*******{{.g.gg..{.....{.......t...t...{......g...g...g...........r   c           	      t   t               }|j                  d|j                   dddddddd	
      }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   Updatedz60.00r~   r[   r\   r   Tr_   s   updatedr   r   r=   r   r   r   r(   ro   r   r`   r   rG   rH   rL   rI   rJ   rK   rM   rN   rP   rQ   r   r'   r=   r   rS   r   r   r   r   r   s               r   test_edit_flashes_successz&TestBillEdit.test_edit_flashes_success   s    |;;	7?
 !  " 2X]]2]002022z22222z2222z222222X222X222]2220222222222222r   N)r   r   r   r   r   r   r   r   r   r   r   r      s    GA/	3r   r   c                       e Zd Zd Zd Zd Zy)TestBillDeletec           	         t               }|j                  }|j                  d| d       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   /deleter   ze%(py7)s
{%(py7)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.query
}.get
}(%(py5)s)
} is %(py10)sr   bidr?   r@   rg   rA   rC   rj   assert %(py12)srk   )r(   r   ro   r   rp   rE   rG   rH   rI   rJ   rK   rL   rM   rN   )rP   rQ   r   r'   r   rR   rT   r   ru   r   r   @py_format13s               r   test_delete_removes_billz'TestBillDelete.test_delete_removes_bill   s    |gggcU'*+zz*z~~*~c"*d*"d****"d******t***t***z***~******c***c***"***d********r   c                 f   t               }|j                  d|j                   dd      }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   Tra      deletedr   r   r=   r   r   r   r   r   s               r   test_delete_flashes_successz*TestBillDelete.test_delete_flashes_success   s    |;;	9D;Q2X]]2]002022z22222z2222z222222X222X222]2220222222222222r   c           	      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                  |      t        j                  |      t        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            d x}x}x}x}x}}y )	Nz/bills/9999/deleter   r:   )zl%(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.post
}(%(py4)s)
}.status_code
} == %(py11)srQ   r   r   r   r   r   s              r   #test_delete_nonexistent_returns_404z2TestBillDelete.test_delete_nonexistent_returns_404   s    {{C/C{/0C0<<CC<CCCC<CCCCCCvCCCvCCC{CCC/CCC0CCC<CCCCCCCCCCCr   N)r   r   r   r   r   r   r   r   r   r   r      s    +3
Dr   r   c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)TestBillsListViewc           	      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                  |      t        j                  |      t        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            d x}x}x}x}x}}y )	Nr   r9   r:   r   rQ   r   r   r   rD   r   s              r   test_list_returns_200z'TestBillsListView.test_list_returns_200   s    zz7)7z)$7$007C70C77770C777777v777v777z777)777$7770777C77777777r   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   No bills yetr   z,%(py1)s in %(py5)s
{%(py5)s = %(py3)s.data
}r=   r   r   rA   rB   rC   
rE   r`   rG   rH   rL   rI   rJ   rK   rM   rN   	rP   rQ   r   r=   r   rS   r   rU   rV   s	            r   $test_empty_state_shown_when_no_billsz6TestBillsListView.test_empty_state_shown_when_no_bills   s}    ::i(/(--/-////-/////////(///(///-///////r   c                    t        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 )
NrY   r   s   Netflixr   r   r=   r   rB   rC   r(   rE   r`   rG   rH   rL   rI   rJ   rK   rM   rN   r   s	            r   test_active_bills_shownz)TestBillsListView.test_active_bills_shown   s    9::i(*X]]*z]****z]***z******X***X***]*******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 )NOldBillF)r   r   s   OldBillnot in)z0%(py1)s not in %(py5)s
{%(py5)s = %(py3)s.data
}r=   r   rB   rC   r   r   s	            r   $test_inactive_bill_hidden_by_defaultz6TestBillsListView.test_inactive_bill_hidden_by_default   s    9.::i(..z....z...z...................r   c                    t        j                         t        d      z
  j                         }t	        dt        d      d|d      }t        j                  j                  |       t        j                  j                          |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 )Nrd   r+   r   50Tr   r    r!   r"   r   r   s   Overduer   r   r=   r   rB   rC   r   r#   r   r&   r   r   r   r   r   r   rE   r`   rG   rH   rL   rI   rJ   rK   rM   rN   )rP   rQ   r   	yesterdayr'   r=   r   rS   r   rU   rV   s              r   &test_overdue_bill_shows_overdue_statusz8TestBillsListView.test_overdue_bill_shows_overdue_status   s    ZZ\I1$55@@B	74=!&$8::i(*X]]*z]****z]***z******X***X***]*******r   c                    t        j                         j                         }t        dt	        d      t        j                         j
                  |d      }t        j                  j                  |       t        j                  j                          |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 )N	TodayBillr   Tr   r   s	   Due Todayr   r   r=   r   rB   rC   )r   r#   r&   r   r   r   r   r   r   r   rE   r`   rG   rH   rL   rI   rJ   rK   rM   rN   )rP   rQ   r   	today_strr'   r=   r   rS   r   rU   rV   s              r   *test_due_today_bill_shows_due_today_statusz<TestBillsListView.test_due_today_bill_shows_due_today_status   s    JJL**,	WT]DJJLDTDT&$8::i(,x}},|},,,,|},,,|,,,,,,x,,,x,,,},,,,,,,r   c                    t        j                         t        d      z   j                         }t	        dt        d      d|d      }t        j                  j                  |       t        j                  j                          |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 )N   r+   
FutureBillr   rd   Tr   r   s   Upcomingr   r   r=   r   rB   rC   r   )rP   rQ   r   futurer'   r=   r   rS   r   rU   rV   s              r   (test_upcoming_bill_shows_upcoming_statusz:TestBillsListView.test_upcoming_bill_shows_upcoming_status   s    **,!22==?gdmQ#t5::i(+hmm+{m++++{m+++{++++++h+++h+++m+++++++r   c           	         t        j                         t        d      z   j                         }t	        dt        d      d|d      }t        j                  j                  |       t        j                  j                          d}|j                  }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                  |      t        j                  |	      dz  }dd|iz  }t%        t        j&                  |            d x}x}
x}x}x}}	d}|j                  }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                  |      t        j                  |	      dz  }dd|iz  }t%        t        j&                  |            d x}x}
x}x}x}}	y )N<   r+   FarBillr   rd   Tr   s   FarBillr   r   )zi%(py1)s not in %(py11)s
{%(py11)s = %(py9)s
{%(py9)s = %(py5)s
{%(py5)s = %(py3)s.get
}(%(py7)s)
}.data
}rQ   )r   r   rA   rC   r   r   r   r   z/bills/?all=1r   )ze%(py1)s in %(py11)s
{%(py11)s = %(py9)s
{%(py9)s = %(py5)s
{%(py5)s = %(py3)s.get
}(%(py7)s)
}.data
}r   )rP   rQ   r   
far_futurer'   r   rS   r   r   r   r   r   r   s                r   (test_view_all_param_shows_beyond_30_daysz:TestBillsListView.test_view_all_param_shows_beyond_30_days   s   jjlYB%77BBD
74=!'49;;I;I!6;!6!;!;;z!;;;;;z!;;;;z;;;;;;;;;;;;;;;I;;;!6;;;!;;;;;;;;;=VZZ==Z8=8===z=====z====z======V===V===Z======8============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   billsr   r   r=   r   rB   rC   r   r   s	            r   test_active_page_is_billsz+TestBillsListView.test_active_page_is_bills   s}    ::i((8==(x=((((x=(((x((((((8(((8(((=(((((((r   N)r   r   r   r   r   r   r   r  r  r
  r  r  r   r   r   r   r      s/    80+
/
+-,	>)r   r   c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestMarkBillAsPaidc                 |   t                t        dd      }|j                  d|j                   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}	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}	}
y )NElectricityz120.00)r    r   /pay)merchant_normalizedr   r   txnr   r   rA   r:   r   r   r   r   rj   )r   r(   ro   r   r   rp   rq   r   rG   rH   rI   rJ   rK   rL   rM   rN   r    r   )rP   rQ   r   r'   r  r   rR   r   rU   rs   rt   rT   r   r   s                 r   "test_mark_paid_creates_transactionz5TestMarkBillAsPaid.test_mark_paid_creates_transaction  sJ   -9gdggYd+,))m)LRRTs$s$ss$zz.X.WX..z.....z.......s...s...z......W...W...X...........r   c           
         t                t               }|j                  d|j                   d       t        j
                  j                         }|j                  }t        j                  } |       }|j                  } |       }	||	k(  }
|
s2t        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                  |      t        j                  |      t        j                  |	      dz  }dd	|iz  }t!        t        j"                  |            d x}x}
x}x}x}}	y )
Nr   r  r:   )z%(py2)s
{%(py2)s = %(py0)s.date
} == %(py12)s
{%(py12)s = %(py10)s
{%(py10)s = %(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py4)s.today
}()
}.isoformat
}()
}r  r   r?   r@   rg   rh   ri   rj   rk   assert %(py14)spy14)r   r(   ro   r   r   rp   r   r   r#   r&   rG   rH   rI   rJ   rK   rL   rM   rN   )rP   rQ   r   r'   r  rR   rs   rt   ru   rv   rT   r   @py_format15s                r   (test_mark_paid_transaction_date_is_todayz;TestMarkBillAsPaid.test_mark_paid_transaction_date_is_today	  s   |gdggYd+,%%'xx34::3:<3<113133x33333x3333333s333s333x33333343334333:333<3331333333333333r   c                    t                t        dd      }|j                  }|j                  d|j                   d       t
        j                  j                  |       |j                  }||k7  }|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   rd   )r!   r   r  )!=)z0%(py2)s
{%(py2)s = %(py0)s.due_date
} != %(py4)sr'   old_due)r?   r@   rg   zassert %(py6)srh   )r   r(   r"   ro   r   r   r   r   rG   rH   rI   rJ   rK   rL   rM   rN   )	rP   rQ   r   r'   r"  rR   rT   @py_format5@py_format7s	            r    test_mark_paid_advances_due_datez3TestMarkBillAsPaid.test_mark_paid_advances_due_date  s    &!,--gdggYd+,D!}}'}''''}''''''t'''t'''}''''''''''''''''r   c           
         t                t               }|j                  d|j                   d       t        j
                  j                  |       |j                  }t        j                  } |       }|j                  } |       }||k(  }	|	s2t        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                   |      t        j                   |      t        j                   |      dz  }
dd	|
iz  }t#        t        j$                  |            d x}x}	x}x}x}}y )
Nr   r  r:   )z%(py2)s
{%(py2)s = %(py0)s.last_paid_date
} == %(py12)s
{%(py12)s = %(py10)s
{%(py10)s = %(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py4)s.today
}()
}.isoformat
}()
}r'   r   r  r  r  )r   r(   ro   r   r   r   r   last_paid_dater   r#   r&   rG   rH   rI   rJ   rK   rL   rM   rN   )rP   rQ   r   r'   rR   rs   rt   ru   rv   rT   r   r  s               r   %test_mark_paid_updates_last_paid_datez8TestMarkBillAsPaid.test_mark_paid_updates_last_paid_date  s   |gdggYd+,D!"">djj>jl>l&<&<>&<&>>"&>>>>>"&>>>>>>>t>>>t>>>">>>>>>d>>>d>>>j>>>l>>>&<>>>&>>>>>>>>>r   c                 @   t                t        d      }t               }|j                  |_        t
        j                  j                          |j                  d|j                   d       t        j                  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	Utilitiesr   r  r:   )zK%(py2)s
{%(py2)s = %(py0)s.category_id
} == %(py6)s
{%(py6)s = %(py4)s.id
}r  r   )r?   r@   rg   rh   zassert %(py8)sri   )r   r   r(   r   r^   r   r   r   ro   r   rp   r   rG   rH   rI   rJ   rK   rL   rM   rN   )rP   rQ   r   r   r'   r  rR   rs   rT   r$  r   s              r   !test_mark_paid_uses_bill_categoryz4TestMarkBillAsPaid.test_mark_paid_uses_bill_category  s    [)|66gdggYd+,%%'(#&&(&((((&((((((s(((s(((((((((#(((#(((&(((((((r   c                 z   t                t               }|j                  d|j                   dd      }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  Tr   s   paidr   r   r=   r   r   r   )r   r(   ro   r   r`   r   rG   rH   rL   rI   rJ   rK   rM   rN   r   s               r   test_mark_paid_flashes_successz1TestMarkBillAsPaid.test_mark_paid_flashes_success)  s    |;;	6;N/(--/---/-//w/////w////w//////(///(///-///-////////////r   c                    t                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 )
Nr   r  rb   r:   r<   r=   r>   rB   rC   )r   r(   ro   r   rF   rG   rH   rI   rJ   rK   rL   rM   rN   )
rP   rQ   r   r'   r=   rR   rS   rT   rU   rV   s
             r   test_mark_paid_redirectsz+TestMarkBillAsPaid.test_mark_paid_redirects/  s    |;;	67##*s*#s****#s******x***x***#***s*******r   c                 4   t                t               }|j                  d|j                   d       t        j
                  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  Fr   )z1%(py2)s
{%(py2)s = %(py0)s.is_credit
} is %(py5)sr  r>   rB   rC   )r   r(   ro   r   r   rp   r   	is_creditrG   rH   rI   rJ   rK   rL   rM   rN   )
rP   rQ   r   r'   r  rR   rS   rT   rU   rV   s
             r   (test_mark_paid_transaction_is_not_creditz;TestMarkBillAsPaid.test_mark_paid_transaction_is_not_credit5  s    |gdggYd+,%%'}}%%}%%%%}%%%%%%s%%%s%%%}%%%%%%%%%%r   N)r   r   r   r  r  r%  r(  r+  r-  r/  r2  r   r   r   r  r     s*    /4(?)0+&r   r  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestDebtCreatec           	      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                  |      t        j                  |      t        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            d x}x}x}x}x}}y )	N/bills/debts/creater9   r:   r   rQ   r   r   r   rD   r   s              r   test_get_debt_form_returns_200z-TestDebtCreate.test_get_debt_form_returns_200@  s    zzC/Cz/0C0<<CC<CCCC<CCCCCCvCCCvCCCzCCC/CCC0CCC<CCCCCCCCCCCr   c                 n   t        j                         }|j                  ddddd|t        d      z   j	                         d	       t
        j                  }|j                  }d} ||
      }|j                  } |       }	d}
|	|
k(  }|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                  |      t        j                  |      t        j                  |      t        j                  |      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                   |            d x}x}x}x}x}x}	x}}
y )Nr6  Medicalz1500.00z0.00z100.00   r+   r   r-   r.   r/   r"   r   rc   rd   r:   re   r   rf   rm   rn   )r   r#   ro   r   r&   r   rp   rq   rr   rG   rH   rI   rJ   rK   rL   rM   rN   )rP   rQ   r   r#   rR   rT   rs   rt   ru   rv   rw   rx   ry   rz   s                 r   test_valid_post_creates_debtz+TestDebtCreate.test_valid_post_creates_debtC  s$   

)(##!33>>@1
 	 zz@z##@@#3@399@9;@q@;q@@@@;q@@@@@@t@@@t@@@z@@@#@@@@@@3@@@9@@@;@@@q@@@@@@@@r   c           	      D   |j                  dddddddd	      }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 )Nr6  Loanz5000.00z3.50z200.00r   r;  Tr_   r   r   r   r=   r   r   r   r   r   s              r   r   z.TestDebtCreate.test_valid_post_flashes_successN  s    ;;4(##<
 !  " 08==0=..0.00x00000x0000x00000080008000=000.000000000000r   c                    t        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Student Loanr   s   Student Loanr   r   r=   r   rB   rC   r4   rE   r`   rG   rH   rL   rI   rJ   rK   rM   rN   r   s	            r   test_debt_appears_in_bills_listz.TestDebtCreate.test_debt_appears_in_bills_listX  s    >"::i(/(--/-////-/////////(///(///-///////r   c                    t        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Car Loanr   s   Debtr   r   r=   r   rB   rC   r@  r   s	            r   test_debt_shows_debt_badgez)TestDebtCreate.test_debt_shows_debt_badge]  s    :::i('(--'w-''''w-'''w''''''('''('''-'''''''r   c           	      ^   |j                  ddddd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 )Nr6  Badznot-a-number5.00r   r   r;  Tr_   r   r:   r   r   r   r   r   ro   r   rp   rr   rG   rH   rI   rJ   rK   rL   rM   rN   r   s              r   test_invalid_balance_rejectedz,TestDebtCreate.test_invalid_balance_rejectedb  s    ;;4-#"<
 !  " zz&z&!&Q&!Q&&&&!Q&&&&&&t&&&t&&&z&&&&&&!&&&Q&&&&&&&&r   c           	      ^   |j                  ddddd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 )Nr6  zBad Date1000.00rF  r   z
not-a-dater;  Tr_   r   r:   r   r   r   r   r   rG  r   s              r   !test_invalid_date_format_rejectedz0TestDebtCreate.test_invalid_date_format_rejectedl  s    ;;4(#"$<
 !  " zz&z&!&Q&!Q&&&&!Q&&&&&&t&&&t&&&z&&&&&&!&&&Q&&&&&&&&r   N)
r   r   r   r7  r<  r   rA  rC  rH  rK  r   r   r   r4  r4  ?  s'    D	A10
(
''r   r4  c                       e Zd Zd Zd Zy)TestDebtEditc           	      t   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                  |      t	        j                  |      t	        j                  |      t	        j                  |      dz  }
dd	|
iz  }t        t	        j                  |            d x}x}x}x}x}	}y )
N/bills/debts/r   r9   r:   r   rQ   r   r   r   )r4   rE   r   rF   rG   rH   rI   rJ   rK   rL   rM   rN   )rP   rQ   r   r3   rR   rT   rs   rt   r   ru   r   r   s               r   test_get_edit_debt_returns_200z+TestDebtEdit.test_get_edit_debt_returns_200x  s    |zzLM$''%8Lz89L9EELLELLLLELLLLLLvLLLvLLLzLLL8LLL9LLLELLLLLLLLLLLr   c           	         t               }|j                  d|j                   ddddddd	       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}	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}	}
y )NrO  r   zUpdated Debtz800.00z4.00r   r   r;  r   r:   r   r3   r>   rB   rC   )zU%(py2)s
{%(py2)s = %(py0)s.current_balance
} == %(py8)s
{%(py8)s = %(py4)s(%(py6)s)
}r   r   r   rj   )r4   ro   r   r   r   r   r   rG   rH   rI   rJ   rK   rL   rM   rN   r-   r   )rP   rQ   r   r3   rR   rS   rT   rU   rV   rs   rt   r   r   s                r   test_edit_updates_debtz#TestDebtEdit.test_edit_updates_debt|  sd   |mDGG9E2"'#":
 	 	D!yy*N*yN****yN******t***t***y***N*******##8x8wx'88#'88888#'8888888t888t888#888888w888w888x888'88888888r   N)r   r   r   rP  rR  r   r   r   rM  rM  w  s    M9r   rM  c                       e Zd Zd Zd Zy)TestDebtDeletec           	         t               }|j                  }|j                  d| d       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 )
NrO  r   r   r   r   didr   r   rk   )r4   r   ro   r   rp   rE   rG   rH   rI   rJ   rK   rL   rM   rN   )rP   rQ   r   r3   rV  rR   rT   r   ru   r   r   r   s               r   test_delete_debt_removes_itz*TestDebtDelete.test_delete_debt_removes_it  s    |ggmC501zz*z~~*~c"*d*"d****"d******t***t***z***~******c***c***"***d********r   c                 f   t               }|j                  d|j                   dd      }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 )NrO  r   Tr   r   r   r   r=   r   r   r   )r4   ro   r   r`   r   rG   rH   rL   rI   rJ   rK   rM   rN   )rP   rQ   r   r3   r=   r   rS   r   r   r   r   r   s               r    test_delete_debt_flashes_successz/TestDebtDelete.test_delete_debt_flashes_success  s    |;;twwiw?RV;W2X]]2]002022z22222z2222z222222X222X222]2220222222222222r   N)r   r   r   rW  rY  r   r   r   rT  rT    s    +3r   rT  )Checking)r*  )Internetr   r:  T)zMedical BillrJ  rF  r   )&__doc__builtinsrI   _pytest.assertion.rewrite	assertionrewriterG   decimalr   datetimer   r   pytestapp.extensionsr   r   app.models.billr   app.models.debtr   app.models.accountr	   app.models.categoryr
   app.models.transactionr   r   r   r(   r4   r6   r   r   r   r  r4  rM  rT  r   r   r   <module>rj     s    3     $  $     & ( .
"M' M'`3 3BD D$:) :)~:& :&~5' 5'p9 9&
3 
3r   