69 lines
2.9 KiB
TypeScript
69 lines
2.9 KiB
TypeScript
// backend/tests/auth.test.ts
|
|
import request from 'supertest';
|
|
import express from 'express';
|
|
import authRouter from '../src/api/auth';
|
|
import { AuthService } from '../src/services/AuthService';
|
|
import { SessionService } from '../src/services/SessionService';
|
|
import { AuthLogger } from '../src/services/AuthLogger';
|
|
|
|
// Mock dependencies
|
|
jest.mock('../src/services/AuthService');
|
|
jest.mock('../src/services/SessionService');
|
|
jest.mock('../src/services/AuthLogger');
|
|
|
|
const app = express();
|
|
app.use(express.json());
|
|
app.use('/api/auth', authRouter);
|
|
|
|
describe('POST /api/auth/passphrase - Success Case', () => {
|
|
beforeEach(() => {
|
|
// Reset mocks before each test
|
|
jest.clearAllMocks();
|
|
(AuthService.validatePassphrase as jest.Mock).mockReturnValue(true);
|
|
(SessionService.createSession as jest.Mock).mockReturnValue({ id: 'test-session-id', isAuthenticated: false, createdAt: new Date() });
|
|
(SessionService.authenticateSession as jest.Mock).mockReturnValue(true);
|
|
});
|
|
|
|
it('should return 200 and a session token for a valid passphrase', async () => {
|
|
const response = await request(app)
|
|
.post('/api/auth/passphrase')
|
|
.send({ passphrase: 'correct-passphrase' });
|
|
|
|
expect(response.statusCode).toBe(200);
|
|
expect(response.body.message).toBe('Authentication successful');
|
|
expect(response.body.sessionToken).toBe('test-session-id');
|
|
expect(AuthService.validatePassphrase).toHaveBeenCalledWith('correct-passphrase');
|
|
expect(SessionService.createSession).toHaveBeenCalledTimes(1);
|
|
expect(SessionService.authenticateSession).toHaveBeenCalledWith('test-session-id');
|
|
expect(AuthLogger.logAttempt).toHaveBeenCalledWith('success', expect.any(String));
|
|
});
|
|
|
|
it('should return 400 if passphrase is not provided', async () => {
|
|
const response = await request(app)
|
|
.post('/api/auth/passphrase')
|
|
.send({});
|
|
|
|
expect(response.statusCode).toBe(400);
|
|
expect(response.body.message).toBe('Passphrase is required.');
|
|
expect(AuthService.validatePassphrase).not.toHaveBeenCalled();
|
|
expect(SessionService.createSession).not.toHaveBeenCalled();
|
|
expect(SessionService.authenticateSession).not.toHaveBeenCalled();
|
|
expect(AuthLogger.logAttempt).toHaveBeenCalledWith('failure', expect.any(String));
|
|
});
|
|
|
|
it('should return 401 for an invalid passphrase', async () => {
|
|
(AuthService.validatePassphrase as jest.Mock).mockReturnValue(false); // Simulate invalid passphrase
|
|
|
|
const response = await request(app)
|
|
.post('/api/auth/passphrase')
|
|
.send({ passphrase: 'incorrect-passphrase' });
|
|
|
|
expect(response.statusCode).toBe(401);
|
|
expect(response.body.message).toBe('Invalid passphrase');
|
|
expect(AuthService.validatePassphrase).toHaveBeenCalledWith('incorrect-passphrase');
|
|
expect(SessionService.createSession).not.toHaveBeenCalled();
|
|
expect(SessionService.authenticateSession).not.toHaveBeenCalled();
|
|
expect(AuthLogger.logAttempt).toHaveBeenCalledWith('failure', expect.any(String));
|
|
});
|
|
});
|