Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Questionservice Tests and Refactoring #78

Merged
merged 8 commits into from
Mar 21, 2024
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,12 @@ jobs:
node-version: 20
- run: npm --prefix users/authservice ci
- run: npm --prefix users/userservice ci
- run: npm --prefix questionservice ci
- run: npm --prefix gatewayservice ci
- run: npm --prefix webapp ci
- run: npm --prefix users/authservice test -- --coverage
- run: npm --prefix users/userservice test -- --coverage
- run: npm --prefix questionservice test -- --coverage
- run: npm --prefix gatewayservice test -- --coverage
- run: npm --prefix webapp test -- --coverage
- name: Analyze with SonarCloud
Expand Down
8 changes: 8 additions & 0 deletions questionservice/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
silent: true, // Adding to avoid showing logs from code or errors generated by testing!!
// They are not "suppressing" any error!! Just to have a clean console :)

};
75 changes: 74 additions & 1 deletion questionservice/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 4 additions & 2 deletions questionservice/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"dev": "nodemon src/index.ts",
"start": "npm run tsc && npm run build",
"build": "node build/index.js",
"tsc": "tsc",
"tsc": "tsc --project tsconfig.prod.json",
"test": "jest"
},
"repository": {
Expand All @@ -32,11 +32,13 @@
"devDependencies": {
"@types/bcrypt": "^5.0.2",
"@types/express": "^4.17.21",
"@types/jsonwebtoken": "^9.0.2",
"@types/jest": "^29.5.12",
"@types/jsonwebtoken": "^9.0.6",
"jest": "^29.7.0",
"mongodb-memory-server": "^9.1.5",
"nodemon": "^3.1.0",
"supertest": "^6.3.4",
"ts-jest": "^29.1.2",
"ts-node": "^10.9.2",
"typescript": "^5.3.3"
}
Expand Down
59 changes: 15 additions & 44 deletions questionservice/src/controllers/question-controller.ts
Original file line number Diff line number Diff line change
@@ -1,57 +1,28 @@
import { Request, Response } from 'express';
import { generateQuestions } from '../services/question-generator';
import { validateNumber, validateSizePresent } from '../utils/validations';

const generateQuestionsController = async (req: Request, res: Response) => {

try {
const requestedParam = req.query.size;

// A number of question ?size=x has been provided. Checking if present
if (requestedParam) {
const size = parseInt(requestedParam as string, 10);

// Checking parameter is a number
if (isNaN(size)) {

res.status(400).json({
status: 'fail',
data: {
size: 'The size parameter must be a number',
},
});

} else {

// Obtaining questions...
try{
const questions = await generateQuestions(size)
res.json(questions)

} catch(err){ // Rethrowing error if anything occurs...
throw err
}

}


} else {

res.status(400).json({
status: 'fail',
data: {
size: 'You need to provide a size for questions to be generated!',
},
validateSizePresent(req);
// The sieze is a number
let size = validateNumber(requestedParam as string);
// Obtaining questions...
try {
const questions = await generateQuestions(size)
res.json(questions)
} catch (err) { // Rethrowing error if anything occurs...
res.status(500).json({
status: 'error',
message: "Can't generate questions! Internal server error",
});

}

} catch (error) {

res.status(500).json({
status: 'error',
message: "Can't generate questions! Internal server error",
});

} catch (error: any) {
res.status(400).json({ status: 'fail', data: { error: error.message } });
}
};

Expand Down
16 changes: 11 additions & 5 deletions questionservice/src/routes/question-routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,17 @@ const router = express.Router();
router.get('/questions', generateQuestionsController);

// Default endpoint
router.get('/', (_req,res) =>{
res.json({
serviceName: "Question Service",
greet: "Hello! I think you are trying to connect to the Question Service. Pls," +
"access through other endpoint like /questions?size=10"
router.get('/*', (_req,res) =>{

res.status(200).json({
status:"success",
data:{
serviceName: "Question Service",
health: "Operative",
greet: "Hello! I think you are trying to connect to the Question Service. Pls," +
"access through other endpoint like /questions?size=10"
}

});
});

Expand Down
Loading