From cc0f32a75f22fed46b9ba7509518d93d5293d1ec Mon Sep 17 00:00:00 2001 From: Joseph Ditton Date: Sun, 5 Dec 2021 18:46:44 -0700 Subject: [PATCH] configure unit tests --- package.json | 5 +- server/app.controller.spec.ts | 6 +- server/controllers/users.controller.spec.ts | 67 +++++++++++++++++++++ 3 files changed, 74 insertions(+), 4 deletions(-) create mode 100644 server/controllers/users.controller.spec.ts diff --git a/package.json b/package.json index 0ad974f..92a0244 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,10 @@ "json", "ts" ], - "moduleDirectories": ["node_modules", "./"], + "moduleNameMapper": { + "^server/(.*)$": "/$1" + }, + "moduleDirectories": ["node_modules"], "rootDir": "./server", "testRegex": ".*\\.spec\\.ts$", "transform": { diff --git a/server/app.controller.spec.ts b/server/app.controller.spec.ts index 35a53c5..53d6cf8 100644 --- a/server/app.controller.spec.ts +++ b/server/app.controller.spec.ts @@ -13,9 +13,9 @@ describe('AppController', () => { appController = app.get(AppController); }); - describe('root', () => { - it('should return "Hello World!"', () => { - expect(appController.index()).toBe('Hello World!'); + describe('index', () => { + it('should run without crashing', () => { + expect(appController.index()).toBeUndefined(); }); }); }); diff --git a/server/controllers/users.controller.spec.ts b/server/controllers/users.controller.spec.ts new file mode 100644 index 0000000..2e94a4e --- /dev/null +++ b/server/controllers/users.controller.spec.ts @@ -0,0 +1,67 @@ +import 'server/env'; +import { UsersController } from './users.controller'; +import { UsersService } from 'server/providers/services/users.service'; +import { JwtService } from 'server/providers/services/jwt.service'; +import { RefreshTokensService } from 'server/providers/services/refresh_tokens.service'; +import { Test, TestingModule } from '@nestjs/testing'; +import { RolesService } from 'server/providers/services/roles.service'; +import { Response } from 'express'; +import { User } from 'server/entities/user.entity'; + +describe('UsersController', () => { + let usersController: UsersController; + const res = { cookie: () => {} }; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [UsersController], + providers: [ + { + provide: RefreshTokensService, + useValue: { + create: async (refreshToken) => refreshToken, + }, + }, + { + provide: UsersService, + useValue: { + findAll: async () => [{ id: 1 }], + create: async (user: User) => user, + }, + }, + { + provide: RolesService, + useValue: { + findByKey: (key) => [{ key, id: 1 }], + }, + }, + JwtService, + ], + }).compile(); + + usersController = module.get(UsersController); + }); + + describe('index', () => { + it('should get all users', async () => { + expect(await usersController.index()).toEqual({ users: [{ id: 1 }] }); + }); + }); + + describe('create', () => { + it('should create a user with email and password', async () => { + const { token, user } = await usersController.create( + { firstName: 'firstName', lastName: 'lastName', email: 'test@test.com', password: 'test' }, + res as unknown as Response, + ); + expect(token.length).toBeGreaterThan(0); + expect(user.email).toEqual('test@test.com'); + expect(user.firstName).toEqual('firstName'); + expect(user.lastName).toEqual('lastName'); + expect(user.passwordHash.length).toBeGreaterThan(0); + expect(user.passwordHash).not.toEqual('test'); + expect(user.userRoles).toHaveLength(1); + expect(user.userRoles[0].role.key).toEqual('user'); + }); + }); +});