e2e_seed
E2E Test Database Seed
Процесс создания seed-файла базы данных для E2E тестов Telegram публикации.
Предварительные требования
- Telegram API credentials в
.envфайле:TELEGRAM_API_ID=12345678 TELEGRAM_API_HASH=abc123... - Тестовый бот (создан через @BotFather)
- 4 тестовых канала в Telegram (см. telegram_e2e.md)
Процесс создания seed
1. Создать чистую базу и запустить сервер
rm -f e2e_test.db
go run ./cmd/server -db-file=e2e_test.db -dev
2. Добавить Telegram аккаунт
В админке: Telegram Accounts → Add Account → пройти авторизацию
3. Добавить бота
В админке: Telegram Bots → Add Bot → ввести токен
4. Перезапустить сервер
Чтобы бот подключился и увидел каналы. Дождаться пока появятся в списке чатов.
5. Создать publish tags
sqlite3 e2e_test.db "insert into telegram_publish_tags (label) values ('test_channel'), ('test_premium_channel')"
6. Связать теги с каналами
В админке:
Для бота:
- Telegram Bots → выбрать бота → Chats → выбрать тестовый канал
- Publish Tags → добавить
test_channel
Для аккаунта:
- Telegram Accounts → выбрать аккаунт → Dialogs → выбрать тестовый канал
- Publish Tags → добавить
test_channelиtest_premium_channel
7. Остановить сервер и сделать дамп
sqlite3 e2e_test.db .dump > testdata/e2e_seed.sql
8. Заменить credentials на placeholders
В файле testdata/e2e_seed.sql заменить:
-- telegram_accounts: заменить phone, session_data, display_name на placeholders
-- Найти строку вида:
INSERT INTO telegram_accounts VALUES(1,'+79001234567',X'...', 'Name', ...);
-- Заменить на:
INSERT INTO telegram_accounts VALUES(1,'PHONE_PLACEHOLDER',X'00','NAME_PLACEHOLDER',0,1,'2025-01-01 00:00:00',1);
-- tg_bots: заменить token, name на placeholders
-- Найти строку вида:
INSERT INTO tg_bots VALUES(1,'123456:ABC...',1,'real_bot_name',...);
-- Заменить на:
INSERT INTO tg_bots VALUES(1,'TOKEN_PLACEHOLDER',1,'BOT_PLACEHOLDER','',1,'2025-01-01 00:00:00',1);
Использование seed в тестах
# 1. Создать базу из seed
sqlite3 test.db < testdata/e2e_seed.sql
# 2. Подставить реальные credentials (если есть legacy .tg_e2e_session файл)
go run ./cmd/tge2e -db test.db patch-db
# 3. Запустить сервер
go run ./cmd/server -db-file=test.db -dev
tge2e команды
Утилита tge2e работает с базой данных напрямую (флаг -db обязателен).
# Извлечь credentials из базы в .tg_e2e_session
# (сессия, bot token, найденные каналы)
go run ./cmd/tge2e -db test.db extract
# Записать credentials из .tg_e2e_session в базу
# (обратная операция к extract)
go run ./cmd/tge2e -db test.db patch-db
# Проверить credentials в базе и подключение к Telegram
go run ./cmd/tge2e -db test.db verify
# Очистить тестовые каналы от сообщений
go run ./cmd/tge2e -db test.db cleanup
# Сохранить текущее состояние каналов как эталон
go run ./cmd/tge2e -db test.db dump
# Сравнить текущее состояние каналов с эталоном
go run ./cmd/tge2e -db test.db check
Снапшоты сохраняются в testdata/telegram/snapshots/ в формате JSON.
Структура данных в seed
| Таблица | Данные |
|---|---|
admins |
user_id=1 (создаётся автоматически) |
telegram_accounts |
id=1, placeholder credentials |
tg_bots |
id=1, placeholder token |
telegram_publish_tags |
test_channel, test_premium_channel |
telegram_publish_chats |
связь бот-канала с test_channel |
telegram_publish_account_chats |
связь аккаунт-канала с тегами |
Устаревшие ID каналов
Seed файл содержит захардкоженные Telegram chat ID в таблицах:
telegram_publish_account_chatstelegram_publish_account_instant_chats
Иногда Telegram перестаёт находить каналы по старым ID (даже если они существуют). При запуске тестов появится ошибка:
chat with ID XXXXXXX not found in dialogs
Решение: пересоздать каналы с теми же именами и обновить ID в testdata/e2e_seed.sql. Актуальные ID можно получить командой:
go run ./cmd/tge2e -db test.db verify
Вывод покажет текущие ID каналов:
Looking for channel: Trip2G Test Bot... OK (ID=3591599765)
Looking for channel: Trip2G Test Bot Instant... OK (ID=3576908503)
Looking for channel: Trip2G Test Account... OK (ID=3611189458)
Looking for channel: Trip2G Test Account Instant... OK (ID=3513155321)
Таблицы которые нужно обновить:
tg_bot_chats- ID с префиксом-100(например-1003591599765)tg_user_states- тоже с префиксом-100telegram_publish_account_chats- ID без префиксаtelegram_publish_account_instant_chats- ID без префикса