130 lines
3.9 KiB
Python
130 lines
3.9 KiB
Python
import pytest
|
|
from sqlalchemy import create_engine
|
|
from sqlalchemy.orm import sessionmaker
|
|
from alembic.config import Config
|
|
from alembic import command
|
|
|
|
from kawai_focus.schemas import TimerModel
|
|
from kawai_focus.database.session import db
|
|
from kawai_focus.database.models import Timer, Base
|
|
from kawai_focus.database.cruds import list_timers, get_timer, new_timer, update_timer, del_timer
|
|
|
|
|
|
@pytest.fixture(scope='function')
|
|
def test_db() -> sessionmaker:
|
|
"""Создание тестовой базы данных и сессии"""
|
|
|
|
engine = create_engine('sqlite:///:memory:') # Временная БД
|
|
Base.metadata.create_all(engine)
|
|
alembic_cfg = Config('./alembic.ini')
|
|
alembic_cfg.set_main_option('script_location', './kawai_focus/database/alembic')
|
|
command.upgrade(alembic_cfg, 'head')
|
|
|
|
session = sessionmaker(bind=engine)
|
|
db._session_factory = session
|
|
|
|
return db._session_factory
|
|
|
|
|
|
def test_new_timer(test_db: sessionmaker):
|
|
"""Тест crud создания нового таймера"""
|
|
|
|
timer_data = TimerModel(title='test_timer_1', pomodoro_time=60, break_long_time=30, break_time=6,count_pomodoro=5)
|
|
|
|
with test_db() as session:
|
|
timer = new_timer(data=timer_data)
|
|
|
|
assert timer.title == 'test_timer_1'
|
|
assert timer.pomodoro_time == 60
|
|
assert timer.break_long_time == 30
|
|
assert timer.break_time == 6
|
|
assert timer.count_pomodoro ==5
|
|
|
|
|
|
def test_get_timer(test_db: sessionmaker):
|
|
"""Тест crud получения таймера по id"""
|
|
|
|
timer_data = TimerModel(title='test_timer_1', pomodoro_time=60, break_long_time=30, break_time=6,count_pomodoro=5)
|
|
|
|
with test_db() as session:
|
|
new_timer(data=timer_data)
|
|
timer = get_timer(timer_id=1)
|
|
|
|
assert timer
|
|
assert timer.title == 'test_timer_1'
|
|
assert timer.pomodoro_time == 60
|
|
assert timer.break_long_time == 30
|
|
assert timer.break_time == 6
|
|
assert timer.count_pomodoro ==5
|
|
|
|
|
|
def test_update_timer(test_db: sessionmaker):
|
|
"""Тест crud обновления таймера"""
|
|
|
|
timer_data = TimerModel(title='test_timer_1', pomodoro_time=60, break_long_time=30, break_time=6,count_pomodoro=5)
|
|
|
|
with test_db() as session:
|
|
new_timer(data=timer_data)
|
|
new_timer_data = TimerModel(
|
|
id=1,
|
|
title='test_timer_2',
|
|
pomodoro_time=55,
|
|
break_long_time=25,
|
|
break_time=5,
|
|
count_pomodoro=6
|
|
)
|
|
|
|
timer = update_timer(data=new_timer_data)
|
|
|
|
assert timer
|
|
assert timer.title == 'test_timer_2'
|
|
assert timer.pomodoro_time == 55
|
|
assert timer.break_long_time == 25
|
|
assert timer.break_time == 5
|
|
assert timer.count_pomodoro == 6
|
|
|
|
|
|
def test_del_timer(test_db: sessionmaker):
|
|
"""Тест crud удаления таймера"""
|
|
|
|
timer_data = TimerModel(title='test_timer_1', pomodoro_time=60, break_long_time=30, break_time=6,count_pomodoro=5)
|
|
|
|
with test_db() as session:
|
|
new_timer(data=timer_data)
|
|
|
|
del_timer(timer_id=1)
|
|
timer = session.query(Timer).filter_by(title='test_timer_1').first()
|
|
|
|
assert timer is None
|
|
|
|
|
|
def test_list_timers(test_db: sessionmaker):
|
|
"""Тест crud получения списка таймеров"""
|
|
|
|
timer_data_1 = TimerModel(
|
|
title='test_timer_1',
|
|
pomodoro_time=60,
|
|
break_long_time=30,
|
|
break_time=6,
|
|
count_pomodoro=5
|
|
)
|
|
timer_data_2 = TimerModel(
|
|
title='test_timer_2',
|
|
pomodoro_time=55,
|
|
break_long_time=25,
|
|
break_time=5,
|
|
count_pomodoro=6
|
|
)
|
|
|
|
with test_db() as session:
|
|
new_timer(data=timer_data_1)
|
|
new_timer(data=timer_data_2)
|
|
|
|
timers = list_timers()
|
|
|
|
assert timers
|
|
assert timers[0].id == 1
|
|
assert timers[0].title == 'test_timer_1'
|
|
assert timers[1].id == 2
|
|
assert timers[1].title == 'test_timer_2'
|