test: add notification preferences tests

This commit is contained in:
Kirill
2026-05-18 11:58:30 +05:00
parent 6054ef4c06
commit 6912008a2c
3 changed files with 29 additions and 7 deletions
+3
View File
@@ -28,3 +28,6 @@ VK_CLIENT_SECRET=
# Yandex OAuth: redirect URI = SERVER_PUBLIC_URL + /api/auth/oauth/yandex/callback # Yandex OAuth: redirect URI = SERVER_PUBLIC_URL + /api/auth/oauth/yandex/callback
YANDEX_CLIENT_ID= YANDEX_CLIENT_ID=
YANDEX_CLIENT_SECRET= YANDEX_CLIENT_SECRET=
# Telegram Bot (оповещения админа)
TELEGRAM_BOT_TOKEN=
@@ -6,7 +6,9 @@ import {
resolveAuthCodeTargets, resolveAuthCodeTargets,
ensureUserNotificationPreference, ensureUserNotificationPreference,
} from '../preferences.js' } 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', () => { describe('preferences', () => {
beforeEach(async () => { beforeEach(async () => {
@@ -23,7 +25,7 @@ describe('preferences', () => {
it('returns empty targets when user has no preferences', async () => { it('returns empty targets when user has no preferences', async () => {
const user = await prisma.user.create({ data: { email: 'test@test.com' } }) 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([]) expect(targets).toEqual([])
}) })
@@ -32,7 +34,7 @@ describe('preferences', () => {
await prisma.notificationPreference.create({ await prisma.notificationPreference.create({
data: { userId: user.id, globalEnabled: true, orderCreated: true }, 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).toHaveLength(1)
expect(targets[0]).toEqual({ channel: 'email', recipient: 'test@test.com' }) expect(targets[0]).toEqual({ channel: 'email', recipient: 'test@test.com' })
}) })
@@ -42,7 +44,7 @@ describe('preferences', () => {
await prisma.notificationPreference.create({ await prisma.notificationPreference.create({
data: { userId: user.id, globalEnabled: false, orderCreated: true }, 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([]) expect(targets).toEqual([])
}) })
@@ -51,7 +53,7 @@ describe('preferences', () => {
await prisma.notificationPreference.create({ await prisma.notificationPreference.create({
data: { userId: user.id, globalEnabled: true, orderCreated: false }, 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([]) expect(targets).toEqual([])
}) })
@@ -71,7 +73,7 @@ describe('preferences', () => {
data: { emailEnabled: true, newOrder: true }, 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) expect(targets.some((t) => t.channel === 'email' && t.recipient === 'admin@test.com')).toBe(true)
process.env.ADMIN_EMAIL = origAdminEmail process.env.ADMIN_EMAIL = origAdminEmail
@@ -82,7 +84,7 @@ describe('preferences', () => {
data: { telegramEnabled: true, telegramChatId: '12345', authCodeDuplicate: true }, 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', email: 'user@test.com',
code: '123456', code: '123456',
isAdmin: true, isAdmin: true,
+17
View File
@@ -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],
},
},
})