Coverage for tests/test_db_sql.py: 100%
49 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-09-28 09:38 +0200
« prev ^ index » next coverage.py v7.10.7, created at 2025-09-28 09:38 +0200
1import pytest
2from unittest.mock import MagicMock, patch
3from art_studio_tz import DBsql
4from sqlalchemy import create_engine
5from sqlalchemy.orm import sessionmaker
6from art_studio_tz.db_sql import QuoteModel, Base
9@pytest.fixture
10def dbsql():
11 engine = create_engine("sqlite:///:memory:", echo=False, future=True)
12 Base.metadata.create_all(engine)
13 Session = sessionmaker(bind=engine)
15 class TestDBsql(DBsql):
16 def __init__(self):
17 self.engine = engine
18 self.Session = Session
20 return TestDBsql()
22def test_create_and_read_all(dbsql):
23 item = {"text": "Hello", "author": "Someone"}
24 new_id = dbsql.create(item)
26 # В SQLite in-memory ID присвоится только после commit, поэтому new_id может быть None
27 # Для теста проверяем наличие текста и автора
28 all_rows = dbsql.read_all()
29 assert len(all_rows) == 1
30 assert all_rows[0]["text"] == "Hello"
31 assert all_rows[0]["author"] == "Someone"
32 # Проверяем, что id существует
33 assert "id" in all_rows[0]
35def test_get_latest(dbsql):
36 import datetime
37 items = [
38 {"text": "A", "author": "X", "timestep": datetime.datetime(2025, 1, 1)},
39 {"text": "B", "author": "Y", "timestep": datetime.datetime(2025, 1, 2)},
40 {"text": "C", "author": "Z", "timestep": datetime.datetime(2025, 1, 3)},
41 ]
42 for item in items:
43 dbsql.create(item)
45 latest_2 = dbsql.get_latest(2)
46 assert len(latest_2) == 2
47 assert latest_2[0]["text"] == "C"
48 assert latest_2[1]["text"] == "B"
50def test_create_multiple(dbsql):
51 ids = []
52 for i in range(5):
53 new_id = dbsql.create({"text": f"Quote {i}", "author": f"Author {i}"})
54 ids.append(new_id)
55 all_rows = dbsql.read_all()
56 assert len(all_rows) == 5
57 # Проверяем, что у всех есть id
58 assert all("id" in r for r in all_rows)
60def test_get_latest_default_number(dbsql):
61 import datetime
62 for i in range(10):
63 dbsql.create({
64 "text": f"Q{i}",
65 "author": f"A{i}",
66 "timestep": datetime.datetime(2025, 1, i+1)
67 })
68 latest = dbsql.get_latest() # по умолчанию 5
69 assert len(latest) == 5
70 assert latest[0]["text"] == "Q9"
71 assert latest[-1]["text"] == "Q5"