food-market/tests/conftest.py

39 lines
1.3 KiB
Python
Raw Permalink Normal View History

from datetime import date, timedelta
import pytest
from app import journal
from app.storage import Vault
@pytest.fixture
def vault(tmp_path):
Отдельный репозиторий для базы, фасовки товара, ввод истории Три правки по замечаниям. 1. База и код разъехались по разным репозиториям. Автокоммит и раньше трогал только vault.fmdb, но лежал он в той же ветке, что и исходники, поэтому пуш тащил всю историю программы. Теперь data/ — самостоятельный клон food-records со своим .git, а исходники его игнорируют целиком. При первом запуске приложение встаёт на уже существующую историю сервера, а не заводит параллельную. 2. Фасовки товара. Пачка печенья 10 шт за 200 ₽ и та же печенька поштучно за 30 ₽ — один товар с двумя фасовками. Остатки, себестоимость и FIFO считаются в базовых единицах, поэтому поштучные продажи вычитаются из купленных пачек. Размер фасовки хранится в документе слепком. Миграция схемы 1→2 не меняет поведение уже заведённых данных. 3. Быстрый ввод продаж за период: выбор диапазона дат, строка таблицы — отдельная продажа, ввод с клавиатуры, запись всех разом. Незнакомое имя заводится как контрагент, повтор периода подсвечивается. Тесты больше не имеют настроенного remote, чтобы не ходить в сеть. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 01:25:39 +07:00
v = Vault.create(tmp_path / "vault.fmdb", "pw")
# По умолчанию адрес репозитория данных уже прописан, а тесты не должны
# ходить в сеть и уж тем более трогать настоящий репозиторий. Проверки
# синхронизации работают против локального bare-репо в test_gitsync.
v.doc.settings.git.remote_url = ""
v.doc.settings.git.enabled = False
v.save(force=True)
return v
@pytest.fixture
def buns(vault):
"""Три булки из примера пользователя, с фиксированными ценами поставщика."""
return {
"повидло": journal.create_product(vault, "Булка с повидлом", cost_price=30, retail_price=50),
"мак": journal.create_product(vault, "Булка с маком", cost_price=20, retail_price=35),
"корица": journal.create_product(vault, "Булка с корицей", cost_price=25, retail_price=40),
}
@pytest.fixture
def today():
return date.today()
@pytest.fixture
def in_two_weeks(today):
return today + timedelta(days=14)