Skip to content

Commit

Permalink
ESLint Configuration PreCommit format and Test
Browse files Browse the repository at this point in the history
  • Loading branch information
IRUMVAEmmanuel1 committed Apr 25, 2024
1 parent 1a54b1d commit 0f709f6
Show file tree
Hide file tree
Showing 33 changed files with 1,009 additions and 884 deletions.
2 changes: 2 additions & 0 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
npm run pre-commit
npm run test
5 changes: 5 additions & 0 deletions .prettierrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"semi": true,
"tabWidth": 2,
"useTabs": true
}
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
22 changes: 11 additions & 11 deletions __test__/home.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,17 @@ import app from "../src/utils/server";
import sequelize, { connect } from "../src/config/dbConnection";

describe("Testing Home route", () => {
beforeAll(async () => {
try {
await connect();
} catch (error) {
sequelize.close();
}
}, 20000);
beforeAll(async () => {
try {
await connect();
} catch (error) {
sequelize.close();
}
}, 20000);

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

expect(response.status).toBe(200);
}, 20000);
expect(response.status).toBe(200);
}, 20000);
});
138 changes: 73 additions & 65 deletions __test__/user.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,74 +5,82 @@ 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"
}
const loginData: any = {
email: "[email protected]",
password: "test1234",
};
describe("Testing user Routes", () => {
beforeAll(async () => {
try {
await connect();
await User.destroy({truncate:true})
} catch (error) {
sequelize.close();
}
}, 20000);
beforeAll(async () => {
try {
await connect();
await User.destroy({ truncate: true });
} catch (error) {
sequelize.close();
}
}, 20000);

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);
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);

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 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);

expect(response.status).toBe(400); }, 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 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();
});
})
expect(response.status).toBe(400);
}, 20000);
});
});

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();
});
51 changes: 51 additions & 0 deletions eslint.config.cjs
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
18 changes: 9 additions & 9 deletions index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ import { env } from "./src/utils/env";
import app from "./src/utils/server";

app.listen(env.port, async () => {
await connect();
await sequelize
.sync()
.then(() => {
console.log(` db synced and server is running on port ${env.port}`);
})
.catch((error: any) => {
console.log(error.message);
});
await connect();
await sequelize
.sync()
.then(() => {
console.log(" db synced and server is running");
})
.catch((error: any) => {
console.log(error.message);
});
});
16 changes: 8 additions & 8 deletions jest.config.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
module.exports = {
preset: "ts-jest",
testEnvironment: "node",
testMatch: ["**/**/*.test.ts"],
verbose: true,
forceExit: true,
clearMocks: true,
resetMocks: true,
restoreMocks: true,
preset: "ts-jest",
testEnvironment: "node",
testMatch: ["**/**/*.test.ts"],
verbose: true,
forceExit: true,
clearMocks: true,
resetMocks: true,
restoreMocks: true,
};
Loading

0 comments on commit 0f709f6

Please sign in to comment.