test: add test suites for Projekt-KIQ-HP (12 tests) and andreknie.de validation (16 tests)

- Projekt-KIQ-HP: vitest + server API tests (health, login, auth, access-requests)
- andreknie.de: validation utility tests (email, contact, talk-request, newsletter, resource-download)
- db-planet-mcp-server: existing 7 tests confirmed working
This commit is contained in:
2026-07-10 18:43:41 +02:00
parent 6ae0c91539
commit 18f6e2732e
5 changed files with 1555 additions and 2 deletions
@@ -0,0 +1,128 @@
import { describe, it, expect } from 'vitest'
import {
validateEmail,
validateContact,
validateTalkRequest,
validateNewsletter,
validateResourceDownload,
} from './validation.js'
describe('validateEmail', () => {
it('accepts valid emails', () => {
expect(validateEmail('user@example.com')).toBe(true)
expect(validateEmail('a.b@sub.domain.org')).toBe(true)
})
it('rejects invalid emails', () => {
expect(validateEmail('')).toBe(false)
expect(validateEmail('no-at-sign')).toBe(false)
expect(validateEmail('@missing-local.com')).toBe(false)
expect(validateEmail('spaces in@email.com')).toBe(false)
})
})
describe('validateContact', () => {
const valid = { name: 'Max', email: 'max@example.com', message: 'Hello' }
it('passes with valid data', () => {
const result = validateContact(valid)
expect(result.valid).toBe(true)
expect(result.errors).toEqual({})
})
it('fails without name', () => {
const result = validateContact({ ...valid, name: '' })
expect(result.valid).toBe(false)
expect(result.errors.name).toBeTruthy()
})
it('fails without email', () => {
const result = validateContact({ ...valid, email: '' })
expect(result.valid).toBe(false)
expect(result.errors.email).toBeTruthy()
})
it('fails without message', () => {
const result = validateContact({ ...valid, message: '' })
expect(result.valid).toBe(false)
expect(result.errors.message).toBeTruthy()
})
it('fails with name over 100 chars', () => {
const result = validateContact({ ...valid, name: 'x'.repeat(101) })
expect(result.valid).toBe(false)
expect(result.errors.name).toBeTruthy()
})
it('fails with message over 2000 chars', () => {
const result = validateContact({ ...valid, message: 'x'.repeat(2001) })
expect(result.valid).toBe(false)
expect(result.errors.message).toBeTruthy()
})
})
describe('validateTalkRequest', () => {
const valid = {
name: 'Max',
email: 'max@example.com',
event_name: 'Conference 2026',
topic: 'KI im Mittelstand',
message: 'Interested in a keynote',
}
it('passes with valid data', () => {
const result = validateTalkRequest(valid)
expect(result.valid).toBe(true)
})
it('fails without event_name', () => {
const result = validateTalkRequest({ ...valid, event_name: '' })
expect(result.valid).toBe(false)
expect(result.errors.event_name).toBeTruthy()
})
it('fails without topic', () => {
const result = validateTalkRequest({ ...valid, topic: '' })
expect(result.valid).toBe(false)
expect(result.errors.topic).toBeTruthy()
})
})
describe('validateNewsletter', () => {
it('passes with valid email', () => {
const result = validateNewsletter({ email: 'user@test.com' })
expect(result.valid).toBe(true)
})
it('fails with invalid email', () => {
const result = validateNewsletter({ email: 'bad' })
expect(result.valid).toBe(false)
expect(result.errors.email).toBeTruthy()
})
})
describe('validateResourceDownload', () => {
const valid = {
name: 'Max',
email: 'max@example.com',
company: 'Test GmbH',
resource_id: 'speaker-cv',
}
it('passes with valid data', () => {
const result = validateResourceDownload(valid)
expect(result.valid).toBe(true)
})
it('fails without company', () => {
const result = validateResourceDownload({ ...valid, company: '' })
expect(result.valid).toBe(false)
expect(result.errors.company).toBeTruthy()
})
it('fails without resource_id', () => {
const result = validateResourceDownload({ ...valid, resource_id: '' })
expect(result.valid).toBe(false)
expect(result.errors.resource_id).toBeTruthy()
})
})