
    j"                     j    d Z ddlZddlmc mZ ddlmZ ddl	Z	ddl
mZmZ h dZh dZ G d d      Zy)	uD   Unit tests for budget_recommender.fifty_thirty_twenty — Story 4.3.    N)Decimal)BudgetRecommendationfifty_thirty_twenty>   Debt PaymentsHousing	Groceries	Utilities
HealthcareTransportation>   Personal CareDiningShoppingEntertainmentSubscriptionsc                   Z    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y)TestFiftyThirtyTwentyc                    d}t        |      }t        |      }t        |t              }|sddt	        j
                         v st        j                  t              rt        j                  t              nddt	        j
                         v st        j                  t              rt        j                  t              nddt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      t        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d x}x}x}}y )N5000zsassert %(py11)s
{%(py11)s = %(py0)s(%(py8)s
{%(py8)s = %(py1)s(%(py6)s
{%(py6)s = %(py2)s(%(py4)s)
})
}, %(py9)s)
}
isinstancer   r   list)py0py1py2py4py6py8py9py11)r   r   r   r   @py_builtinslocals
@pytest_ar_should_repr_global_name	_safereprAssertionError_format_explanation)self@py_assert3@py_assert5@py_assert7@py_assert10@py_format12s         G/var/www/html/financials/tests/test_services/test_budget_recommender.pytest_returns_listz'TestFiftyThirtyTwenty.test_returns_list   s    6<EgfoE-o>Ez>EEEEEEEEzEEEzEEEEEE-EEE-EEEEEEgEEEgEEEfEEEoEEE>EEEEEEEEEEEEEEEEEEE    c                    t        t        d            }d |D        }t        |      }|sddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      dz  }t        t        j                  |            d x}}y )Nr   c              3   <   K   | ]  }t        |t                y w)N)r   r   .0rs     r,   	<genexpr>zSTestFiftyThirtyTwenty.test_returns_budget_recommendation_objects.<locals>.<genexpr>   s     E1:a!56Es   ,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}allr   r   r   
r   r   r6   r   r    r!   r"   r#   r$   r%   r&   recs@py_assert1r'   @py_format5s        r,   *test_returns_budget_recommendation_objectsz@TestFiftyThirtyTwenty.test_returns_budget_recommendation_objects   so    "76?3EEEsEEEEEEEEEsEEEsEEEEEEEEEEEEEEr.   c                    t        t        d            d   }d}t        ||      }|sddt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }t        t        j                  |            d x}}d}t        ||      }|sddt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }t        t        j                  |            d x}}d	}t        ||      }|sddt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }t        t        j                  |            d x}}y )
N1000r   category_namez5assert %(py5)s
{%(py5)s = %(py0)s(%(py1)s, %(py3)s)
}hasattrr3   )r   r   py3py5suggested_amountbucket)
r   r   rA   r   r    r!   r"   r#   r$   r%   )r&   r3   @py_assert2@py_assert4@py_format6s        r,   'test_recommendation_has_required_fieldsz=TestFiftyThirtyTwenty.test_recommendation_has_required_fields   s   03)*wq/********w***w******q***q***/**********,-wq,--------w---w------q---q---,----------"#wq(########w###w######q###q###(##########r.   c           	         t        t        d            }|D ]E  }|j                  }t        |t              }|sddt	        j
                         v st        j                  t              rt        j                  t              nd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                  |      dz  }t        t        j                  |            d x}}H y )N3000z[assert %(py6)s
{%(py6)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.suggested_amount
}, %(py4)s)
}r   r3   r   )r   r   rB   r   r   )r   r   rD   r   r   r    r!   r"   r#   r$   r%   )r&   r:   r3   rF   r(   @py_format7s         r,   "test_amounts_are_decimal_not_floatz8TestFiftyThirtyTwenty.test_amounts_are_decimal_not_float   s    "76?3 	;A00::0':::::::::::::::::::a:::a:::0::::::':::'::::::::::	;r.   c                    t        t        d            }|D ]  }|j                  }d}||v }|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 )	NrK   )needswantssavings)in)z.%(py2)s
{%(py2)s = %(py0)s.bucket
} in %(py5)sr3   )r   r   rC   zassert %(py7)spy7)r   r   rE   r!   _call_reprcomparer   r    r"   r#   r$   r%   )r&   r:   r3   r;   rG   r'   rH   @py_format8s           r,   test_buckets_are_valid_valuesz3TestFiftyThirtyTwenty.test_buckets_are_valid_values"   s    "76?3 	=A88<<<8<<<<<8<<<<<<<1<<<1<<<8<<<<<<<<<<<	=r.   c                 F   t        t        d            }|D ch c]  }|j                  dk(  s|j                    }}|t        k(  }|st        j                  d|fd|t        f      dt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  t              rt        j                  t              nddz  }dd	|iz  }t        t        j                  |            d }y c c}w )
NrK   rO   ==z%(py0)s == %(py2)snamesNEEDS_NAMESr   r   assert %(py4)sr   )r   r   rE   r@   r\   r!   rT   r   r    r"   r#   r$   r%   r&   r:   r3   r[   r;   @py_format3r<   s          r,   test_needs_categories_presentz3TestFiftyThirtyTwenty.test_needs_categories_present'       "76?3*.FQ!((g2EFF####u######u###u################ G
   DDc                 F   t        t        d            }|D ch c]  }|j                  dk(  s|j                    }}|t        k(  }|st        j                  d|fd|t        f      dt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  t              rt        j                  t              nddz  }dd	|iz  }t        t        j                  |            d }y c c}w )
