typescript-express-mongoose-starter
Version:
TypeScript + Express + Mongoose + MongoDB
138 lines (115 loc) • 4.17 kB
text/typescript
import bcrypt from 'bcrypt';
import mongoose from 'mongoose';
import request from 'supertest';
import App from '@/app';
import { CreateUserDto } from '@dtos/users.dto';
import UsersRoute from '@routes/users.route';
beforeAll(async () => {
jest.setTimeout(10000);
});
afterAll(async () => {
await new Promise<void>(resolve => setTimeout(() => resolve(), 500));
});
describe('Testing Users', () => {
describe('[GET] /users', () => {
it('response findAll Users', async () => {
const usersRoute = new UsersRoute();
const users = usersRoute.usersController.userService.users;
users.find = jest.fn().mockReturnValue([
{
_id: 'qpwoeiruty',
email: 'a@email.com',
password: await bcrypt.hash('q1w2e3r4!', 10),
},
{
_id: 'alskdjfhg',
email: 'b@email.com',
password: await bcrypt.hash('a1s2d3f4!', 10),
},
{
_id: 'zmxncbv',
email: 'c@email.com',
password: await bcrypt.hash('z1x2c3v4!', 10),
},
]);
(mongoose as any).connect = jest.fn();
const app = new App([usersRoute]);
return request(app.getServer()).get(`${usersRoute.path}`).expect(200);
});
});
describe('[GET] /users/:id', () => {
it('response findOne User', async () => {
const userId = 'qpwoeiruty';
const usersRoute = new UsersRoute();
const users = usersRoute.usersController.userService.users;
users.findOne = jest.fn().mockReturnValue({
_id: 'qpwoeiruty',
email: 'a@email.com',
password: await bcrypt.hash('q1w2e3r4!', 10),
});
(mongoose as any).connect = jest.fn();
const app = new App([usersRoute]);
return request(app.getServer()).get(`${usersRoute.path}/${userId}`).expect(200);
});
});
describe('[POST] /users', () => {
it('response Create User', async () => {
const userData: CreateUserDto = {
email: 'test@email.com',
password: 'q1w2e3r4',
};
const usersRoute = new UsersRoute();
const users = usersRoute.usersController.userService.users;
users.findOne = jest.fn().mockReturnValue(null);
users.create = jest.fn().mockReturnValue({
_id: '60706478aad6c9ad19a31c84',
email: userData.email,
password: await bcrypt.hash(userData.password, 10),
});
(mongoose as any).connect = jest.fn();
const app = new App([usersRoute]);
return request(app.getServer()).post(`${usersRoute.path}`).send(userData).expect(201);
});
});
describe('[PUT] /users/:id', () => {
it('response Update User', async () => {
const userId = '60706478aad6c9ad19a31c84';
const userData: CreateUserDto = {
email: 'test@email.com',
password: 'q1w2e3r4',
};
const usersRoute = new UsersRoute();
const users = usersRoute.usersController.userService.users;
if (userData.email) {
users.findOne = jest.fn().mockReturnValue({
_id: userId,
email: userData.email,
password: await bcrypt.hash(userData.password, 10),
});
}
users.findByIdAndUpdate = jest.fn().mockReturnValue({
_id: userId,
email: userData.email,
password: await bcrypt.hash(userData.password, 10),
});
(mongoose as any).connect = jest.fn();
const app = new App([usersRoute]);
return request(app.getServer()).put(`${usersRoute.path}/${userId}`).send(userData);
});
});
describe('[DELETE] /users/:id', () => {
it('response Delete User', async () => {
const userId = '60706478aad6c9ad19a31c84';
const usersRoute = new UsersRoute();
const users = usersRoute.usersController.userService.users;
users.findByIdAndDelete = jest.fn().mockReturnValue({
_id: '60706478aad6c9ad19a31c84',
email: 'test@email.com',
password: await bcrypt.hash('q1w2e3r4!', 10),
});
(mongoose as any).connect = jest.fn();
const app = new App([usersRoute]);
return request(app.getServer()).delete(`${usersRoute.path}/${userId}`).expect(200);
});
});
});