Skip to content

Commit

Permalink
test: response serializer failure test
Browse files Browse the repository at this point in the history
  • Loading branch information
austinwoon committed May 2, 2023
1 parent 4de6cb2 commit 2ad0bc6
Showing 1 changed file with 23 additions and 4 deletions.
27 changes: 23 additions & 4 deletions src/serializer.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { Reflector } from '@nestjs/core'
import { lastValueFrom, of } from 'rxjs'
import { z } from 'zod'
import { createZodDto } from './dto'
import { ZodValidationException } from './exception'
import { ZodSerializerInterceptor } from './serializer'

describe('ZodSerializerInterceptor', () => {
Expand All @@ -19,11 +20,12 @@ describe('ZodSerializerInterceptor', () => {
}

const context = createMock<ExecutionContext>()
const handler = createMock<CallHandler>({
handle: () => of(testUser),
})

test('interceptor should strip out password', async () => {
const handler = createMock<CallHandler>({
handle: () => of(testUser),
})

const reflector = createMock<Reflector>({
getAllAndOverride: () => UserDto,
})
Expand All @@ -37,11 +39,28 @@ describe('ZodSerializerInterceptor', () => {
expect(user.username).toBe('test')
})

test('wrong response shape should throw ZodValidationException', async () => {
const handler = createMock<CallHandler>({
handle: () => of({ user: 'test' }),
})

const reflector = createMock<Reflector>({
getAllAndOverride: () => UserDto,
})

const interceptor = new ZodSerializerInterceptor(reflector)

const userObservable = interceptor.intercept(context, handler)
expect(lastValueFrom(userObservable)).rejects.toBeInstanceOf(
ZodValidationException
)
})

test('interceptor should not strip out password if no UserDto is defined', async () => {
const context = createMock<ExecutionContext>()
const handler = createMock<CallHandler>({
handle: () => of(testUser),
})

const reflector = createMock<Reflector>({
getAllAndOverride: jest.fn(),
})
Expand Down

0 comments on commit 2ad0bc6

Please sign in to comment.