Benachrichtigungen erweitert
Emails korrigiert
This commit is contained in:
@@ -16,8 +16,25 @@ vi.mock('../server/utils/news.js', () => ({
|
||||
readNews: vi.fn()
|
||||
}))
|
||||
|
||||
vi.mock('../server/utils/auth.js', () => ({
|
||||
readUsers: vi.fn(),
|
||||
migrateUserRoles: vi.fn((user) => {
|
||||
if (!user) return user
|
||||
if (Array.isArray(user.roles)) return user
|
||||
if (user.role) {
|
||||
user.roles = [user.role]
|
||||
delete user.role
|
||||
} else {
|
||||
user.roles = ['mitglied']
|
||||
}
|
||||
return user
|
||||
}),
|
||||
isHiddenUser: vi.fn(user => user?.hidden === true || user?.invisible === true || user?.isHidden === true || user?.systemAccount === true || user?.accountType === 'playstore_review')
|
||||
}))
|
||||
|
||||
const nodemailer = await import('nodemailer')
|
||||
const newsUtils = await import('../server/utils/news.js')
|
||||
const authUtils = await import('../server/utils/auth.js')
|
||||
|
||||
import contactHandler from '../server/api/contact.post.js'
|
||||
import galerieHandler from '../server/api/galerie.get.js'
|
||||
@@ -29,14 +46,17 @@ describe('Öffentliche API-Endpunkte', () => {
|
||||
afterEach(() => {
|
||||
delete process.env.NODE_ENV
|
||||
delete process.env.APP_ENV
|
||||
delete process.env.DEBUG
|
||||
})
|
||||
|
||||
beforeEach(() => {
|
||||
// Setze SMTP-Credentials für Tests
|
||||
process.env.SMTP_USER = 'test@example.com'
|
||||
process.env.SMTP_PASS = 'test-password'
|
||||
authUtils.readUsers.mockResolvedValue([])
|
||||
vi.restoreAllMocks()
|
||||
vi.clearAllMocks()
|
||||
authUtils.readUsers.mockResolvedValue([])
|
||||
})
|
||||
|
||||
describe('POST /api/contact', () => {
|
||||
@@ -78,6 +98,53 @@ describe('Öffentliche API-Endpunkte', () => {
|
||||
to: 'tsschulz@tsschulz.de'
|
||||
}))
|
||||
})
|
||||
|
||||
it('sendet bei DEBUG=FALSE an konfigurierte Empfänger', async () => {
|
||||
process.env.NODE_ENV = 'production'
|
||||
process.env.APP_ENV = 'test'
|
||||
process.env.DEBUG = 'FALSE'
|
||||
vi.spyOn(fs, 'readFile').mockResolvedValue(JSON.stringify({
|
||||
vorstand: {
|
||||
vorsitzender: { email: 'vorstand@example.com' }
|
||||
}
|
||||
}))
|
||||
|
||||
const event = createEvent()
|
||||
mockSuccessReadBody({ name: 'Max', email: 'max@example.com', subject: 'Frage', message: 'Hallo' })
|
||||
|
||||
await contactHandler(event)
|
||||
|
||||
const transporter = nodemailer.default.createTransport.mock.results[0].value
|
||||
const to = transporter.sendMail.mock.calls[0][0].to
|
||||
expect(to).toContain('vorstand@example.com')
|
||||
expect(to).not.toContain('tsschulz@tsschulz.de')
|
||||
})
|
||||
|
||||
it('bevorzugt aktive Vorstand-Benutzer vor config.json', async () => {
|
||||
process.env.NODE_ENV = 'production'
|
||||
process.env.DEBUG = 'FALSE'
|
||||
authUtils.readUsers.mockResolvedValue([
|
||||
{ id: '1', email: 'rolle-vorstand@example.com', roles: ['vorstand'], active: true },
|
||||
{ id: '2', email: 'hidden@example.com', roles: ['vorstand'], active: true, hidden: true },
|
||||
{ id: '3', email: 'trainer@example.com', roles: ['trainer'], active: true }
|
||||
])
|
||||
vi.spyOn(fs, 'readFile').mockResolvedValue(JSON.stringify({
|
||||
vorstand: {
|
||||
vorsitzender: { email: 'config-vorstand@example.com' }
|
||||
}
|
||||
}))
|
||||
|
||||
const event = createEvent()
|
||||
mockSuccessReadBody({ name: 'Max', email: 'max@example.com', subject: 'Frage', message: 'Hallo' })
|
||||
|
||||
await contactHandler(event)
|
||||
|
||||
const transporter = nodemailer.default.createTransport.mock.results[0].value
|
||||
const to = transporter.sendMail.mock.calls[0][0].to
|
||||
expect(to).toContain('rolle-vorstand@example.com')
|
||||
expect(to).not.toContain('config-vorstand@example.com')
|
||||
expect(to).not.toContain('hidden@example.com')
|
||||
})
|
||||
})
|
||||
|
||||
describe('GET /api/galerie', () => {
|
||||
|
||||
Reference in New Issue
Block a user