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:
@@ -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()
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user