Files
kawai-focus/kawai_focus/tests/cruds_tests.py

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'