Skip to content

Commit 8c25670

Browse files
committed
add blog writer route test
1 parent d304ab3 commit 8c25670

File tree

2 files changed

+218
-3
lines changed

2 files changed

+218
-3
lines changed

tests/routes/v1/blog/writer/index.test.ts

Lines changed: 193 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,16 @@ import { addAuthHeaders } from '../../../../auth/authentication/mock';
44
import { USER_ID_WRITER } from '../../../../auth/authorization/mock';
55

66
import {
7-
mockBlogCreate, mockBlogFindUrlIfExists, BLOG_ID, BLOG_URL
7+
BLOG_ID, BLOG_URL, BLOG_ID_2,
8+
mockBlogCreate, mockBlogFindUrlIfExists,
9+
mockFindBlogAllDataById, mockBlogUpdate,
810
} from './mock';
911

1012
import supertest from 'supertest';
1113
import app from '../../../../../src/app';
14+
import { Types } from 'mongoose';
1215

13-
describe('Writer blog routes', () => {
16+
describe('Writer blog create routes', () => {
1417

1518
beforeEach(() => {
1619
mockBlogCreate.mockClear();
@@ -197,4 +200,192 @@ describe('Writer blog routes', () => {
197200
expect(mockBlogCreate).toBeCalledTimes(1);
198201
expect(response.body.data).toMatchObject({ _id: BLOG_ID.toHexString() });
199202
});
203+
});
204+
205+
describe('Writer blog submit routes', () => {
206+
207+
beforeEach(() => {
208+
mockFindBlogAllDataById.mockClear();
209+
mockBlogUpdate.mockClear();
210+
});
211+
212+
const request = supertest(app);
213+
const endpoint = '/v1/writer/blog/submit/';
214+
215+
it('Should send error if submit blog id is not valid', async () => {
216+
const response = await addAuthHeaders(
217+
request.put(endpoint + 'abc'),
218+
USER_ID_WRITER
219+
);
220+
expect(response.status).toBe(400);
221+
expect(response.body.message).toMatch(/id/i);
222+
expect(response.body.message).toMatch(/invalid/i);
223+
expect(mockFindBlogAllDataById).not.toBeCalled();
224+
expect(mockBlogUpdate).not.toBeCalled();
225+
});
226+
227+
it('Should send error if submit blog do not exist for id', async () => {
228+
const response = await addAuthHeaders(
229+
request.put(endpoint + new Types.ObjectId().toHexString()),
230+
USER_ID_WRITER
231+
);
232+
expect(response.status).toBe(400);
233+
expect(response.body.message).toMatch(/not exists/i);
234+
expect(mockFindBlogAllDataById).toBeCalledTimes(1);
235+
expect(mockBlogUpdate).not.toBeCalled();
236+
});
237+
238+
it('Should send success if submit blog for id exists', async () => {
239+
const response = await addAuthHeaders(
240+
request.put(endpoint + BLOG_ID.toHexString()),
241+
USER_ID_WRITER
242+
);
243+
expect(response.status).toBe(200);
244+
expect(response.body.message).toMatch(/submitted success/i);
245+
expect(mockFindBlogAllDataById).toBeCalledTimes(1);
246+
expect(mockBlogUpdate).toBeCalledTimes(1);
247+
});
248+
});
249+
250+
describe('Writer blog withdraw routes', () => {
251+
252+
beforeEach(() => {
253+
mockFindBlogAllDataById.mockClear();
254+
mockBlogUpdate.mockClear();
255+
});
256+
257+
const request = supertest(app);
258+
const endpoint = '/v1/writer/blog/withdraw/';
259+
260+
it('Should send error if withdraw blog id is not valid', async () => {
261+
const response = await addAuthHeaders(
262+
request.put(endpoint + 'abc'),
263+
USER_ID_WRITER
264+
);
265+
expect(response.status).toBe(400);
266+
expect(response.body.message).toMatch(/id/i);
267+
expect(response.body.message).toMatch(/invalid/i);
268+
expect(mockFindBlogAllDataById).not.toBeCalled();
269+
expect(mockBlogUpdate).not.toBeCalled();
270+
});
271+
272+
it('Should send error if withdraw blog do not exist for id', async () => {
273+
const response = await addAuthHeaders(
274+
request.put(endpoint + new Types.ObjectId().toHexString()),
275+
USER_ID_WRITER
276+
);
277+
expect(response.status).toBe(400);
278+
expect(response.body.message).toMatch(/not exists/i);
279+
expect(mockFindBlogAllDataById).toBeCalledTimes(1);
280+
expect(mockBlogUpdate).not.toBeCalled();
281+
});
282+
283+
it('Should send success if withdraw blog for id exists', async () => {
284+
const response = await addAuthHeaders(
285+
request.put(endpoint + BLOG_ID.toHexString()),
286+
USER_ID_WRITER
287+
);
288+
expect(response.status).toBe(200);
289+
expect(response.body.message).toMatch(/withdrawn success/i);
290+
expect(mockFindBlogAllDataById).toBeCalledTimes(1);
291+
expect(mockBlogUpdate).toBeCalledTimes(1);
292+
});
293+
});
294+
295+
describe('Writer blog delete routes', () => {
296+
297+
beforeEach(() => {
298+
mockFindBlogAllDataById.mockClear();
299+
mockBlogUpdate.mockClear();
300+
});
301+
302+
const request = supertest(app);
303+
const endpoint = '/v1/writer/blog/id/';
304+
305+
it('Should send error if deleting blog id is not valid', async () => {
306+
const response = await addAuthHeaders(
307+
request.delete(endpoint + 'abc'),
308+
USER_ID_WRITER
309+
);
310+
expect(response.status).toBe(400);
311+
expect(response.body.message).toMatch(/id/i);
312+
expect(response.body.message).toMatch(/invalid/i);
313+
expect(mockFindBlogAllDataById).not.toBeCalled();
314+
expect(mockBlogUpdate).not.toBeCalled();
315+
});
316+
317+
it('Should send error if deleting blog do not exist for id', async () => {
318+
const response = await addAuthHeaders(
319+
request.delete(endpoint + new Types.ObjectId().toHexString()),
320+
USER_ID_WRITER
321+
);
322+
expect(response.status).toBe(400);
323+
expect(response.body.message).toMatch(/not exists/i);
324+
expect(mockFindBlogAllDataById).toBeCalledTimes(1);
325+
expect(mockBlogUpdate).not.toBeCalled();
326+
});
327+
328+
it('Should send success if deleting blog for id exists', async () => {
329+
const response = await addAuthHeaders(
330+
request.delete(endpoint + BLOG_ID.toHexString()),
331+
USER_ID_WRITER
332+
);
333+
expect(response.status).toBe(200);
334+
expect(response.body.message).toMatch(/deleted success/i);
335+
expect(mockFindBlogAllDataById).toBeCalledTimes(1);
336+
expect(mockBlogUpdate).toBeCalledTimes(1);
337+
});
338+
});
339+
340+
describe('Writer blog get by id routes', () => {
341+
342+
beforeEach(() => {
343+
mockFindBlogAllDataById.mockClear();
344+
});
345+
346+
const request = supertest(app);
347+
const endpoint = '/v1/writer/blog/id/';
348+
349+
it('Should send error if fetching blog id is not valid', async () => {
350+
const response = await addAuthHeaders(
351+
request.get(endpoint + 'abc'),
352+
USER_ID_WRITER
353+
);
354+
expect(response.status).toBe(400);
355+
expect(response.body.message).toMatch(/id/i);
356+
expect(response.body.message).toMatch(/invalid/i);
357+
expect(mockFindBlogAllDataById).not.toBeCalled();
358+
});
359+
360+
it('Should send error if fetching blog do not exist for id', async () => {
361+
const response = await addAuthHeaders(
362+
request.get(endpoint + new Types.ObjectId().toHexString()),
363+
USER_ID_WRITER
364+
);
365+
expect(response.status).toBe(400);
366+
expect(response.body.message).toMatch(/not exists/i);
367+
expect(mockFindBlogAllDataById).toBeCalledTimes(1);
368+
});
369+
370+
it('Should send error if author is different', async () => {
371+
const response = await addAuthHeaders(
372+
request.get(endpoint + BLOG_ID_2.toHexString()),
373+
USER_ID_WRITER
374+
);
375+
expect(response.status).toBe(403);
376+
expect(response.body.message).toMatch(/don't have/i);
377+
expect(response.body.message).toMatch(/permission/i);
378+
expect(mockFindBlogAllDataById).toBeCalledTimes(1);
379+
});
380+
381+
it('Should send success if fetching blog for id exists', async () => {
382+
const response = await addAuthHeaders(
383+
request.get(endpoint + BLOG_ID.toHexString()),
384+
USER_ID_WRITER
385+
);
386+
expect(response.status).toBe(200);
387+
expect(response.body.message).toMatch(/success/i);
388+
expect(mockFindBlogAllDataById).toBeCalledTimes(1);
389+
expect(response.body.data).toMatchObject({ _id: BLOG_ID.toHexString() });
390+
});
200391
});

tests/routes/v1/blog/writer/mock.ts

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import { IBlog } from '../../../../../src/database/model/Blog';
22
import { Types } from 'mongoose';
3+
import { USER_ID_WRITER } from '../../../../auth/authorization/mock';
34

45
jest.unmock('../../../../../src/database/repository/BlogRepo');
56

67
export const BLOG_ID = new Types.ObjectId();
8+
export const BLOG_ID_2 = new Types.ObjectId();
79
export const BLOG_URL = 'abc';
810

911
export const mockBlogFindUrlIfExists = jest.fn(async (blogUrl: string): Promise<IBlog> => {
@@ -19,7 +21,29 @@ export const mockBlogCreate = jest.fn(async (blog: IBlog): Promise<IBlog> => {
1921
return blog;
2022
});
2123

24+
export const mockBlogUpdate = jest.fn(async (blog: IBlog): Promise<IBlog> => blog);
25+
26+
export const mockFindBlogAllDataById = jest.fn(async (id: Types.ObjectId): Promise<IBlog> => {
27+
if (BLOG_ID.equals(id)) return <IBlog>{
28+
_id: BLOG_ID,
29+
author: { _id: USER_ID_WRITER },
30+
isDraft: true,
31+
isSubmitted: false,
32+
isPublished: false
33+
};
34+
if (BLOG_ID_2.equals(id)) return <IBlog>{
35+
_id: BLOG_ID,
36+
author: { _id: new Types.ObjectId() },
37+
isDraft: true,
38+
isSubmitted: false,
39+
isPublished: false
40+
};
41+
return null;
42+
});
43+
2244
jest.mock('../../../../../src/database/repository/BlogRepo', () => ({
2345
get findUrlIfExists() { return mockBlogFindUrlIfExists; },
24-
get create() { return mockBlogCreate; }
46+
get create() { return mockBlogCreate; },
47+
get update() { return mockBlogUpdate; },
48+
get findBlogAllDataById() { return mockFindBlogAllDataById; }
2549
}));

0 commit comments

Comments
 (0)