
    j                         d Z ddlZddlmc mZ ddl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 dd	lmZ d
 ZddZddZddZ G d d      Zy)u"   Budget actuals view — Story 4.4.    N)Decimal)date)db)Account)Budget)Category)Transactionc                      t        ddd      } t        j                  j                  |        t        j                  j	                          | S )NCheckingcheckingT)nametype	is_active)r   _dbsessionaddcommit)accts    F/var/www/html/financials/tests/test_blueprints/test_budgets_actuals.py_make_accountr      s5    
tDD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        | j                  |j                  |j
                  t        |            }t        j                  j                  |       t        j                  j                          |S )N)category_idmonthyearamount)r   todayr   idr   r   r   r   r   r   r   )r   r    r!   bs       r   _make_budgetr$      sS    JJLE3665::gV\o^AKKOOAKKHr   c           	         t        j                         }|j                  |z   }|j                  }|dk  r|dz  }|dz  }n|dkD  r
|dz  }|dz  }| d|dd}t	        |dt        |      |d| j                  |j                        }	t        j                  j                  |	       t        j                  j                          |	S )	N      -02dz-15TestMerchantT)r   merchant_normalizedr    	is_credit	is_manual
account_idr   )r   r!   r   r   r	   r   r"   r   r   r   r   )
r   r   r    r,   month_offsetr!   r   r   dtxns
             r   	_make_txnr2   $   s    JJLEKK,&E::Dqy			&%C A
