mirror of
https://github.com/cheveguerra/whaticket-community.git
synced 2026-04-20 04:39:20 +00:00
chore: added users service unit tests
This commit is contained in:
@@ -8,7 +8,7 @@ module.exports = {
|
|||||||
// automock: false,
|
// automock: false,
|
||||||
|
|
||||||
// Stop running tests after `n` failures
|
// Stop running tests after `n` failures
|
||||||
// bail: 0,
|
bail: 1,
|
||||||
|
|
||||||
// The directory where Jest should store its cached dependency information
|
// The directory where Jest should store its cached dependency information
|
||||||
// cacheDirectory: "/tmp/jest_rs",
|
// cacheDirectory: "/tmp/jest_rs",
|
||||||
|
|||||||
@@ -1,41 +0,0 @@
|
|||||||
import { disconnect, truncate } from "../utils/database";
|
|
||||||
// import User from "../../models/User";
|
|
||||||
// import app from "../../app";
|
|
||||||
import CreateUserService from "../../services/UserServices/CreateUserService";
|
|
||||||
import AppError from "../../errors/AppError";
|
|
||||||
|
|
||||||
describe("User", () => {
|
|
||||||
beforeEach(async () => {
|
|
||||||
await truncate();
|
|
||||||
});
|
|
||||||
|
|
||||||
afterAll(async () => {
|
|
||||||
await disconnect();
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should be able to create a new user", async () => {
|
|
||||||
const user = await CreateUserService({
|
|
||||||
name: "dasdas",
|
|
||||||
email: "tesssst@test.com",
|
|
||||||
password: "passwo22221131rd"
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(user).toHaveProperty("id");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should not be able to create a user with duplicated email", async () => {
|
|
||||||
await CreateUserService({
|
|
||||||
name: "dasdas",
|
|
||||||
email: "tesssst@test.com",
|
|
||||||
password: "passwo22221131rd"
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(
|
|
||||||
CreateUserService({
|
|
||||||
name: "dasdas",
|
|
||||||
email: "tesssst@test.com",
|
|
||||||
password: "passwo22221131rd"
|
|
||||||
})
|
|
||||||
).rejects.toBeInstanceOf(AppError);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
66
backend/src/__tests__/unit/User/AuthUserService.spec.ts
Normal file
66
backend/src/__tests__/unit/User/AuthUserService.spec.ts
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
import faker from "faker";
|
||||||
|
import AppError from "../../../errors/AppError";
|
||||||
|
import AuthUserService from "../../../services/UserServices/AuthUserSerice";
|
||||||
|
import CreateUserService from "../../../services/UserServices/CreateUserService";
|
||||||
|
import { disconnect, truncate } from "../../utils/database";
|
||||||
|
|
||||||
|
describe("Auth", () => {
|
||||||
|
beforeEach(async () => {
|
||||||
|
await truncate();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(async () => {
|
||||||
|
await truncate();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(async () => {
|
||||||
|
await disconnect();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should be able to login with an existing user", async () => {
|
||||||
|
await CreateUserService({
|
||||||
|
name: faker.name.findName(),
|
||||||
|
email: "mail@test.com",
|
||||||
|
password: "hardpassword"
|
||||||
|
});
|
||||||
|
|
||||||
|
const response = await AuthUserService({
|
||||||
|
email: "mail@test.com",
|
||||||
|
password: "hardpassword"
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(response).toHaveProperty("token");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should not be able to login with not registered email", async () => {
|
||||||
|
try {
|
||||||
|
await AuthUserService({
|
||||||
|
email: faker.internet.email(),
|
||||||
|
password: faker.internet.password()
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
expect(err).toBeInstanceOf(AppError);
|
||||||
|
expect(err.statusCode).toBe(401);
|
||||||
|
expect(err.message).toBe("ERR_INVALID_CREDENTIALS");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should not be able to login with incorret password", async () => {
|
||||||
|
await CreateUserService({
|
||||||
|
name: faker.name.findName(),
|
||||||
|
email: "mail@test.com",
|
||||||
|
password: "hardpassword"
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
await AuthUserService({
|
||||||
|
email: "mail@test.com",
|
||||||
|
password: faker.internet.password()
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
expect(err).toBeInstanceOf(AppError);
|
||||||
|
expect(err.statusCode).toBe(401);
|
||||||
|
expect(err.message).toBe("ERR_INVALID_CREDENTIALS");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
47
backend/src/__tests__/unit/User/CreateUserService.spec.ts
Normal file
47
backend/src/__tests__/unit/User/CreateUserService.spec.ts
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
import faker from "faker";
|
||||||
|
import AppError from "../../../errors/AppError";
|
||||||
|
import CreateUserService from "../../../services/UserServices/CreateUserService";
|
||||||
|
import { disconnect, truncate } from "../../utils/database";
|
||||||
|
|
||||||
|
describe("User", () => {
|
||||||
|
beforeEach(async () => {
|
||||||
|
await truncate();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(async () => {
|
||||||
|
await truncate();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(async () => {
|
||||||
|
await disconnect();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should be able to create a new user", async () => {
|
||||||
|
const user = await CreateUserService({
|
||||||
|
name: faker.name.findName(),
|
||||||
|
email: faker.internet.email(),
|
||||||
|
password: faker.internet.password()
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(user).toHaveProperty("id");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should not be able to create a user with duplicated email", async () => {
|
||||||
|
await CreateUserService({
|
||||||
|
name: faker.name.findName(),
|
||||||
|
email: "teste@sameemail.com",
|
||||||
|
password: faker.internet.password()
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
await CreateUserService({
|
||||||
|
name: faker.name.findName(),
|
||||||
|
email: "teste@sameemail.com",
|
||||||
|
password: faker.internet.password()
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
expect(err).toBeInstanceOf(AppError);
|
||||||
|
expect(err.statusCode).toBe(400);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
35
backend/src/__tests__/unit/User/DeleteUserService.spec.ts
Normal file
35
backend/src/__tests__/unit/User/DeleteUserService.spec.ts
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
import faker from "faker";
|
||||||
|
import AppError from "../../../errors/AppError";
|
||||||
|
import CreateUserService from "../../../services/UserServices/CreateUserService";
|
||||||
|
import DeleteUserService from "../../../services/UserServices/DeleteUserService";
|
||||||
|
import { disconnect, truncate } from "../../utils/database";
|
||||||
|
|
||||||
|
describe("User", () => {
|
||||||
|
beforeEach(async () => {
|
||||||
|
await truncate();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(async () => {
|
||||||
|
await truncate();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(async () => {
|
||||||
|
await disconnect();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should be delete a existing user", async () => {
|
||||||
|
const { id } = await CreateUserService({
|
||||||
|
name: faker.name.findName(),
|
||||||
|
email: faker.internet.email(),
|
||||||
|
password: faker.internet.password()
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(DeleteUserService(id)).resolves.not.toThrow();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("to throw an error if tries to delete a non existing user", async () => {
|
||||||
|
expect(DeleteUserService(faker.random.number())).rejects.toBeInstanceOf(
|
||||||
|
AppError
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
34
backend/src/__tests__/unit/User/ListUserService.spec.ts
Normal file
34
backend/src/__tests__/unit/User/ListUserService.spec.ts
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
import faker from "faker";
|
||||||
|
import User from "../../../models/User";
|
||||||
|
import CreateUserService from "../../../services/UserServices/CreateUserService";
|
||||||
|
import ListUsersService from "../../../services/UserServices/ListUsersService";
|
||||||
|
import { disconnect, truncate } from "../../utils/database";
|
||||||
|
|
||||||
|
describe("User", () => {
|
||||||
|
beforeEach(async () => {
|
||||||
|
await truncate();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(async () => {
|
||||||
|
await truncate();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(async () => {
|
||||||
|
await disconnect();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should be able to list users", async () => {
|
||||||
|
await CreateUserService({
|
||||||
|
name: faker.name.findName(),
|
||||||
|
email: faker.internet.email(),
|
||||||
|
password: faker.internet.password()
|
||||||
|
});
|
||||||
|
|
||||||
|
const response = await ListUsersService({
|
||||||
|
pageNumber: 1
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(response).toHaveProperty("users");
|
||||||
|
expect(response.users[0]).toBeInstanceOf(User);
|
||||||
|
});
|
||||||
|
});
|
||||||
39
backend/src/__tests__/unit/User/ShowUserService.spec.ts
Normal file
39
backend/src/__tests__/unit/User/ShowUserService.spec.ts
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
import faker from "faker";
|
||||||
|
import AppError from "../../../errors/AppError";
|
||||||
|
import User from "../../../models/User";
|
||||||
|
import CreateUserService from "../../../services/UserServices/CreateUserService";
|
||||||
|
import ShowUserService from "../../../services/UserServices/ShowUserService";
|
||||||
|
import { disconnect, truncate } from "../../utils/database";
|
||||||
|
|
||||||
|
describe("User", () => {
|
||||||
|
beforeEach(async () => {
|
||||||
|
await truncate();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(async () => {
|
||||||
|
await truncate();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(async () => {
|
||||||
|
await disconnect();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should be able to find a user", async () => {
|
||||||
|
const newUser = await CreateUserService({
|
||||||
|
name: faker.name.findName(),
|
||||||
|
email: faker.internet.email(),
|
||||||
|
password: faker.internet.password()
|
||||||
|
});
|
||||||
|
|
||||||
|
const user = await ShowUserService(newUser.id);
|
||||||
|
|
||||||
|
expect(user).toHaveProperty("id");
|
||||||
|
expect(user).toBeInstanceOf(User);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should not be able to find a inexisting user", async () => {
|
||||||
|
expect(ShowUserService(faker.random.number())).rejects.toBeInstanceOf(
|
||||||
|
AppError
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
68
backend/src/__tests__/unit/User/UpdateUserService.spec.ts
Normal file
68
backend/src/__tests__/unit/User/UpdateUserService.spec.ts
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
import faker from "faker";
|
||||||
|
import AppError from "../../../errors/AppError";
|
||||||
|
import CreateUserService from "../../../services/UserServices/CreateUserService";
|
||||||
|
import UpdateUserService from "../../../services/UserServices/UpdateUserService";
|
||||||
|
import { disconnect, truncate } from "../../utils/database";
|
||||||
|
|
||||||
|
describe("User", () => {
|
||||||
|
beforeEach(async () => {
|
||||||
|
await truncate();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(async () => {
|
||||||
|
await truncate();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(async () => {
|
||||||
|
await disconnect();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should be able to find a user", async () => {
|
||||||
|
const newUser = await CreateUserService({
|
||||||
|
name: faker.name.findName(),
|
||||||
|
email: faker.internet.email(),
|
||||||
|
password: faker.internet.password()
|
||||||
|
});
|
||||||
|
|
||||||
|
const updatedUser = await UpdateUserService({
|
||||||
|
userId: newUser.id,
|
||||||
|
userData: {
|
||||||
|
name: "New name",
|
||||||
|
email: "newmail@email.com"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(updatedUser).toHaveProperty("name", "New name");
|
||||||
|
expect(updatedUser).toHaveProperty("email", "newmail@email.com");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should not be able to updated a inexisting user", async () => {
|
||||||
|
const userId = faker.random.number();
|
||||||
|
const userData = {
|
||||||
|
name: faker.name.findName(),
|
||||||
|
email: faker.internet.email()
|
||||||
|
};
|
||||||
|
|
||||||
|
expect(UpdateUserService({ userId, userData })).rejects.toBeInstanceOf(
|
||||||
|
AppError
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should not be able to updated an user with invalid data", async () => {
|
||||||
|
const newUser = await CreateUserService({
|
||||||
|
name: faker.name.findName(),
|
||||||
|
email: faker.internet.email(),
|
||||||
|
password: faker.internet.password()
|
||||||
|
});
|
||||||
|
|
||||||
|
const userId = newUser.id;
|
||||||
|
const userData = {
|
||||||
|
name: faker.name.findName(),
|
||||||
|
email: "test.worgn.email"
|
||||||
|
};
|
||||||
|
|
||||||
|
expect(UpdateUserService({ userId, userData })).rejects.toBeInstanceOf(
|
||||||
|
AppError
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import database from "../../database";
|
import database from "../../database";
|
||||||
|
|
||||||
const truncate = async (): Promise<void> => {
|
const truncate = async (): Promise<void> => {
|
||||||
await database.sync({ force: true });
|
await database.truncate({ force: true, cascade: true });
|
||||||
};
|
};
|
||||||
|
|
||||||
const disconnect = async (): Promise<void> => {
|
const disconnect = async (): Promise<void> => {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import AppError from "../../errors/AppError";
|
|||||||
import Ticket from "../../models/Ticket";
|
import Ticket from "../../models/Ticket";
|
||||||
import UpdateDeletedUserOpenTicketsStatus from "../../helpers/UpdateDeletedUserOpenTicketsStatus";
|
import UpdateDeletedUserOpenTicketsStatus from "../../helpers/UpdateDeletedUserOpenTicketsStatus";
|
||||||
|
|
||||||
const DeleteUserService = async (id: string): Promise<void> => {
|
const DeleteUserService = async (id: string | number): Promise<void> => {
|
||||||
const user = await User.findOne({
|
const user = await User.findOne({
|
||||||
where: { id }
|
where: { id }
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import User from "../../models/User";
|
|||||||
|
|
||||||
interface Request {
|
interface Request {
|
||||||
searchParam?: string;
|
searchParam?: string;
|
||||||
pageNumber?: string;
|
pageNumber?: string | number;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Response {
|
interface Response {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ interface UserData {
|
|||||||
|
|
||||||
interface Request {
|
interface Request {
|
||||||
userData: UserData;
|
userData: UserData;
|
||||||
userId: string;
|
userId: string | number;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Response {
|
interface Response {
|
||||||
|
|||||||
Reference in New Issue
Block a user