Skip to content

Commit

Permalink
Merge pull request #16 from atlp-rwanda/ch-eslintPreCommit-test-forma…
Browse files Browse the repository at this point in the history
…t-#187419154

ESLint Configuration PreCommit format and Test
  • Loading branch information
teerenzo authored Apr 25, 2024
2 parents 1a54b1d + f47f284 commit ac7da2f
Show file tree
Hide file tree
Showing 31 changed files with 481 additions and 395 deletions.
14 changes: 14 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
[*]
charset = utf-8
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true
max_line_length = 160

[*.ts]
quote_type = single

[*.md]
max_line_length = off
trim_trailing_whitespace = false
1 change: 1 addition & 0 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
npm run test
10 changes: 10 additions & 0 deletions .prettierrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"tabWidth": 2,
"useTabs": false,
"singleQuote": false,
"semi": true,
"bracketSpacing": true,
"arrowParens": "always",
"bracketSameLine": true,
"endOfLine": "auto"
}
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
# eagles-ec-be

<div style="display: flex; justify-content: center;" align="center">

<img src="https://codecov.io/gh/soleil00/eagles-ec-be/branch/dev/graph/badge.svg?token=9c1e8e93-1062-4e49-a58d-b2777a75fb70" alt="Codecov" >
<img alt="GitHub Actions Workflow Status" src="https://img.shields.io/github/actions/workflow/status/atlp-rwanda/eagles-ec-be/deploy.yml" >
<a href="https://codeclimate.com/github/atlp-rwanda/eagles-ec-be/maintainability"><img src="https://api.codeclimate.com/v1/badges/dfe8454356fb9da65407/maintainability" /></a>
<img alt="Static Badge" src="https://img.shields.io/badge/Reviewed_By-HoundCI-blue?style=flat-square">

</div>

Expand Down
4 changes: 2 additions & 2 deletions __test__/home.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ describe("Testing Home route", () => {
} catch (error) {
sequelize.close();
}
}, 20000);
}, 40000);

test("servr should return status code of 200 --> given'/'", async () => {
const response = await request(app).get("/");

expect(response.status).toBe(200);
}, 20000);
}, 40000);
});
116 changes: 58 additions & 58 deletions __test__/user.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,74 +5,74 @@ import User from "../src/sequelize/models/users";
import * as userServices from "../src/services/user.service";
import sequelize, { connect } from "../src/config/dbConnection";

const userData:any = {
name: 'yvanna',
username: 'testuser',
email: '[email protected]',
password:'test1234',
};
const userData: any = {
name: "yvanna",
username: "testuser",
email: "[email protected]",
password: "test1234",
};

const loginData:any = {
email:'[email protected]',
password:"test1234"
}
describe("Testing user Routes", () => {
const loginData: any = {
email: "[email protected]",
password: "test1234",
};
describe("Testing a user Routes", () => {
beforeAll(async () => {
try {
await connect();
await User.destroy({truncate:true})
await User.destroy({ truncate: true });
} catch (error) {
sequelize.close();
}
}, 20000);
}, 40000);

afterAll(async () => {
afterAll(async () => {
await User.destroy({ truncate: true });
await sequelize.close();
});
describe("Testing user authentication", () => {
test('should return 201 and create a new user when registering successfully', async () => {
const response = await request(app)
.post('/api/v1/users/register')
.send(userData);
expect(response.status).toBe(201); }, 20000);
await sequelize.close();
});
describe("Testing user authentication", () => {
test("should return 201 and create a new user when registering successfully", async () => {
const response = await request(app).post("/api/v1/users/register").send(userData);
expect(response.status).toBe(201);
}, 40000);

test("should return 409 when registering with an existing email", async () => {
User.create(userData);
const response = await request(app).post("/api/v1/users/register").send(userData);
expect(response.status).toBe(409);
}, 40000);

test('should return 409 when registering with an existing email', async () => {
User.create(userData)
const response = await request(app)
.post('/api/v1/users/register')
.send(userData);
expect(response.status).toBe(409); }, 20000);
test("should return 400 when registering with an invalid credential", async () => {
const userData = {
email: "[email protected]",
name: "",
username: "existinguser",
};
const response = await request(app).post("/api/v1/users/register").send(userData);

test('should return 400 when registering with an invalid credential', async () => {
const userData = {
email: '[email protected]', name: "", username: 'existinguser', };
const response = await request(app)
.post('/api/v1/users/register')
.send(userData);

expect(response.status).toBe(400); }, 20000); });
expect(response.status).toBe(400);
}, 40000);
});
});

test("should return all users in db --> given '/api/v1/users'", async () => {
const spy = jest.spyOn(User, "findAll");
const spy2 = jest.spyOn(userServices, "getAllUsers");
const response = await request(app).get("/api/v1/users");
expect(spy).toHaveBeenCalled();
expect(spy2).toHaveBeenCalled();
}, 20000);
test("Should return status 401 to indicate Unauthorized user",async() =>{
const loggedInUser ={
email:userData.email,
password:"test",
};
const spyonOne = jest.spyOn(User,"findOne").mockResolvedValueOnce({
//@ts-ignore
email:userData.email,
password:loginData.password,
});
const response = await request(app).post("/api/v1/users/login")
.send(loggedInUser)
expect(response.body.status).toBe(401);
spyonOne.mockRestore();
test("should return all users in db --> given '/api/v1/users'", async () => {
const spy = jest.spyOn(User, "findAll");
const spy2 = jest.spyOn(userServices, "getAllUsers");
const response = await request(app).get("/api/v1/users");
expect(spy).toHaveBeenCalled();
expect(spy2).toHaveBeenCalled();
}, 40000);
test("Should return status 401 to indicate Unauthorized user", async () => {
const loggedInUser = {
email: userData.email,
password: "test",
};
const spyonOne = jest.spyOn(User, "findOne").mockResolvedValueOnce({
//@ts-ignore
email: userData.email,
password: loginData.password,
});
})
const response = await request(app).post("/api/v1/users/login").send(loggedInUser);
expect(response.body.status).toBe(401);
spyonOne.mockRestore();
});
51 changes: 51 additions & 0 deletions eslint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
const eslint = require("@eslint/js");
const tseslint = require("typescript-eslint");

