Skip to content
This repository was archived by the owner on Sep 29, 2025. It is now read-only.

Commit 3f1a5a0

Browse files
committed
tests: make 100% cover in all project and finalizing tests
1 parent 1a75e80 commit 3f1a5a0

File tree

1 file changed

+221
-16
lines changed

1 file changed

+221
-16
lines changed

src/presentation/controllers/orders/orders.controller.test.ts

Lines changed: 221 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { Context } from '@/presentation/protocols/http'
22
import { OrdersRouter } from '.'
33
import { FileClient } from '@/infra/file'
44
import { OrderClient } from '@/infra/order'
5+
import { ZodError } from 'zod'
56

67
const makeSut = () => {
78
const sut = new OrdersRouter()
@@ -10,6 +11,41 @@ const makeSut = () => {
1011
}
1112
}
1213

14+
const makeFileClientStub = (): FileClient => {
15+
class FileClientStub extends FileClient {
16+
verify = vi.fn().mockReturnValue([])
17+
read = vi.fn().mockReturnValue([])
18+
}
19+
20+
return new FileClientStub()
21+
}
22+
23+
const makeOrderClientStub = (): OrderClient => {
24+
class OrderClientStub extends OrderClient {
25+
verifyFilters = vi.fn().mockReturnValue({})
26+
processRaw = vi.fn().mockReturnValue([])
27+
group = vi.fn().mockReturnValue([])
28+
getOrderBetweenDates = vi.fn().mockReturnValue([])
29+
}
30+
31+
return new OrderClientStub()
32+
}
33+
34+
const files = [
35+
{
36+
fieldname: 'file',
37+
originalname: 'invalid-file.txt',
38+
encoding: 'utf-8',
39+
mimetype: 'text/plain',
40+
buffer: Buffer.from(''),
41+
size: 0,
42+
destination: '',
43+
filename: 'invalid-file.txt',
44+
path: '',
45+
stream: {} as unknown as Express.Multer.File['stream'],
46+
},
47+
]
48+
1349
const makeCtx = (): Context => {
1450
return {
1551
headers: {},
@@ -21,8 +57,8 @@ const makeCtx = (): Context => {
2157
url: '/orders',
2258
body: {},
2359
clients: {
24-
file: vi.mocked(new FileClient()), // Mock FileClient
25-
order: vi.mocked(new OrderClient()), // Mock OrderClient
60+
file: makeFileClientStub(),
61+
order: makeOrderClientStub(),
2662
},
2763
}
2864
}
@@ -53,6 +89,8 @@ describe('OrdersController', () => {
5389
orderId: 'invalid-order-id',
5490
}
5591

92+
ctx.clients.order.verifyFilters = vi.fn().mockReturnValue(new ZodError([]))
93+
5694
const response = await sut.handle(ctx)
5795

5896
expect(response.statusCode).toBe(400)
@@ -62,23 +100,190 @@ describe('OrdersController', () => {
62100
const { sut } = makeSut()
63101
const ctx = makeCtx()
64102

65-
ctx.req.files = [
66-
{
67-
fieldname: 'file',
68-
originalname: 'invalid-file.txt',
69-
encoding: 'utf-8',
70-
mimetype: 'text/plain',
71-
buffer: Buffer.from(''),
72-
size: 0,
73-
destination: '',
74-
filename: 'invalid-file.txt',
75-
path: '',
76-
stream: {} as unknown as Express.Multer.File['stream'],
77-
},
78-
]
103+
ctx.req.files = files
104+
105+
ctx.clients.file.verify = vi.fn().mockReturnValue(new ZodError([]))
106+
107+
const response = await sut.handle(ctx)
108+
109+
expect(response.statusCode).toBe(400)
110+
})
111+
112+
test('should return 400 if processRaw is invalid', async () => {
113+
const { sut } = makeSut()
114+
const ctx = makeCtx()
115+
116+
ctx.req.files = files
117+
118+
ctx.clients.order.processRaw = vi.fn().mockReturnValue(new ZodError([]))
79119

80120
const response = await sut.handle(ctx)
81121

82122
expect(response.statusCode).toBe(400)
83123
})
124+
125+
test('should return 400 if group is invalid', async () => {
126+
const { sut } = makeSut()
127+
const ctx = makeCtx()
128+
129+
ctx.req.files = files
130+
131+
ctx.clients.order.group = vi.fn().mockReturnValue(new ZodError([]))
132+
133+
const response = await sut.handle(ctx)
134+
135+
expect(response.statusCode).toBe(400)
136+
})
137+
138+
test('should return 200 if filters startDate and endDate are valid', async () => {
139+
const { sut } = makeSut()
140+
const ctx = makeCtx()
141+
142+
ctx.req.query = {
143+
startDate: '2023-01-01',
144+
endDate: '2023-12-31',
145+
}
146+
147+
ctx.clients.order.verifyFilters = vi.fn().mockReturnValue({
148+
startDate: new Date('2023-01-01'),
149+
endDate: new Date('2023-12-31'),
150+
})
151+
152+
ctx.clients.file.verify = vi.fn().mockReturnValue(files)
153+
ctx.clients.file.read = vi.fn().mockReturnValue([])
154+
ctx.clients.order.processRaw = vi.fn().mockReturnValue([])
155+
ctx.clients.order.group = vi.fn().mockReturnValue([])
156+
157+
const response = await sut.handle(ctx)
158+
159+
expect(response.statusCode).toBe(200)
160+
})
161+
162+
test('should return 200 if filters orderId is valid', async () => {
163+
const { sut } = makeSut()
164+
const ctx = makeCtx()
165+
166+
ctx.req.query = {
167+
orderId: 'valid-order-id',
168+
}
169+
170+
ctx.clients.order.verifyFilters = vi.fn().mockReturnValue({
171+
orderId: 'valid-order-id',
172+
})
173+
174+
ctx.clients.file.verify = vi.fn().mockReturnValue(files)
175+
ctx.clients.file.read = vi.fn().mockReturnValue([])
176+
ctx.clients.order.processRaw = vi.fn().mockReturnValue([])
177+
ctx.clients.order.group = vi.fn().mockReturnValue([])
178+
179+
const response = await sut.handle(ctx)
180+
181+
expect(response.statusCode).toBe(200)
182+
})
183+
184+
test('should return 200 if filters are empty', async () => {
185+
const { sut } = makeSut()
186+
const ctx = makeCtx()
187+
188+
ctx.req.query = {}
189+
190+
ctx.clients.order.verifyFilters = vi.fn().mockReturnValue({})
191+
192+
ctx.clients.file.verify = vi.fn().mockReturnValue(files)
193+
ctx.clients.file.read = vi.fn().mockReturnValue([])
194+
ctx.clients.order.processRaw = vi.fn().mockReturnValue([])
195+
ctx.clients.order.group = vi.fn().mockReturnValue([])
196+
197+
const response = await sut.handle(ctx)
198+
199+
expect(response.statusCode).toBe(200)
200+
})
201+
202+
test('should return 500 if an unexpected error occurs', async () => {
203+
const { sut } = makeSut()
204+
const ctx = makeCtx()
205+
206+
ctx.req.files = files
207+
208+
ctx.clients.file.verify = vi.fn().mockReturnValue(files)
209+
ctx.clients.file.read = vi.fn().mockReturnValue([])
210+
ctx.clients.order.processRaw = vi.fn().mockImplementation(() => {
211+
throw new Error('Unexpected error')
212+
})
213+
ctx.clients.order.group = vi.fn().mockReturnValue([])
214+
215+
const response = await sut.handle(ctx)
216+
217+
expect(response.statusCode).toBe(500)
218+
})
219+
220+
test('should return empty data if no orders are found for the given orderId', async () => {
221+
const { sut } = makeSut()
222+
const ctx = makeCtx()
223+
224+
ctx.req.query = {
225+
orderId: 'non-existing-order-id',
226+
}
227+
228+
ctx.clients.order.verifyFilters = vi.fn().mockReturnValue({
229+
orderId: 'non-existing-order-id',
230+
})
231+
232+
ctx.clients.file.verify = vi.fn().mockReturnValue(files)
233+
ctx.clients.file.read = vi.fn().mockReturnValue([])
234+
ctx.clients.order.processRaw = vi.fn().mockReturnValue([])
235+
ctx.clients.order.group = vi.fn().mockReturnValue([])
236+
237+
ctx.clients.order.getOrderById = vi.fn().mockReturnValue(undefined)
238+
239+
const response = await sut.handle(ctx)
240+
241+
expect(response.statusCode).toBe(200)
242+
expect(response.body).toEqual({
243+
data: [],
244+
})
245+
})
246+
247+
test('should return a valid responde for a existing orderId', async () => {
248+
const { sut } = makeSut()
249+
const ctx = makeCtx()
250+
251+
ctx.req.query = {
252+
orderId: 'non-existing-order-id',
253+
}
254+
255+
ctx.clients.order.verifyFilters = vi.fn().mockReturnValue({
256+
orderId: 'non-existing-order-id',
257+
})
258+
259+
ctx.clients.file.verify = vi.fn().mockReturnValue(files)
260+
ctx.clients.file.read = vi.fn().mockReturnValue([])
261+
ctx.clients.order.processRaw = vi.fn().mockReturnValue([])
262+
ctx.clients.order.group = vi.fn().mockReturnValue([])
263+
264+
ctx.clients.order.getOrderById = vi.fn().mockReturnValue({})
265+
266+
const response = await sut.handle(ctx)
267+
268+
expect(response.statusCode).toBe(200)
269+
expect(response.body).toEqual({
270+
data: [{}],
271+
})
272+
})
273+
274+
test('should return 200 if everything is ok', async () => {
275+
const { sut } = makeSut()
276+
const ctx = makeCtx()
277+
278+
ctx.req.files = files
279+
280+
ctx.clients.file.verify = vi.fn().mockReturnValue(files)
281+
ctx.clients.file.read = vi.fn().mockReturnValue([])
282+
ctx.clients.order.processRaw = vi.fn().mockReturnValue([])
283+
ctx.clients.order.group = vi.fn().mockReturnValue([])
284+
285+
const response = await sut.handle(ctx)
286+
287+
expect(response.statusCode).toBe(200)
288+
})
84289
})

0 commit comments

Comments
 (0)