mirror of
https://github.com/EDeev/tablo.git
synced 2026-10-07 20:49:31 +03:00
24 теста pytest на настоящей базе (адрес — TEST_DATABASE_URL): владелец, посторонний, редактор и ссылка на просмотр; экспорт по id только для владельца и редакторов; регистрация и вход, защита next; периоды через Новый год, сортировка времени, сборка дня и слияние расписаний. SQLAlchemy и alembic закреплены по продакшену: SQLAlchemy 2.1 по умолчанию требует другой драйвер PostgreSQL (psycopg 3).
50 lines
1.9 KiB
Python
50 lines
1.9 KiB
Python
from datetime import date
|
||
|
||
from app.services.merge import merge_schedules_data
|
||
from app.services.schedule_helpers import _parse_date_range, _time_sort_key, build_day_view, get_all_subjects
|
||
from tests.conftest import SAMPLE_DATA
|
||
|
||
|
||
def test_period_across_new_year_ends_next_year():
|
||
start, end = _parse_date_range('01.09-03.01')
|
||
assert start < end
|
||
assert end.year == start.year + 1
|
||
|
||
|
||
def test_period_within_year():
|
||
start, end = _parse_date_range('01.02-31.05')
|
||
assert (start.month, end.month) == (2, 5)
|
||
assert start.year == end.year
|
||
|
||
|
||
def test_whole_period_and_garbage():
|
||
assert _parse_date_range('Весь период') == (None, None)
|
||
assert _parse_date_range('ерунда') == (None, None)
|
||
|
||
|
||
def test_time_sort_key_handles_missing_leading_zero():
|
||
times = ['10:40-12:10', '9:00-10:30', None, '08:00-09:30']
|
||
assert sorted(times, key=_time_sort_key) == ['08:00-09:30', '9:00-10:30', '10:40-12:10', None]
|
||
|
||
|
||
def test_day_view_is_sorted_by_time():
|
||
monday = date(date.today().year, 9, 1)
|
||
while monday.weekday() != 0:
|
||
monday = monday.replace(day=monday.day + 1)
|
||
groups = build_day_view(SAMPLE_DATA, monday)
|
||
times = [g['time'] if isinstance(g, dict) else g[0]['time'] for g in groups]
|
||
assert times == ['9:00-10:30', '10:40-12:10']
|
||
|
||
|
||
def test_merge_combines_slots_without_duplicates():
|
||
other = [{'subject': 'Базы данных', 'types': {'Практика': {'color': 'green', 'dates': {
|
||
'01.09-31.12': [['среда', '12:20-13:50', 'АВ-210', 'Петров П.П.']]}}}}]
|
||
merged = merge_schedules_data([SAMPLE_DATA, SAMPLE_DATA, other])
|
||
assert len(merged) == 1
|
||
types = merged[0]['types']
|
||
assert set(types) == {'Лекция', 'Практика'}
|
||
assert len(types['Лекция']['dates']['01.09-31.12']) == 2
|
||
|
||
|
||
def test_get_all_subjects():
|
||
assert 'Базы данных' in get_all_subjects(SAMPLE_DATA)
|