tududi/backend/tests/integration/auth.test.js
Antonis 4fa2aa91bf
Fix E2E test breakage (#380)
* Add logging placeholder functions, fix notes.js uids

* Add UIDs to inbox items. Includes migration.

* Add UID to users.

* Add project UIDs usage.

* Add script that runs specific E2E test(s)

* Only run Chromium E2E tests by default.

* Fix breaking E2E tests

* fixup! Fix breaking E2E tests

---------

Co-authored-by: antanst <>
Co-authored-by: Chris Veleris <chrisveleris@gmail.com>
2025-10-05 16:04:46 +03:00

143 lines
4.8 KiB
JavaScript

const request = require('supertest');
const app = require('../../app');
require('../../models');
const { createTestUser } = require('../helpers/testUtils');
describe('Auth Routes', () => {
describe('POST /api/login', () => {
let user;
beforeEach(async () => {
user = await createTestUser({
email: 'test@example.com',
});
});
it('should login with valid credentials', async () => {
const response = await request(app).post('/api/login').send({
email: 'test@example.com',
password: 'password123',
});
expect(response.status).toBe(200);
expect(response.body.user).toBeDefined();
expect(response.body.user.email).toBe('test@example.com');
expect(response.body.user.uid).toBe(user.uid);
expect(response.body.user).not.toHaveProperty('id');
expect(response.body.user.language).toBe('en');
expect(response.body.user.appearance).toBe('light');
expect(response.body.user.timezone).toBe('UTC');
});
it('should return 400 for missing email', async () => {
const response = await request(app).post('/api/login').send({
password: 'password123',
});
expect(response.status).toBe(400);
expect(response.body.error).toBe('Invalid login parameters.');
});
it('should return 400 for missing password', async () => {
const response = await request(app).post('/api/login').send({
email: 'test@example.com',
});
expect(response.status).toBe(400);
expect(response.body.error).toBe('Invalid login parameters.');
});
it('should return 401 for non-existent user', async () => {
const response = await request(app).post('/api/login').send({
email: 'nonexistent@example.com',
password: 'password123',
});
expect(response.status).toBe(401);
expect(response.body.errors).toEqual(['Invalid credentials']);
});
it('should return 401 for invalid password', async () => {
const response = await request(app).post('/api/login').send({
email: 'test@example.com',
password: 'wrongpassword',
});
expect(response.status).toBe(401);
expect(response.body.errors).toEqual(['Invalid credentials']);
});
});
describe('GET /api/current_user', () => {
let user;
beforeEach(async () => {
user = await createTestUser({
email: 'test@example.com',
});
});
it('should return current user when logged in', async () => {
const agent = request.agent(app);
// Login first
await agent.post('/api/login').send({
email: 'test@example.com',
password: 'password123',
});
// Check current user
const response = await agent.get('/api/current_user');
expect(response.status).toBe(200);
expect(response.body.user).toBeDefined();
expect(response.body.user.email).toBe('test@example.com');
expect(response.body.user.uid).toBe(user.uid);
expect(response.body.user).not.toHaveProperty('id');
});
it('should return null user when not logged in', async () => {
const response = await request(app).get('/api/current_user');
expect(response.status).toBe(200);
expect(response.body.user).toBeNull();
});
});
describe('GET /api/logout', () => {
let user;
beforeEach(async () => {
user = await createTestUser({
email: 'test@example.com',
});
});
it('should logout successfully', async () => {
const agent = request.agent(app);
// Login first
await agent.post('/api/login').send({
email: 'test@example.com',
password: 'password123',
});
// Logout
const response = await agent.get('/api/logout');
expect(response.status).toBe(200);
expect(response.body.message).toBe('Logged out successfully');
// Verify user is logged out
const currentUserResponse = await agent.get('/api/current_user');
expect(currentUserResponse.body.user).toBeNull();
});
it('should handle logout when not logged in', async () => {
const response = await request(app).get('/api/logout');
expect(response.status).toBe(200);
expect(response.body.message).toBe('Logged out successfully');
});
});
});