
    j%                        d dl mZ d dlmZ d dlZd dlm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d	Zdd
ZddZddZddZddZy)    )annotations)PathN)main)create_crypto_asset)backup_runtime_dbrestore_runtime_dbverify_backup)connect)apply_migrationsc                    t        |       }t        |       t        |d| |j                         d d d|        |j	                          y )Nz
Synthetic    z
synthetic-	coin_namesymbolcoingecko_id)r
   r   r   upperclose)db_pathmarkerconns      !tests/unit/test_runtime_backup.py_seed_dbr      sK    7DT*VH(=fllnUWVWFXistzs{g|}JJL    c                   | dz  }|j                          | dz  }|dz  dz  }|dz  }t        |       t        |||d      }|j                  j	                         sJ |j
                  j	                         sJ |j                  j                  |j                         k(  sJ |j                  j                         j                  |j                               rJ t        |j                        dk(  sJ y )	Nreporuntimedatafinance.sqlite3backups20260101T000000Z)r   backups_dir	repo_root	timestamp@   )mkdirr   r   backup_fileexistschecksum_fileparentresolveis_relative_tolensha256)tmp_pathr   r   dbr   results         r   2test_backup_runtime_db_creates_backup_outside_repor1      s    fDJJL"G	6	-	-B	!GRLrw$ZlmF$$&&&&&((($$(9999!!))+::4<<>JJJv}}###r   c                   | dz  }|j                          | dz  }|dz  dz  }t        |       t        ||dz  |      }t        |j                  |      }|j
                  du sJ |j                  du sJ |j                  j                  |j                  j                         d	z          t        |j                  |      }|j                  d
u sJ y )Nr   r   r   r   r   r   r!   r"   )r&   r"   Ts   tamperF)	r%   r   r   r	   r&   r'   checksum_okwrite_bytes
read_bytes)r.   r   r   r/   backupverifiedtampereds          r   "test_verify_backup_checks_checksumr:   &   s    fDJJL"G	6	-	-BRLrw7JVZ[F););tLH??d"""4'''
""6#5#5#@#@#BY#NO););tLH5(((r   c                d   | dz  }|j                          | dz  }|dz  dz  }t        |d       t        ||dz  |      }t        |      }|j	                  d	       |j                          |j                          t        j                  t              5  t        |j                  ||d
       d d d        t        |j                  ||d      }|j                  du sJ t        |      }|j	                  d      j                         d   }|j                          |dk(  sJ y # 1 sw Y   wxY w)Nr   r   r   r   beforer   r   r3   DELETE FROM crypto_assetsFr&   r   r"   yesT'SELECT COUNT(*) AS n FROM crypto_assetsn   )r%   r   r   r
   executecommitr   pytestraisesPermissionErrorr   r&   r8   fetchone)r.   r   r   r/   r7   r   r0   counts           r   9test_restore_runtime_db_requires_yes_and_restores_test_dbrK   7   s   fDJJL"G	6	-	-BR!rw7JVZ[F2;DLL,-KKMJJL		' bv'9'92QU[`ab  F,>,>VZ`deF??d"""2;DLLBCLLNsSEJJLA::b bs   D&&D/c                h   | dz  }|j                          | dz  }|dz  dz  }|dz  dz  }t        |d       t        ||d	z  |
      }t        |      }t	        |ddd       |j                          t        |j                  ||d      }|j                  |j                         k(  sJ t        |      }t        |      }	|j                  d      j                         d   }
|	j                  d      j                         d   }|j                          |	j                          |
dk(  sJ |dk(  sJ y )Nr   r   r   r   zrestore-testszfinance-restored.sqlite3prodr=   r   r3   zSynthetic After BackupAFTERzsynthetic-afterr   Tr?   rA   rB      rC   )r%   r   r   r
   r   r   r   r&   restored_tor*   rD   rI   )r.   r   r   productive_db
restore_dbr7   r   r0   	prod_connrestored_conn
prod_countrestored_counts               r   Etest_restore_backup_to_separate_test_db_does_not_modify_productive_dbrW   O   s9   fDJJL"Gf$'88M?*-GGJ]6*}'IBUaefF=!D(@_pqJJLF,>,>
^bhlmF!3!3!5555&IJ'M""#LMVVXY\]J"**+TU^^`adeNOO??Qr   c                
   |dz  }| j                  dt        |             |dz  dz  }t        |       t        dg      }|j	                         j
                  }|dk(  sJ d|v sJ t        d |j                         D              }t        |d	z        |v sJ t        d
d|g      }|j	                         j
                  }	|dk(  sJ d|	v sJ t        |      }
|
j                  d       |
j                          |
j                          t        dd|dg      }|j	                         j
                  }|dk(  sJ d|v sJ t        |      }
|
j                  d      j                         d   }|
j                          |dk(  sJ y )Nr   JARVIS_FINANCE_RUNTIME_DIRr   r   zbackup-runtime-dbr   RUNTIME_DB_BACKUPc              3  j   K   | ]+  }|j                  d       s|j                  dd      d    - yw)zbackup_file==rC   N)
startswithsplit).0parts     r   	<genexpr>z5test_backup_cli_verify_and_restore.<locals>.<genexpr>s   s,     ot_mOntzz#q)!,os   33r   zverify-backupz--filezchecksum_ok=truer>   zrestore-runtime-dbz--fromz--yesRUNTIME_DB_RESTORErA   rB   rC   )setenvstrr   r   
readouterroutnextr^   r
   rD   rE   r   rI   )monkeypatchr.   capsysr   r/   	backup_rc
backup_outr&   	verify_rc
verify_outr   
restore_rcrestore_outrJ   s                 r   "test_backup_cli_verify_and_restorerp   i   s   "G3S\B	6	-	-BRL)*+I""$((J>>*,,,o9I9I9KooKw"#{222ox=>I""$((J>>+++2;DLL,-KKMJJL+X{GLMJ##%))K??;...2;DLLBCLLNsSEJJLA::r   )demo)r   r   r   rd   returnNone)r.   r   rr   rs   )
__future__r   pathlibr   rF   jarvis_finance.cli.mainr   jarvis_finance.crypto.assetsr   jarvis_finance.runtime.backupr   r   r	   jarvis_finance.storage.databaser
   !jarvis_finance.storage.migrationsr   r   r1   r:   rK   rW   rp    r   r   <module>r|      s>    "   ( < ^ ^ 3 >$")"04r   