feat(api, web): тест Telegram из формы, подсказки ошибок API и UX настроек
Docker / build (push) Has been cancelled

Тест отправки использует значения формы без предварительного сохранения; пустой токен при сохранении не затирает сохранённый. Добавлены подсказки по частым ошибкам Telegram API и колонка ошибок в журнале уведомлений.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Denozordec
2026-06-29 00:54:51 +07:00
co-authored by Cursor
parent 7f91bc3624
commit 05e7bf829e
13 changed files with 319 additions and 72 deletions
@@ -0,0 +1,33 @@
import { beforeEach, describe, expect, it } from 'vitest'
import { settingsRepository } from './settings.js'
import { resetTestDb } from '../test-setup.js'
describe('settingsRepository', () => {
beforeEach(() => {
resetTestDb()
})
it('preserves telegram token on update when token empty', () => {
settingsRepository.upsert('settings-main', {
telegramBotToken: 'secret-token',
telegramChatId: '-100123',
})
const updated = settingsRepository.upsert('settings-main', {
telegramBotToken: '',
syncIntervalMinutes: 30,
})
expect(updated.telegramBotTokenSet).toBe(true)
expect(settingsRepository.getRow('settings-main')?.telegramBotToken).toBe('secret-token')
expect(updated.syncIntervalMinutes).toBe(30)
})
it('replaces telegram token when new value provided', () => {
settingsRepository.upsert('settings-main', {
telegramBotToken: 'old-token',
})
settingsRepository.upsert('settings-main', {
telegramBotToken: 'new-token',
})
expect(settingsRepository.getRow('settings-main')?.telegramBotToken).toBe('new-token')
})
})
+3 -1
View File
@@ -95,7 +95,9 @@ function buildValues(id: string, existing: Row | undefined, r: SettingsInput) {
? Math.max(60, Number(r.syncTariffsIntervalMinutes) || 1440)
: existing?.syncTariffsIntervalMinutes ?? 1440,
telegramBotToken:
r.telegramBotToken !== undefined ? r.telegramBotToken || '' : existing?.telegramBotToken ?? '',
r.telegramBotToken !== undefined && String(r.telegramBotToken || '').trim() !== ''
? r.telegramBotToken
: existing?.telegramBotToken ?? '',
telegramChatId:
r.telegramChatId !== undefined ? r.telegramChatId || '' : existing?.telegramChatId ?? '',
telegramMessageThreadId: