From 6912008a2c1716e4d9165e868bae87dc06699d58 Mon Sep 17 00:00:00 2001 From: Kirill Date: Mon, 18 May 2026 11:58:30 +0500 Subject: [PATCH] test: add notification preferences tests --- server/.env.example | 3 +++ .../notifications/__tests__/preferences.test.js | 16 +++++++++------- server/vitest.config.js | 17 +++++++++++++++++ 3 files changed, 29 insertions(+), 7 deletions(-) create mode 100644 server/vitest.config.js diff --git a/server/.env.example b/server/.env.example index 5b15d0a..81fea73 100644 --- a/server/.env.example +++ b/server/.env.example @@ -28,3 +28,6 @@ VK_CLIENT_SECRET= # Yandex OAuth: redirect URI = SERVER_PUBLIC_URL + /api/auth/oauth/yandex/callback YANDEX_CLIENT_ID= YANDEX_CLIENT_SECRET= + +# Telegram Bot (оповещения админа) +TELEGRAM_BOT_TOKEN= diff --git a/server/src/lib/notifications/__tests__/preferences.test.js b/server/src/lib/notifications/__tests__/preferences.test.js index 0144a6d..6986fe4 100644 --- a/server/src/lib/notifications/__tests__/preferences.test.js +++ b/server/src/lib/notifications/__tests__/preferences.test.js @@ -6,7 +6,9 @@ import { resolveAuthCodeTargets, ensureUserNotificationPreference, } from '../preferences.js' -import { NOTIFICATION_EVENTS } from '../../../../shared/constants/notification-events.js' + +const ORDER_CREATED = 'order:created' +const AUTH_CODE_REQUESTED = 'auth:codeRequested' describe('preferences', () => { beforeEach(async () => { @@ -23,7 +25,7 @@ describe('preferences', () => { it('returns empty targets when user has no preferences', async () => { const user = await prisma.user.create({ data: { email: 'test@test.com' } }) - const targets = await resolveUserNotificationTargets(NOTIFICATION_EVENTS.ORDER_CREATED, { userId: user.id }) + const targets = await resolveUserNotificationTargets(ORDER_CREATED, { userId: user.id }) expect(targets).toEqual([]) }) @@ -32,7 +34,7 @@ describe('preferences', () => { await prisma.notificationPreference.create({ data: { userId: user.id, globalEnabled: true, orderCreated: true }, }) - const targets = await resolveUserNotificationTargets(NOTIFICATION_EVENTS.ORDER_CREATED, { userId: user.id }) + const targets = await resolveUserNotificationTargets(ORDER_CREATED, { userId: user.id }) expect(targets).toHaveLength(1) expect(targets[0]).toEqual({ channel: 'email', recipient: 'test@test.com' }) }) @@ -42,7 +44,7 @@ describe('preferences', () => { await prisma.notificationPreference.create({ data: { userId: user.id, globalEnabled: false, orderCreated: true }, }) - const targets = await resolveUserNotificationTargets(NOTIFICATION_EVENTS.ORDER_CREATED, { userId: user.id }) + const targets = await resolveUserNotificationTargets(ORDER_CREATED, { userId: user.id }) expect(targets).toEqual([]) }) @@ -51,7 +53,7 @@ describe('preferences', () => { await prisma.notificationPreference.create({ data: { userId: user.id, globalEnabled: true, orderCreated: false }, }) - const targets = await resolveUserNotificationTargets(NOTIFICATION_EVENTS.ORDER_CREATED, { userId: user.id }) + const targets = await resolveUserNotificationTargets(ORDER_CREATED, { userId: user.id }) expect(targets).toEqual([]) }) @@ -71,7 +73,7 @@ describe('preferences', () => { data: { emailEnabled: true, newOrder: true }, }) - const targets = await resolveAdminNotificationTargets(NOTIFICATION_EVENTS.ORDER_CREATED, {}) + const targets = await resolveAdminNotificationTargets(ORDER_CREATED, {}) expect(targets.some((t) => t.channel === 'email' && t.recipient === 'admin@test.com')).toBe(true) process.env.ADMIN_EMAIL = origAdminEmail @@ -82,7 +84,7 @@ describe('preferences', () => { data: { telegramEnabled: true, telegramChatId: '12345', authCodeDuplicate: true }, }) - const targets = await resolveAuthCodeTargets(NOTIFICATION_EVENTS.AUTH_CODE_REQUESTED, { + const targets = await resolveAuthCodeTargets(AUTH_CODE_REQUESTED, { email: 'user@test.com', code: '123456', isAdmin: true, diff --git a/server/vitest.config.js b/server/vitest.config.js new file mode 100644 index 0000000..ff72a75 --- /dev/null +++ b/server/vitest.config.js @@ -0,0 +1,17 @@ +import path from 'node:path' +import { defineConfig } from 'vitest/config' + +const projectRoot = path.resolve(__dirname, '..') + +export default defineConfig({ + resolve: { + alias: { + '@shared': path.resolve(projectRoot, 'shared'), + }, + }, + server: { + fs: { + allow: [projectRoot], + }, + }, +})