
    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Z G d	 d
      Z G d d      Z G d d      Zy)u(   Budget entry per category — Story 4.2.    N)Decimal)date)db)Budget)Categoryc                     t        | |d      }t        j                  j                  |       t        j                  j	                          |S )NTname	is_system	is_active)r   _dbsessionaddcommit)r
   r   cats      D/var/www/html/financials/tests/test_blueprints/test_budgets_entry.py_make_categoryr      s5    
	T
BCKKOOCKKJ    c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestBudgetsGetc           	      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TestBudgetsGet.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       |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	Groceriesr   s	   Groceriesinz,%(py1)s in %(py5)s
{%(py5)s = %(py3)s.data
}responsepy1py3py5assert %(py7)spy7)r   r$   datar&   r'   r+   r(   r)   r*   r,   r-   )	r.   r   r   r=   @py_assert0@py_assert4@py_assert2@py_format6@py_format8s	            r   test_shows_active_categoriesz+TestBudgetsGet.test_shows_active_categories   s    {#::k*,x}},|},,,,|},,,|,,,,,,x,,,x,,,},,,,,,,r   c                 J   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OldCatFr	   r   s   OldCat)not in)z0%(py1)s not in %(py5)s
{%(py5)s = %(py3)s.data
}r=   r>   rB   rC   )r   r   r   r   r   r$   rD   r&   r'   r+   r(   r)   r*   r,   r-   )
r.   r   r   r   r=   rE   rF   rG   rH   rI   s
             r    test_inactive_category_not_shownz/TestBudgetsGet.test_inactive_category_not_shown   s    HG::k*--y----y---y-------------------r   c                    t        d      }t        j                         }t        |j                  |j
                  |j                  t        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Housingz1500.00category_idmonthyearamountr   s   1500r:   r<   r=   r>   rB   rC   )r   r   todayr   idrS   rT   r   r   r   r   r   r$   rD   r&   r'   r+   r(   r)   r*   r,   r-   )r.   r   r   r   rV   br=   rE   rF   rG   rH   rI   s               r    test_shows_current_budget_amountz/TestBudgetsGet.test_shows_current_budget_amount%   s    Y'

++9%	
 	::k*'(--'w-''''w-'''w''''''('''('''-'''''''r   c                    t        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Diningr   r   r   z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)sr=   r   r   rA   rB   rC   )r   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   	r.   r   r   r=   r/   rF   r0   rH   rI   s	            r   2test_category_with_no_budget_renders_without_errorzATestBudgetsGet.test_category_with_no_budget_renders_without_error3   s    x ::k*##*s*#s****#s******x***x***#***s*******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 )Nr   s   aria-currents   budgetsr:   )z,%(py3)s in %(py7)s
{%(py7)s = %(py5)s.data
}r=   )r@   rA   rC   z%(py9)spy9)z0%(py12)s in %(py16)s
{%(py16)s = %(py14)s.data
})py12py14py16z%(py18)spy18   zassert %(py21)spy21)r$   rD   r&   r'   r+   r(   r)   r*   append_format_boolopr,   r-   )r.   r   r   r=   r/   rG   @py_assert6rF   rE   @py_assert11@py_assert15@py_assert13rI   @py_format10@py_format17@py_format19@py_format20@py_format22s                     r   test_active_page_is_budgetsz*TestBudgetsGet.test_active_page_is_budgets8   s    ::k*NN(--N-/N:NN:3NNNNN-NNNNNNNNN(NNN(NNN-NNNNNNN:NNN:NNNNNNNNNNNNNNNNNNNNNNNNNNr   N)	__name__
__module____qualname__r7   rJ   rN   rY   r_   rs    r   r   r   r      s!    :-
.(+
Or   r   c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestBudgetsPostValidc                    t        d      }|j                  d|j                  ddd      }|j                  }d}||k(  }|st	        j
                  d|fd	||f      d
t        j                         v st	        j                  |      rt	        j                  |      nd
t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            d x}x}}y )Nr9   r   300.00rR   rU   FrD   follow_redirects.  r   r\   r=   r]   rB   rC   r   postrW   r%   r&   r'   r(   r)   r*   r+   r,   r-   
r.   r   r   r   r=   r/   rF   r0   rH   rI   s
             r   test_valid_post_redirectsz.TestBudgetsPostValid.test_valid_post_redirects@   s    [);;!$8<"  

 ##*s*#s****#s******x***x***#***s*******r   c                 n   t        d      }|j                  d|j                  d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 )Nr9   r   r{   r|   Fr}   z/budgetsLocationr:   )z%(py1)s in %(py4)s)r?   r   zassert %(py6)sr    )	r   r   rW   headersr&   r'   r+   r,   r-   )
