-
Notifications
You must be signed in to change notification settings - Fork 4
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
Ft google auth #187419170 #27
Changes from all commits
68e9929
640b1b5
bd9384b
df19038
12b02a5
b0fc4f4
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
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 |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,8 @@ | ||
PORT = 3000 | ||
DB_CONNECTION = "" --> TODO: put your own connection string here | ||
TEST_DB = ""-->TODO: put your own testing database connection string here | ||
JWT_SECRET = ""-->TODO: put your own jsonwebtoken scret here | ||
JWT_SECRET = ""-->TODO: put your own jsonwebtoken scret here | ||
|
||
GOOGLE_CLIENT_ID="" use yours | ||
GOOGLE_CLIENT_SECRET="" use yours | ||
GOOGLE_CALLBACK_URL="" use yours |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
/node_modules | ||
/.env | ||
/package-lock.json | ||
/coverage | ||
/coverage | ||
/.vscode |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
npm run test |
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" | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,54 +4,67 @@ import app from "../src/utils/server"; | |
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 userTestData = { | ||
newPassword: "Test@123", | ||
confirmPassword: "Test@123", | ||
wrongPassword: "Test456", | ||
}; | ||
|
||
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}) | ||
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(); | ||
}); | ||
let token: any; | ||
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); | ||
|
||
expect(response.status).toBe(400); | ||
}, 20000); | ||
}); | ||
|
||
test("should return all users in db --> given '/api/v1/users'", async () => { | ||
const spy = jest.spyOn(User, "findAll"); | ||
|
@@ -60,19 +73,36 @@ test('should return 400 when registering with an invalid credential', async () = | |
expect(spy).toHaveBeenCalled(); | ||
expect(spy2).toHaveBeenCalled(); | ||
}, 20000); | ||
test("Should return status 401 to indicate Unauthorized user",async() =>{ | ||
const loggedInUser ={ | ||
email:userData.email, | ||
password:"test", | ||
test("Should return status 401 to indicate Unauthorized user", async () => { | ||
const loggedInUser = { | ||
email: userData.email, | ||
password: "test", | ||
}; | ||
const spyonOne = jest.spyOn(User,"findOne").mockResolvedValueOnce({ | ||
const spyonOne = jest.spyOn(User, "findOne").mockResolvedValueOnce({ | ||
//@ts-ignore | ||
email:userData.email, | ||
password:loginData.password, | ||
email: userData.email, | ||
password: loginData.password, | ||
}); | ||
const response = await request(app).post("/api/v1/users/login") | ||
.send(loggedInUser) | ||
const response = await request(app) | ||
.post("/api/v1/users/login") | ||
.send(loggedInUser); | ||
expect(response.body.status).toBe(401); | ||
spyonOne.mockRestore(); | ||
}); | ||
}) | ||
|
||
|
||
describe("Testing Google auth", () => { | ||
test('It should return Google login page with redirect status code (302), correct headers,', async () => { | ||
const response = await request(app).get('/api/v1/users/login/google'); | ||
expect(response.status).toBe(302); | ||
expect(response.headers).toHaveProperty('location'); | ||
}, 20000); | ||
|
||
test('Callback endpoint should redirect to success route after successful authentication', async () => { | ||
const response = await request(app).get('/api/v1/users/auth/google/callback'); | ||
expect(response.status).toBe(302); | ||
expect(response.header['location']).toContain("redirect_uri"); | ||
}); | ||
|
||
}); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
const eslint = require("@eslint/js"); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 'const' is available in ES6 (use 'esversion: 6') or Mozilla JS extensions (use moz). There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 'const' is available in ES6 (use 'esversion: 6') or Mozilla JS extensions (use moz). There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 'const' is available in ES6 (use 'esversion: 6') or Mozilla JS extensions (use moz). There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 'const' is available in ES6 (use 'esversion: 6') or Mozilla JS extensions (use moz). |
||
const tseslint = require("typescript-eslint"); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 'const' is available in ES6 (use 'esversion: 6') or Mozilla JS extensions (use moz). There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 'const' is available in ES6 (use 'esversion: 6') or Mozilla JS extensions (use moz). There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 'const' is available in ES6 (use 'esversion: 6') or Mozilla JS extensions (use moz). There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 'const' is available in ES6 (use 'esversion: 6') or Mozilla JS extensions (use moz). There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 'const' is available in ES6 (use 'esversion: 6') or Mozilla JS extensions (use moz). |
||
|
||
module.exports = tseslint.config( | ||
{ | ||
ignores: ["**/__test__", "**/*.json"], | ||
}, | ||
eslint.configs.recommended, | ||
...tseslint.configs.recommended, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 'spread/rest operator' is only available in ES6 (use 'esversion: 6'). There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 'spread/rest operator' is only available in ES6 (use 'esversion: 6'). There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 'spread/rest operator' is only available in ES6 (use 'esversion: 6'). There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 'spread/rest operator' is only available in ES6 (use 'esversion: 6'). There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 'spread/rest operator' is only available in ES6 (use 'esversion: 6'). |
||
{ | ||
languageOptions: { | ||
parserOptions: { | ||
project: true, | ||
ecmaVersion: 2020, | ||
}, | ||
}, | ||
}, | ||
{ | ||
files: ["*.ts", "*.js"], | ||
...tseslint.configs.disableTypeChecked, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Expected ')' and instead saw 'tseslint'. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Expected ')' and instead saw 'tseslint'. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Expected ')' and instead saw 'tseslint'. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Expected ')' and instead saw 'tseslint'. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Expected ')' and instead saw 'tseslint'. |
||
}, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Unexpected '}'. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Unexpected '}'. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Unexpected '}'. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Unexpected '}'. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Unexpected '}'. |
||
{ | ||
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"], | ||
}, | ||
}, | ||
); |
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
'const' is available in ES6 (use 'esversion: 6') or Mozilla JS extensions (use moz).