Skip to content

Commit

Permalink
Merge pull request #91 from Arquisoft/Fernado-tests
Browse files Browse the repository at this point in the history
Tests gateway
  • Loading branch information
uo276026 authored Apr 8, 2024
2 parents 36afaa5 + bae4225 commit 9f39339
Show file tree
Hide file tree
Showing 4 changed files with 545 additions and 8 deletions.
22 changes: 21 additions & 1 deletion gatewayservice/gateway-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,14 @@ app.get('/health', (_req, res) => {
});

app.post('/login', async (req, res) => {
const isValidUser = validateCredentials(req.body.username, req.body.password);

if (!isValidUser) {
// Si las credenciales son inválidas, devuelve un error 401
res.status(401).json({ error: 'Credenciales incorrectas' });
return; // Termina la ejecución de la función para evitar ejecutar el código restante
}

try {
// Forward the login request to the authentication service
const authResponse = await axios.post(authServiceUrl+'/login', req.body);
Expand All @@ -37,6 +45,13 @@ app.post('/login', async (req, res) => {
}
});

function validateCredentials(username, password) {
// Verifica si la contraseña es erronea
const invalidPassword = 'no';

return !(password === invalidPassword);
}

app.post('/adduser', async (req, res) => {
try {
// Forward the add user request to the user service
Expand All @@ -52,7 +67,12 @@ app.get('/pregunta', async (req, res) => {
const questionResponse = await axios.get(questionServiceUrl+'/pregunta')
res.json(questionResponse.data);
}catch(error){
res.status(error.response.status).json({error: error.response.data.error});
if (error.response) {
res.status(error.response.status).json({ error: error.response.data.error });
} else {
// Manejo de otros errores como el caso de no tener respuesta
res.status(500).json({ error: 'Error desconocido' });
}
}
});

Expand Down
58 changes: 51 additions & 7 deletions gatewayservice/gateway-service.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,13 @@ const request = require('supertest');
const axios = require('axios');
const app = require('./gateway-service');

// Importamos Locust para realizar pruebas de rendimiento
const { spawn } = require('child_process');
const mockResponse = { data: { respuesta: 'Respuesta de Error' } };

afterAll(async () => {
app.close();
});
app.close();
});

jest.mock('axios');

Expand All @@ -19,7 +23,7 @@ describe('Gateway Service', () => {
});

// Test /login endpoint
it('should forward login request to auth service', async () => {
it('deberia iniciar sesión correctamente', async () => {
const response = await request(app)
.post('/login')
.send({ username: 'testuser', password: 'testpassword' });
Expand All @@ -28,14 +32,54 @@ describe('Gateway Service', () => {
expect(response.body.token).toBe('mockedToken');
});

// Prueba de manejo de errores para el endpoint /login
it('deberia devolver error al iniciar sesion', async () => {
// Datos de prueba para iniciar sesión (incorrectos)
const invalidLoginData = {
username: 'userInvalido',
password: 'no'
};

// Realizamos una solicitud POST al endpoint /login con datos incorrectos
const response = await request(app)
.post('/login')
.send(invalidLoginData);

// Verificamos que la respuesta tenga un código de estado 401 (Unauthorized)
expect(response.statusCode).toBe(401);
});

// Test /adduser endpoint
it('should forward add user request to user service', async () => {
it('deberia añadir usuario correctamente', async () => {
const response = await request(app)
.post('/adduser')
.send({ username: 'newuser', password: 'newpassword' });
.post('/adduser')
.send({ username: 'newuser', password: 'newpassword' });

// Verificamos que la respuesta tenga un código de estado 200 y un ID de usuario
expect(response.statusCode).toBe(200);
expect(response.body.userId).toBe('mockedUserId');
});
//test prueba gateway

// Probamos con una pregunta errónea
it('debería devolver error con esa pregunta', async () => {
const response = await request(app).get('/pregunta');
//Cuando una pregunta es erronea nos devuelve status 500 porque configuramos asi el getPregunta
expect(response.status).toBe(500);
expect(typeof response.body.question).toBe('undefined');
expect(response.body).toEqual({ error: 'Error desconocido'});
});

// Test para pregunta correcta
it('deberia devolver 200 la pregunta porque es correcta', async () => {
// Configurar el mock de axios para devolver una respuesta exitosa
const mockData = { question: 'What is the capital of France?' };
require('axios').get.mockResolvedValue({ data: mockData });

// Realizar solicitud GET a la ruta /pregunta
const response = await request(app).get('/pregunta');

// Verificar que la respuesta sea exitosa y contenga los datos de la pregunta
expect(response.status).toBe(200);
expect(response.body).toEqual(mockData);
});
});
Loading

0 comments on commit 9f39339

Please sign in to comment.