test: expand endpoint coverage and harden deploy gate
This commit is contained in:
@@ -49,6 +49,8 @@ import membersGetHandler from '../server/api/members.get.js'
|
||||
import membersPostHandler from '../server/api/members.post.js'
|
||||
import membersDeleteHandler from '../server/api/members.delete.js'
|
||||
import membersBulkHandler from '../server/api/members/bulk.post.js'
|
||||
import membersBulkHandler from '../server/api/members/bulk.post.js'
|
||||
import toggleMannschaftsspielerHandler from '../server/api/members/toggle-mannschaftsspieler.post.js'
|
||||
|
||||
describe('Members API Endpoints', () => {
|
||||
beforeEach(() => {
|
||||
@@ -226,4 +228,83 @@ describe('Members API Endpoints', () => {
|
||||
expect(memberUtils.writeMembers).toHaveBeenCalled()
|
||||
})
|
||||
})
|
||||
|
||||
describe('POST /api/members/toggle-mannschaftsspieler', () => {
|
||||
it('verlangt Authentifizierung', async () => {
|
||||
const event = createEvent()
|
||||
mockSuccessReadBody({ memberId: '1' })
|
||||
|
||||
await expect(toggleMannschaftsspielerHandler(event)).rejects.toMatchObject({ statusCode: 401 })
|
||||
})
|
||||
|
||||
it('verlangt Admin- oder Vorstand-Rolle', async () => {
|
||||
const event = createEvent({ cookies: { auth_token: 'token' } })
|
||||
authUtils.verifyToken.mockReturnValue({ id: '1' })
|
||||
authUtils.getUserById.mockResolvedValue({ id: '1', roles: ['mitglied'] })
|
||||
authUtils.hasAnyRole.mockReturnValue(false)
|
||||
mockSuccessReadBody({ memberId: '2' })
|
||||
|
||||
await expect(toggleMannschaftsspielerHandler(event)).rejects.toMatchObject({ statusCode: 403 })
|
||||
})
|
||||
|
||||
it('gibt 400 wenn memberId fehlt', async () => {
|
||||
const event = createEvent({ cookies: { auth_token: 'token' } })
|
||||
authUtils.verifyToken.mockReturnValue({ id: '1' })
|
||||
authUtils.getUserById.mockResolvedValue({ id: '1', roles: ['admin'] })
|
||||
authUtils.hasAnyRole.mockReturnValue(true)
|
||||
mockSuccessReadBody({})
|
||||
|
||||
await expect(toggleMannschaftsspielerHandler(event)).rejects.toMatchObject({ statusCode: 400 })
|
||||
})
|
||||
|
||||
it('gibt 404 wenn Mitglied nicht gefunden', async () => {
|
||||
const event = createEvent({ cookies: { auth_token: 'token' } })
|
||||
authUtils.verifyToken.mockReturnValue({ id: '1' })
|
||||
authUtils.getUserById.mockResolvedValue({ id: '1', roles: ['admin'] })
|
||||
authUtils.hasAnyRole.mockReturnValue(true)
|
||||
authUtils.readUsers.mockResolvedValue([])
|
||||
memberUtils.readMembers.mockResolvedValue([])
|
||||
mockSuccessReadBody({ memberId: 'unbekannt' })
|
||||
|
||||
await expect(toggleMannschaftsspielerHandler(event)).rejects.toMatchObject({ statusCode: 404 })
|
||||
})
|
||||
|
||||
it('toggled isMannschaftsspieler für eingeloggten User', async () => {
|
||||
const event = createEvent({ cookies: { auth_token: 'token' } })
|
||||
authUtils.verifyToken.mockReturnValue({ id: '1' })
|
||||
authUtils.getUserById.mockResolvedValue({ id: '1', roles: ['admin'] })
|
||||
authUtils.hasAnyRole.mockReturnValue(true)
|
||||
authUtils.readUsers.mockResolvedValue([
|
||||
{ id: 'user-5', name: 'Max Muster', isMannschaftsspieler: false, roles: ['mitglied'] }
|
||||
])
|
||||
authUtils.writeUsers.mockResolvedValue(undefined)
|
||||
memberUtils.readMembers.mockResolvedValue([])
|
||||
mockSuccessReadBody({ memberId: 'user-5' })
|
||||
|
||||
const result = await toggleMannschaftsspielerHandler(event)
|
||||
|
||||
expect(result.success).toBe(true)
|
||||
expect(result.isMannschaftsspieler).toBe(true)
|
||||
expect(authUtils.writeUsers).toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('toggled isMannschaftsspieler für manuelles Mitglied', async () => {
|
||||
const event = createEvent({ cookies: { auth_token: 'token' } })
|
||||
authUtils.verifyToken.mockReturnValue({ id: '1' })
|
||||
authUtils.getUserById.mockResolvedValue({ id: '1', roles: ['admin'] })
|
||||
authUtils.hasAnyRole.mockReturnValue(true)
|
||||
authUtils.readUsers.mockResolvedValue([])
|
||||
memberUtils.readMembers.mockResolvedValue([
|
||||
{ id: 'manual-1', firstName: 'Paul', lastName: 'Team', isMannschaftsspieler: true }
|
||||
])
|
||||
memberUtils.writeMembers.mockResolvedValue(undefined)
|
||||
mockSuccessReadBody({ memberId: 'manual-1' })
|
||||
|
||||
const result = await toggleMannschaftsspielerHandler(event)
|
||||
|
||||
expect(result.success).toBe(true)
|
||||
expect(result.isMannschaftsspieler).toBe(false)
|
||||
expect(memberUtils.writeMembers).toHaveBeenCalled()
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user