Skip to content
Snippets Groups Projects
Verified Commit 771c935a authored by Konstantin Tsabolov's avatar Konstantin Tsabolov
Browse files

feat(shared): add shared response format interceptor

parent f17987ac
No related branches found
No related tags found
No related merge requests found
import type { ExecutionContext } from '@nestjs/common';
import type { TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { of } from 'rxjs';
import { ResponseFormatInterceptor } from '../response-format.interceptor.js';
describe('ResponseFormatInterceptor', () => {
let interceptor: ResponseFormatInterceptor;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [ResponseFormatInterceptor],
}).compile();
interceptor = module.get<ResponseFormatInterceptor>(
ResponseFormatInterceptor,
);
});
it('should be defined', () => {
expect(interceptor).toBeDefined();
expect(interceptor).toBeInstanceOf(ResponseFormatInterceptor);
});
it('should intercept the request and format the response', (done) => {
const context: ExecutionContext = {
switchToHttp: () => ({
getResponse: () => ({
statusCode: 200,
}),
}),
} as ExecutionContext;
const next = {
handle: jest.fn().mockReturnValue(of('Hello World')),
};
const result = interceptor.intercept(context, next);
expect(result).toBeDefined();
expect(next.handle).toHaveBeenCalled();
result.subscribe((response) => {
expect(response).toEqual({ statusCode: 200, data: 'Hello World' });
done();
});
});
});
import type {
CallHandler,
ExecutionContext,
NestInterceptor,
} from '@nestjs/common';
import { Injectable } from '@nestjs/common';
import { map, type Observable } from 'rxjs';
@Injectable()
export class ResponseFormatInterceptor implements NestInterceptor {
public intercept(
context: ExecutionContext,
next: CallHandler,
): Observable<unknown> {
const ctx = context.switchToHttp();
const response = ctx.getResponse();
return next.handle().pipe(
map((data) => {
return {
statusCode: response.statusCode,
data,
};
}),
);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment