contacts.e2.test.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. const jwt = require("jsonwebtoken");
  2. require("dotenv").config();
  3. const request = require("supertest");
  4. const { User, contacts, newContact } = require("../model/__mocks__/data");
  5. const app = require("../app");
  6. const SECRET_KEY = process.env.JWT_SECRET;
  7. const issueToken = (payload, secret) => jwt.sign(payload, secret);
  8. const token = issueToken({ id: User._id }, SECRET_KEY);
  9. User.token = token;
  10. const wrongId = "lol";
  11. const wrongToken = "lol";
  12. const contact = contacts[0];
  13. jest.mock("../model/contact.js");
  14. jest.mock("../model/user.js");
  15. describe("Test for route /api/contacts", () => {
  16. let idNewContact;
  17. describe("should handle request PATCH contact by id ", () => {
  18. it("should return 200 on request PATCH contact", async (done) => {
  19. const res = await request(app)
  20. .patch(`/api/contacts/${contact._id}`)
  21. .set("Authorization", `Bearer ${token}`)
  22. .send({ phone: "0995688412" })
  23. .set("Accept", "application/json");
  24. expect(res.status).toEqual(200);
  25. done();
  26. });
  27. it("should return 404 on request PATCH contacts by id", async (done) => {
  28. const res = await request(app)
  29. .patch(`/api/contacts/${wrongId}`)
  30. .set("Authorization", `Bearer ${token}`)
  31. .send({ name: "Grigore" });
  32. expect(res.status).toEqual(404);
  33. expect(res.body).toBeDefined();
  34. done();
  35. });
  36. it("should return 403 on request on request PATCH contacts by id without token", async (done) => {
  37. const res = await request(app)
  38. .patch(`/api/contacts/${contact._id}`)
  39. .set("Authorization", `Bearer ${wrongToken}`)
  40. .send({ name: "Grigore" })
  41. .set("Accept", "application/json");
  42. expect(res.status).toEqual(403);
  43. expect(res.body).toBeDefined();
  44. done();
  45. });
  46. it("should return 500 on request on request PATCH with wrong filed", async (done) => {
  47. const res = await request(app)
  48. .patch(`/api/contacts/${contact._id}`)
  49. .set("Authorization", `Bearer ${token}`)
  50. .send({ WrongField: "Grigore" })
  51. .set("Accept", "application/json");
  52. expect(res.status).toEqual(500);
  53. expect(res.body).toBeDefined();
  54. done();
  55. });
  56. });
  57. describe("should handle GET request", () => {
  58. it("should return 200 on GET request All contacts", async (done) => {
  59. const res = await request(app)
  60. .get(`/api/contacts`)
  61. .set("Authorization", `Bearer ${token}`);
  62. expect(res.status).toEqual(200);
  63. expect(res.body).toBeDefined();
  64. expect(res.body.data.contacts).toBeInstanceOf(Array);
  65. done();
  66. });
  67. it("should return 403 on GET request All contacts by wrong token", async (done) => {
  68. const res = await request(app)
  69. .get(`/api/contacts`)
  70. .set("Authorization", `Bearer ${wrongToken}`);
  71. expect(res.status).toEqual(403);
  72. expect(res.body).toBeDefined();
  73. done();
  74. });
  75. it("should return 200 on request GET contact by ID", async (done) => {
  76. const res = await request(app)
  77. .get(`/api/contacts/${contact._id}`)
  78. .set("Authorization", `Bearer ${token}`);
  79. expect(res.status).toEqual(200);
  80. expect(res.body).toBeDefined();
  81. expect(res.body.data.contact).toHaveProperty("_id");
  82. expect(res.body.data.contact._id).toBe(contact._id);
  83. done();
  84. });
  85. it("should return 403 on GET request GET contact by ID by wrong token", async (done) => {
  86. const res = await request(app)
  87. .get(`/api/contacts/${contact._id}`)
  88. .set("Authorization", `Bearer ${wrongToken}`);
  89. expect(res.status).toEqual(403);
  90. expect(res.body).toBeDefined();
  91. done();
  92. });
  93. it("should return 404 on request GET contact by wrong ID", async (done) => {
  94. const res = await request(app)
  95. .get(`/api/contacts/${wrongId}`)
  96. .set("Authorization", `Bearer ${token}`);
  97. expect(res.status).toEqual(404);
  98. expect(res.body).toBeDefined();
  99. done();
  100. });
  101. });
  102. describe("should handle POST request", () => {
  103. it("should return 201 on request POST create new contact", async (done) => {
  104. const res = await request(app)
  105. .post(`/api/contacts`)
  106. .set("Authorization", `Bearer ${token}`)
  107. .send(newContact)
  108. .set("Accept", "application/json");
  109. expect(res.status).toEqual(201);
  110. expect(res.body).toBeDefined();
  111. idNewContact = res.body.data.contact._id;
  112. done();
  113. });
  114. it("should return 500 on request POST with wrong field or fields", async (done) => {
  115. const res = await request(app)
  116. .post(`/api/contacts`)
  117. .set("Authorization", `Bearer ${token}`)
  118. .send({ ...newContact, wrongFiled: "axe" })
  119. .set("Accept", "application/json");
  120. expect(res.status).toEqual(500);
  121. expect(res.body).toBeDefined();
  122. done();
  123. });
  124. it("should return 500 on request POST without required fields like : name,email,phone,password,subscription", async (done) => {
  125. const res = await request(app)
  126. .post(`/api/contacts`)
  127. .set("Authorization", `Bearer ${token}`)
  128. .send({ name: "Simon" })
  129. .set("Accept", "application/json");
  130. expect(res.status).toEqual(500);
  131. expect(res.body).toBeDefined();
  132. done();
  133. });
  134. it("should return 403 on request POST without token", async (done) => {
  135. const res = await request(app)
  136. .post(`/api/contacts`)
  137. .set("Authorization", `Bearer ${wrongToken}`)
  138. .send(newContact)
  139. .set("Accept", "application/json");
  140. expect(res.status).toEqual(403);
  141. expect(res.body).toBeDefined();
  142. done();
  143. });
  144. });
  145. describe("should handle request DELETE contact by id ", () => {
  146. it("should return 201 on request DELETE contact", async (done) => {
  147. const res = await request(app)
  148. .delete(`/api/contacts/${contact._id}`)
  149. .set("Authorization", `Bearer ${token}`);
  150. expect(res.status).toEqual(200);
  151. expect(res.body).toBeDefined();
  152. contacts.pop(contact);
  153. done();
  154. });
  155. it("should return 404 on request DELETE contacts by id", async (done) => {
  156. const res = await request(app)
  157. .delete(`/api/contacts/${wrongId}`)
  158. .set("Authorization", `Bearer ${token}`);
  159. expect(res.status).toEqual(404);
  160. expect(res.body).toBeDefined();
  161. done();
  162. });
  163. it("should return 403 on request on request DELETE contacts by id without token", async (done) => {
  164. const res = await request(app)
  165. .delete(`/api/contacts/${contact._id}`)
  166. .set("Authorization", `Bearer ${wrongToken}`);
  167. expect(res.status).toEqual(403);
  168. expect(res.body).toBeDefined();
  169. done();
  170. });
  171. });
  172. });