From 27947361e7384d02749a988f1db0579228193039 Mon Sep 17 00:00:00 2001 From: Carlos Enumo Date: Tue, 24 Sep 2024 01:26:53 +0100 Subject: [PATCH] Fix hide finished reminders --- .../Events/EventList/EventListViewModel.swift | 5 +- Calendr/Events/EventList/EventViewModel.swift | 2 +- CalendrTests/EventListViewModelTests.swift | 68 +++++++++++++++++-- CalendrTests/EventViewModelFadeTests.swift | 21 +++++- 4 files changed, 89 insertions(+), 7 deletions(-) diff --git a/Calendr/Events/EventList/EventListViewModel.swift b/Calendr/Events/EventList/EventListViewModel.swift index 0d520dd0..e50396ae 100644 --- a/Calendr/Events/EventList/EventListViewModel.swift +++ b/Calendr/Events/EventList/EventListViewModel.swift @@ -98,7 +98,10 @@ class EventListViewModel { .startWith(()) .map { events.filter { - $0.isAllDay || $0.type.isReminder || !$0.range(using: dateProvider).isPast + if case .reminder(let completed) = $0.type { + return !completed + } + return $0.isAllDay || !$0.range(using: dateProvider).isPast } } .map { ($0, date, isTodaySelected) } diff --git a/Calendr/Events/EventList/EventViewModel.swift b/Calendr/Events/EventList/EventViewModel.swift index 0b344504..b5df6c47 100644 --- a/Calendr/Events/EventList/EventViewModel.swift +++ b/Calendr/Events/EventList/EventViewModel.swift @@ -233,7 +233,7 @@ class EventViewModel { if isDeclined { isFaded = .just(true) } else if case .reminder(let completed) = type { - isFaded = .just(completed || isTodaySelected && !range.startsToday) + isFaded = .just(isTodaySelected && completed) } else if event.isAllDay || !range.endsToday { isFaded = .just(false) } else { diff --git a/CalendrTests/EventListViewModelTests.swift b/CalendrTests/EventListViewModelTests.swift index 24108477..5e81e402 100644 --- a/CalendrTests/EventListViewModelTests.swift +++ b/CalendrTests/EventListViewModelTests.swift @@ -331,12 +331,14 @@ class EventListViewModelTests: XCTestCase { let date = dateProvider.calendar.date(byAdding: .day, value: -1, to: dateProvider.now)! dateSubject.onNext(date) + settings.togglePastEvents.onNext(false) + eventsSubject.onNext( [ .make(start: date, end: date + 10, title: "Event 1"), .make(start: date + 60, end: date + 120, title: "Event 2"), - .make(start: date + 200, title: "Overdue 1", type: .reminder(completed: false)), - .make(start: date + 300, title: "Overdue 2", type: .reminder(completed: false)), + .make(start: date + 200, title: "Overdue", type: .reminder(completed: false)), + .make(start: date + 300, title: "Completed", type: .reminder(completed: true)), .make(start: date, title: "All day event", isAllDay: true), .make(start: date, title: "All day overdue", isAllDay: true, type: .reminder(completed: false)) ] @@ -350,8 +352,66 @@ class EventListViewModelTests: XCTestCase { .event("Event 1"), .event("Event 2"), .interval("1m"), - .event("Overdue 1"), - .event("Overdue 2") + .event("Overdue"), + .event("Completed") + ]) + } + + func testEventList_withCompletedReminders_isToday_shouldShowNormally() { + + let date = dateProvider.now + + eventsSubject.onNext( + [ + .make(start: date, end: date + 10, title: "Event 1"), + .make(start: date + 60, end: date + 120, title: "Event 2"), + .make(start: date + 200, title: "Reminder 1", type: .reminder(completed: true)), + .make(start: date + 300, title: "Reminder 2", type: .reminder(completed: false)), + .make(start: date, title: "All day event", isAllDay: true), + .make(start: date, title: "All day overdue", isAllDay: true, type: .reminder(completed: false)) + ] + ) + + XCTAssertEqual(eventListItems, [ + .section("All day"), + .event("All day event"), + .event("All day overdue"), + .section("Today"), + .event("Event 1"), + .event("Event 2"), + .interval("1m"), + .event("Reminder 1"), + .event("Reminder 2") + ]) + } + + + func testEventList_withCompletedReminders_withHidePastEventsEnabled_isToday_shouldHideCompleted() { + + let date = dateProvider.now + + settings.togglePastEvents.onNext(false) + + eventsSubject.onNext( + [ + .make(start: date, end: date + 10, title: "Event 1"), + .make(start: date + 60, end: date + 120, title: "Event 2"), + .make(start: date + 200, title: "Reminder 1", type: .reminder(completed: true)), + .make(start: date + 300, title: "Reminder 2", type: .reminder(completed: false)), + .make(start: date, title: "All day event", isAllDay: true), + .make(start: date, title: "All day overdue", isAllDay: true, type: .reminder(completed: false)) + ] + ) + + XCTAssertEqual(eventListItems, [ + .section("All day"), + .event("All day event"), + .event("All day overdue"), + .section("Today"), + .event("Event 1"), + .event("Event 2"), + .interval("3m"), + .event("Reminder 2") ]) } } diff --git a/CalendrTests/EventViewModelFadeTests.swift b/CalendrTests/EventViewModelFadeTests.swift index e724b894..18da6b25 100644 --- a/CalendrTests/EventViewModelFadeTests.swift +++ b/CalendrTests/EventViewModelFadeTests.swift @@ -184,7 +184,7 @@ class EventViewModelFadeTests: XCTestCase { XCTAssertEqual(isFaded, false) } - func testFade_isOverdue_isTodaySelected_isReminder_shouldFade() { + func testFade_isOverdue_isTodaySelected_isReminder_shouldNotFade() { dateProvider.now = .make(year: 2021, month: 1, day: 2, hour: 15) @@ -196,6 +196,25 @@ class EventViewModelFadeTests: XCTestCase { var isFaded: Bool? + viewModel.isFaded + .bind { isFaded = $0 } + .disposed(by: disposeBag) + + XCTAssertEqual(isFaded, false) + } + + func testFade_isCompleted_isTodaySelected_isReminder_shouldFade() { + + dateProvider.now = .make(year: 2021, month: 1, day: 2, hour: 15) + + let viewModel = mock( + start: .make(year: 2021, month: 1, day: 1, hour: 10), + end: .make(year: 2021, month: 1, day: 1, hour: 10), + type: .reminder(completed: true) + ) + + var isFaded: Bool? + viewModel.isFaded .bind { isFaded = $0 } .disposed(by: disposeBag)