
    ?mjd                        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
mZmZmZmZmZmZ d dlmZ d dlmZ d d	lmZ d
 Zd ZddZddZddZddZddZddZdS )    )annotationsN)HTTPException)confirm_create_budget_account)confirm_create_category)confirm_budget_planning_batchconfirm_category_budget_values"get_budget_planning_audit_timelineget_budget_planning_matrixpreview_budget_planning_batch&preview_budget_planning_excel_templatepreview_category_budget_valuesconfirm_budget_transaction)connect_memory)apply_migrationsc                 @    t                      } t          |            | S )N)r   r   )conns    /tests/unit/test_budget_planning_usability_v2.pydbr      s    D-d333D[    c                    t          | dddd          d         }t          | ddd          d         }t          | d	dd          d         }|||fS )
NHaushaltcheckingCHF)nameaccount_typecurrency	entity_idzElektronische Medienexpense)r   category_typezEssen & Haushalt)r   r   )r   
account_idmediafoods       r   setup_two_categoriesr$      su    .tjZdrw5x5xyy  {F  GJ#D3I\e*f*fgghstE"42DW`)a)abbcnoDud""r   r!   strcategory_idamountc                6    t          | |ddd|d|d           d S )Nr   z
2026-02-10	confirmedr   )r!   transaction_typetransaction_datedescriptionamount_originalcurrency_originalr&   r   )r   r!   r&   r'   s       r   book_expenser/   !   sU    tJT]s  Q\  qw  NS  do  &p  &p  q  q  q  q  qr   returnNonec                 t   t                      } t          |           \  }}}t          | |t          | |dddd          d                    t          | |t          | |dddd	d
d          d                    t	          | |          }|d         |k    sJ t          |d                   dk    sJ |d         d         }|d         dk    sJ t          d |d         D                       sJ t          d |d         D                       sJ |d         dk    sJ |d         dk    sJ d|d         v sJ d S )N100.00z960.00initial)monthly_budget_chfprevious_year_total_chfnotespayload120.00z90.00z110.00)0102changed)r5   previous_year_monthsr7   r&   entries   r   action_labelzBudgetplanung gespeichertc              3  F   K   | ]}|d          dk    o|d         dk    V  dS )field_labelzBudget Monat	new_valuer9   N .0changes     r   	<genexpr>z`test_audit_timeline_shows_readable_field_changes_for_budget_and_previous_year.<locals>.<genexpr>0   s=      {{_evm$6Z6+;NRZ;Z{{{{{{r   changesc              3  .   K   | ]}|d          dk    V  dS )rB   zVorjahr MonatswerteNrD   rE   s     r   rH   z`test_audit_timeline_shows_readable_field_changes_for_budget_and_previous_year.<locals>.<genexpr>1   s-      ^^&vm$(==^^^^^^r   sourcevue_dashboard
created_byuseraudit_id	technical)r   r$   r   r   r	   lenany)r   _accountr"   _foodtimelinelatests         r   Mtest_audit_timeline_shows_readable_field_changes_for_budget_and_previous_yearrW   %   s   44D*>t*D*D'5%"40NtUZs{  Ya  lu  ]v  ]v  1w  1w  xA  1B  C  C  C"40NtUZs{  ]d  lt  Vu  Vu  @I  ]J  ]J  1K  1K  LU  1V  W  W  W1$>>HM"e++++x	"##q((((i #F.!%@@@@@{{iopyiz{{{{{{{{^^FS\L]^^^^^^^^(....,6)))),,,,,,,r   c                    t                      } t          |           \  }}}t          | d|ddd|ddddd	gi          }|d
         dk    sJ |d         du sJ |d         d         d         d         dk    sJ |d         d         d         d         dk    sJ t          | |d                   }|d         dk    sJ |d         dk    sJ t	          | dd          d         }d |D             }||         d         dk    sJ ||         d         dk    sJ |                     d                                          d         dk    sJ d S )NrI   z50.00monthly)r&   r5   budget_cadencez1200.00annual1000.00T)r&   annual_budget_chfrZ   r6   distribute_previous_year_totalcountr?   requires_explicit_confirmr   reviewbudget_year_chfz600.00   budget_month_chfr3   r8   statusr)   confirmed_count20262026-02yearcurrent_monthrowsc                     i | ]}|d          |S )r&   rD   )rF   rows     r   
