
    Mfj                    t    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mZ d dlmZ ddZdd	Zdd
ZddZdS )    )annotationsN)connect_memory)apply_migrationsget_schema_version)REQUIRED_TABLESreturnNonec            	     8   t                      } t          |            d |                     d          D             }t          t                    }|j        } ||          }|s.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
        |          dt          j                    v st          j	        |          rt          j
        |          ndt          j
        |          dz  }t          t          j        |                    d x}x}}d S )Nc                    h | ]
}|d          S name .0rows     i/home/agent/.hermes/worktrees/FinanceManager-sprint11-portfolio-completeness-ux/tests/unit/test_schema.py	<setcomp>z0test_db_schema_can_be_created.<locals>.<setcomp>   s    gggcc&kggg    z1SELECT name FROM sqlite_master WHERE type='table'zhassert %(py8)s
{%(py8)s = %(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py0)s(%(py1)s)
}.issubset
}(%(py6)s)
}setr   tables)py0py1py3py5py6py8)r   r   executer   r   issubset@py_builtinslocals
@pytest_ar_should_repr_global_name	_safereprAssertionError_format_explanation)connr   @py_assert2@py_assert4@py_assert7@py_format9s         r   test_db_schema_can_be_createdr+      s   DTggT\\2e%f%fgggF0(0((0000000000000003000003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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00000000000000r   c                 b   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 S )	N+   ==)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   r&   )r   r   r   r   zassert %(py8)sr   )r   r   r   r!   _call_reprcomparer   r    r"   r#   r$   r%   )r&   r'   @py_assert5r(   @py_format7r*   s         r   test_schema_version_recordedr3      sC   DTd##)r)#r))))))))))#r))))))))))))))))))))))))))))))d)))))d))))))#))))r)))))))))))))))))))))))))))))r   c                 X   t                      } t          |            d |                     d                                          D             }d |                     d                                          D             }d |                     d                                          D             }|d         }|j        } |            }d}||k    }|st          j        d	|fd
||f          t          j        |          t          j        |          t          j        |          t          j        |          dz  }	dd|	iz  }
t          t          j	        |
                    d x}x}x}x}}|d         }|j        } |            }d}||k    }|st          j        d	|fd
||f          t          j        |          t          j        |          t          j        |          t          j        |          dz  }	dd|	iz  }
t          t          j	        |
                    d x}x}x}x}}|d         }|j        } |            }d}||k    }|st          j        d	|fd
||f          t          j        |          t          j        |          t          j        |          t          j        |          dz  }	dd|	iz  }
t          t          j	        |
                    d x}x}x}x}}h d}|j
        } ||          }|sdt          j        |          t          j        |          dt          j                    v st          j        |          rt          j        |          ndt          j        |          dz  }t          t          j	        |                    d x}x}}d S )Nc                ,    i | ]}|d          |d         S r   typer   r   s     r   
<dictcomp>zDtest_decimal_sensitive_columns_use_text_affinity.<locals>.<dictcomp>   s"    nnnCs6{CKnnnr   PRAGMA table_info(transactions)c                ,    i | ]}|d          |d         S r6   r   r   s     r   r8   zDtest_decimal_sensitive_columns_use_text_affinity.<locals>.<dictcomp>   s"    uuu3v;Fuuur   z"PRAGMA table_info(crypto_holdings)c                    h | ]
}|d          S r   r   r   s     r   r   zCtest_decimal_sensitive_columns_use_text_affinity.<locals>.<setcomp>   s    hhhss6{hhhr   zPRAGMA table_info(instruments)quantityTEXTr.   )zD%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.upper
}()
} == %(py8)s)r   r   r   r   zassert %(py10)spy10fx_rate_to_chf>   ter	benchmark
index_namefund_domicileposition_categorydistribution_policyJassert %(py6)s
{%(py6)s = %(py3)s
{%(py3)s = %(py1)s.issubset
}(%(py4)s)
}instrument_colsr   r   py4r   )r   r   r   fetchallupperr!   r0   r#   r$   r%   r   r   r    r"   )r&   tx_colscrypto_colsrG   @py_assert0r'   r(   r)   @py_assert6r*   @py_format11r1   r2   s                r   0test_decimal_sensitive_columns_use_text_affinityrQ      s   DTnn4<<@a3b3b3k3k3m3mnnnGuut||Dh7i7i7r7r7t7tuuuKhhdll;[.\.\.e.e.g.ghhhO: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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00#$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,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66666666z"4"(4((**4f4*f4444444444*f44444"4444(4444*4444f4444444444444444444444444444444jjj  Ejs  Ess  uD  E  E  E  E  E  E  E  Ej  E  E  E  Es  E  E  E  E  E  E  E  E  E  E  E  uD  E  E  E  E  E  uD  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  Er   c                 \   t                      } t          |            d |                     d                                          D             }d |                     d                                          D             }d |                     d                                          D             }h d}|j        } ||          }|sdt          j        |          t          j        |          d	t          j                    v st          j	        |          rt          j        |          nd	t          j        |          d
z  }t          t          j        |                    d x}x}}h d}|j        } ||          }|sdt          j        |          t          j        |          dt          j                    v st          j	        |          rt          j        |          ndt          j        |          d
z  }t          t          j        |                    d x}x}}h d}|j        } ||          }|sdt          j        |          t          j        |          dt          j                    v st          j	        |          rt          j        |          ndt          j        |          d
z  }t          t          j        |                    d x}x}}d |                     d                                          D             }h d}|j        } ||          }|sdt          j        |          t          j        |          dt          j                    v st          j	        |          rt          j        |          ndt          j        |          d
z  }t          t          j        |                    d x}x}}d |                     d                                          D             }	h d}|j        } ||	          }|sdt          j        |          t          j        |          dt          j                    v st          j	        |	          rt          j        |	          ndt          j        |          d
z  }t          t          j        |                    d x}x}}d |                     d                                          D             }
h d}|j        } ||
          }|sdt          j        |          t          j        |          dt          j                    v st          j	        |
          rt          j        |
          ndt          j        |          d
