@@ -477,6 +477,36 @@ struct MeetingFormViewModelTests {
477477 #expect( rejectedArguments == nil )
478478 }
479479
480+ @Test ( " expired submission clears previous save errors " , arguments: [ false , true ] )
481+ func submit_ExpiredStartClearsPreviousError( conversationNameFailed: Bool ) async {
482+ let original = makeEditableMeeting ( start: dateProviderMock. now. addingTimeInterval ( - 86_400 ) )
483+ let viewModel = makeViewModel ( mode: . edit( original) )
484+ let error : any Error
485+ if conversationNameFailed {
486+ error = UpdateMeetingUseCaseError . conversationNameUpdateFailed ( original)
487+ } else {
488+ error = URLError ( . badServerResponse)
489+ }
490+ updateMeetingUseCaseMock
491+ . invokeMeetingMeetingTitleStringStartTimeDateEndTimeDateRecurrenceMeetingRecurrenceParticipantsMeetingMemberMeetingThrowableError =
492+ error
493+
494+ await viewModel. submit ( )
495+ #expect( viewModel. hasError == !conversationNameFailed)
496+ #expect( viewModel. hasConversationNameUpdateError == conversationNameFailed)
497+
498+ dateProviderMock. now = dateProviderMock. now. addingTimeInterval ( 1 )
499+ await viewModel. submit ( )
500+
501+ #expect( viewModel. hasExpiredStartDateError)
502+ #expect( !viewModel. hasError)
503+ #expect( !viewModel. hasConversationNameUpdateError)
504+ #expect( !viewModel. isLoading)
505+ let callsCount = updateMeetingUseCaseMock
506+ . invokeMeetingMeetingTitleStringStartTimeDateEndTimeDateRecurrenceMeetingRecurrenceParticipantsMeetingMemberMeetingCallsCount
507+ #expect( callsCount == 1 )
508+ }
509+
480510 @Test ( " saving rechecks the current window and allows retry after correcting the start time " )
481511 func submit_EditModeStartDateExpiresWhileEditing( ) async {
482512 let original = makeEditableMeeting ( start: dateProviderMock. now. addingTimeInterval ( - 86_400 ) )
0 commit comments