Skip to content

Commit 40f07dc

Browse files
authored
feat: #20: add error handling from the backend to the workEntryModal
1 parent 8a15f99 commit 40f07dc

File tree

2 files changed

+78
-34
lines changed

2 files changed

+78
-34
lines changed

src/pages/time-tracker/sections/work-entry-modal/WorkEntryModalContainer.cy.tsx

Lines changed: 68 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,8 @@ function addWorkEntryTests() {
3131
beforeEach(() => {
3232
workEntryModalState = new WorkEntryModalState()
3333

34-
workEntryModalState.setDate({
35-
date: new Date(`2025-11-27T09:00:00`),
36-
})
37-
workEntryModalState.setStartTime({
38-
startTime: new Date(`2025-11-27T09:00:00`),
39-
})
40-
workEntryModalState.setEndTime({
41-
endTime: new Date(`2025-11-27T11:30:00`),
34+
setDateAndTime({
35+
workEntryModalState,
4236
})
4337
})
4438

@@ -125,16 +119,8 @@ function updateWorkEntryTests() {
125119
description: `Task description`,
126120
})
127121

128-
workEntryModalState.setDate({
129-
date: new Date(`2025-11-27T09:00:00`),
130-
})
131-
132-
workEntryModalState.setStartTime({
133-
startTime: new Date(`2025-11-27T09:00:00`),
134-
})
135-
136-
workEntryModalState.setEndTime({
137-
endTime: new Date(`2025-11-27T11:30:00`),
122+
setDateAndTime({
123+
workEntryModalState,
138124
})
139125
})
140126

@@ -204,20 +190,17 @@ function onCloseModalTests() {
204190
workEntryModalState.setTitle({
205191
title: `Title`,
206192
})
193+
207194
workEntryModalState.setTaskId({
208195
taskId: `TaskId`,
209196
})
197+
210198
workEntryModalState.setDescription({
211199
description: `Description`,
212200
})
213-
workEntryModalState.setDate({
214-
date: new Date(`2025-11-27T09:00:00`),
215-
})
216-
workEntryModalState.setStartTime({
217-
startTime: new Date(`2025-11-27T09:00:00`),
218-
})
219-
workEntryModalState.setEndTime({
220-
endTime: new Date(`2025-11-27T11:30:00`),
201+
202+
setDateAndTime({
203+
workEntryModalState,
221204
})
222205
})
223206

@@ -281,14 +264,8 @@ function setErrorTests() {
281264
beforeEach(() => {
282265
workEntryModalState = new WorkEntryModalState()
283266

284-
workEntryModalState.setDate({
285-
date: new Date(`2025-11-27T09:00:00`),
286-
})
287-
workEntryModalState.setStartTime({
288-
startTime: new Date(`2025-11-27T09:00:00`),
289-
})
290-
workEntryModalState.setEndTime({
291-
endTime: new Date(`2025-11-27T11:30:00`),
267+
setDateAndTime({
268+
workEntryModalState,
292269
})
293270
})
294271

@@ -308,6 +285,47 @@ function setErrorTests() {
308285

309286
cy.contains(`Fill in all the fields`)
310287
})
288+
289+
it(`
290+
GIVEN opened work entry modal
291+
WHEN click on submit button
292+
AND server validation error will be returned
293+
SHOULD display error message
294+
`, () => {
295+
cy
296+
.intercept(
297+
`POST`,
298+
`*/time/tracking/work-entries`,
299+
{
300+
statusCode: 400,
301+
body: {
302+
detail: `Error message`,
303+
},
304+
},
305+
)
306+
307+
workEntryModalState.setTitle({
308+
title: `Task name`,
309+
})
310+
311+
workEntryModalState.setTaskId({
312+
taskId: `1`,
313+
})
314+
315+
workEntryModalState.setDescription({
316+
description: `Task description`,
317+
})
318+
319+
mountComponent({
320+
workEntryModalState,
321+
})
322+
323+
cy
324+
.contains(`Add Task`)
325+
.click()
326+
327+
cy.contains(`Error message`)
328+
})
311329
}
312330

313331
function mountComponent({
@@ -333,3 +351,19 @@ function mountComponent({
333351
</WorkEntryModalStateContext.Provider>,
334352
)
335353
}
354+
355+
function setDateAndTime({
356+
workEntryModalState,
357+
}: {
358+
workEntryModalState: WorkEntryModalState,
359+
}) {
360+
workEntryModalState.setDate({
361+
date: new Date(`2025-11-27T09:00:00`),
362+
})
363+
workEntryModalState.setStartTime({
364+
startTime: new Date(`2025-11-27T09:00:00`),
365+
})
366+
workEntryModalState.setEndTime({
367+
endTime: new Date(`2025-11-27T11:30:00`),
368+
})
369+
}

src/pages/time-tracker/sections/work-entry-modal/WorkEntryModalContainer.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { useContext } from "react"
44
import { WorkEntryModalStateContext } from "./state/WorkEntryModalStateContext"
55
import { concatDateAndTime } from "../../utils/date-and-time"
66
import { api } from "../../../../common/api/api"
7+
import axios from "axios"
78

89
export const WorkEntryModalContainer = observer(({
910
onClose,
@@ -71,6 +72,15 @@ export const WorkEntryModalContainer = observer(({
7172

7273
workEntryModalState.resetError()
7374
}
75+
catch (error) {
76+
if (axios.isAxiosError(error)) {
77+
if (error.response) {
78+
workEntryModalState.setError({
79+
error: error.response.data.detail,
80+
})
81+
}
82+
}
83+
}
7484
finally {
7585
workEntryModalState.resetIsSaving()
7686
workEntryModalState.resetIsTriedToSubmit()

0 commit comments

Comments
 (0)