Skip to content

Commit

Permalink
Merge branch 'develop' into jota
Browse files Browse the repository at this point in the history
  • Loading branch information
UO277938 committed Apr 9, 2024
2 parents e4418cb + cc985c5 commit 9072640
Show file tree
Hide file tree
Showing 8 changed files with 668 additions and 135 deletions.
57 changes: 29 additions & 28 deletions 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,43 +67,29 @@ 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});
}
});

app.get('/updateCorrectAnswers', async (req, res) => {
console.log(req.query)
const params = {username: req.query.username, numAnswers: req.query.numAnswers};
try{
const updateStatsResponse = await axios.get(userServiceUrl+ `/updateCorrectAnswers?params=${params}`)
res.json(updateStatsResponse.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' });
}
}
});

app.get('/updateIncorrectAnswers', async (req, res) => {
const params = {username: req.query.username, numAnswers: req.query.numAnswers};
try{
const updateStatsResponse = await axios.get(userServiceUrl+ `/updateIncorrectAnswers?params=${params}`)
app.get('/updateStats', async (req, res) => {
//const params = {username: req.query.username, numAnswers: req.query.numAnswers};
const { username, numRespuestasCorrectas, numRespuestasIncorrectas} = req.query;
console.log("username: "+username);
console.log("correctas: "+numRespuestasCorrectas);
console.log("incorrectas: "+numRespuestasIncorrectas);
try{
const updateStatsResponse = await axios.get(userServiceUrl+ `/updateStats?username=${username}&numRespuestasCorrectas=${numRespuestasCorrectas}&numRespuestasIncorrectas=${numRespuestasIncorrectas}`)
res.json(updateStatsResponse.data);
}catch(error){
res.status(error.response.status).json({error: error.response.data.error});
}
});

app.get('/updateCompletedGames', async (req, res) => {
const { username } = req.query;
try{
const updateStatsResponse = await axios.get(userServiceUrl+ `/updateCompletedGames?username=${username}`)
res.json(updateStatsResponse.data);
}catch(error){
res.status(error.response.status).json({error: error.response.data.error});
}
});



app.get('/getUserData', async (req, res) => {
console.log(req.query)
const { username } = req.query;
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 9072640

Please sign in to comment.