r.   r   r   r   r=   rE   r0   rG   @py_format5@py_format7s
             r   $test_redirect_target_is_budgets_pagez9TestBudgetsPostValid.test_redirect_target_is_budgets_pageI   s    [);;!$8<"  

 9X--j99z99999z9999z99999999999r   c                    t        d      }t        j                         }|j                  d|j                  dd       t
        j                  j                  |j                  |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                   |      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 )Nr9   r   r{   r|   rD   rR   rS   rT   )is not)z%(py0)s is not %(py3)srX   )r   r@   zassert %(py5)srA   r   zL%(py2)s
{%(py2)s = %(py0)s.amount
} == %(py8)s
{%(py8)s = %(py4)s(%(py6)s)
}r   r   r   r   r    r!   assert %(py10)spy10)r   r   rV   r   rW   r   query	filter_byrS   rT   firstr&   r'   r(   r)   r*   r+   r,   r-   rU   r   )r.   r   r   r   rV   rX   rG   r/   @py_format4rH   r1   r2   r0   @py_format9@py_format11s                  r   test_valid_post_saves_budgetz1TestBudgetsPostValid.test_valid_post_saves_budgetR   sd   [)

Kcff&QRLL""ekk

 # 

%' 	
 q}qqqxx,8,78,,x,,,,,x,,,,,,,q,,,q,,,x,,,,,,7,,,7,,,8,,,,,,,,,,,r   c                    t        d      }|j                  d|j                  ddd      }g }d}|j                  }|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                  |      t        j                  |      t        j                  |	      dz  }dd|iz  }|j                  |       |
