
    aj                        d dl mZ d dlZd dlmc mZ d dlm	Z	 d dl
Z
d dlmZ d dlmZmZmZ d dlmZ d dlmZ dd
ZddZddZdS )    )annotationsN)Decimal)record_audit_event)convert_to_chfget_fx_rate_to_chfset_manual_fx_override)connect_memory)apply_migrationsreturnNonec                 *   d } d}d}t          | ||          }d}t          |          }||k    }|sHt          j        d|fd||f          dt	          j                    v st          j        t                     rt          j        t                     ndt          j        |           t          j        |          t          j        |          t          j        |          dt	          j                    v st          j        t                    rt          j        t                    ndt          j        |          t          j        |          dz  }d	d
|iz  }t          t          j	        |                    d x} x}x}x}x}x}}d}	t          |	          }
d}d}d }t          |
|||          }d}t          |          }||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        t                    rt          j        t                    ndt          j        |	          t          j        |
          t          j        |          t          j        |          t          j        |          t          j        |          dt	          j                    v st          j        t                    rt          j        t                    ndt          j        |          t          j        |          dz  }dd|iz  }t          t          j	        |                    d x}	x}
x}x}x}x}x}x}}d S )NCHF
2026-01-011==)zd%(py8)s
{%(py8)s = %(py0)s(%(py2)s, %(py4)s, %(py6)s)
} == %(py14)s
{%(py14)s = %(py10)s(%(py12)s)
}r   r   )py0py2py4py6py8py10py12py14zassert %(py16)spy16z12.34)z%(py13)s
{%(py13)s = %(py0)s(%(py5)s
{%(py5)s = %(py1)s(%(py3)s)
}, %(py7)s, %(py9)s, %(py11)s)
} == %(py19)s
{%(py19)s = %(py15)s(%(py17)s)
}r   )r   py1py3py5py7py9py11py13py15py17py19zassert %(py21)spy21)r   r   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationr   )@py_assert1@py_assert3@py_assert5@py_assert7@py_assert11@py_assert13@py_assert9@py_format15@py_format17@py_assert2@py_assert4@py_assert6@py_assert8@py_assert10@py_assert12@py_assert16@py_assert18@py_assert14@py_format20@py_format22s                       S/home/agent/.hermes/worktrees/FinanceManager-sprint0-v2/tests/unit/test_fx_logic.pytest_chf_to_chf_rate_is_onerD      s   "HEH<HdE<88HCHGCLLH8LHHHHHHHHHH8LHHHHHHHHHHHHHHHHHHHHHHHdHHHHEHHHH<HHHH8HHHHHHHHHHHGHHHHHGHHHHHHCHHHHLHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH")Z''**ZEZ<ZZ>*E<FFZRYZ'RYJZJZZFJZZZZZZZZZZZFJZZZZZZZZZZZZZ>ZZZZZ>ZZZZZZZZZZZZZ'ZZZZZ'ZZZZZZ'ZZZZ*ZZZZEZZZZ<ZZZZZZZZFZZZZZZZZZZZ'ZZZZZ'ZZZZZZRYZZZZJZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ    c                 .   t                      } t          |            t          j        t          d          5  t          | dd           d d d            n# 1 swxY w Y   |                     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}||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}||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 )NzMissing FX ratematchUSDr   z.SELECT priority, category, rule_id FROM alertsprioritykritischr   z%(py1)s == %(py4)sr   r   assert %(py6)sr   categoryfxrule_id
missing_fx)r	   r
   pytestraises
ValueErrorr   executefetchoner'   r(   r,   r-   r.   )connrow@py_assert0r0   r8   @py_format5@py_format7s          rC   Ftest_foreign_currency_requires_historical_rate_and_alerts_when_missingr]      s   DT	z):	;	;	; 6 645556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ,,G
H
H
Q
Q
S
SCz?(j(?j((((((((((?j(((((?((((j(((((((((((((((((((((((((((z?"d"?d""""""""""?d"""""?""""d"""""""""""""""""""""""""""y>)\)>\))))))))))>\)))))>))))\)))))))))))))))))))))))))))))s   AAAc                    t                      } t          |            t          j        t          d          5  t          | ddt          d          d           d d d            n# 1 swxY w Y   t          | ddt          d          d          }|sed	d
dt          j                    v st          j
        |          rt          j        |          ndiz  }t          t          j        |                    d}d}t          | ||          }d}t          |          }||k    }|sst          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        |          dt          j                    v st          j
        t                    rt          j        t                    ndt          j        |          t          j        |          dz  }	dd|	iz  }
t          t          j        |
                    d x}x}x}x}x}}|                     d|f                                          }|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}||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         }||v }|slt          j        d|fd ||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}x}}d S )!NnoterG   rI   r   z0.90 )r_   zSynthetic test overridezassert %(py0)sr   audit_idr   )zc%(py7)s
{%(py7)s = %(py0)s(%(py1)s, %(py3)s, %(py5)s)
} == %(py13)s
{%(py13)s = %(py9)s(%(py11)s)
}r   rX   r   )r   r   r   r   r   r    r!   r"   zassert %(py15)sr#   zJSELECT action, entity_type, user_text_note FROM audit_log WHERE audit_id=?actionmanual_fx_overriderL   rM   rN   r   entity_typefx_rate	Syntheticuser_text_note)in)z%(py1)s in %(py4)s)r	   r
   rS   rT   rU   r   r   r)   r*   r'   r+   r,   r-   r.   r   r(   rV   rW   )rX   ra   @py_format1r8   r9   r:   r<   r=   r;   @py_format14@py_format16auditrZ   r0   r[   r\   s                   rC   /test_manual_fx_override_requires_note_and_auditrm      s   DT	z	0	0	0 T TtUL'&//PRSSSST T T T T T T T T T T T T T T &dE<WpqqqHOOOOOOOOOOOO8OOOOO8OOOOOOOOOOOOOOOO$)K<KdE<88KFKGFOOK8OKKKKKKKKKK8OKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKdKKKKKdKKKKKKEKKKK<KKKK8KKKKKKKKKKKGKKKKKGKKKKKKFKKKKOKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLehpgrss||~~E?222?22222222222?222222?22222222222222222222222222222222,9,9,,,,,,,,,,9,,,,,,,,,9,,,,,,,,,,,,,,,,,,,,,,,,,,,1% 011;11111111111;111111;1111111111111111111111111111111111s   "A''A+.A+)r   r   )
__future__r   builtinsr)   _pytest.assertion.rewrite	assertionrewriter'   decimalr   rS   jarvis_finance.audit.logr   jarvis_finance.fx.conversionr   r   r   jarvis_finance.storage.databaser	   !jarvis_finance.storage.migrationsr
   rD   r]   rm    rE   rC   <module>ry      s    " " " " " "                      7 7 7 7 7 7 c c c c c c c c c c : : : : : : > > > > > >[ [ [ [

* 
* 
* 
*2 2 2 2 2 2rE   