@@ -7,7 +7,7 @@ import { type Schema_Event } from "@core/types/event.types";
77import dayjs from "@core/util/date/dayjs" ;
88import { type Props as DateTimeSectionProps } from "@web/views/Forms/EventForm/DateControlsSection/DateTimeSection/DateTimeSection" ;
99import { getFormDates } from "@web/views/Forms/EventForm/DateControlsSection/DateTimeSection/form.datetime.util" ;
10- import { beforeEach , describe , expect , it , mock } from "bun:test" ;
10+ import { afterEach , beforeEach , describe , expect , it , mock } from "bun:test" ;
1111
1212type CapturedDateTimeSectionProps = Pick <
1313 DateTimeSectionProps ,
@@ -36,7 +36,14 @@ mock.module(
3636) ;
3737
3838mock . module ( "@web/views/Forms/EventForm/EventActionMenu" , ( ) => ( {
39- EventActionMenu : ( ) => < button type = "button" > Event actions</ button > ,
39+ EventActionMenu : ( { onDelete } : { onDelete : ( ) => void } ) => (
40+ < >
41+ < button type = "button" > Event actions</ button >
42+ < button type = "button" onClick = { onDelete } >
43+ Delete event
44+ </ button >
45+ </ >
46+ ) ,
4047} ) ) ;
4148
4249mock . module ( "@web/views/Forms/EventForm/PrioritySection" , ( ) => ( {
@@ -91,12 +98,18 @@ const createEvent = (overrides: Partial<Schema_Event> = {}): Schema_Event => ({
9198} ) ;
9299
93100describe ( "EventForm" , ( ) => {
101+ const originalConfirm = window . confirm ;
102+
94103 beforeEach ( ( ) => {
95104 HotkeyManager . resetInstance ( ) ;
96105 capturedDateControlsSectionProps = null ;
97106 document . body . removeAttribute ( "data-app-locked" ) ;
98107 } ) ;
99108
109+ afterEach ( ( ) => {
110+ window . confirm = originalConfirm ;
111+ } ) ;
112+
100113 it ( "renders the title before the actions on the same row" , ( ) => {
101114 render (
102115 < EventForm
@@ -185,6 +198,33 @@ describe("EventForm", () => {
185198 expect ( afterTyping . defaultPrevented ) . toBe ( false ) ;
186199 } ) ;
187200
201+ it ( "closes a draft event immediately when deleting from the menu" , async ( ) => {
202+ const user = userEvent . setup ( ) ;
203+ const onClose = mock ( ) ;
204+ const onDelete = mock ( ) ;
205+ const confirm = mock ( ( ) => true ) ;
206+ window . confirm = confirm ;
207+
208+ render (
209+ < EventForm
210+ event = { createEvent ( { _id : undefined , title : "Unsaved draft" } ) }
211+ isDraft = { true }
212+ isExistingEvent = { false }
213+ onClose = { onClose }
214+ onDelete = { onDelete }
215+ onDuplicate = { mock ( ) }
216+ onSubmit = { mock ( ) }
217+ setEvent = { mock ( ) }
218+ /> ,
219+ ) ;
220+
221+ await user . click ( screen . getByRole ( "button" , { name : "Delete event" } ) ) ;
222+
223+ expect ( confirm ) . not . toHaveBeenCalled ( ) ;
224+ expect ( onDelete ) . not . toHaveBeenCalled ( ) ;
225+ expect ( onClose ) . toHaveBeenCalledTimes ( 1 ) ;
226+ } ) ;
227+
188228 it ( "resets title editing state when an unsaved draft session changes" , async ( ) => {
189229 const user = userEvent . setup ( ) ;
190230 const event = { ...createEvent ( ) , _id : undefined , title : "" } ;
0 commit comments