
    nj                    h    d dl m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mZmZmZ d
dZd
d	ZdS )    )annotationsN)confirm_create_budget_account)connect_memory)_create_budget_phase18_tablesapply_migrationsget_schema_versionreturnNonec            
        t                      t                                         d                                          d         } d}| |k    }|slt	          j        d|fd| |f          t	          j        |           t	          j        |          dz  }dd|iz  }t          t	          j        |                    d x} x}}d	}d
}d}t          |dddd                               d|f                               d|||f                               d|||f                               d                                          d         }                    |
                    ddd                                         d                                            fddD             }	t                                                      fd|	D             }
|
|	k    }|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dz  }dd |iz  }t          t	          j        |                    d }                    d                                          d         } d}| |k    }|slt	          j        d|fd| |f          t	          j        |           t	          j        |          dz  }dd|iz  }t          t	          j        |                    d x} x}}j        }d!} ||          }t!          |          }g }||k    }|s+t	          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        |          t	          j        |          t	          j        |          t	          j        |          d%z  }d&d'|iz  }t          t	          j        |                    d x}x}x}x}x}}                    d(                                          d         } d)}| |k    }|slt	          j        d|fd| |f          t	          j        |           t	          j        |          dz  }dd|iz  }t          t	          j        |                    d x} x}}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}}d S )0NPRAGMA foreign_keysr      ==z%(py1)s == %(py4)spy1py4assert %(py6)spy6bacc_fk_phase18candidate_fk_phase18transfer_fk_phase18zFK migration fixturecheckingCHF)budget_account_idnameaccount_typecurrencyzINSERT INTO budget_transaction_candidates(
               transaction_candidate_id, source_file_label, description, created_at
           ) VALUES (?, 'synthetic-regression', 'FK migration fixture', '2026-08-01T00:00:00Z')a1  INSERT INTO budget_transfers(
               transfer_id, from_transaction_id, to_transaction_id,
               from_account_id, to_account_id, amount_original,
               currency_original, created_at
           ) VALUES (?, 'from-fixture', 'to-fixture', ?, ?, '1.00', 'CHF', '2026-08-01T00:00:00Z')a  INSERT INTO budget_transfer_pairs(
               transfer_pair_id, source_candidate_id, source_account_id,
               source_signed_amount, currency, status, quality_status,
               confirmed_transfer_id, created_at, updated_at
           ) VALUES (
               'pair_fk_phase18', ?, ?, '-1.00', 'CHF', 'confirmed', 'exact', ?,
               '2026-08-01T00:00:00Z', '2026-08-01T00:00:00Z'
           )zLSELECT sql FROM sqlite_master WHERE type='table' AND name='budget_transfers'sqlbudget_transfersbudget_transfers__phase18_fixedzJINSERT INTO budget_transfers__phase18_fixed SELECT * FROM budget_transfersc                t    i | ]4}|                     d | d                                          d         5S zSELECT COUNT(*) FROM ""r   executefetchone.0tableconns     T/home/agent/.hermes/repos/FinanceManager/tests/unit/test_schema49_fk_safe_phase18.py
<dictcomp>zZtest_phase18_compatibility_is_idempotent_with_confirmed_transfer_child.<locals>.<dictcomp>?   sT        	t||=U===>>GGII!L      )r    budget_transfer_pairsc                t    i | ]4}|                     d | d                                          d         5S r#   r%   r(   s     r,   r-   zZtest_phase18_compatibility_is_idempotent_with_confirmed_transfer_child.<locals>.<dictcomp>G   sT        	t||=U===>>GGII!L  r.   )z%(py0)s == %(py2)safter_countsbefore_counts)py0py2zassert %(py4)sr   PRAGMA foreign_key_checkzl%(py9)s
{%(py9)s = %(py0)s(%(py7)s
{%(py7)s = %(py3)s
{%(py3)s = %(py1)s.execute
}(%(py5)s)
})
} == %(py12)slistr+   r3   r   py3py5py7py9py12assert %(py14)spy14PRAGMA integrity_checkok1   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   r3   r   r9   r   assert %(py8)spy8)r   r   r&   r'   
@pytest_ar_call_reprcompare	_safereprAssertionError_format_explanationr   replacecommitr   @py_builtinslocals_should_repr_global_namer7   r   )@py_assert0@py_assert3@py_assert2@py_format5@py_format7
account_idcandidate_idtransfer_idtransfer_sqlr2   r1   @py_assert1@py_format3@py_assert4@py_assert6@py_assert8@py_assert11@py_assert10@py_format13@py_format15@py_assert5@py_format9r+   s                         @r,   Ftest_phase18_compatibility_is_idempotent_with_confirmed_transfer_childre      s   DT<<-..7799!<AA<AAAAAAAAAA<AAAAA<AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"J)L'K!!+*&		
 	
   	LL	c 
	   	LL	f
 
j*-   	LL	 
z;/
 
 
 <<V hjjL 	LL%%&8:[]^__```LLT   	KKMMM   B  M
 "$'''KKMMM   "  L =((((((((((<=((((((((((((<(((((<(((((((((((((=(((((=(((((((((((((((((((((((((<<-..7799!<AA<AAAAAAAAAA<AAAAA<AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA?7?788?4899?R?9R??????????9R????????????4?????4????????????????????????????7????8????9????R?????????????????????????????????<<011::<<Q?G4G?4GGGGGGGGGG?4GGGGG?GGGG4GGGGGGGGGGGGGGGGGGGGGGGGGGGd##)r)#r))))))))))#r))))))))))))))))))))))))))))))d)))))d))))))#))))r)))))))))))))))))))))))))))))r.   c            
        t                      } t          |            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}}|                     d	                                          d
         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j
        |                    d x}x}}| j        }d} ||          }	t          |	          }
g }|
|k    }|s+t          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        |          t          j        |	          t          j        |
          t          j        |          dz  }dd|iz  }t          t          j
        |                    d x}x}x}	x}
x}}|                     d                                          d
         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j
        |                    d x}x}}d S )NrB   r   rC   r   r+   rD   rE   rF   r   r   r   r   r   r   r   r5   r6   r7   r8   r>   r?   r@   rA   )r   r   r   rG   rH   rN   rO   rP   rI   rJ   rK   r&   r'   r7   )r+   rS   rc   r\   rU   rd   rQ   rR   rT   r]   r^   r_   r`   ra   rb   s                  r,   ?test_fresh_database_reaches_schema_49_with_foreign_keys_enabledrg   R   sC   DTd##)r)#r))))))))))#r))))))))))))))))))))))))))))))d)))))d))))))#))))r)))))))))))))))))))))))))))<<-..7799!<AA<AAAAAAAAAA<AAAAA<AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA?7?788?4899?R?9R??????????9R????????????4?????4????????????????????????????7????8????9????R?????????????????????????????????<<011::<<Q?G4G?4GGGGGGGGGG?4GGGGG?GGGG4GGGGGGGGGGGGGGGGGGGGGGGGGGGGGr.   )r	   r
   )
__future__r   builtinsrN   _pytest.assertion.rewrite	assertionrewriterG   'jarvis_finance.services.budget_accountsr   jarvis_finance.storage.databaser   !jarvis_finance.storage.migrationsr   r   r   re   rg    r.   r,   <module>rq      s    " " " " " "               Q Q Q Q Q Q : : : : : :         C* C* C* C*LH H H H H Hr.   