
    1j6+                        d Z ddlZddlmc mZ ddlZddlm	Z	 ddl
mZ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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(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       Z0 G d! d"      Z1 G d# d$      Z2y),u    Dashboard — Stories 8.1–8.4.    N)Decimal)date	timedelta)db)Account)Budget)Category)Transaction)Bill)Debt)Settings)PaydownPlan)PaydownPlanCard)calculate_avalanchec                     t        | dd      }t        j                  j                  |       t        j                  j	                          |S )NcheckingT)nametype	is_active)r   _dbsessionaddcommit)r   as     @/var/www/html/financials/tests/test_blueprints/test_dashboard.py_make_accountr      s5    T
d;AKKOOAKKH    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*   %   sU    JJLE3665::fo	'AKKOOAKKHr   c           	      <   t        j                         t        |      z
  j                         }t	        |dt        |      dd| j                  |j                        }t        j                  j                  |       t        j                  j                          |S )NdaysShopFTr   merchant_normalizedr&   	is_credit	is_manual
account_idr#   )r   r'   r   	isoformatr
   r   r(   r   r   r   r   )accountr    r&   days_agodts         r   _make_transactionr9   .   sn    		x0	0;;=AFv%4::366	A
 KKOOAKKHr   c                 H   t        j                         t        |      z   j                         }t	        | t        |      t        j                         j                  |d      }t        j                  j                  |       t        j                  j                          |S )Nr,   Tr   r&   due_daydue_dater   )r   r'   r   r4   r   r   dayr   r   r   r   )r   
days_untilr&   duebills        r   
_make_billrB   :   sj    ::<)44
?
?
ACT'&/4::<;K;K.DKKOODKKKr   c           
          t        | ddt        |      t        |      t        |            }t        j                  j	                  |       t        j                  j                          |S )NcreditT)r   r   r   current_balanceaprmin_payment)r   r   r   r   r   r   )r   balancerF   min_paycards        r   _make_credit_cardrK   C   sP    8t#*7#3s|1ACD KKOODKKKr   c                 b   t        dt        |      d      }t        j                  j	                  |       t        j                  j                          | j                  | j                  | j                  | j                  | j                  d}t        |gt        |            }|j                  r|j                  d   d   d   d   nd}t        |j                  | j                  t        |      | j                  | j                  	      }t        j                  j	                  |       t        j                  j!                         }|6t        d
t        |            }t        j                  j	                  |       nt        |      |_        t        j                  j%                          |S )N	avalancheactive)strategyextra_monthlystatus)r(   r   rH   rF   rG   r   schedulepayment50)plan_idr3   monthly_allocationstarting_balancestarting_apr   )r(   extra_monthly_payment)r   r   r   r   r   flushr(   r   rE   rF   rG   r   per_card_scheduler   r   queryfirstrZ   r   )rJ   extraplan	card_dictresultfirst_payment	plan_cardsettingss           r   _make_active_planrf   L   s9   75>RZ[DKKOODKKww		 00 $ 0 02I !)gen=FMSMeMeF,,Q/
;A>yIkoMDGG"=1--XX	I KKOOI~~##%HqG!)0&KKKr   c                   $    e Zd Zd Zd Zd Zd Zy)TestDashboardShellc           	      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/   ==)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)selfrn   r   @py_assert1@py_assert3@py_assert5@py_assert7@py_assert10@py_assert9@py_format12@py_format14s              r   test_dashboard_returns_200z-TestDashboardShell.test_dashboard_returns_200i   s    zz1#1z#1**1c1*c1111*c111111v111v111z111#111111*111c11111111r   c                    |j                  d      }|j                  }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )	Nrj   rk   rl   z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)sresponsero   rp   py5assert %(py7)spy7rv   )	r   rn   r   r   r   @py_assert4r   @py_format6@py_format8s	            r   test_dashboard_at_root_urlz-TestDashboardShell.test_dashboard_at_root_urll   s    ::c?##*s*#s****#s******x***x***#***s*******r   c                    |j                  d      }d}|j                  }||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )	Nrj   s	   Dashboardinz,%(py1)s in %(py5)s
{%(py5)s = %(py3)s.data
}r   py1py3r   r   r   
rw   datary   rz   r~   r{   r|   r}   r   r   	r   rn   r   r   @py_assert0r   @py_assert2r   r   s	            r   test_active_page_is_dashboardz0TestDashboardShell.test_active_page_is_dashboardp   s|    ::c?,x}},|},,,,|},,,|,,,,,,x,,,x,,,},,,,,,,r   c                 *   t               }t               }t        |       t        d      D ]  }t	        ||d|z    d|        t                t        j                         }|j                  d      }t        j                         |z
  }|j                  }	d}
