123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- const jwt = require("jsonwebtoken");
- require("dotenv").config();
- const request = require("supertest");
- const { User, contacts, newContact } = require("../model/__mocks__/data");
- const app = require("../app");
- const SECRET_KEY = process.env.JWT_SECRET;
- const issueToken = (payload, secret) => jwt.sign(payload, secret);
- const token = issueToken({ id: User._id }, SECRET_KEY);
- User.token = token;
- const wrongId = "lol";
- const wrongToken = "lol";
- const contact = contacts[0];
- jest.mock("../model/contact.js");
- jest.mock("../model/user.js");
- describe("Test for route /api/contacts", () => {
- let idNewContact;
- describe("should handle request PATCH contact by id ", () => {
- it("should return 200 on request PATCH contact", async (done) => {
- const res = await request(app)
- .patch(`/api/contacts/${contact._id}`)
- .set("Authorization", `Bearer ${token}`)
- .send({ phone: "0995688412" })
- .set("Accept", "application/json");
- expect(res.status).toEqual(200);
- done();
- });
- it("should return 404 on request PATCH contacts by id", async (done) => {
- const res = await request(app)
- .patch(`/api/contacts/${wrongId}`)
- .set("Authorization", `Bearer ${token}`)
- .send({ name: "Grigore" });
- expect(res.status).toEqual(404);
- expect(res.body).toBeDefined();
- done();
- });
- it("should return 403 on request on request PATCH contacts by id without token", async (done) => {
- const res = await request(app)
- .patch(`/api/contacts/${contact._id}`)
- .set("Authorization", `Bearer ${wrongToken}`)
- .send({ name: "Grigore" })
- .set("Accept", "application/json");
- expect(res.status).toEqual(403);
- expect(res.body).toBeDefined();
- done();
- });
- it("should return 500 on request on request PATCH with wrong filed", async (done) => {
- const res = await request(app)
- .patch(`/api/contacts/${contact._id}`)
- .set("Authorization", `Bearer ${token}`)
- .send({ WrongField: "Grigore" })
- .set("Accept", "application/json");
- expect(res.status).toEqual(500);
- expect(res.body).toBeDefined();
- done();
- });
- });
- describe("should handle GET request", () => {
- it("should return 200 on GET request All contacts", async (done) => {
- const res = await request(app)
- .get(`/api/contacts`)
- .set("Authorization", `Bearer ${token}`);
- expect(res.status).toEqual(200);
- expect(res.body).toBeDefined();
- expect(res.body.data.contacts).toBeInstanceOf(Array);
- done();
- });
- it("should return 403 on GET request All contacts by wrong token", async (done) => {
- const res = await request(app)
- .get(`/api/contacts`)
- .set("Authorization", `Bearer ${wrongToken}`);
- expect(res.status).toEqual(403);
- expect(res.body).toBeDefined();
- done();
- });
- it("should return 200 on request GET contact by ID", async (done) => {
- const res = await request(app)
- .get(`/api/contacts/${contact._id}`)
- .set("Authorization", `Bearer ${token}`);
- expect(res.status).toEqual(200);
- expect(res.body).toBeDefined();
- expect(res.body.data.contact).toHaveProperty("_id");
- expect(res.body.data.contact._id).toBe(contact._id);
- done();
- });
- it("should return 403 on GET request GET contact by ID by wrong token", async (done) => {
- const res = await request(app)
- .get(`/api/contacts/${contact._id}`)
- .set("Authorization", `Bearer ${wrongToken}`);
- expect(res.status).toEqual(403);
- expect(res.body).toBeDefined();
- done();
- });
- it("should return 404 on request GET contact by wrong ID", async (done) => {
- const res = await request(app)
- .get(`/api/contacts/${wrongId}`)
- .set("Authorization", `Bearer ${token}`);
- expect(res.status).toEqual(404);
- expect(res.body).toBeDefined();
- done();
- });
- });
- describe("should handle POST request", () => {
- it("should return 201 on request POST create new contact", async (done) => {
- const res = await request(app)
- .post(`/api/contacts`)
- .set("Authorization", `Bearer ${token}`)
- .send(newContact)
- .set("Accept", "application/json");
- expect(res.status).toEqual(201);
- expect(res.body).toBeDefined();
- idNewContact = res.body.data.contact._id;
- done();
- });
- it("should return 500 on request POST with wrong field or fields", async (done) => {
- const res = await request(app)
- .post(`/api/contacts`)
- .set("Authorization", `Bearer ${token}`)
- .send({ ...newContact, wrongFiled: "axe" })
- .set("Accept", "application/json");
- expect(res.status).toEqual(500);
- expect(res.body).toBeDefined();
- done();
- });
- it("should return 500 on request POST without required fields like : name,email,phone,password,subscription", async (done) => {
- const res = await request(app)
- .post(`/api/contacts`)
- .set("Authorization", `Bearer ${token}`)
- .send({ name: "Simon" })
- .set("Accept", "application/json");
- expect(res.status).toEqual(500);
- expect(res.body).toBeDefined();
- done();
- });
- it("should return 403 on request POST without token", async (done) => {
- const res = await request(app)
- .post(`/api/contacts`)
- .set("Authorization", `Bearer ${wrongToken}`)
- .send(newContact)
- .set("Accept", "application/json");
- expect(res.status).toEqual(403);
- expect(res.body).toBeDefined();
- done();
- });
- });
- describe("should handle request DELETE contact by id ", () => {
- it("should return 201 on request DELETE contact", async (done) => {
- const res = await request(app)
- .delete(`/api/contacts/${contact._id}`)
- .set("Authorization", `Bearer ${token}`);
- expect(res.status).toEqual(200);
- expect(res.body).toBeDefined();
- contacts.pop(contact);
- done();
- });
- it("should return 404 on request DELETE contacts by id", async (done) => {
- const res = await request(app)
- .delete(`/api/contacts/${wrongId}`)
- .set("Authorization", `Bearer ${token}`);
- expect(res.status).toEqual(404);
- expect(res.body).toBeDefined();
- done();
- });
- it("should return 403 on request on request DELETE contacts by id without token", async (done) => {
- const res = await request(app)
- .delete(`/api/contacts/${contact._id}`)
- .set("Authorization", `Bearer ${wrongToken}`);
- expect(res.status).toEqual(403);
- expect(res.body).toBeDefined();
- done();
- });
- });
- });
|