2026-08-22 21:29:53 +07:00
|
|
|
|
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
|
2026-08-22 21:29:53 +07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@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)
|