module.exports = tseslint.config(
{
ignores: ["**/__test__", "**/*.json"],
},
eslint.configs.recommended,
...tseslint.configs.recommended,
{
languageOptions: {
parserOptions: {
project: true,
ecmaVersion: 2020,
},
},
},
{
files: ["*.ts", "*.js"],
...tseslint.configs.disableTypeChecked,
},
{
files: ["*.test *.js"],
rules: {
"@typescript-eslint/no-unused-vars": 0,
"@typescript-eslint/no-unsafe-call": 0,
languageOptions: {
globals: {
it: "readonly",
describe: "readonly",
},
},
},
},
{
rules: {
semi: "error",
"@typescript-eslint/no-unused-vars": 2,
"@typescript-eslint/no-explicit-any": 0,
"@typescript-eslint/no-var-requires": 0,
"no-shadow": [2, { allow: ["req", "res", "err"] }],
"new-cap": 0,
"one-var-declaration-per-line": 0,
"consistent-return": 0,
"no-param-reassign": 0,
"comma-dangle": 0,
"no-undef": 0,
curly: ["error", "multi-line"],
},
},
);
9 changes: 9 additions & 0 deletions hound.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
eslint:
enabled: true
file_patterns:
- "*.js"
- "*.ts"
enabled_plugins:
- eslint-plugin-import
- eslint-plugin-prettier
- eslint-plugin:@typescript-eslint
2 changes: 1 addition & 1 deletion index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ app.listen(env.port, async () => {
await sequelize
.sync()
.then(() => {
console.log(` db synced and server is running on port ${env.port}`);
console.log(" db synced and server is running");
})
.catch((error: any) => {
console.log(error.message);
Expand Down
34 changes: 29 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,39 @@
"main": "index.ts",
"scripts": {
"start": "",
"pre-commit": "prettier . --write && eslint .",
"lint": "eslint .",
"dev": "nodemon index.ts",
"build": "tsc",
"migrate": "npx sequelize-cli db:migrate",
"seed": "npx sequelize-cli db:seed:all",
"lint": "npx eslint .",
"lint:fix": "npx eslint --fix .",
"test": "cross-env NODE_ENV=test jest --detectOpenHandles --coverage"
"test": "cross-env NODE_ENV=test jest --detectOpenHandles --coverage",
"prepare": "husky",
"prettier": "prettier . --write"
},
"lint-staged": {
".ts": [
"npm run lint:fix"
],
"**/*": "prettier --write"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest",
"prettier"
]
},
"husky": {
"hooks": {
"pre-commit": "npm run lint-staged && npm run test"
}
},
"author": "atlp",
"license": "MIT",
"devDependencies": {
"@eslint/js": "^9.0.0",
"@eslint/js": "^9.1.1",
"@types/bcryptjs": "^2.4.6",
"@types/cors": "^2.8.17",
"@types/dotenv": "^8.2.0",
Expand All @@ -26,7 +47,7 @@
"@types/node": "^20.12.7",
"@types/supertest": "^6.0.2",
"@types/swagger-ui-express": "^4.1.6",
"@typescript-eslint/eslint-plugin": "^7.6.0",
"@typescript-eslint/eslint-plugin": "^7.7.1",
"@typescript-eslint/parser": "^7.6.0",
"eslint": "^8.57.0",
"eslint-config-airbnb-base": "^15.0.0",
Expand All @@ -36,6 +57,7 @@
"globals": "^15.0.0",
"jest": "^29.7.0",
"nodemon": "^3.1.0",
"pre-commit": "^1.2.2",
"prettier": "^3.2.5",
"sequelize-cli": "^6.6.2",
"supertest": "^6.3.4",
Expand All @@ -54,8 +76,10 @@
"dotenv": "^16.4.5",
"email-validator": "^2.0.4",
"express": "^4.19.2",
"joi": "^17.12.3",
"husky": "^9.0.11",
"joi": "^17.13.0",
"jsonwebtoken": "^9.0.2",
"lint-staged": "^15.2.2",
"path": "^0.12.7",
"pg": "^8.11.5",
"pg-hstore": "^2.3.4",
Expand Down
7 changes: 3 additions & 4 deletions src/config/dbConnection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@ import { env } from "../utils/env";

const envT = process.env.NODE_ENV;

const sequelize = new Sequelize(envT === "test" ? env.test_db_url : env.db_url,{
dialect: 'postgres',
})

const sequelize = new Sequelize(envT === "test" ? env.test_db_url : env.db_url, {
dialect: "postgres",
});

export const connect = async () => {
try {
Expand Down
Loading

0 comments on commit ac7da2f

Please sign in to comment.