<dictcomp>z]test_batch_preview_and_confirm_collect_multiple_budget_changes_with_audit.<locals>.<dictcomp>H   s    555S555r   r6   zMSELECT COUNT(*) FROM audit_log WHERE action='budget_planning_batch_confirmed')r   r$   r   r   r
   executefetchone)r   rS   r"   r#   previewresultrl   by_ids           r   Itest_batch_preview_and_confirm_collect_multiple_budget_changes_with_auditru   7   s   44D)=d)C)C&5$+D9WPYZZ9PXu~  cg  	h  	h? 3  G
 7q    ./477779a *+<=IIII9a *+=>(JJJJ*41CDDF({****#$))))%dyQQQRXYD55555E<)*h6666;01Y>>>><<ghhqqsstuvz{{{{{{{r   c                     t                      } t          |           \  }}}t          j        t                    5  t          | d|ddgi           d d d            d S # 1 swxY w Y   d S )NrI   z-1.00)r&   r5   )r   r$   pytestraisesr   r   )r   rS   r"   rT   s       r   @test_batch_preview_blocks_invalid_negative_values_before_confirmry   N   s    44D*>t*D*D'5%	}	%	% r r%dYfm9n9n8o,pqqqr r r r r r r r r r r r r r r r r rs   AA#&A#c                    t                      } t          |           \  }}t          | t          | ddd          d                    t	          | |d           t          fdt          | dd	          d
         D                       }d                    d |d         D                       }d |d         D             }d|v sJ d|v sJ d|v sJ d|v rd|v sJ d S )Nr3   r\   )r]   r6   r8   z150.00c              3  4   K   | ]}|d          k    |V  dS )r&   NrD   )rF   rr"   s     r   rH   zetest_plausibility_checks_surface_budget_vs_previous_year_actual_and_forecast_risks.<locals>.<genexpr>Y   s]        G  GQlmn{l|  AF  mF  mFq  mF  mF  mF  mF  G  Gr   rg   rh   ri   rl    c              3  &   K   | ]}|d          V  dS )messageNrD   rF   items     r   rH   zetest_plausibility_checks_surface_budget_vs_previous_year_actual_and_forecast_risks.<locals>.<genexpr>[   s&      OODYOOOOOOr   plausibility_checksc                    h | ]
}|d          S )severityrD   r   s     r   	<setcomp>zetest_plausibility_checks_surface_budget_vs_previous_year_actual_and_forecast_risks.<locals>.<setcomp>\   s    JJJt$z"JJJr   zmehr als 20% unter Vorjahru#   Ist 2026 liegt bereits über Budgetu$   Forecast liegt kritisch über Budgetwarningcritical)r   r$   r   r   r/   nextr
   join)r   accountrT   rn   messages
severitiesr"   s         @r   Rtest_plausibility_checks_surface_budget_vs_previous_year_actual_and_forecast_risksr   T   sm   44D)=d)C)C&%"40NtUZrz  Xa  ]b  ]b  1c  1c  dm  1n  o  o  owx000
  G  G  G  G4TV_```agh  G  G  G  G  GCxxOOC8M4NOOOOOHJJs3H/IJJJJ'833330H<<<<1X====
""zZ'?'?'??'?'?r   c                    t                      } t          |           \  }}}|                     d                                          d         }t	          | ddi          }|                     d                                          d         }|d         dk    sJ |d         du sJ |d	         du sJ d
|d         v sJ |d         d         dk    sJ ||k    sJ d S )Nz&SELECT COUNT(*) FROM budget_plan_itemsr   rj   rg   re   profiledproductive_mutationFconfirm_availableu   Aus bisheriger XLS übernehmentitlecontrolsmonthly_surplus_chfz2850.50)r   r$   rp   rq   r   )r   rS   _mediarT   before_plansrr   after_planss          r   Ctest_excel_template_preview_is_prepared_without_productive_mutationr   c   s   44D+?+E+E(65<< HIIRRTTUVWL4TFF;KLLG,,GHHQQSSTUVK8
****()U2222&'50000+ww/?????:45BBBB;&&&&&&r   )r!   r%   r&   r%   r'   r%   )r0   r1   )
__future__r   rw   fastapir   'jarvis_finance.services.budget_accountsr   )jarvis_finance.services.budget_categoriesr   'jarvis_finance.services.budget_planningr   r   r	   r
   r   r   r   +jarvis_finance.services.budget_transactionsr   jarvis_finance.storage.databaser   !jarvis_finance.storage.migrationsr   r   r$   r/   rW   ru   ry   r   r   rD   r   r   <module>r      s   " " " " " "  ! ! ! ! ! ! Q Q Q Q Q Q M M M M M M                  S R R R R R : : : : : : > > > > > >A A A# # #q q q q- - - -$| | | |.r r r r@ @ @ @' ' ' ' ' 'r   