
    aj%                        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dS )    )annotations)PathN)main)create_crypto_asset)backup_runtime_dbrestore_runtime_dbverify_backup)connect)apply_migrationsdemodb_pathr   markerstrreturnNonec                    t          |           }t          |           t          |d| |                                d d         d|            |                                 d S )Nz
Synthetic    z
synthetic-	coin_namesymbolcoingecko_id)r
   r   r   upperclose)r   r   conns      !tests/unit/test_runtime_backup.py_seed_dbr      sl    7DT(=V(=(=fllnnUWVWUWFXg|tzg|g|}}}}JJLLLLL    tmp_pathc                   | dz  }|                                  | dz  }|dz  dz  }|dz  }t          |           t          |||d          }|j                                        sJ |j                                        sJ |j        j        |                                k    sJ |j                                                            |                                          rJ t          |j
                  dk    sJ d S )	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)r   r    r!   dbr$   results         r   2test_backup_runtime_db_creates_backup_outside_repor5      s   fDJJLLL"G	6	-	-B	!GRLLLrw$ZlmmmF$$&&&&&&&((((($(9(99999!))++::4<<>>JJJJJv}######r   c                   | dz  }|                                  | dz  }|dz  dz  }t          |           t          ||dz  |          }t          |j        |          }|j        du sJ |j        du sJ |j                            |j                                        d	z              t          |j        |          }|j        d
u sJ d S )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!   r3   backupverifiedtampereds          r   "test_verify_backup_checks_checksumr>   &   s    fDJJLLL"G	6	-	-BRLLLrw7JVZ[[[F);tLLLH?d""""4''''
""6#5#@#@#B#BY#NOOO);tLLLH5((((((r   c                   | dz  }|                                  | dz  }|dz  dz  }t          |d           t          ||dz  |          }t          |          }|                    d	           |                                 |                                 t          j        t                    5  t          |j        ||d
           d d d            n# 1 swxY w Y   t          |j        ||d          }|j        du sJ t          |          }|                    d                                          d         }|                                 |dk    sJ d S )Nr    r!   r"   r#   beforer   r$   r7   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+   r<   fetchone)r   r    r!   r3   r;   r   r4   counts           r   9test_restore_runtime_db_requires_yes_and_restores_test_dbrO   7   s   fDJJLLL"G	6	-	-BR!!!!rw7JVZ[[[F2;;DLL,---KKMMMJJLLL		'	' b bv'92QU[`aaaab b b b b b b b b b b b b b b  F,>VZ`deeeF?d""""2;;DLLBCCLLNNsSEJJLLLA::::::s   2CCCc                   | dz  }|                                  | dz  }|dz  dz  }|dz  dz  }t          |d           t          ||d	z  |
          }t          |          }t	          |ddd           |                                 t          |j        ||d          }|j        |	                                k    sJ t          |          }t          |          }	|
                    d                                          d         }
|	
                    d                                          d         }|                                 |	                                 |
dk    sJ |dk    sJ d S )Nr    r!   r"   r#   zrestore-testszfinance-restored.sqlite3prodrA   r$   r7   zSynthetic After BackupAFTERzsynthetic-afterr   TrC   rE   rF      rG   )r*   r   r   r
   r   r   r   r+   restored_tor/   rH   rM   )r   r    r!   productive_db
restore_dbr;   r   r4   	prod_connrestored_conn
prod_countrestored_counts               r   Etest_restore_backup_to_separate_test_db_does_not_modify_productive_dbr[   O   s   fDJJLLL"Gf$'88M?*-GGJ]6****}'IBUaefffF=!!D(@_pqqqqJJLLLF,>
^bhlmmmF!3!3!5!55555&&IJ''M""#LMMVVXXY\]J"**+TUU^^``adeNOO????Qr   c                   |dz  }|                      dt          |                     |dz  dz  }t          |           t          dg          }|                                j        }|dk    sJ d|v sJ t          d |                                D                       }t          |d	z            |v sJ t          d
d|g          }|                                j        }	|dk    sJ d|	v sJ t          |          }
|
	                    d           |

                                 |
                                 t          dd|dg          }|                                j        }|dk    sJ d|v sJ t          |          }
|
	                    d                                          d         }|
                                 |dk    sJ d S )Nr!   JARVIS_FINANCE_RUNTIME_DIRr"   r#   zbackup-runtime-dbr   RUNTIME_DB_BACKUPc              3  x   K   | ]5}|                     d           |                    dd          d         V  6dS )zbackup_file==rG   N)
startswithsplit).0parts     r   	<genexpr>z5test_backup_cli_verify_and_restore.<locals>.<genexpr>s   sG      oot_mOnOnotzz#q))!,oooooor   r$   zverify-backupz--filezchecksum_ok=truerB   zrestore-runtime-dbz--fromz--yesRUNTIME_DB_RESTORErE   rF   rG   )setenvr   r   r   
readouterroutnextrb   r
   rH   rI   r   rM   )monkeypatchr   capsysr!   r3   	backup_rc
backup_outr+   	verify_rc
verify_outr   
restore_rcrestore_outrN   s                 r   "test_backup_cli_verify_and_restorers   i   s   "G3S\\BBB	6	-	-BRLLL)*++I""$$(J>>>>*,,,,oo9I9I9K9KoooooKw"##{2222ox=>>I""$$(J>>>>++++2;;DLL,---KKMMMJJLLL+X{GLMMJ##%%)K????;....2;;DLLBCCLLNNsSEJJLLLA::::::r   )r   )r   r   r   r   r   r   )r   r   r   r   )
__future__r   pathlibr   rJ   jarvis_finance.cli.mainr   jarvis_finance.crypto.assetsr   jarvis_finance.runtime.backupr   r   r	   jarvis_finance.storage.databaser
   !jarvis_finance.storage.migrationsr   r   r5   r>   rO   r[   rs    r   r   <module>r|      s   " " " " " "        ( ( ( ( ( ( < < < < < < ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ 3 3 3 3 3 3 > > > > > >    $ $ $ $") ) ) )"   0   4     r   