o
    g                     @   sF  d dl Z d dlmZ d dlmZmZmZ d dlm  m	Z	 d dl
mZ d dlmZmZ d dl mZ d dlZdee	jddf fdd	Zdeeg ee	jddf f  fd
dZe jde ddedee	jddf fddZde	jddfddZde	jddfddZde	jddfddZde	jddfddZde jde	jddfddZdS )    N)files)	GeneratorListCallable)SqliteDB)SystemSettings)FixtureRequestreturnc                  c   s(    t ttddd} |   | V  dS )zFixture generator for sqlite DBnoneT)
migrationsallow_resetN)r   r   r   startdb r   W/var/www/visachat/venv/lib/python3.10/site-packages/chromadb/test/db/test_migrations.pysqlite   s   
r   c                   C   s   t gS N)r   r   r   r   r   db_fixtures   s   r   module)scopeparamsrequestc                 c   s    t |  V  d S r   )nextparam)r   r   r   r   r      s   r   c              	   C   sR   t t |   td1 sw   Y  W d    d S 1 s"w   Y  d S )Nztest exception)pytestraises	Exceptiontxr   r   r   r   test_exception_propagation#   s
   
"r    c                 C   sd   |    |   |   |  }|d }t|dks J W d    d S 1 s+w   Y  d S )NSELECT * FROM migrationsr   )reset_statesetup_migrationsr   executefetchalllen)r   cursorrowsr   r   r   test_setup_migrations)   s   
"r)   c              	   C   s  |    td}| |}t||  }t||}||ks!J |  }|d	 }t
|dks5J W d    n1 s?w   Y  |  }|d d D ]}| || qOW d    n1 sbw   Y  | |}t||}t
|dkszJ |d d dksJ |  K}t
|d	 dksJ t
|d		 dksJ t
|d
	 dksJ tt |d	  W d    n1 sw   Y  W d    n1 sw   Y  |  }|D ]}| || qW d    n1 sw   Y  | |}t||}t
|dksJ |  %}t
|d	 dks!J t
|d	 dks/J W d    d S 1 s;w   Y  d S )Nchromadb.test.db.migrationsr!   r      version      zSELECT * FROM table1zSELECT * FROM table2zSELECT * FROM table3)initialize_migrationsr   db_migrationsr   find_migrationsmigration_scopeverify_migration_sequencer   r$   r%   r&   apply_migrationr   r   r   )r   dirr1   source_migrationsunapplied_migrationscurr(   mr   r   r   test_migrations3   s\   







$r;   c           	      C   sD  |    |   td}t||  }| |}t||}|  }|D ]}| 	|| q&W d    n1 s9w   Y  | |}t||}t
|dksQJ t|}d|d d< ttj t|| W d    n1 ssw   Y  t|}d|d d< ttj t|| W d    d S 1 sw   Y  d S )Nr*   r   r/   r-   badhashhash)r"   r#   r   r   r2   r3   r1   r4   r   r5   r&   copydeepcopyr   r   InconsistentVersionErrorInconsistentHashError)	r   r6   r7   r1   r8   r9   r:   inconsistent_version_migrationsinconsistent_hash_migrationsr   r   r   test_tampered_migrationg   s@   




"rD   monkeypatchc                    s   |   td | |d fdd | rJ ttj |  W d    n1 s.w   Y  |	  | s=J ttj
 |  W d    n1 sRw   Y  |  |  d S )Nr*   migration_dirsc                      s    gS r   r   r   r6   r   r   <lambda>   s    z%test_initialization.<locals>.<lambda>)r"   r   setattrmigrations_initializedr   r   r   UninitializedMigrationsErrorvalidate_migrationsr#   UnappliedMigrationsErrorapply_migrations)rE   r   r   rG   r   test_initialization   s   

rO   )r   importlib_resourcesr   typingr   r   r   chromadb.db.migrationsr   r   chromadb.db.impl.sqliter   chromadb.configr   r   r	   r>   MigratableDBr   r   fixturer    r)   r;   rD   MonkeyPatchrO   r   r   r   r   <module>   s.    & 
4)