z  }t          t          j        |                    d x}x}}d S )Nc                    h | ]
}|d          S r   r   r   s     r   r   zNtest_broker_bank_mapping_tables_exist_with_required_columns.<locals>.<setcomp>$   s    xxxss6{xxxr   z&PRAGMA table_info(instrument_mappings)c                    h | ]
}|d          S r   r   r   s     r   r   zNtest_broker_bank_mapping_tables_exist_with_required_columns.<locals>.<setcomp>%   s    {{{CCK{{{r   z,PRAGMA table_info(platform_account_mappings)c                    h | ]
}|d          S r   r   r   s     r   r   zNtest_broker_bank_mapping_tables_exist_with_required_columns.<locals>.<setcomp>&   s    pppCCKpppr   z)PRAGMA table_info(broker_import_dry_runs)>   isintickercurrencyexchange
confidenceasset_classsource_namesource_labelinstrument_idmapping_statusnormalized_namesource_platformquality_flags_jsonrF   instrument_mapping_colsrH   >	   rX   account_typer_   ra   internal_account_idnormalized_platforminternal_platform_idsource_account_labelnormalized_account_nameaccount_mapping_cols>   
is_currentsummary_jsonsession_statusra   mapped_positionssource_file_typeblocked_positionsrb   candidate_cash_rowscandidate_positionssnapshot_date_statussource_filename_hashdetected_snapshot_datedry_run_colsc                    h | ]
}|d          S r   r   r   s     r   r   zNtest_broker_bank_mapping_tables_exist_with_required_columns.<locals>.<setcomp>+   s    sss33v;sssr   z-PRAGMA table_info(broker_import_review_items)>   row_hash
dry_run_idr]   review_statusreview_item_idsource_row_refr`   ra   detected_currencyrb   reviewer_confirmeddetected_asset_classaccount_mapping_statusimport_readiness_statussnapshot_date_confirmedticker_exchange_confirmedreview_colsc                    h | ]
}|d          S r   r   r   s     r   r   zNtest_broker_bank_mapping_tables_exist_with_required_columns.<locals>.<setcomp>-   s    yyycc&kyyyr   z0PRAGMA table_info(broker_import_execution_plans)>   ry   snapshot_datepayload_statusr{   transaction_idra   source_row_hashexecution_statustransaction_typeexecution_plan_idtarget_account_idtarget_instrument_idpayload_quality_flags_jsonplanned_write_summary_jsonexecution_colsc                    h | ]
}|d          S r   r   r   s     r   r   zNtest_broker_bank_mapping_tables_exist_with_required_columns.<locals>.<setcomp>/   s    jjjFjjjr   r9   >   	is_voided	voided_at	voided_byvoid_reasoncorrection_reasoncorrection_of_transaction_idtransaction_cols)r   r   r   rJ   r   r!   r#   r   r    r"   r$   r%   )r&   rc   rj   rv   rN   r'   r1   r2   r   r   r   s              r   ;test_broker_bank_mapping_tables_exist_with_required_columnsr   !   s   DTxxdllCk6l6l6u6u6w6wxxx{{4<<@n3o3o3x3x3z3z{{{pp4<<8c+d+d+m+m+o+opppL Q  Q  Q  s  Q  Z  s  Z  Z  [r  s  s  s  s  s  s  s  s  Q  s  s  s  s  Z  s  s  s  s  s  s  s  s  s  s  s  [r  s  s  s  s  s  [r  s  s  s  s  s  s  s  s  s  s  s  s  s  s  s  s  s  s  s  s  s  s  s  s  s  s  s  s F  F  F  e  F  O  e  O  O  Pd  e  e  e  e  e  e  e  e  F  e  e  e  e  O  e  e  e  e  e  e  e  e  e  e  e  Pd  e  e  e  e  e  Pd  e  e  e  e  e  e  e  e  e  e  e  e  e  e  e  e  e  e  e  e  e  e  e  e  e  e  e  e Z  Z  Z  q  Z  c  q  c  c  dp  q  q  q  q  q  q  q  q  Z  q  q  q  q  c  q  q  q  q  q  q  q  q  q  q  q  dp  q  q  q  q  q  dp  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  qss$,,7f*g*g*p*p*r*rsssK W  W  W  m  W  `  m  `  `  al  m  m  m  m  m  m  m  m  W  m  m  m  m  `  m  m  m  m  m  m  m  m  m  m  m  al  m  m  m  m  m  al  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yyT\\:l-m-m-v-v-x-xyyyN m  m  m  F  m  v  F  v  v  wE  F  F  F  F  F  F  F  F  m  F  F  F  F  v  F  F  F  F  F  F  F  F  F  F  F  wE  F  F  F  F  F  wE  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  Fjjt||<]/^/^/g/g/i/ijjjvvv  Rv  R  AQ  R  R  R  R  R  R  R  Rv  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  AQ  R  R  R  R  R  AQ  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  Rr   )r   r	   )
__future__r   builtinsr   _pytest.assertion.rewrite	assertionrewriter!   jarvis_finance.storage.databaser   !jarvis_finance.storage.migrationsr   r   jarvis_finance.storage.schemar   r+   r3   rQ   r   r   r   r   <module>r      s    " " " " " "               : : : : : : R R R R R R R R 9 9 9 9 9 91 1 1 1* * * *	E 	E 	E 	ER R R R R Rr   