|	|
k(  }|st        j                  d|fd|	|
f      d	t        j                         v st        j                  |      rt        j                  |      nd	t        j                  |	      t        j                  |
      d
z  }dd|iz  }t        t        j                   |            d x}	x}}
d}||k  }	|	st        j                  d|	fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }t        j"                  d|dd      dz   d|iz  }t        t        j                   |            d x}	}y )N   
   z.00)r6   rj   rk   rl   r   r   r   r   r   g       @)<)z%(py0)s < %(py3)selapsed)ro   r   zDashboard too slow: z.2fsz
>assert %(py5)sr   )r   r!   r*   ranger9   rB   timerw   rx   ry   rz   r{   r|   r}   r~   r   r   _format_assertmsg)r   rn   r   acctr    istartr   r   r   r   r   r   r   r   @py_format4s                   r   )test_dashboard_renders_in_under_2_secondsz<TestDashboardShell.test_dashboard_renders_in_under_2_secondst   sQ   Sr 	EAdCBF83!D	E		::c?))+%##*s*#s****#s******x***x***#***s*******Cw}CCCwCCCCCCwCCCwCCCCCC 4WSMCCCCCCCr   N)__name__
__module____qualname__r   r   r   r    r   r   rh   rh   h   s    2+-Dr   rh   c                   $    e Zd Zd Zd Zd Zd Zy)TestBudgetBurnWidgetc                    |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 )	Nrj      Budget Burnr   r   r   r   r   r   r   r   s	            r   test_budget_burn_widget_presentz4TestBudgetBurnWidget.test_budget_burn_widget_present   s|    ::c?..~....~...~...................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200.0050.00rj   s   Diningr   r   r   r   r   r   )r   r!   r*   r9   rw   r   ry   rz   r~   r{   r|   r}   r   r   r   rn   r   r   r    r   r   r   r   r   r   s              r   $test_budget_burn_shows_category_dataz9TestBudgetBurnWidget.test_budget_burn_shows_category_data   s    X&S(#$W-::c?)HMM)yM))))yM)))y))))))H)))H)))M)))))))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 )Nrj   s   No budgets setr   r   z,%(py3)s in %(py7)s
{%(py7)s = %(py5)s.data
}r   r   r   r   %(py9)spy9z0%(py12)s in %(py16)s
{%(py16)s = %(py14)s.data
}py12py14py16%(py18)spy18rY   assert %(py21)spy21rw   r   ry   rz   r~   r{   r|   r}   append_format_boolopr   r   r   rn   r   r   r   r   @py_assert6r   r   @py_assert11@py_assert15@py_assert13r   @py_format10@py_format17@py_format19@py_format20@py_format22s                     r   ,test_budget_burn_empty_state_when_no_budgetszATestBudgetBurnWidget.test_budget_burn_empty_state_when_no_budgets   s    ::c?T THMMT M1T^Tx}}T^}5TTTTT MTTT TTTTTTHTTTHTTTMTTTTTTT^}TTT^TTTTTTxTTTxTTT}TTTTTTTTTTTTTTr   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 )	Nrj   s   /budgetsr   r   r   r   r   r   r   r   s	            r   !test_budget_burn_links_to_budgetsz6TestBudgetBurnWidget.test_budget_burn_links_to_budgets   s|    ::c?+hmm+{m++++{m+++{++++++h+++h+++m+++++++r   N)r   r   r   r   r   r   r   r   r   r   r   r      s    /*U,r   r   c                   $    e Zd Zd Zd Zd Zd Zy)TestMonthlySummaryWidgetc                    |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 )	Nrj      Monthly Spendingr   r   r   r   r   r   r   r   s	            r   #test_monthly_summary_widget_presentz<TestMonthlySummaryWidget.test_monthly_summary_widget_present       ::c?"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               }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150.00rj   s   150r   r   r   r   r   r   )r   r!   r9   rw   r   ry   rz   r~   r{   r|   r}   r   r   r   s              r    test_monthly_summary_shows_totalz9TestMonthlySummaryWidget.test_monthly_summary_shows_total   s    $X.::c?&&v&&&&v&&&v&&&&&&&&&&&&&&&&&&&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 )Nrj      No transactionsr   r   r   r   r   r   r   r   r   r   r   rY   r   r   r   r   s                     r   5test_monthly_summary_empty_state_when_no_transactionszNTestMonthlySummaryWidget.test_monthly_summary_empty_state_when_no_transactions   s   ::c?Z!ZX]]Z!]2Z6IZX]]Z6I]6ZZZZZ!]ZZZ!ZZZZZZXZZZXZZZ]ZZZZZZZ6I]ZZZ6IZZZZZZXZZZXZZZ]ZZZZZZZZZZZZZZr   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 	Nrj   s   /transactionsr   r   r   r   r   r   r   r   s	            r   *test_monthly_summary_links_to_transactionszCTestMonthlySummaryWidget.test_monthly_summary_links_to_transactions       ::c?08==0=0000=00000000080008000=0000000r   N)r   r   r   r   r   r   r   r   r   r   r   r      s    4'[1r   r   c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestUpcomingBillsWidgetc                    |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 )	Nrj      Upcoming Billsr   r   r   r   r   r   r   r   s	            r   "test_upcoming_bills_widget_presentz:TestUpcomingBillsWidget.test_upcoming_bills_widget_present   s    ::c? 1HMM1 M1111 M111 111111H111H111M1111111r   c                    t        ddd       |j                  d      }d}|j                  }||v }|st        j                  d|fd||f      t        j
                  |      d	t        j                         v st        j                  |      rt        j
                  |      nd	t        j
                  |      d
z  }dd|iz  }t        t        j                  |            d x}x}}y )NNetflix   z15.99)r?   r&   rj   s   Netflixr   r   r   r   r   r   )rB   rw   r   ry   rz   r~   r{   r|   r}   r   r   r   s	            r   #test_upcoming_bills_shows_bill_dataz;TestUpcomingBillsWidget.test_upcoming_bills_shows_bill_data   s    97;::c?*X]]*z]****z]***z******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 )Nrj   s   No billsr   r   r   r   r   r   r   r   r   r   r   rY   r   r   r   r   s                     r   )test_upcoming_bills_empty_state_when_nonezATestUpcomingBillsWidget.test_upcoming_bills_empty_state_when_none   s    ::c?Q{QhmmQ{m+Q/@QHMMQ/@M/QQQQQ{mQQQ{QQQQQQhQQQhQQQmQQQQQQQ/@MQQQ/@QQQQQQHQQQHQQQMQQQQQQQQQQQQQQr   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 )	Nrj   s   /billsr   r   r   r   r   r   r   r   s	            r   "test_upcoming_bills_links_to_billsz:TestUpcomingBillsWidget.test_upcoming_bills_links_to_bills   s|    ::c?)HMM)yM))))yM)))y))))))H)))H)))M)))))))r   c           	         t        dt        d      dt        j                         t	        d      z
  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 )NzOverdue BillrT   rY      r,   Tr;   rj   s   Overduer   r   r   r   r   r   )r   r   r   r'   r   r4   r   r   r   r   rw   r   ry   rz   r~   r{   r|   r}   r   r   )
r   rn   r   rA   r   r   r   r   r   r   s
             r   &test_overdue_bill_shows_overdue_statusz>TestUpcomingBillsWidget.test_overdue_bill_shows_overdue_status   s    q"jjlYA->>IIKW[]::c?*X]]*z]****z]***z******X***X***]*******r   N)r   r   r   r   r   r   r   r   r   r   r   r   r      s    2+
R*+r   r   c                   $    e Zd Zd Zd Zd Zd Zy)TestRecentTransactionsWidgetc                    |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 )	Nrj      Recent Transactionsr   r   r   r   r   r   r   r   s	            r   'test_recent_transactions_widget_presentzDTestRecentTransactionsWidget.test_recent_transactions_widget_present   s    ::c?%66%6666%666%6666666666666666666r   c           
      R   t               }t               }t        d      D ]  }t        t	        j
                         t        |      z
  j                         d|dt        d      dd|j                  |j                        }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}
}	d}|j                  }	||	v }
|
st!        j"                  d|
fd||	f      t!        j$                  |      dt'        j(                         v st!        j*                  |      rt!        j$                  |      ndt!        j$                  |	      dz  }dd|iz  }t-        t!        j.                  |            d x}x}
}	d}|j                  }	||	v}
|
st!        j"                  d|
fd||	f      t!        j$                  |      dt'        j(                         v st!        j*                  |      rt!        j$                  |      ndt!        j$                  |	      dz  }dd|iz  }t-        t!        j.                  |            d x}x}
}	y )N   r,   Merchant02dz10.00FTr/   rj   s
   Merchant00r   r   r   r   r   r   s
   Merchant09s
   Merchant11)not in)z0%(py1)s not in %(py5)s
{%(py5)s = %(py3)s.data
})r   r!   r   r
   r   r'   r   r4   r   r(   r   r   r   r   rw   r   ry   rz   r~   r{   r|   r}   r   r   )r   rn   r   r   r    r   r8   r   r   r   r   r   r   s                r   &test_recent_transactions_shows_last_10zCTestRecentTransactionsWidget.test_recent_transactions_shows_last_10   s   r 	AjjlYA%66AAC&.qg$6w'5D77	A KKOOA	 	::c?--}----}---}---------------------}----}---}-------------------1HMM1}M1111}M111}111111H111H111M1111111r   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 )Nrj   r   r   r   r   r   r   r   r   r   r   r   r   rY   r   r   r   r   s                     r   .test_recent_transactions_empty_state_when_nonezKTestRecentTransactionsWidget.test_recent_transactions_empty_state_when_none   s   ::c?]!]X]]]!]2]6L]PXP]P]]6LP]6]]]]]!]]]]!]]]]]]X]]]X]]]]]]]]]]]6LP]]]]6L]]]]]]PX]]]PX]]]P]]]]]]]]]]]]]]]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 r   r   r   s	            r   .test_recent_transactions_links_to_transactionszKTestRecentTransactionsWidget.test_recent_transactions_links_to_transactions   r   r   N)r   r   r   r  r  r	  r  r   r   r   r   r      s    72$^1r   r   c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestDebtPaydownWidgetc                    |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 )	Nrj      Debt Paydownr   r   r   r   r   r   r   r   s	            r   test_paydown_widget_presentz1TestDebtPaydownWidget.test_paydown_widget_present   s|    ::c?/(--/-////-/////////(///(///-///////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 )Nrj   s   No active paydown plans   Compare strategiesr   r   r   r   r   r   r   r   r   r   rY   r   r   r   r   s                     r   %test_paydown_empty_state_when_no_planz;TestDebtPaydownWidget.test_paydown_empty_state_when_no_plan   s   ::c?c(cHMMc(M9c=RcV^VcVcc=RVc=ccccc(Mccc(ccccccHcccHcccMccccccc=RVcccc=RccccccV^cccV^cccVcccccccccccccccr   c                    t        d      }t        |       |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Chase Sapphirerj   s   Chase Sapphirer   r   r   r   r   r   )rK   rf   rw   r   ry   rz   r~   r{   r|   r}   r   r   )
r   rn   r   rJ   r   r   r   r   r   r   s
             r   -test_paydown_shows_card_data_when_plan_activezCTestDebtPaydownWidget.test_paydown_shows_card_data_when_plan_active   s     !12$::c? 1HMM1 M1111 M111 111111H111H111M1111111r   c                    t               }t        |       |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 )Nrj   s	   Avalanches	   avalancher   r   r   r   r   r   r   r   r   r   rY   r   r   )rK   rf   rw   r   ry   rz   r~   r{   r|   r}   r   r   r   r   )r   rn   r   rJ   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s                      r    test_paydown_shows_strategy_namez6TestDebtPaydownWidget.test_paydown_shows_strategy_name   s    "$::c?M|Mx}}M|},MMM0MMMMM|}MMM|MMMMMMxMMMx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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 )	Nrj   s   /paydown/monitorr   r   r   r   r   r   r   r   s	            r   test_paydown_links_to_monitorz3TestDebtPaydownWidget.test_paydown_links_to_monitor  r   r   N)r   r   r   r  r  r  r  r  r   r   r   r  r     s    0d2N4r   r  c                       e Zd Zd Zd Zy)TestAllWidgetsPresentAllStatesc                    |j                  d      }dD ]  }|j                  }||v }|st        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t        j                  |      dz  }dd	|iz  }t        t        j                  |            d x}} y )
Nrj   r   r   r   r   r  r   z,%(py0)s in %(py4)s
{%(py4)s = %(py2)s.data
}headingr   ro   rp   rq   assert %(py6)srr   )
rw   r   ry   rz   r{   r|   r}   r~   r   r   )	r   rn   r   r   r  r   r   @py_format5@py_format7s	            r   'test_all_5_widget_headings_render_emptyzFTestAllWidgetsPresentAllStates.test_all_5_widget_headings_render_empty  s    ::c?T 	,G&mm+7m++++7m++++++7+++7++++++h+++h+++m+++++++	,r   c                 @   t               }t               }t        |       t        ||d       t	        dd       t               }t        |       |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}	}dD ]  }|j"                  }	||	v }|st        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	t        j                  |	      dz  }dd|iz  }t        t        j                   |            d x}}	 y )Nz75.00Electric   )r?   rj   rk   rl   r   r   r   r   r   r  r   r  r  r  r   rr   )r   r!   r*   r9   rB   rK   rf   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   )r   rn   r   r   r    rJ   r   r   r   r   r   r   r  r!  r"  s                  r   +test_all_5_widget_headings_render_with_datazJTestAllWidgetsPresentAllStates.test_all_5_widget_headings_render_with_data  sL   S$W-:!, "$::c?##*s*#s****#s******x***x***#***s*******T 	,G&mm+7m++++7m++++++7+++7++++++h+++h+++m+++++++	,r   N)r   r   r   r#  r'  r   r   r   r  r    s    ,,r   r  )Checking)	Groceries)z300.00)r   r   )r%     z80.00)Visaz2000.00z20.00r   )r   )3__doc__builtinsr{   _pytest.assertion.rewrite	assertionrewritery   r   decimalr   datetimer   r   pytestapp.extensionsr   r   app.models.accountr   app.models.budgetr   app.models.categoryr	   app.models.transactionr
   app.models.billr   app.models.debtr   app.models.settingsr   app.models.paydown_planr   app.models.paydown_plan_cardr   app.services.amortizationr   r   r!   r*   r9   rB   rK   rf   rh   r   r   r   r   r  r  r   r   r   <module>r?     s    &     $  $ & $ ( .     ( / 8 9
	8D D:, ,,1 1.+ +61 1D4 48, ,r   