Skip to content

Commit ece9e86

Browse files
authored
[#739] Todo 마감일을 수정 후 저장 전 원본 데이터와 동일해도 체크 버튼이 눌리는 현상을 해결한다 (#759)
fix: Todo 마감일 변경 여부를 날짜 단위로 비교
1 parent 9c43ebd commit ece9e86

2 files changed

Lines changed: 28 additions & 1 deletion

File tree

Application/Presentation/PresentationShared/Sources/Todo/Editor/TodoEditorFeature.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,13 @@ public struct TodoEditorFeature {
5555
}
5656
public var hasChanges: Bool {
5757
guard let originalDraft else { return true }
58-
return originalDraft != makeTodoDraft(now: Date())
58+
var draft = makeTodoDraft(now: Date())
59+
if let originalDueDate = originalDraft.dueDate,
60+
let dueDate = draft.dueDate,
61+
Calendar.current.isDate(originalDueDate, inSameDayAs: dueDate) {
62+
draft.dueDate = originalDueDate
63+
}
64+
return originalDraft != draft
5965
}
6066
public var isReadyToSubmit: Bool {
6167
isValidToSave && hasChanges

Application/Presentation/PresentationShared/Tests/Todo/TodoEditorFeatureTests.swift

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,27 @@ struct TodoEditorFeatureTests {
5656
#expect(adapter.isReadyToSubmit)
5757
}
5858

59+
@Test("마감일을 원본과 같은 날짜로 되돌리면 변경되지 않은 상태가 된다")
60+
func 마감일을_원본과_같은_날짜로_되돌리면_변경되지_않은_상태가_된다() async throws {
61+
let calendar = Calendar.current
62+
let day = calendar.startOfDay(for: Date(timeIntervalSince1970: 4_102_444_800))
63+
let originalDueDate = day.addingTimeInterval(43_200)
64+
let restoredDueDate = day.addingTimeInterval(3_600)
65+
let changedDueDate = try #require(calendar.date(byAdding: .day, value: 1, to: originalDueDate))
66+
let todo = makeTodoEditorTodo(title: "Original", dueDate: originalDueDate)
67+
let adapter = TodoEditorStoreTestAdapter(todo: todo)
68+
69+
await adapter.setDueDate(changedDueDate)
70+
71+
#expect(adapter.hasChanges)
72+
#expect(adapter.isReadyToSubmit)
73+
74+
await adapter.setDueDate(restoredDueDate)
75+
76+
#expect(adapter.hasChanges == false)
77+
#expect(adapter.isReadyToSubmit == false)
78+
}
79+
5980
@Test("onAppear는 Todo 카테고리 설정을 가져와 상태에 반영한다")
6081
func onAppear는_Todo_카테고리_설정을_가져와_상태에_반영한다() async {
6182
let fetchSpy = TodoEditorFetchPreferencesUseCaseSpy(preferences: [

0 commit comments

Comments
 (0)