Skip to content

Commit aa2f72a

Browse files
committed
fix early return
1 parent 3c03a28 commit aa2f72a

2 files changed

Lines changed: 33 additions & 3 deletions

File tree

WireCalling/Sources/WireCallingUI/Views/WireMeetings/MeetingForm/MeetingFormViewModel.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -213,15 +213,15 @@ package final class MeetingFormViewModel {
213213
// unexpectedly). Consider making load(pageSize:) return/throw on failure so reloadLoadedMeetings() can restore
214214
// futureOffset (and possibly coalesce missed reloads while isLoading is true).
215215
guard !isLoading else { return }
216+
hasError = false
217+
hasConversationNameUpdateError = false
218+
meetingPendingConversationNameUpdate = nil
216219
hasExpiredStartDateError = false
217220
if mode.isEdit, startDate < currentDateProvider.now.addingTimeInterval(-TimeInterval.oneDay) {
218221
hasExpiredStartDateError = true
219222
return
220223
}
221224
isLoading = true
222-
hasError = false
223-
hasConversationNameUpdateError = false
224-
meetingPendingConversationNameUpdate = nil
225225
defer { isLoading = false }
226226
do {
227227
let meeting = try await saveMeeting()

WireCalling/Tests/WireCallingTests/WireMeetings/PresentationTests/MeetingFormViewModelTests.swift

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)