*v77FFC KKOOCKKJr   c                   f    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zy)TestBudgetsActualsGetc           	      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	/budgets/   ==)zk%(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get
}(%(py4)s)
}.status_code
} == %(py11)sclient)py0py2py4py6py8py11zassert %(py13)spy13)
getstatus_code
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation)selfr:   r   @py_assert1@py_assert3@py_assert5@py_assert7@py_assert10@py_assert9@py_format12@py_format14s              r   test_returns_200z&TestBudgetsActualsGet.test_returns_200@   s    zz9+9z+&9&229c92c99992c999999v999v999z999+999&9992999c99999999r   c                    t        d      }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 )NHousingz1200.00r6   s   1200inz,%(py1)s in %(py5)s
{%(py5)s = %(py3)s.data
}responsepy1py3py5assert %(py7)spy7r   r$   rB   datarD   rE   rI   rF   rG   rH   rJ   rK   
rL   r:   r   r   r[   @py_assert0@py_assert4@py_assert2@py_format6@py_format8s
             r   test_shows_budgeted_amountz0TestBudgetsActualsGet.test_shows_budgeted_amountC   s    Y'S)$::k*'(--'w-''''w-'''w''''''('''('''-'''''''r   c                    t               }t        d      }t        |d       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 )NDining300.00z75.00r6   s   75rX   rZ   r[   r\   r`   ra   r   r   r$   r2   rB   rc   rD   rE   rI   rF   rG   rH   rJ   rK   rL   r:   r   r   r   r[   re   rf   rg   rh   ri   s              r   test_shows_spent_amountz-TestBudgetsActualsGet.test_shows_spent_amountI   s    X&S(#$W%::k*%%u%%%%u%%%u%%%%%%%%%%%%%%%%%%%r   c                    t        d      }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 )N	Utilities200.00r6      0rX   rZ   r[   r\   r`   ra   rb   rd   s
             r   *test_shows_zero_spent_when_no_transactionsz@TestBudgetsActualsGet.test_shows_zero_spent_when_no_transactionsQ   s    [)S(#::k*$x}}$t}$$$$t}$$$t$$$$$$x$$$x$$$}$$$$$$$r   c                    t               }t        d      }t        |d       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	Groceriesz400.0050.00T)r,   r6   s   400rX   rZ   r[   r\   r`   ra   rn   ro   s              r   ,test_excludes_credit_transactions_from_spentzBTestBudgetsActualsGet.test_excludes_credit_transactions_from_spentW   s    [)S(#$W5::k*&&v&&&&v&&&v&&&&&&&&&&&&&&&&&&&r   c                    t               }t        d      }t        |d       t        ||d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Shoppingrm   z99.00)r/   r6   r7   r8   )z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)sr[   )r;   r<   r_   r`   ra   )r   r   r$   r2   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   )rL   r:   r   r   r   r[   rM   rf   rN   rh   ri   s              r   &test_excludes_prior_month_transactionsz<TestBudgetsActualsGet.test_excludes_prior_month_transactions`   s    Z(S(#$W26::k*##*s*#s****#s******x***x***#***s*******r   c                 8   t        d       |j                  d      }g }d}|j                  }||v }|}|s'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                  |      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                  
      t	        j                        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 )N
Healthcarer6   s	   No budgets	   no budgetrX   z,%(py3)s in %(py7)s
{%(py7)s = %(py5)s.data
}r[   r^   r_   ra   %(py9)spy9)zf%(py12)s in %(py20)s
{%(py20)s = %(py18)s
{%(py18)s = %(py16)s
{%(py16)s = %(py14)s.data
}.lower
}()
})py12py14py16py18py20z%(py22)spy22r&   zassert %(py25)spy25)r   rB   rc   lowerrD   rE   rI   rF   rG   rH   append_format_booloprJ   rK   )rL   r:   r   r[   rM   rg   @py_assert6rf   re   @py_assert11@py_assert15@py_assert17@py_assert19@py_assert13ri   @py_format10@py_format21@py_format23@py_format24@py_format26s                       r    test_shows_no_budget_set_messagez6TestBudgetsActualsGet.test_shows_no_budget_set_messagei   s6   |$::k*U|Ux}}U|},UUU@S@SU@S@UU@U0UUUUU|}UUU|UUUUUUxUUUxUUU}UUUUUUU@UUUUUUUUUUUUUUUUUUU@SUUU@UUUUUUUUUUUUUUUUr   c                    t               }t        d      }t        |d       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 )Nrl   rs   rx   r6   s   150rX   rZ   r[   r\   r`   ra   rn   ro   s              r   test_shows_remaining_amountz1TestBudgetsActualsGet.test_shows_remaining_amountn   s    X&S(#$W%::k*&&v&&&&v&&&v&&&&&&&&&&&&&&&&&&&r   c                    t        d      }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 )NrW   500.00r6   s   fin-progress-barrX   rZ   r[   r\   r`   ra   rb   rd   s
             r   test_progress_bar_renderedz0TestBudgetsActualsGet.test_progress_bar_renderedw   s    Y'S(#::k*"3hmm3"m3333"m333"333333h333h333m3333333r   c                    t               }t        d      }t        |d       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 )Nrw   r   rm   r6   s   fin-progress-bar-saferX   rZ   r[   r\   r`   ra   rn   ro   s              r   -test_progress_bar_safe_state_under_80_percentzCTestBudgetsActualsGet.test_progress_bar_safe_state_under_80_percent}   s    [)S(#$X&::k*'88==8'=8888'=888'88888888888888=8888888r   c                    t               }t        d      }t        |d       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 )Nrl   100.00z85.00r6   s   fin-progress-bar-warningrX   rZ   r[   r\   r`   ra   rn   ro   s              r   0test_progress_bar_warning_state_80_to_99_percentzFTestBudgetsActualsGet.test_progress_bar_warning_state_80_to_99_percent   s    X&S(#$W%::k**;hmm;*m;;;;*m;;;*;;;;;;h;;;h;;;m;;;;;;;r   c                    t               }t        d      }t        |d       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 )Nr{   r   z120.00r6   s   fin-progress-bar-dangerrX   rZ   r[   r\   r`   ra   rn   ro   s              r   -test_progress_bar_danger_state_at_100_percentzCTestBudgetsActualsGet.test_progress_bar_danger_state_at_100_percent   s    Z(S(#$X&::k*):X]]:)]::::)]:::)::::::X:::X:::]:::::::r   c                    |j                  d      }g }d}|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                  |      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}}
y )Nr6   s   <canvass   budgetChartrX   r   r[   r   r   r   )z0%(py12)s in %(py16)s
{%(py16)s = %(py14)s.data
})r   r   r   z%(py18)sr   r&   zassert %(py21)spy21)rB   rc   rD   rE   rI   rF   rG   rH   r   r   rJ   rK   )rL   r:   r   r[   rM   rg   r   rf   re   r   r   r   ri   r   @py_format17@py_format19@py_format20@py_format22s                     r   test_chart_canvas_presentz/TestBudgetsActualsGet.test_chart_canvas_present   s    ::k*MzMX]]Mz]*MnMMn.MMMMMz]MMMzMMMMMMXMMMXMMM]MMMMMMMnMMMnMMMMMMMMMMMMMMMMMMMMMMMMMMr   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 )	Nr6   s   /budgets/recommendrX   rZ   r[   r\   r`   ra   
rB   rc   rD   rE   rI   rF   rG   rH   rJ   rK   	rL   r:   r   r[   re   rf   rg   rh   ri   s	            r   test_recommend_link_presentz1TestBudgetsActualsGet.test_recommend_link_present   s    ::k*$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      }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 )	Nr6   s   budgetsrX   rZ   r[   r\   r`   ra   r   r   s	            r   test_active_page_is_budgetsz1TestBudgetsActualsGet.test_active_page_is_budgets   s}    ::k**X]]*z]****z]***z******X***X***]*******r   N)__name__
__module____qualname__rU   rj   rp   ru   ry   r}   r   r   r   r   r   r   r   r   r    r   r   r4   r4   ?   sO    :(&%'+V
'49<;N6+r   r4   )rw   )r   )r   Fr   )__doc__builtinsrF   _pytest.assertion.rewrite	assertionrewriterD   decimalr   datetimer   pytestapp.extensionsr   r   app.models.accountr   app.models.budgetr   app.models.categoryr   app.models.transactionr	   r   r   r$   r2   r4   r   r   r   <module>r      sE    (       $ & $ ( .6`+ `+r   