
    aj                        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mZmZmZ d dlmZmZmZ d dlmZ d d	lmZmZ d
 ZddZddZddZddZddZdS )    )annotations)
TestClient)get_db)
create_app)analyze_budget_workbook_rows)confirm_create_tagcreate_tag_previewarchive_tag	list_tags)confirm_budget_plan_itemcreate_budget_plan_item_previewlist_budget_plan_items)connect_memory)apply_migrationsget_schema_versionc                 @    t                      } t          |            | S N)r   r   conns    !tests/unit/test_budget_phase11.pydbr      s     DTK    returnNonec                 z   t                      } t          |           dk    sJ d |                     d          D             }h d                    |          sJ d |                     d          D             }|d                                         dk    sJ |d	                                         dk    sJ d S )
N&   c                    h | ]
}|d          S )name .0rows     r   	<setcomp>zMtest_budget_phase11_tables_tags_and_plan_items_are_created.<locals>.<setcomp>   s    gggcc&kgggr   z1SELECT name FROM sqlite_master WHERE type='table'>   budget_plan_itemsbudget_excel_seed_dry_runsbudget_excel_seed_candidatesc                ,    i | ]}|d          |d         S )r   typer   r    s     r   
<dictcomp>zNtest_budget_phase11_tables_tags_and_plan_items_are_created.<locals>.<dictcomp>   s"    eeeCKVeeer   z$PRAGMA table_info(budget_plan_items)monthly_amount_chfTEXTannual_amount_chf)r   r   executeissubsetupper)r   tablescolss      r   :test_budget_phase11_tables_tags_and_plan_items_are_createdr2      s    44Dd##r))))ggT\\2e%f%fgggF^^^gghnoooooee=c0d0deeeD$%++--7777#$**,,666666r   c                    t                      } t          | ddd          }|d         dk    sJ t          | |d                   }|d         }t          d t	          |           D                       sJ t          | |          }|d         d	k    sJ |                     d
                                          d         dk    sJ d S )NSynthetischer Tagz#00ffee)r   colorsummarypayload	entity_idc              3  >   K   | ]}|d          dk    o|d         V  dS )r   r4   	is_activeNr   )r!   ts     r   	<genexpr>z>test_tags_preview_confirm_archive_and_audit.<locals>.<genexpr>$   s5      \\qqy//BAkN\\\\\\r   statusarchivedz=SELECT COUNT(*) FROM audit_log WHERE entity_type='budget_tag'r      )r   r	   r   anyr   r
   r-   fetchone)r   preview	confirmedtag_idr>   s        r   +test_tags_preview_confirm_archive_and_auditrE      s    44D 0Ci'X'XYYG9!44444"4);<<I{#F\\IVZOO\\\\\\\\4((HH++++<<WXXaaccdefjkkkkkkkr   c                    t                      } |                     d                                          d         }t          | d|dddddd	          }|d
         d         dk    sJ t	          | |d
                   }|d         }|                     d|f                                          }|d         dk    sJ |d         |k    sJ t          | d          d         d         dk    sJ d S )Nz=SELECT category_id FROM budget_categories WHERE name='Wohnen'r   2026-05zSynthetische Planpositionz123.45z1481.40Tmonthly)
plan_monthcategory_idr   r*   r,   is_fixed_costcadencer7   r*   r8   zZSELECT typeof(monthly_amount_chf), category_id FROM budget_plan_items WHERE plan_item_id=?text   )monthcategory_nameWohnen)r   r-   rA   r   r   r   )r   rJ   rB   rC   item_idr"   s         r   ?test_budget_plan_preview_confirm_decimal_text_and_category_linkrS   *   s*   44D,,^__hhjjklmK-d"+&&5 5  G 923x????(wy/ABBI$G
,,sv}u  A  A  J  J  L  LCq6Vq6[    !$i888;OLPXXXXXXXr   c                 &   t                      t                      } fd}|| j        t          <   t	          |           }|                    dddi          }|j        dk    sJ |                    d|                                d                   }|j        dk    sJ |                    d	|                                d
          di           j        dk    sJ                     d          	                                d         }|                    dd|ddd          }|j        dk    sJ |                    d|                                d                   j        dk    sJ |
                    d          j        dk    sJ d S )Nc               3     K    V  d S r   r   r   s   r   override_dbz;test_budget_phase11_api_tags_and_plans.<locals>.override_dbC   s      




r   z/api/budget/tags/previewr   zAPI Tag)json   z/api/budget/tags/confirmr7   z/api/budget/tags/r8   z/archivez1SELECT category_id FROM budget_categories LIMIT 1r   z/api/budget/plans/previewrG   zAPI Planz10.00)rI   rJ   r   r*   z/api/budget/plans/confirmz/api/budget/plans?month=2026-05)r   r   dependency_overridesr   r   poststatus_coderW   r-   rA   get)apprV   clienttag_previewtag_confirmrJ   plan_previewr   s          @r   &test_budget_phase11_api_tags_and_plansrb   ?   s   44D
,,C     (3CV$__F++8	?R+SSK"c))))++8{?O?O?Q?QR[?\+]]K"c))));;T;+;+;+=+=k+JTTT[];^^jnqqqqq,,RSS\\^^_`aK;;:PYju  @J  bi  Bj  Bj;  k  kL#s****;;29J9J9L9LY9W;XXdhkkkkk::788DKKKKKKr   c                    ddggg dg dg dgd} t          |           }|d         dk    sJ |d	         d
k    sJ |d         dk    sJ |d         dk    sJ |d         dk    sJ |d         dk    sJ dt          |          vsJ d S )NAltWert)	KategoriePositionJanFebJahrTyp)rQ   Miete100.00rm   z1200.00	Fixkosten)EssenHaushaltz50.00z60.00z660.00variabel)ArchivBudget 2026sheet_countr?   current_budget_sheetrs   main_category_countposition_countfixed_cost_candidate_countrN   budget_plan_candidate_countrm   )r   repr)rowsresults     r   Ltest_excel_budget_seed_structural_dry_run_extracts_candidates_without_valuesr}   U   s    6?#BBBKKKIII
 D *$//F- A%%%%()]::::'(A----"#q((((./14444/0A55554<<''''''r   N)r   r   )
__future__r   fastapi.testclientr   jarvis_finance.api.dependenciesr   jarvis_finance.api.mainr    jarvis_finance.budget.excel_seedr   )jarvis_finance.services.budget_categoriesr   r	   r
   r   $jarvis_finance.services.budget_plansr   r   r   jarvis_finance.storage.databaser   !jarvis_finance.storage.migrationsr   r   r   r2   rE   rS   rb   r}   r   r   r   <module>r      sr   " " " " " " ) ) ) ) ) ) 2 2 2 2 2 2 . . . . . . I I I I I I t t t t t t t t t t t t C  C  C  C  C  C  C  C  C  C : : : : : : R R R R R R R R  7 7 7 7	l 	l 	l 	lY Y Y Y*L L L L,( ( ( ( ( (r   