forked from datawhale/whale-town-end
service:更新登录核心服务集成邮箱验证
- 在登录核心模块中集成邮件和验证码服务 - 更新密码重置流程使用验证码服务 - 添加邮箱验证相关的核心方法 - 更新相关的单元测试和依赖注入
This commit is contained in:
@@ -14,9 +14,15 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { LoginCoreService } from './login_core.service';
|
||||
import { UsersModule } from '../db/users/users.module';
|
||||
import { EmailModule } from '../utils/email/email.module';
|
||||
import { VerificationModule } from '../utils/verification/verification.module';
|
||||
|
||||
@Module({
|
||||
imports: [UsersModule],
|
||||
imports: [
|
||||
UsersModule,
|
||||
EmailModule,
|
||||
VerificationModule,
|
||||
],
|
||||
providers: [LoginCoreService],
|
||||
exports: [LoginCoreService],
|
||||
})
|
||||
|
||||
@@ -5,11 +5,15 @@
|
||||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
import { LoginCoreService } from './login_core.service';
|
||||
import { UsersService } from '../db/users/users.service';
|
||||
import { EmailService } from '../utils/email/email.service';
|
||||
import { VerificationService } from '../utils/verification/verification.service';
|
||||
import { UnauthorizedException, ConflictException, NotFoundException, BadRequestException } from '@nestjs/common';
|
||||
|
||||
describe('LoginCoreService', () => {
|
||||
let service: LoginCoreService;
|
||||
let usersService: jest.Mocked<UsersService>;
|
||||
let emailService: jest.Mocked<EmailService>;
|
||||
let verificationService: jest.Mocked<VerificationService>;
|
||||
|
||||
const mockUser = {
|
||||
id: BigInt(1),
|
||||
@@ -21,6 +25,7 @@ describe('LoginCoreService', () => {
|
||||
github_id: null as string | null,
|
||||
avatar_url: null as string | null,
|
||||
role: 1,
|
||||
email_verified: false,
|
||||
created_at: new Date(),
|
||||
updated_at: new Date()
|
||||
};
|
||||
@@ -36,6 +41,16 @@ describe('LoginCoreService', () => {
|
||||
findOne: jest.fn(),
|
||||
};
|
||||
|
||||
const mockEmailService = {
|
||||
sendVerificationCode: jest.fn(),
|
||||
sendWelcomeEmail: jest.fn(),
|
||||
};
|
||||
|
||||
const mockVerificationService = {
|
||||
generateCode: jest.fn(),
|
||||
verifyCode: jest.fn(),
|
||||
};
|
||||
|
||||
const module: TestingModule = await Test.createTestingModule({
|
||||
providers: [
|
||||
LoginCoreService,
|
||||
@@ -43,11 +58,21 @@ describe('LoginCoreService', () => {
|
||||
provide: UsersService,
|
||||
useValue: mockUsersService,
|
||||
},
|
||||
{
|
||||
provide: EmailService,
|
||||
useValue: mockEmailService,
|
||||
},
|
||||
{
|
||||
provide: VerificationService,
|
||||
useValue: mockVerificationService,
|
||||
},
|
||||
],
|
||||
}).compile();
|
||||
|
||||
service = module.get<LoginCoreService>(LoginCoreService);
|
||||
usersService = module.get(UsersService);
|
||||
emailService = module.get(EmailService);
|
||||
verificationService = module.get(VerificationService);
|
||||
});
|
||||
|
||||
it('should be defined', () => {
|
||||
@@ -152,7 +177,10 @@ describe('LoginCoreService', () => {
|
||||
|
||||
describe('sendPasswordResetCode', () => {
|
||||
it('should send reset code for email', async () => {
|
||||
usersService.findByEmail.mockResolvedValue(mockUser);
|
||||
const verifiedUser = { ...mockUser, email_verified: true };
|
||||
usersService.findByEmail.mockResolvedValue(verifiedUser);
|
||||
verificationService.generateCode.mockResolvedValue('123456');
|
||||
emailService.sendVerificationCode.mockResolvedValue(true);
|
||||
|
||||
const code = await service.sendPasswordResetCode('test@example.com');
|
||||
|
||||
@@ -169,6 +197,7 @@ describe('LoginCoreService', () => {
|
||||
|
||||
describe('resetPassword', () => {
|
||||
it('should reset password successfully', async () => {
|
||||
verificationService.verifyCode.mockResolvedValue(true);
|
||||
usersService.findByEmail.mockResolvedValue(mockUser);
|
||||
usersService.update.mockResolvedValue(mockUser);
|
||||
jest.spyOn(service as any, 'hashPassword').mockResolvedValue('newhashedpassword');
|
||||
@@ -184,6 +213,8 @@ describe('LoginCoreService', () => {
|
||||
});
|
||||
|
||||
it('should throw BadRequestException for invalid verification code', async () => {
|
||||
verificationService.verifyCode.mockResolvedValue(false);
|
||||
|
||||
await expect(service.resetPassword({
|
||||
identifier: 'test@example.com',
|
||||
verificationCode: 'invalid',
|
||||
|
||||
Reference in New Issue
Block a user