st        j                  d	fdf      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndt        j                        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}x}x}}y )Nr9   r   r{   r|   Tr}   s   saveds   successr:   )z`%(py3)s in %(py11)s
{%(py11)s = %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s.data
}.lower
}()
}r=   )r@   rA   rC   ra   r"   z%(py13)sr#   )zf%(py16)s in %(py24)s
{%(py24)s = %(py22)s
{%(py22)s = %(py20)s
{%(py20)s = %(py18)s.data
}.lower
}()
})rd   re   py20py22py24z%(py26)spy26rf   zassert %(py29)spy29r   r   rW   rD   lowerr&   r'   r+   r(   r)   r*   rh   ri   r,   r-   )r.   r   r   r   r=   r/   rG   rj   @py_assert8r3   rF   rE   rl   @py_assert19@py_assert21@py_assert23@py_assert17r5   r6   @py_format25@py_format27@py_format28@py_format30s                          r   test_valid_post_flashes_successz4TestBudgetsPostValid.test_valid_post_flashes_success\   s   [);;!$8<!  

 	XxW8==W=..W.0Wx00WJW(--W-BUBUWBUBWWJBW4WWWWWx0WWWxWWWWWW8WWW8WWW=WWW.WWW0WWWWWWWJBWWWWJWWWWWW(WWW(WWW-WWWBUWWWBWWWWWWWWWWWWWWWWr   c                 |   t        d      }t        j                         }t        |j                  |j
                  |j                  t        d            }t        j                  j                  |       t        j                  j                          |j                  d|j                  dd       t        j                  j                  |       |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}}t        j.                  }|j0                  }	|j                  } |	|      }|j2                  } |       }d}||k(  }|sZt        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(                  |      t        j(                  |      t        j(                  |      d	z  }dd|iz  }t+        t        j,                  |            d x}x}	x}x}x}x}x}}y )Nr9   z200.00rQ   r   z350.00r|   r   r   r   rX   r   r   r   r   rR   rf   z%(py13)s
{%(py13)s = %(py11)s
{%(py11)s = %(py9)s
{%(py9)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.query
}.filter_by
}(category_id=%(py7)s
{%(py7)s = %(py5)s.id
})
}.count
}()
} == %(py16)sr   r   	r   r   r   rA   rC   ra   r"   r#   rd   assert %(py18)sre   )r   r   rV   r   rW   rS   rT   r   r   r   r   r   r   refreshrU   r&   r'   r(   r)   r*   r+   r,   r-   r   r   count)r.   r   r   r   rV   rX   r/   r1   r2   r0   r   r   rj   r   r3   @py_assert12rl   @py_assert14ro   rp   s                       r   #test_upsert_updates_existing_budgetz8TestBudgetsPostValid.test_upsert_updates_existing_budgete   s/   [)

++8$	
 	Kcff&QRAxx,8,78,,x,,,,,x,,,,,,,q,,,q,,,x,,,,,,7,,,7,,,8,,,,,,,,,,,||F|%%F#&&F%&9F9??F?AFQFAQFFFFAQFFFFFFvFFFvFFF|FFF%FFFFFF#FFF#FFF&FFF9FFF?FFFAFFFQFFFFFFFFr   c                    t        d      }t        j                         }|j                  dk7  rdnd}t	        |j
                  ||j                  t        d            }t        j                  j                  |       t        j                  j                          |j                  d|j
                  dd	       t        j                  }|j                  }|j
                  }	 ||	
      }
|
j                  } |       }d}||k(  }|sZt!        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*                  |      t!        j*                  |      t!        j*                  |      d	z  }dd|iz  }t-        t!        j.                  |            d x}x}x}	x}
x}x}x}}y )Nr9   rf      z100.00rQ   r   r{   r|   r   r   r   r   r   r   r   r   re   )r   r   rV   rS   r   rW   rT   r   r   r   r   r   r   r   r   r   r&   r'   r(   r)   r*   r+   r,   r-   )r.   r   r   r   rV   other_monthexistingr/   r0   rj   r   r3   r   rl   r   ro   rp   s                    r   test_budget_is_month_specificz2TestBudgetsPostValid.test_budget_is_month_specificu   s   [)

 ;;!+a8$	
 	!Kcff&QR||F|%%F#&&F%&9F9??F?AFQFAQFFFFAQFFFFFFvFFFvFFF|FFF%FFFFFF#FFF#FFF&FFF9FFF?FFFAFFFQFFFFFFFFr   c                    t        d      }|j                  d|j                  ddd      }|j                  }d}||k(  }|st	        j
                  d|fd	||f      d
t        j                         v st	        j                  |      rt	        j                  |      nd
t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            d x}x}}y )Nr[   r   0r|   Fr}   r   r   r\   r=   r]   rB   rC   r   r   s
             r   test_zero_amount_acceptedz.TestBudgetsPostValid.test_zero_amount_accepted   s    X&;;!$37"  

 ##*s*#s****#s******x***x***#***s*******r   c                    t        d      }t        j                         }|j                  d|j                  dd       t
        j                  j                  |j                  |j                  |j                        j                         }|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 )Nr9   r   z123.45r|   r   r   r   r   rX   r   r   r   r   )r   r   rV   r   rW   r   r   r   rS   rT   r   rU   r   r&   r'   r(   r)   r*   r+   r,   r-   )r.   r   r   r   rV   rX   r/   r1   r2   r0   r   r   s               r   test_decimal_precision_storedz2TestBudgetsPostValid.test_decimal_precision_stored   s   [)

Kcff&QRLL""ekk

 # 

%' 	
 xx,8,78,,x,,,,,x,,,,,,,q,,,q,,,x,,,,,,7,,,7,,,8,,,,,,,,,,,r   N)rt   ru   rv   r   r   r   r   r   r   r   r   rw   r   r   ry   ry   ?   s-    +:-XG G+-r   ry   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestBudgetsPostInvalidc                    t        d      }|j                  d|j                  dd      }|j                  }d}||k(  }|st	        j
                  d|fd||f      d	t        j                         v st	        j                  |      rt	        j                  |      nd	t	        j                  |      t	        j                  |      d
z  }dd|iz  }	t        t	        j                  |	            d x}x}}y )Nr9   r   znot-a-numberr|   r   r   r   r\   r=   r]   rB   rC   r   r   s
             r   test_non_numeric_rerenders_formz6TestBudgetsPostInvalid.test_non_numeric_rerenders_form   s    [);;cffO  
 ##*s*#s****#s******x***x***#***s*******r   c                    t        d      }|j                  d|j                  dd      }|j                  j	                         }g }d}||v }|}	|sd}
|
|v }|}	|sd}||v }|}	|	st        j                  d	|fd
||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }|j                  |       |st        j                  d	fd
|f      t        j                  |
      dt        j                         v st        j                  |      rt        j                  |      nd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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 )Nr9   r   abcr|   r   s   valids   numerics   numberr:   z%(py3)s in %(py5)srD   r@   rA   %(py7)srC   z%(py10)s in %(py12)sr   rb   %(py14)src   z%(py17)s in %(py19)spy17py19%(py21)srg   rf   zassert %(py24)sr   r   )r.   r   r   r   r=   rD   r/   rG   rF   rE   r4   rk   @py_assert16@py_assert18rH   rI   @py_format13@py_format15rq   rr   @py_format23r   s                         r   test_non_numeric_shows_errorz3TestBudgetsPostInvalid.test_non_numeric_shows_error   s^   [);;cffF  
 }}""$JxJx4J:J:#5JJd9JJJJJx4JJJxJJJJJJ4JJJ4JJJJJJJJ:JJJ:JJJJJJJJJJJJJJJJdJJJJJJJJJdJJJdJJJJJJJJJJJJJJJr   c                    t        d      }|j                  d|j                  dd      }|j                  }d}||k(  }|st	        j
                  d|fd||f      d	t        j                         v st	        j                  |      rt	        j                  |      nd	t	        j                  |      t	        j                  |      d
z  }dd|iz  }	t        t	        j                  |	            d x}x}}y )Nr9   r   -100r|   r   r   r   r\   r=   r]   rB   rC   r   r   s
             r   test_negative_amount_rejectedz4TestBudgetsPostInvalid.test_negative_amount_rejected   s    [);;cffG  
 ##*s*#s****#s******x***x***#***s*******r   c                    t        d      }|j                  d|j                  dd      }|j                  j	                         }g }d}||v }|}	|sd}
|
|v }|}	|sd}||v }|}	|sd	}||v }|}	|	svt        j                  d
|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nd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dz  }dd|iz  }|j                  |       |st        j                  d
fd|f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nd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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 )Nr9   r   r   r|   r   s   zero or greaters   negatives   positives   must ber:   r   rD   r   r   rC   r   r   r   rc   r   r   r   rg   )z%(py24)s in %(py26)s)r   r   z%(py28)spy28rf   zassert %(py31)spy31r   )r.   r   r   r   r=   rD   r/   rG   rF   rE   r4   rk   r   r   r   @py_assert25rH   rI   r   r   rq   rr   r   @py_format29r   @py_format32s                             r    test_negative_amount_shows_errorz7TestBudgetsPostInvalid.test_negative_amount_shows_error   s   [);;cffG  
 }}""$	
	
$&	
	
d"	
 	
 d"	
 		
 T!		
 	

 	
$	
 	

 
		 	
 	

 
6	
 	

 	 #'	
 	

 
		 #'	
 	
 	

 
6	

 
	

 	
d	
 	

 
	 	
 	

 
6	
 	

  #	
 	

 
	 #	
 	
 	

 
6	

 
	

 	
 d	
 	

 
	 	
 	

 
6	
 	

  #	
 	

 
	 #	
 	
 	

 
6	

 
	

 	
 T		
 	

 
	 		
 	

 
6	
 	

  "		
 	

 
	 "		
 	
 	

 
6	

 
	

 	
 	
 	
 	

 	
 	
 	
 	
r   c                    t        d      }|j                  d|j                  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 )Nr9   r   z-50r|   r   r   r   )z_%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.query
}.count
}()
} == %(py9)sr   )r   r   r   r    ra   zassert %(py11)sr"   )r   r   rW   r   r   r   r&   r'   r(   r)   r*   r+   r,   r-   )r.   r   r   r   r/   r0   r1   r   r2   rn   r5   s              r   test_negative_does_not_savez2TestBudgetsPostInvalid.test_negative_does_not_save   s    [)Kcff&NO||(|!!(!#(q(#q((((#q((((((v(((v(((|(((!(((#(((q((((((((r   c                    t        d      }|j                  d|j                  dd      }|j                  }d}||k(  }|st	        j
                  d|fd||f      d	t        j                         v st	        j                  |      rt	        j                  |      nd	t	        j                  |      t	        j                  |      d
z  }dd|iz  }	t        t	        j                  |	            d x}x}}y )Nr9   r    r|   r   r   r   r\   r=   r]   rB   rC   r   r   s
             r   test_empty_amount_rerendersz2TestBudgetsPostInvalid.test_empty_amount_rerenders   s    [);;cffC  
 ##*s*#s****#s******x***x***#***s*******r   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}}y )Nr   i'  100r|   r   i  r   r\   r=   r]   rB   rC   )
r   r%   r&   r'   r(   r)   r*   r+   r,   r-   r^   s	            r   !test_invalid_category_returns_404z8TestBudgetsPostInvalid.test_invalid_category_returns_404   s    ;;deD  
 ##*s*#s****#s******x***x***#***s*******r   N)
rt   ru   rv   r   r   r   r   r   r   r   rw   r   r   r   r      s&    +K+
)
++r   r   )r9   T)__doc__builtinsr(   _pytest.assertion.rewrite	assertionrewriter&   decimalr   datetimer   pytestapp.extensionsr   r   app.models.budgetr   app.models.categoryr   r   r   ry   r   rw   r   r   <module>r      sH    .       $ $ (%O %OTU- U-t4+ 4+r   