NrK   rP   rX   rZ   r[   WANTS_NAMESr]   r^   r   )r   r   rE   r@   re   r!   rT   r   r    r"   r#   r$   r%   r_   s          r,   test_wants_categories_presentz3TestFiftyThirtyTwenty.test_wants_categories_present,   rb   rc   c                    t        t        d            }|D cg c]  }|j                  dk(  s| }}t        |      }d}||k(  }|st	        j
                  d|fd||f      dt        j                         v st	        j                  t              rt	        j                  t              nd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 c c}w )
Nr   rQ      rX   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slenr   r   rB   r   assert %(py8)sr   )r   r   rE   rj   r!   rT   r   r    r"   r#   r$   r%   )	r&   r:   r3   rQ   rF   r(   rG   rL   @py_format9s	            r,   test_exactly_one_savings_entryz4TestFiftyThirtyTwenty.test_exactly_one_savings_entry1   s    "76?3"<ahh)&;1<<7| q |q    |q      s   s      7   7   |   q        =s
   EEc                    t        d      }t        |      }t        d |D              }|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?   c              3   @   K   | ]  }|j                   d k(  s|  yw)rQ   N)rE   r1   s     r,   r4   zETestFiftyThirtyTwenty.test_savings_gets_20_percent.<locals>.<genexpr>9   s     @Q!((i*?q@s   z200.00rX   )zV%(py2)s
{%(py2)s = %(py0)s.suggested_amount
} == %(py8)s
{%(py8)s = %(py4)s(%(py6)s)
}rQ   r   )r   r   r   r   r   assert %(py10)spy10)r   r   nextrD   r!   rT   r   r    r"   r#   r$   r%   )
r&   incomer:   rQ   r;   r(   r)   r'   rm   @py_format11s
             r,   test_savings_gets_20_percentz2TestFiftyThirtyTwenty.test_savings_gets_20_percent6   s    "6*@$@@''<8<78+<<'+<<<<<'+<<<<<<<w<<<w<<<'<<<<<<7<<<7<<<8<<<+<<<<<<<<r.   c                    t        d      }t        |      }t        d |D              }d}t        |      }||z  }||k(  }|s7t        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  |      rt        j                  |      nd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6000c              3   T   K   | ]   }|j                   d k(  s|j                   " yw)rO   NrE   rD   r1   s     r,   r4   zGTestFiftyThirtyTwenty.test_needs_total_is_50_percent.<locals>.<genexpr>@   !     L1G8KA&&L   ((z0.50rX   z<%(py0)s == (%(py2)s * %(py7)s
{%(py7)s = %(py3)s(%(py5)s)
})totalrt   r   r   r   rB   rC   rS   rq   rr   r   r   sumr!   rT   r   r    r"   r#   r$   r%   
r&   rt   r:   r~   rG   @py_assert6@py_assert8r;   rm   ru   s
             r,   test_needs_total_is_50_percentz4TestFiftyThirtyTwenty.test_needs_total_is_50_percent<       "6*LLL)/0000u00000u0000000u000u0000000000000000000000000000000r.   c                    t        d      }t        |      }t        d |D              }d}t        |      }||z  }||k(  }|s7t        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  |      rt        j                  |      nd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   c              3   T   K   | ]   }|j                   d k(  s|j                   " yw)rP   Nrz   r1   s     r,   r4   zGTestFiftyThirtyTwenty.test_wants_total_is_30_percent.<locals>.<genexpr>G   r{   r|   z0.30rX   r}   r~   rt   r   r   rq   rr   r   r   s
             r,   test_wants_total_is_30_percentz4TestFiftyThirtyTwenty.test_wants_total_is_30_percentC   r   r.   c                    t        t        d            }d |D        }t        |      }|sddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      dz  }t        t        j                  |            d x}}y )N0c              3   L   K   | ]  }|j                   t        d       k(    yw)r   N)rD   r   r1   s     r,   r4   zCTestFiftyThirtyTwenty.test_zero_income_all_zeros.<locals>.<genexpr>L   s     D!1%%5Ds   "$r5   r6   r7   r8   r9   s        r,   test_zero_income_all_zerosz0TestFiftyThirtyTwenty.test_zero_income_all_zerosJ   so    "73<0DtDDsDDDDDDDDDsDDDsDDDDDDDDDDDDDDr.   c                 L   t        t        d            }t        |      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              nd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 )
NrK      rX   ri   rj   r:   rk   rl   r   )r   r   rj   r!   rT   r   r    r"   r#   r$   r%   )r&   r:   rF   r(   rG   rL   rm   s          r,   test_total_countz&TestFiftyThirtyTwenty.test_total_countN   s    "76?34yByByBss44yBr.   N)__name__
__module____qualname__r-   r=   rI   rM   rV   ra   rf   rn   rv   r   r   r   r    r.   r,   r   r      sF    FF$;
=
$
$
!
=11Er.   r   )__doc__builtinsr   _pytest.assertion.rewrite	assertionrewriter!   decimalr   pytest(app.services.insights.budget_recommenderr   r   r\   re   r   r   r.   r,   <module>r      s1    J     
 eWB Br.   