| """Тесты на SchemaRetriever.""" |
|
|
| import sqlite3 |
| from pathlib import Path |
|
|
| import pytest |
|
|
| from src.data.schema import SchemaRetriever |
|
|
|
|
| @pytest.fixture |
| def fake_databases_dir(tmp_path: Path) -> Path: |
| """Создаёт структуру databases/uni/uni.sqlite с двумя таблицами.""" |
| db_id = "uni" |
| (tmp_path / db_id).mkdir() |
| db_path = tmp_path / db_id / f"{db_id}.sqlite" |
| conn = sqlite3.connect(db_path) |
| conn.execute("CREATE TABLE students (id INTEGER PRIMARY KEY, name TEXT)") |
| conn.execute("CREATE TABLE groups (id INTEGER PRIMARY KEY, faculty TEXT)") |
| conn.execute("INSERT INTO students VALUES (1, 'Иван')") |
| conn.execute("INSERT INTO groups VALUES (10, 'ПИ')") |
| conn.commit() |
| conn.close() |
| return tmp_path |
|
|
|
|
| def test_list_databases(fake_databases_dir: Path): |
| r = SchemaRetriever(fake_databases_dir) |
| assert r.list_databases() == ["uni"] |
|
|
|
|
| def test_get_tables(fake_databases_dir: Path): |
| r = SchemaRetriever(fake_databases_dir) |
| tables = r.get_tables("uni") |
| names = sorted(t.name for t in tables) |
| assert names == ["groups", "students"] |
|
|
|
|
| def test_render_schema_contains_create(fake_databases_dir: Path): |
| r = SchemaRetriever(fake_databases_dir) |
| text = r.render_schema("uni") |
| assert "CREATE TABLE" in text |
| assert "students" in text |
| assert "groups" in text |
|
|